854 lines
24 KiB
Go
854 lines
24 KiB
Go
package extnet
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"net/http"
|
|
"time"
|
|
|
|
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/constants"
|
|
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
|
|
)
|
|
|
|
// CreateRequest struct for creating account
|
|
type CreateRequest struct {
|
|
// Name of the bridge network
|
|
// Required: true
|
|
BridgeNetworkName string `url:"bridge_network_name" json:"bridge_network_name" validate:"required"`
|
|
|
|
// Detailed description of the external network
|
|
// Required: true
|
|
Description string `url:"description" json:"description" validate:"required"`
|
|
|
|
// User-friendly name for the external network
|
|
// Required: true
|
|
DisplayName string `url:"display_name" json:"display_name" validate:"required"`
|
|
|
|
// Whether the network is enabled
|
|
// Required: true
|
|
Enabled bool `url:"enabled" json:"enabled"`
|
|
|
|
// List of hypervisor names
|
|
// Required: true
|
|
Hypervisors []string `url:"hypervisors" json:"hypervisors" validate:"required"`
|
|
|
|
// List of external network ports
|
|
// Required: false
|
|
ExternalNetworkPorts []ExternalNetworkPortRequest `url:"-" json:"external_network_ports,omitempty"`
|
|
|
|
// IPv4 default gateway address
|
|
// Required: false
|
|
DefaultGatewayIPv4 string `url:"default_gateway_ipv4,omitempty" json:"default_gateway_ipv4,omitempty"`
|
|
|
|
// IPv6 default gateway address
|
|
// Required: false
|
|
DefaultGatewayIPv6 string `url:"default_gateway_ipv6,omitempty" json:"default_gateway_ipv6,omitempty"`
|
|
|
|
// IPv4 subnet in CIDR notation (Either subnet_v4 or subnet_v6 must be specified)
|
|
// Required: false
|
|
SubnetV4 string `url:"subnet_v4,omitempty" json:"subnet_v4,omitempty"`
|
|
|
|
// IPv6 subnet in CIDR notation (Either subnet_v4 or subnet_v6 must be specified)
|
|
// Required: false
|
|
SubnetV6 string `url:"subnet_v6,omitempty" json:"subnet_v6,omitempty"`
|
|
|
|
// VLAN tag identifier
|
|
// Required: false
|
|
VLANTag uint64 `url:"vlan_tag,omitempty" json:"vlan_tag,omitempty" validate:"omitempty,min=1,max=4094"`
|
|
}
|
|
|
|
type ExternalNetworkPortRequest struct {
|
|
// Access group ID
|
|
// Required: true
|
|
AccessGroupID string `url:"access_group_id" json:"access_group_id" validate:"required"`
|
|
|
|
// Access group name
|
|
// Required: true
|
|
AccessGroupName string `url:"access_group_name" json:"access_group_name" validate:"required"`
|
|
|
|
// Comment for the external network port
|
|
// Required: true
|
|
Comment string `url:"comment" json:"comment" validate:"required"`
|
|
|
|
// User-friendly name for the external network port
|
|
// Required: true
|
|
DisplayName string `url:"display_name" json:"display_name" validate:"required"`
|
|
|
|
// Whether the network pork is enabled
|
|
// Required: true
|
|
Enabled bool `url:"enabled" json:"enabled"`
|
|
|
|
// IPv4
|
|
// Required: true
|
|
IPv4 string `url:"ipv4" json:"ipv4" validate:"required"`
|
|
|
|
// IPv6
|
|
// Required: true
|
|
IPv6 string `url:"ipv6" json:"ipv6" validate:"required"`
|
|
|
|
// IPv6 Config
|
|
// Required: true
|
|
IPv6Config *IPv6ConfigRequest `url:"-" json:"ipv6_config" validate:"required"`
|
|
|
|
// MAC address
|
|
// Required: true
|
|
MAC string `url:"mac" json:"mac" validate:"required"`
|
|
|
|
// Router gateway port
|
|
// Required: true
|
|
RouterGatewayPort *RouterGatewayPortRequest `url:"-" json:"router_gateway_port" validate:"required"`
|
|
|
|
// Floating IP
|
|
// Required: true
|
|
FloatingIP *FloatingIPRequest `url:"-" json:"floating_ip" validate:"required"`
|
|
}
|
|
|
|
type IPv6ConfigRequest struct {
|
|
//Address Mode (Slaac or DhcpV6Stateful)
|
|
// Required: true
|
|
AddressMode string `url:"address_mode" json:"address_mode" validate:"required"`
|
|
|
|
// If true, the port will periodically send RA packets.
|
|
// Required: true
|
|
EnablePeriodicRa bool `url:"enable_periodic_ra" json:"enable_periodic_ra"`
|
|
|
|
// The number of waiting seconds between sending periodic RA
|
|
// Required: true
|
|
IntervalRa int64 `url:"interval_ra" json:"interval_ra" validate:"required"`
|
|
|
|
// The Default Router Preference (PRF) indicates whether this router should be preferred over other default routers.
|
|
// high, low, medium
|
|
// Required: true
|
|
RouterPreference string `url:"router_preference" json:"router_preference" validate:"required"`
|
|
}
|
|
|
|
type RouterGatewayPortRequest struct {
|
|
// Created at
|
|
// Required: true
|
|
CreatedAt time.Time `url:"created_at" json:"created_at" validate:"required"`
|
|
|
|
// Description
|
|
// Required: true
|
|
Description string `url:"description" json:"description" validate:"required"`
|
|
|
|
// Port id
|
|
// Required: true
|
|
ID string `url:"id" json:"id" validate:"required"`
|
|
|
|
// User-friendly name for the external network port
|
|
// Required: true
|
|
RouterDisplayName string `url:"router_display_name" json:"router_display_name" validate:"required"`
|
|
|
|
// Router ID
|
|
// Required: true
|
|
RouterID string `url:"router_id" json:"router_id" validate:"required"`
|
|
|
|
// SNAT Enabled
|
|
// Required: true
|
|
SNATEnabled bool `url:"snat_enabled" json:"snat_enabled"`
|
|
|
|
// Updated at
|
|
// Required: true
|
|
UpdatedAt time.Time `url:"updated_at" json:"updated_at" validate:"required"`
|
|
}
|
|
|
|
type FloatingIPRequest struct {
|
|
// Access group ID
|
|
// Required: true
|
|
AccessGroupID string `url:"access_group_id" json:"access_group_id" validate:"required"`
|
|
|
|
// Access group name
|
|
// Required: true
|
|
AccessGroupName string `url:"access_group_name" json:"access_group_name" validate:"required"`
|
|
|
|
// Created at
|
|
// Required: true
|
|
CreatedAt time.Time `url:"created_at" json:"created_at" validate:"required"`
|
|
|
|
// External network port
|
|
// Required: true
|
|
ExternalNetworkPort *ExternalNetworkPortRequest `url:"-" json:"external_network_port" validate:"required"`
|
|
|
|
// ID of the Floating IP
|
|
// Required: true
|
|
ID string `url:"id" json:"id" validate:"required"`
|
|
|
|
// Logical port
|
|
// Required: true
|
|
LogicalPort *LogicalPortRequest `url:"-" json:"logical_port" validate:"required"`
|
|
|
|
// Router
|
|
// Required: true
|
|
Router *RouterRequest `url:"-" json:"router" validate:"required"`
|
|
|
|
// Updated at
|
|
// Required: true
|
|
UpdatedAt time.Time `url:"updated_at" json:"updated_at" validate:"required"`
|
|
|
|
// ID of the user who created the floating IP
|
|
// Required: false
|
|
CreatedBy string `url:"created_by,omitempty" json:"created_by,omitempty"`
|
|
|
|
// ID of the user who last updated the floating IP
|
|
// Required: false
|
|
UpdatedBy string `url:"updated_by,omitempty" json:"updated_by,omitempty"`
|
|
|
|
// ID of version
|
|
// Required: true
|
|
VersionID uint64 `url:"version_id" json:"version_id" validate:"required"`
|
|
}
|
|
|
|
type LogicalPortRequest struct {
|
|
// Logical Port ID
|
|
// Required: true
|
|
ID string `url:"id" json:"id" validate:"required"`
|
|
|
|
// Access group ID
|
|
// Required: true
|
|
AccessGroupID string `url:"access_group_id" json:"access_group_id" validate:"required"`
|
|
|
|
// Access group name
|
|
// Required: true
|
|
AccessGroupName string `url:"access_group_name" json:"access_group_name" validate:"required"`
|
|
|
|
// MAC of adapter
|
|
// Required: true
|
|
AdapterMAC string `url:"adapter_mac" json:"adapter_mac" validate:"required"`
|
|
|
|
// Address detection
|
|
// Required: true
|
|
AddressDetection bool `url:"address_detection" json:"address_detection"`
|
|
|
|
// Description
|
|
// Required: true
|
|
Description string `url:"description" json:"description" validate:"required"`
|
|
|
|
// Created at
|
|
// Required: false
|
|
CreatedAt time.Time `url:"created_at,omitempty" json:"created_at,omitempty"`
|
|
|
|
// User-friendly name for logical port
|
|
// Required: true
|
|
DisplayName string `url:"display_name" json:"display_name" validate:"required"`
|
|
|
|
// Whether the logical pork is enabled
|
|
// Required: true
|
|
Enabled bool `url:"enabled" json:"enabled"`
|
|
|
|
// Exclude firewall information
|
|
// Required: true
|
|
ExcludeFirewall *ExcludeFirewallRequest `url:"-" json:"exclude_firewall" validate:"required"`
|
|
|
|
// External Network ID
|
|
// Required: false
|
|
ExternalNetworkID string `url:"external_network_id,omitempty" json:"external_network_id,omitempty"`
|
|
|
|
// Hypervisor
|
|
// Required: true
|
|
Hypervisor string `url:"hypervisor" json:"hypervisor" validate:"required"`
|
|
|
|
// User-friendly name for hypervisor
|
|
// Required: true
|
|
HypervisorDisplayName string `url:"hypervisor_display_name" json:"hypervisor_display_name" validate:"required"`
|
|
|
|
// Labels
|
|
// Required: false
|
|
Labels *LabelsRequest `url:"-" json:"labels,omitempty"`
|
|
|
|
// Live Migration Target Hv
|
|
// Required: false
|
|
LiveMigrationTargetHV string `url:"live_migration_target_hv,omitempty" json:"live_migration_target_hv,omitempty"`
|
|
|
|
// Status
|
|
// Required: false
|
|
Status *StatusRequest `url:"-" json:"status,omitempty"`
|
|
|
|
// Port bindings
|
|
// Required: false
|
|
Bindings *PortBindingsRequest `url:"-" json:"bindings,omitempty"`
|
|
|
|
// Unique Identifier
|
|
// Required: true
|
|
UniqueIDentifier string `url:"unique_identifier" json:"unique_identifier" validate:"required"`
|
|
|
|
// Updated at
|
|
// Required: false
|
|
UpdatedAt time.Time `url:"updated_at,omitempty" json:"updated_at,omitempty"`
|
|
|
|
// ID of version
|
|
// Required: true
|
|
VersionID uint64 `url:"version_id" json:"version_id" validate:"required"`
|
|
}
|
|
|
|
type ExcludeFirewallRequest struct {
|
|
// Exclusion reason
|
|
// Required: false
|
|
ExclusionReason string `url:"exclusion_reason,omitempty" json:"exclusion_reason,omitempty"`
|
|
|
|
// Whether logical port addresses are excluded from firewall
|
|
// Required: false
|
|
LogicalPortAddressesExcluded bool `url:"logical_port_addresses_excluded,omitempty" json:"logical_port_addresses_excluded,omitempty"`
|
|
|
|
// Whether logical port is excluded from firewall
|
|
// Required: true
|
|
LogicalPortExcluded bool `url:"logical_port_excluded" json:"logical_port_excluded"`
|
|
}
|
|
|
|
type LabelsRequest struct {
|
|
// VM ID
|
|
// Required: true
|
|
VMID string `url:"vm_id" json:"vm_id" validate:"required"`
|
|
|
|
// VM name
|
|
// Required: false
|
|
VMName string `url:"vm_name,omitempty" json:"vm_name,omitempty"`
|
|
}
|
|
|
|
type StatusRequest struct {
|
|
// Operation status
|
|
// Required: true
|
|
OperationStatus string `url:"operation_status" json:"operation_status" validate:"required"`
|
|
|
|
// Hypervisors status
|
|
// Required: false
|
|
Hypervisors []HypervisorStatusRequest `url:"-" json:"hypervisors,omitempty"`
|
|
}
|
|
|
|
type PortBindingsRequest struct {
|
|
// Binding ID
|
|
// Required: true
|
|
ID string `url:"id" json:"id" validate:"required"`
|
|
|
|
// User-friendly name for segment
|
|
// Required: false
|
|
SegmentDisplayName string `url:"segment_display_name,omitempty" json:"segment_display_name,omitempty"`
|
|
|
|
// Segment ID
|
|
// Required: false
|
|
SegmentID string `url:"segment_id,omitempty" json:"segment_id,omitempty"`
|
|
|
|
// Port security
|
|
// Required: true
|
|
PortSecurity bool `url:"port_security" json:"port_security"`
|
|
|
|
// Address detection
|
|
// Required: true
|
|
AddressDetection bool `url:"address_detection" json:"address_detection"`
|
|
|
|
// ID of version
|
|
// Required: true
|
|
VersionID uint64 `url:"version_id" json:"version_id" validate:"required"`
|
|
|
|
// Created at
|
|
// Required: true
|
|
CreatedAt time.Time `url:"created_at" json:"created_at" validate:"required"`
|
|
|
|
// Updated at
|
|
// Required: true
|
|
UpdatedAt time.Time `url:"updated_at" json:"updated_at" validate:"required"`
|
|
|
|
// Logical port addresses
|
|
// Required: false
|
|
LogicalPortAddresses []LogicalPortAddressRequest `url:"-" json:"logical_port_addresses,omitempty"`
|
|
}
|
|
|
|
type HypervisorStatusRequest struct {
|
|
// Operation status
|
|
// Required: true
|
|
OperationStatus string `url:"operation_status" json:"operation_status" validate:"required"`
|
|
|
|
// Name of hypervisor
|
|
// Required: true
|
|
Name string `url:"name" json:"name" validate:"required"`
|
|
|
|
// User-friendly name for the hypervisor
|
|
// Required: true
|
|
DisplayName string `url:"display_name" json:"display_name" validate:"required"`
|
|
|
|
// Hypervisor status
|
|
// Required: true
|
|
HypervisorStatus string `url:"hypervisor_status" json:"hypervisor_status" validate:"required"`
|
|
|
|
// Synced at
|
|
// Required: true
|
|
SyncedAt time.Time `url:"synced_at" json:"synced_at" validate:"required"`
|
|
}
|
|
|
|
type LogicalPortAddressRequest struct {
|
|
// IP of port
|
|
// Required: true
|
|
IP string `url:"ip" json:"ip" validate:"required"`
|
|
|
|
// IP type (IPv4 or IPv6)
|
|
// Required: true
|
|
IPType string `url:"ip_type" json:"ip_type" validate:"required"`
|
|
|
|
// Is discovered
|
|
// Required: false
|
|
IsDiscovered bool `url:"is_discovered,omitempty" json:"is_discovered,omitempty"`
|
|
|
|
// Is primary
|
|
// Required: false
|
|
IsPrimary bool `url:"is_primary,omitempty" json:"is_primary,omitempty"`
|
|
|
|
// MAC
|
|
// Required: true
|
|
MAC string `url:"mac" json:"mac" validate:"required"`
|
|
|
|
// ID
|
|
// Required: true
|
|
ID string `url:"id" json:"id" validate:"required"`
|
|
|
|
// Logical port id
|
|
// Required: true
|
|
LogicalPortID string `url:"logical_port_id" json:"logical_port_id" validate:"required"`
|
|
|
|
// Assigned at
|
|
// Required: true
|
|
AssignedAt time.Time `url:"assigned_at" json:"assigned_at" validate:"required"`
|
|
}
|
|
|
|
type RouterRequest struct {
|
|
// Access group ID
|
|
// Required: true
|
|
AccessGroupID string `url:"access_group_id" json:"access_group_id" validate:"required"`
|
|
|
|
// Access group name
|
|
// Required: true
|
|
AccessGroupName string `url:"access_group_name" json:"access_group_name" validate:"required"`
|
|
|
|
// Created at
|
|
// Required: true
|
|
CreatedAt time.Time `url:"created_at" json:"created_at" validate:"required"`
|
|
|
|
// Detailed description of the router
|
|
// Required: true
|
|
Description string `url:"description" json:"description" validate:"required"`
|
|
|
|
// User-friendly name for the router
|
|
// Required: true
|
|
DisplayName string `url:"display_name" json:"display_name" validate:"required"`
|
|
|
|
// Whether the router is enabled
|
|
// Required: true
|
|
Enabled bool `url:"enabled" json:"enabled"`
|
|
|
|
// Gateway ports
|
|
// Required: true
|
|
GatewayPorts []GatewayPortRequest `url:"-" json:"gateway_ports" validate:"required"`
|
|
|
|
// ID
|
|
// Required: true
|
|
ID string `url:"id" json:"id" validate:"required"`
|
|
|
|
// Policies
|
|
// Required: true
|
|
Policies []RouterPolicyRequest `url:"-" json:"policies" validate:"required"`
|
|
|
|
// Ports
|
|
// Required: true
|
|
Ports []RouterPortRequest `url:"-" json:"ports" validate:"required"`
|
|
|
|
// Status
|
|
// Required: true
|
|
Status *StatusRequest `url:"-" json:"status" validate:"required"`
|
|
|
|
// Updated at
|
|
// Required: true
|
|
UpdatedAt time.Time `url:"updated_at" json:"updated_at" validate:"required"`
|
|
|
|
// ID of version
|
|
// Required: true
|
|
VersionID uint64 `url:"version_id" json:"version_id" validate:"required"`
|
|
}
|
|
|
|
type GatewayPortRequest struct {
|
|
// Created at
|
|
// Required: true
|
|
CreatedAt time.Time `url:"created_at" json:"created_at" validate:"required"`
|
|
|
|
// Description
|
|
// Required: true
|
|
Description string `url:"description" json:"description" validate:"required"`
|
|
|
|
// L4 port max
|
|
// Required: true
|
|
ExternalL4PortMax int64 `url:"external_l4_port_max" json:"external_l4_port_max" validate:"required"`
|
|
|
|
// L4 port min
|
|
// Required: true
|
|
ExternalL4PortMin int64 `url:"external_l4_port_min" json:"external_l4_port_min" validate:"required"`
|
|
|
|
// External network port
|
|
// Required: true
|
|
ExternalNetworkPort *ExternalNetworkPortRequest `url:"-" json:"external_network_port" validate:"required"`
|
|
|
|
// ID of port
|
|
// Required: true
|
|
ID string `url:"id" json:"id" validate:"required"`
|
|
|
|
// SNAT Enabled
|
|
// Required: true
|
|
SNATEnabled bool `url:"snat_enabled" json:"snat_enabled"`
|
|
|
|
// Status
|
|
// Required: true
|
|
Status *StatusRequest `url:"-" json:"status" validate:"required"`
|
|
|
|
// Updated at
|
|
// Required: true
|
|
UpdatedAt time.Time `url:"updated_at" json:"updated_at" validate:"required"`
|
|
|
|
// ID of version
|
|
// Required: true
|
|
VersionID uint64 `url:"version_id" json:"version_id" validate:"required"`
|
|
}
|
|
|
|
type RouterPolicyRequest struct {
|
|
// Action
|
|
// Required: true
|
|
Action string `url:"action" json:"action" validate:"required"`
|
|
|
|
// Created at
|
|
// Required: true
|
|
CreatedAt time.Time `url:"created_at" json:"created_at" validate:"required"`
|
|
|
|
// User-friendly name for the policy
|
|
// Required: true
|
|
DisplayName string `url:"display_name" json:"display_name" validate:"required"`
|
|
|
|
// Whether the policy is enabled
|
|
// Required: true
|
|
Enabled bool `url:"enabled" json:"enabled"`
|
|
|
|
// ID of port
|
|
// Required: true
|
|
ID string `url:"id" json:"id" validate:"required"`
|
|
|
|
// Match
|
|
// Required: true
|
|
Match interface{} `url:"match" json:"match" validate:"required"`
|
|
|
|
// Next IPv4 address
|
|
// Required: true
|
|
NextIPv4Address []string `url:"next_ipv4_address" json:"next_ipv4_address" validate:"required"`
|
|
|
|
// Next IPv6 address
|
|
// Required: true
|
|
NextIPv6Address []string `url:"next_ipv6_address" json:"next_ipv6_address" validate:"required"`
|
|
|
|
// Priority
|
|
// Required: true
|
|
Priority int64 `url:"priority" json:"priority" validate:"required"`
|
|
|
|
// Updated at
|
|
// Required: true
|
|
UpdatedAt time.Time `url:"updated_at" json:"updated_at" validate:"required"`
|
|
|
|
// ID of version
|
|
// Required: true
|
|
VersionID uint64 `url:"version_id" json:"version_id" validate:"required"`
|
|
}
|
|
|
|
type RouterPortRequest struct {
|
|
// Created at
|
|
// Required: true
|
|
CreatedAt time.Time `url:"created_at" json:"created_at" validate:"required"`
|
|
|
|
// Detailed description of the router port
|
|
// Required: true
|
|
Description string `url:"description" json:"description" validate:"required"`
|
|
|
|
// Whether the router port is enabled
|
|
// Required: true
|
|
Enabled bool `url:"enabled" json:"enabled"`
|
|
|
|
// ID of port
|
|
// Required: true
|
|
ID string `url:"id" json:"id" validate:"required"`
|
|
|
|
// IPv4 address
|
|
// Required: true
|
|
IPv4Address string `url:"ipv4_address" json:"ipv4_address" validate:"required"`
|
|
|
|
// IPv6 address
|
|
// Required: true
|
|
IPv6Address string `url:"ipv6_address" json:"ipv6_address" validate:"required"`
|
|
|
|
// IPv6 Config
|
|
// Required: true
|
|
IPv6Config *IPv6ConfigRequest `url:"-" json:"ipv6_config" validate:"required"`
|
|
|
|
// MAC address
|
|
// Required: true
|
|
MAC string `url:"mac" json:"mac" validate:"required"`
|
|
|
|
// Segment
|
|
// Required: true
|
|
Segment *SegmentRequest `url:"-" json:"segment" validate:"required"`
|
|
|
|
// Segment ID
|
|
// Required: true
|
|
SegmentID string `url:"segment_id" json:"segment_id" validate:"required"`
|
|
|
|
// Status
|
|
// Required: true
|
|
Status *StatusRequest `url:"-" json:"status" validate:"required"`
|
|
|
|
// Updated at
|
|
// Required: true
|
|
UpdatedAt time.Time `url:"updated_at" json:"updated_at" validate:"required"`
|
|
|
|
// ID of version
|
|
// Required: true
|
|
VersionID uint64 `url:"version_id" json:"version_id" validate:"required"`
|
|
}
|
|
|
|
type SegmentRequest struct {
|
|
// Access group ID
|
|
// Required: true
|
|
AccessGroupID string `url:"access_group_id" json:"access_group_id" validate:"required"`
|
|
|
|
// Access group name
|
|
// Required: false
|
|
AccessGroupName string `url:"access_group_name,omitempty" json:"access_group_name,omitempty"`
|
|
|
|
// Created at
|
|
// Required: true
|
|
CreatedAt time.Time `url:"created_at" json:"created_at" validate:"required"`
|
|
|
|
// Detailed description of the router port
|
|
// Required: true
|
|
Description string `url:"description" json:"description" validate:"required"`
|
|
|
|
// DHCP IPv4
|
|
// Required: false
|
|
DHCPv4 *DHCPv4ConfigRequest `url:"-" json:"dhcp_v4,omitempty"`
|
|
|
|
// DHCP IPv6
|
|
// Required: false
|
|
DHCPv6 *DHCPv6ConfigRequest `url:"-" json:"dhcp_v6,omitempty"`
|
|
|
|
// User-friendly name for the segment
|
|
// Required: true
|
|
DisplayName string `url:"display_name" json:"display_name" validate:"required"`
|
|
|
|
// Whether the segment is enabled
|
|
// Required: true
|
|
Enabled bool `url:"enabled" json:"enabled"`
|
|
|
|
// ID of segment
|
|
// Required: true
|
|
ID string `url:"id" json:"id" validate:"required"`
|
|
|
|
// L2 connection port
|
|
// Required: false
|
|
L2ConnectionPort *L2ConnectionPortRequest `url:"-" json:"l2_connection_port,omitempty"`
|
|
|
|
// Logical ports info
|
|
// Required: false
|
|
LogicalPortsInfo []EntityInfoRequest `url:"-" json:"logical_ports_info,omitempty"`
|
|
|
|
// Routers info
|
|
// Required: false
|
|
RoutersInfo []EntityInfoRequest `url:"-" json:"routers_info,omitempty"`
|
|
|
|
// Status
|
|
// Required: false
|
|
Status *StatusRequest `url:"-" json:"status,omitempty"`
|
|
|
|
// IPv4 subnet in CIDR notation (Either subnet_v4 or subnet_v6 must be specified)
|
|
// Required: false
|
|
SubnetV4 string `url:"subnet_v4,omitempty" json:"subnet_v4,omitempty"`
|
|
|
|
// IPv6 subnet in CIDR notation (Either subnet_v4 or subnet_v6 must be specified)
|
|
// Required: false
|
|
SubnetV6 string `url:"subnet_v6,omitempty" json:"subnet_v6,omitempty"`
|
|
|
|
// Type of segment
|
|
// Required: true
|
|
Type string `url:"type" json:"type" validate:"required"`
|
|
|
|
// Updated at
|
|
// Required: true
|
|
UpdatedAt time.Time `url:"updated_at" json:"updated_at" validate:"required"`
|
|
|
|
// ID of version
|
|
// Required: true
|
|
VersionID uint64 `url:"version_id" json:"version_id" validate:"required"`
|
|
}
|
|
|
|
type L2ConnectionPortRequest struct {
|
|
// Access group ID
|
|
// Required: true
|
|
AccessGroupID string `url:"access_group_id" json:"access_group_id" validate:"required"`
|
|
|
|
// Created at
|
|
// Required: true
|
|
CreatedAt time.Time `url:"created_at" json:"created_at" validate:"required"`
|
|
|
|
// ID of the L2 connection port
|
|
// Required: true
|
|
ID string `url:"id" json:"id" validate:"required"`
|
|
|
|
// L2 external network details
|
|
// Required: false
|
|
L2ExternalNetwork *L2ExternalNetworkRequest `url:"-" json:"l2_external_network,omitempty"`
|
|
|
|
// Updated at
|
|
// Required: true
|
|
UpdatedAt time.Time `url:"updated_at" json:"updated_at" validate:"required"`
|
|
|
|
// ID of the user who last updated the port
|
|
// Required: false
|
|
UpdatedBy string `url:"updated_by,omitempty" json:"updated_by,omitempty"`
|
|
|
|
// ID of the user who created the port
|
|
// Required: false
|
|
CreatedBy string `url:"created_by,omitempty" json:"created_by,omitempty"`
|
|
|
|
// ID of version
|
|
// Required: true
|
|
VersionID uint64 `url:"version_id" json:"version_id" validate:"required"`
|
|
}
|
|
|
|
type L2ExternalNetworkRequest struct {
|
|
// Bridge network name
|
|
// Required: true
|
|
BridgeNetworkName string `url:"bridge_network_name" json:"bridge_network_name" validate:"required"`
|
|
|
|
// Created at
|
|
// Required: true
|
|
CreatedAt time.Time `url:"created_at" json:"created_at" validate:"required"`
|
|
|
|
// Detailed description of the network
|
|
// Required: true
|
|
Description string `url:"description" json:"description" validate:"required"`
|
|
|
|
// User-friendly name for the network
|
|
// Required: true
|
|
DisplayName string `url:"display_name" json:"display_name" validate:"required"`
|
|
|
|
// List of hypervisor IDs attached to the network
|
|
// Required: true
|
|
Hypervisors []string `url:"hypervisors" json:"hypervisors" validate:"required"`
|
|
|
|
// ID of the network
|
|
// Required: true
|
|
ID string `url:"id" json:"id" validate:"required"`
|
|
|
|
// Updated at
|
|
// Required: true
|
|
UpdatedAt time.Time `url:"updated_at" json:"updated_at" validate:"required"`
|
|
|
|
// ID of version
|
|
// Required: true
|
|
VersionID uint64 `url:"version_id" json:"version_id" validate:"required"`
|
|
|
|
// VLAN tag
|
|
// Required: false
|
|
VLANTag uint64 `url:"vlan_tag,omitempty" json:"vlan_tag,omitempty"`
|
|
|
|
// ID of the user who last updated the network
|
|
// Required: false
|
|
UpdatedBy string `url:"updated_by,omitempty" json:"updated_by,omitempty"`
|
|
|
|
// ID of the user who created the network
|
|
// Required: false
|
|
CreatedBy string `url:"created_by,omitempty" json:"created_by,omitempty"`
|
|
}
|
|
|
|
type DHCPv4ConfigRequest struct {
|
|
// DNS
|
|
// Required: false
|
|
DNS []string `url:"dns,omitempty" json:"dns,omitempty"`
|
|
|
|
// Excluded address ranges
|
|
// Required: false
|
|
ExcludedAddressRanges []string `url:"excluded_address_ranges,omitempty" json:"excluded_address_ranges,omitempty"`
|
|
|
|
// Gateway
|
|
// Required: true
|
|
Gateway string `url:"gateway" json:"gateway" validate:"required"`
|
|
|
|
// ID of config
|
|
// Required: false
|
|
ID string `url:"id,omitempty" json:"id,omitempty"`
|
|
|
|
// Lease time
|
|
// Required: false
|
|
LeaseTime int64 `url:"lease_time,omitempty" json:"lease_time,omitempty"`
|
|
|
|
// Server IP
|
|
// Required: true
|
|
ServerIP string `url:"server_ip" json:"server_ip" validate:"required"`
|
|
|
|
// Server MAC
|
|
// Required: false
|
|
ServerMAC string `url:"server_mac,omitempty" json:"server_mac,omitempty"`
|
|
|
|
// Whether the config is enabled
|
|
// Required: true
|
|
Enabled bool `url:"enabled" json:"enabled"`
|
|
}
|
|
|
|
type DHCPv6ConfigRequest struct {
|
|
// Address prefix
|
|
// Required: true
|
|
AddressPrefix string `url:"address_prefix" json:"address_prefix" validate:"required"`
|
|
|
|
// DNS
|
|
// Required: false
|
|
DNS []string `url:"dns,omitempty" json:"dns,omitempty"`
|
|
|
|
// ID of config
|
|
// Required: false
|
|
ID string `url:"id,omitempty" json:"id,omitempty"`
|
|
|
|
// Lease time
|
|
// Required: false
|
|
LeaseTime int64 `url:"lease_time,omitempty" json:"lease_time,omitempty"`
|
|
|
|
// Server MAC
|
|
// Required: false
|
|
ServerMAC string `url:"server_mac,omitempty" json:"server_mac,omitempty"`
|
|
|
|
// Whether the config is enabled
|
|
// Required: true
|
|
Enabled bool `url:"enabled" json:"enabled"`
|
|
}
|
|
|
|
type EntityInfoRequest struct {
|
|
// User-friendly name for the entity
|
|
// Required: true
|
|
DisplayName string `url:"display_name" json:"display_name" validate:"required"`
|
|
|
|
// ID of entity
|
|
// Required: true
|
|
ID string `url:"id" json:"id" validate:"required"`
|
|
}
|
|
|
|
// Create creates extnet
|
|
func (e ExtNet) Create(ctx context.Context, req CreateRequest) (*ExternalNetworkResponse, error) {
|
|
err := validators.ValidateRequest(req)
|
|
if err != nil {
|
|
return nil, validators.ValidationErrors(validators.GetErrors(err))
|
|
}
|
|
|
|
url := "/sdn/external_network/create"
|
|
|
|
res, err := e.client.DecortApiCallCtype(ctx, http.MethodPost, url, constants.MIMEJSON, req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
info := ExternalNetworkResponse{}
|
|
|
|
err = json.Unmarshal(res, &info)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &info, nil
|
|
}
|