This commit is contained in:
2026-06-19 17:34:28 +03:00
parent cd5d1c9d0b
commit b897b3447a
1513 changed files with 1 additions and 107093 deletions

View File

@@ -1,49 +0,0 @@
package netobjgroups
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/constants"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// AttachExtNetPortsRequest struct to attach external network ports to a network object group
type AttachExtNetPortsRequest struct {
// ID of a network object group
// Required: true
ObjectGroupID string `url:"object_group_id" json:"object_group_id" validate:"required"`
// ID of an access group
// Required: true
AccessGroupID string `url:"access_group_id" json:"access_group_id" validate:"required"`
// IDs of external network ports to attach to a network object group
// Required: true
PortIDs []string `url:"port_ids" json:"port_ids" validate:"required"`
}
// AttachExtNetPorts attaches external network ports to a network object group
func (nog NetworkObjectGroups) AttachExtNetPorts(ctx context.Context, req AttachExtNetPortsRequest) (*RecordVersion, error) {
err := validators.ValidateRequest(req)
if err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/sdn/network_object_group/attach_external_network_ports"
res, err := nog.client.DecortApiCallCtype(ctx, http.MethodPost, url, constants.MIMEJSON, req)
if err != nil {
return nil, err
}
info := RecordVersion{}
err = json.Unmarshal(res, &info)
if err != nil {
return nil, err
}
return &info, nil
}

View File

@@ -1,62 +0,0 @@
package netobjgroups
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/constants"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// AttachL2ConnectionPortsRequest struct to attach l2 ports to a network object group
type AttachL2ConnectionPortsRequest struct {
// ID of a network object group
// Required: true
ObjectGroupID string `url:"object_group_id" json:"object_group_id" validate:"required"`
// ID of an access group
// Required: true
AccessGroupID string `url:"access_group_id" json:"access_group_id" validate:"required"`
// Version ID
// Required: true
VersionID uint64 `url:"version_id" json:"version_id" validate:"required"`
// Port Bindings
// Required: true
PortBindings []L2PortBindings `url:"port_bindings" json:"port_bindings" validate:"required,dive"`
}
type L2PortBindings struct {
// ID of a logical port
// Required: true
PortID string `url:"port_id" json:"port_id" validate:"required"`
// Version of a logical port
// Required: true
PortVersion int64 `url:"port_version" json:"port_version" validate:"required"`
}
// AttachLogicalPorts attaches l2 ports to a network object group
func (nog NetworkObjectGroups) AttachL2ConnectionPorts(ctx context.Context, req AttachL2ConnectionPortsRequest) (*RecordVersion, error) {
err := validators.ValidateRequest(req)
if err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/sdn/network_object_group/attach_l2_connection_ports"
res, err := nog.client.DecortApiCallCtype(ctx, http.MethodPost, url, constants.MIMEJSON, req)
if err != nil {
return nil, err
}
info := RecordVersion{}
err = json.Unmarshal(res, &info)
if err != nil {
return nil, err
}
return &info, nil
}

View File

@@ -1,63 +0,0 @@
package netobjgroups
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/constants"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// AttachLogicalPortsRequest struct to attach logical ports to a network object group
type AttachLogicalPortsRequest struct {
// ID of a network object group
// Required: true
ObjectGroupID string `url:"object_group_id" json:"object_group_id" validate:"required"`
// ID of an access group
// Required: true
AccessGroupID string `url:"access_group_id" json:"access_group_id" validate:"required"`
// Version ID
// Required: true
VersionID uint64 `url:"version_id" json:"version_id" validate:"required"`
// Port Bindings
// Required: true
PortBindings []PortBindings `url:"port_bindings" json:"port_bindings" validate:"required,dive"`
}
type PortBindings struct {
// ID of a logical port
// Required: true
PortID string `url:"port_id" json:"port_id" validate:"required"`
// Version of a logical port
// Required: true
PortVersion int64 `url:"port_version" json:"port_version" validate:"required"`
}
// AttachLogicalPorts attaches logical ports to a network object group
func (nog NetworkObjectGroups) AttachLogicalPorts(ctx context.Context, req AttachLogicalPortsRequest) (*RecordVersion, error) {
err := validators.ValidateRequest(req)
if err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/sdn/network_object_group/attach_logical_ports"
res, err := nog.client.DecortApiCallCtype(ctx, http.MethodPost, url, constants.MIMEJSON, req)
if err != nil {
return nil, err
}
info := RecordVersion{}
err = json.Unmarshal(res, &info)
if err != nil {
return nil, err
}
return &info, nil
}

View File

@@ -1,70 +0,0 @@
package netobjgroups
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/constants"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// CreateRequest struct to create a network object group
type CreateRequest struct {
// Access Group ID
// Required: true
AccessGroupID string `url:"access_group_id" json:"access_group_id" validate:"required"`
// Description
// Required: true
Description string `url:"description" json:"description" validate:"required"`
// Name
// Required: true
Name string `url:"name" json:"name" validate:"required"`
// Logical ports bindings
// Required: false
LogicalPortsBindings []LogicalPortsBindings `url:"logical_ports_binding,omitempty" json:"logical_ports_bindings,omitempty" validate:"omitempty,dive"`
// L2 connection ports bindings
// Required: false
L2ConnectionPortsBindings []LogicalPortsBindings `url:"l2_connection_ports_binding,omitempty" json:"l2_connection_ports_bindings,omitempty" validate:"omitempty,dive"`
// Addresses
// Required: false
Addresses []NetAddressRequest `url:"addresses,omitempty" json:"addresses,omitempty" validate:"omitempty,dive"`
}
type LogicalPortsBindings struct {
// Port ID
// Required: true
PortID string `url:"port_id" json:"port_id" validate:"required"`
// Port version
// Required: true
PortVersion uint64 `url:"port_version" json:"port_version" validate:"required"`
}
// Create creates a network object group
func (nog NetworkObjectGroups) Create(ctx context.Context, req CreateRequest) (*RecordNetObjGroup, error) {
err := validators.ValidateRequest(req)
if err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/sdn/network_object_group/create"
res, err := nog.client.DecortApiCallCtype(ctx, http.MethodPost, url, constants.MIMEJSON, req)
if err != nil {
return nil, err
}
info := RecordNetObjGroup{}
err = json.Unmarshal(res, &info)
if err != nil {
return nil, err
}
return &info, nil
}

View File

@@ -1,51 +0,0 @@
package netobjgroups
import (
"context"
"net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/constants"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// DeleteRequest to delete a network object group
type DeleteRequest struct {
// ID of a network object group
// Required: true
ObjectGroupID string `url:"object_group_id" json:"object_group_id" validate:"required"`
// Version ID
// Required: true
VersionID uint64 `url:"version_id" json:"version_id" validate:"required"`
// Force delete
// Required: false
Force bool `url:"force,omitempty" json:"force,omitempty"`
}
// Delete a network object group
func (nog NetworkObjectGroups) Delete(ctx context.Context, req DeleteRequest) (bool, error) {
err := validators.ValidateRequest(req)
if err != nil {
return false, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/sdn/network_object_group/delete"
res, err := nog.client.DecortApiCallCtype(ctx, http.MethodDelete, url, constants.MIMEJSON, req)
if err != nil {
return false, err
}
if string(res) == "" {
return true, nil
}
result, err := strconv.ParseBool(string(res))
if err != nil {
return false, err
}
return result, nil
}

View File

@@ -1,49 +0,0 @@
package netobjgroups
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/constants"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// DetachExtNetPortsRequest struct to detach an external network port from a network object group
type DetachExtNetPortsRequest struct {
// ID of a network object group
// Required: true
ObjectGroupID string `url:"object_group_id" json:"object_group_id" validate:"required"`
// ID of an access group
// Required: true
AccessGroupID string `url:"access_group_id" json:"access_group_id" validate:"required"`
// ID of an external network port to detach from a network object group
// Required: true
ExternalNetworkPortID string `url:"external_network_port_id" json:"external_network_port_id" validate:"required"`
}
// DetachExtNetlPorts detaches external network ports from a network object group
func (nog NetworkObjectGroups) DetachExtNetPorts(ctx context.Context, req DetachExtNetPortsRequest) (*RecordVersion, error) {
err := validators.ValidateRequest(req)
if err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/sdn/network_object_group/detach_external_network_ports"
res, err := nog.client.DecortApiCallCtype(ctx, http.MethodPost, url, constants.MIMEJSON, req)
if err != nil {
return nil, err
}
info := RecordVersion{}
err = json.Unmarshal(res, &info)
if err != nil {
return nil, err
}
return &info, nil
}

View File

@@ -1,62 +0,0 @@
package netobjgroups
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/constants"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// DetachL2ConnectionPortsRequest struct to detach an l2 port from a network object group
type DetachL2ConnectionPortsRequest struct {
// ID of a network object group
// Required: true
ObjectGroupID string `url:"object_group_id" json:"object_group_id" validate:"required"`
// ID of an access group
// Required: true
AccessGroupID string `url:"access_group_id" json:"access_group_id" validate:"required"`
// Version ID
// Required: true
VersionID uint64 `url:"version_id" json:"version_id" validate:"required"`
// Port Bindings
// Required: true
PortBindings []DetachL2PortBindings `url:"port_bindings" json:"port_bindings" validate:"required,dive"`
}
type DetachL2PortBindings struct {
// ID of a logical port
// Required: true
PortID string `url:"port_id" json:"port_id" validate:"required"`
// Version of a logical port
// Required: true
PortVersion int64 `url:"port_version" json:"port_version" validate:"required"`
}
// DetachL2ConnectionPorts detaches logical ports from a network object group
func (nog NetworkObjectGroups) DetachL2ConnectionPorts(ctx context.Context, req DetachL2ConnectionPortsRequest) (*RecordVersion, error) {
err := validators.ValidateRequest(req)
if err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/sdn/network_object_group/detach_l2_connection_ports"
res, err := nog.client.DecortApiCallCtype(ctx, http.MethodPost, url, constants.MIMEJSON, req)
if err != nil {
return nil, err
}
info := RecordVersion{}
err = json.Unmarshal(res, &info)
if err != nil {
return nil, err
}
return &info, nil
}

View File

@@ -1,63 +0,0 @@
package netobjgroups
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/constants"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// DetachLogicalPortsRequest struct to detach logical ports from a network object group
type DetachLogicalPortsRequest struct {
// ID of a network object group
// Required: true
ObjectGroupID string `url:"object_group_id" json:"object_group_id" validate:"required"`
// ID of an access group
// Required: true
AccessGroupID string `url:"access_group_id" json:"access_group_id" validate:"required"`
// Version ID
// Required: true
VersionID uint64 `url:"version_id" json:"version_id" validate:"required"`
// Port bindings
// Required: true
PortBindings []DetachLogicalPortBinding `url:"port_bindings" json:"port_bindings" validate:"required,dive"`
}
type DetachLogicalPortBinding struct {
// ID of a logical port
// Required: true
PortID string `url:"port_id" json:"port_id" validate:"required"`
// Version of a logical port
// Required: true
PortVersion uint64 `url:"port_version" json:"port_version" validate:"required"`
}
// DetachLogicalPorts detaches logical ports from a network object group
func (nog NetworkObjectGroups) DetachLogicalPorts(ctx context.Context, req DetachLogicalPortsRequest) (*RecordVersion, error) {
err := validators.ValidateRequest(req)
if err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/sdn/network_object_group/detach_logical_ports"
res, err := nog.client.DecortApiCallCtype(ctx, http.MethodPost, url, constants.MIMEJSON, req)
if err != nil {
return nil, err
}
info := RecordVersion{}
err = json.Unmarshal(res, &info)
if err != nil {
return nil, err
}
return &info, nil
}

View File

@@ -1,42 +0,0 @@
package netobjgroups
// FilterByID returns NetObjGroupList with specified ID.
func (nog NetObjGroupList) FilterByID(id string) NetObjGroupList {
predicate := func(netobj RecordNetObjGroup) bool {
return netobj.ID == id
}
return nog.FilterFunc(predicate)
}
// FilterByName returns NetObjGroupList with specified Name.
func (nog NetObjGroupList) FilterByName(name string) NetObjGroupList {
predicate := func(netobj RecordNetObjGroup) bool {
return netobj.Name == name
}
return nog.FilterFunc(predicate)
}
// FilterFunc allows filtering NetObjGroupList based on a user-specified predicate.
func (nog NetObjGroupList) FilterFunc(predicate func(group RecordNetObjGroup) bool) NetObjGroupList {
var result NetObjGroupList
for _, acc := range nog.Objects {
if predicate(acc) {
result.Objects = append(result.Objects, acc)
}
}
return result
}
// FindOne returns first element.
// If none was found, returns an empty struct.
func (nog NetObjGroupList) FindOne() RecordNetObjGroup {
if len(nog.Objects) == 0 {
return RecordNetObjGroup{}
}
return nog.Objects[0]
}

View File

@@ -1,111 +0,0 @@
package netobjgroups
import "testing"
var testNetObjGroups = NetObjGroupList{
Objects: []RecordNetObjGroup{
{
AccessGroupID: "d85d4a08-3216-4240-a8bd-191cd9cc3bf3",
AccessGroupName: "Test1",
CreatedAt: "2025-09-04T13:18:14.412118Z",
Description: "test descr",
ID: "0b16493b-0a38-4c90-80a0-c19f898f593d",
Name: "Test1",
UpdatedAt: "2025-10-28T07:28:15.450717Z",
VersionID: 1761636495441,
Counters: Counter{
LogicalPortsCount: 1,
SecurityPoliciesCount: 2,
SecurityRulesCount: 0,
},
},
{
AccessGroupID: "d85d4a08-3216-4240-a8bd-191cd9cc3bf3",
AccessGroupName: "Test2",
CreatedAt: "2025-09-04T13:18:14.412118Z",
Description: "another descr",
ID: "0b16493b-0a38-4c90-80a0-c19f898f593e",
Name: "Test2",
UpdatedAt: "2025-10-28T07:28:15.450717Z",
VersionID: 1761636495442,
Counters: Counter{
LogicalPortsCount: 1,
SecurityPoliciesCount: 2,
SecurityRulesCount: 0,
},
},
{
AccessGroupID: "d85d4a08-3216-4240-a8bd-191cd9cc3bf3",
AccessGroupName: "Test3",
CreatedAt: "2025-09-04T13:18:14.412118Z",
Description: "another descr",
ID: "0b16493b-0a38-4c90-80a0-c19f898f593f",
Name: "Test3",
UpdatedAt: "2025-10-28T07:28:15.450717Z",
VersionID: 1761636495443,
Counters: Counter{
LogicalPortsCount: 1,
SecurityPoliciesCount: 2,
SecurityRulesCount: 0,
},
},
},
}
func TestFilterByID(t *testing.T) {
actual := testNetObjGroups.FilterByID("0b16493b-0a38-4c90-80a0-c19f898f593d").FindOne()
if actual.ID != "0b16493b-0a38-4c90-80a0-c19f898f593d" {
t.Fatal("actual:", actual.ID, "> expected: 0b16493b-0a38-4c90-80a0-c19f898f593d")
}
}
func TestFilterByName(t *testing.T) {
actual := testNetObjGroups.FilterByName("Test1").FindOne()
if actual.Name != "Test1" {
t.Fatal("actual:", actual.Name, ">> expected: Test1")
}
}
func TestFilterFunc(t *testing.T) {
actual := testNetObjGroups.FilterFunc(func(rnog RecordNetObjGroup) bool {
return rnog.Description == "test descr"
})
if len(actual.Objects) != 1 || actual.Objects[0].ID != "0b16493b-0a38-4c90-80a0-c19f898f593d" {
t.Fatal("Expected 1 policy with description 'Second policy', found:", len(actual.Objects))
}
}
func TestFindOneWithResults(t *testing.T) {
result := testNetObjGroups.FilterByID("0b16493b-0a38-4c90-80a0-c19f898f593d").FindOne()
if result.ID != "0b16493b-0a38-4c90-80a0-c19f898f593d" {
t.Fatal("Expected 0b16493b-0a38-4c90-80a0-c19f898f593d, got:", result.ID)
}
}
func TestFindOneEmpty(t *testing.T) {
emptyList := NetObjGroupList{}
result := emptyList.FindOne()
if result.ID != "" || result.Name != "" {
t.Fatal("Expected empty NetObjGroup, got:", result)
}
}
func TestFilterByIDNotFound(t *testing.T) {
actual := testNetObjGroups.FilterByID("0b16493b-0a38-4c90-80a0-c19f898f593n")
if len(actual.Objects) != 0 {
t.Fatal("Expected 0 policies, found:", len(actual.Objects))
}
}
func TestFilterByDisplayNameNotFound(t *testing.T) {
actual := testNetObjGroups.FilterByName("Nonexistent Policy")
if len(actual.Objects) != 0 {
t.Fatal("Expected 0 policies, found:", len(actual.Objects))
}
}

View File

@@ -1,47 +0,0 @@
package netobjgroups
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// GetRequest struct to get info about a network object group
type GetRequest struct {
// ID of a network object group
// Required: true
NetObjGroupID string `url:"object_group_id" json:"object_group_id" validate:"required"`
}
// Get gets network object group details as a NetworkObjectGroups struct
func (nog NetworkObjectGroups) Get(ctx context.Context, req GetRequest) (*RecordNetObjGroup, error) {
res, err := nog.GetRaw(ctx, req)
if err != nil {
return nil, err
}
info := RecordNetObjGroup{}
err = json.Unmarshal(res, &info)
if err != nil {
return nil, err
}
return &info, nil
}
// GetRaw gets network object group details as an array of bytes
func (nog NetworkObjectGroups) GetRaw(ctx context.Context, req GetRequest) ([]byte, error) {
err := validators.ValidateRequest(req)
if err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/sdn/network_object_group/get"
res, err := nog.client.DecortApiCall(ctx, http.MethodGet, url, req)
return res, err
}

View File

@@ -1,88 +0,0 @@
package netobjgroups
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// ListRequest struct to get a list of network object groups
type ListRequest struct {
// Filter by name
// Required: false
Name string `url:"name,omitempty" json:"name,omitempty"`
// Filter by access group ID
// Required: false
AccessGroupID string `url:"access_group_id,omitempty" json:"access_group_id,omitempty"`
// Updated at lower bound (greater than or equal to)
// Required: false
UpdatedFrom string `url:"updated_from,omitempty" json:"updated_from,omitempty"`
// Updated at upper bound (less than)
// Required: false
UpdatedTo string `url:"updated_to,omitempty" json:"updated_to,omitempty"`
// Created at lower bound (greater than or equal to)
// Required: false
CreatedFrom string `url:"created_from,omitempty" json:"created_from,omitempty"`
// Created at upper bound (less than)
// Required: false
CreatedTo string `url:"created_to,omitempty" json:"created_to,omitempty"`
// Page number for pagination
// Required: false
Page uint64 `url:"page,omitempty" json:"page,omitempty"`
// Number of results per page
// Required: false
PerPage uint64 `url:"per_page,omitempty" json:"per_page,omitempty"`
// Field to sort by (name, created_at, updated_at)
// Required: false
SortBy string `url:"sort_by,omitempty" json:"sort_by,omitempty"`
// Sort order (asc/desc)
// Required: false
SortOrder string `url:"sort_order,omitempty" json:"sort_order,omitempty"`
// Filter by type
// Required: false
Type string `url:"type,omitempty" json:"type,omitempty"`
}
// List of address pools
func (nog NetworkObjectGroups) List(ctx context.Context, req ListRequest) (*NetObjGroupList, error) {
res, err := nog.ListRaw(ctx, req)
if err != nil {
return nil, err
}
objects := []RecordNetObjGroup{}
err = json.Unmarshal(res, &objects)
if err != nil {
return nil, err
}
result := NetObjGroupList{Objects: objects}
return &result, nil
}
// ListRaw gets a list of all address pools as an array of bytes
func (nog NetworkObjectGroups) ListRaw(ctx context.Context, req ListRequest) ([]byte, error) {
if err := validators.ValidateRequest(req); err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/sdn/network_object_group/list"
res, err := nog.client.DecortApiCall(ctx, http.MethodGet, url, req)
return res, err
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,18 +0,0 @@
// API Actor API for managing SDN network object groups
package netobjgroups
import (
"repository.basistech.ru/BASIS/decort-golang-sdk/interfaces"
)
// Structure for creating request to network object groups
type NetworkObjectGroups struct {
client interfaces.Caller
}
// Builder for external network object groups
func New(client interfaces.Caller) *NetworkObjectGroups {
return &NetworkObjectGroups{
client,
}
}

View File

@@ -1,61 +0,0 @@
package netobjgroups
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/constants"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// UpdateRequest struct to update a network object group
type UpdateRequest struct {
// ID of the object group
// Required: true
ObjectGroupID string `url:"object_group_id" json:"object_group_id" validate:"required"`
// ID of the version
// Required: true
VersionID uint64 `url:"version_id" json:"version_id" validate:"required"`
// Access Group ID
// Required: true
AccessGroupID string `url:"access_group_id" json:"access_group_id" validate:"required"`
// Description of the network object group
// Required: true
Description string `url:"description" json:"description" validate:"required"`
// Name of the network object group
// Required: true
Name string `url:"name" json:"name" validate:"required"`
// Addresses
// Required: false
Addresses []NetAddressRequest `url:"addresses,omitempty" json:"addresses,omitempty" validate:"omitempty,dive"`
}
// Update updates a network object group
func (nog NetworkObjectGroups) Update(ctx context.Context, req UpdateRequest) (*RecordNetObjGroup, error) {
err := validators.ValidateRequest(req)
if err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/sdn/network_object_group/update"
res, err := nog.client.DecortApiCallCtype(ctx, http.MethodPut, url, constants.MIMEJSON, req)
if err != nil {
return nil, err
}
info := RecordNetObjGroup{}
err = json.Unmarshal(res, &info)
if err != nil {
return nil, err
}
return &info, nil
}