From f61319c21bea3304562dd8ac1e352f2c167a7014 Mon Sep 17 00:00:00 2001 From: Arseniy Volkov Date: Fri, 31 Jul 2026 16:47:20 +0400 Subject: [PATCH] v14.13.0 --- CHANGELOG.md | 24 ++++++++++++++++++++---- internal/validators/custom.go | 4 ++++ internal/validators/helper.go | 1 + internal/validators/messages.go | 2 ++ internal/validators/validator.go | 5 +++++ pkg/sdn/logicalports/create.go | 19 ++++++++++--------- pkg/sdn/logicalports/models.go | 15 +++++++++++++++ pkg/sdn/logicalports/update.go | 18 +++++++++++------- 8 files changed, 68 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 23781a5f..3ea1c240 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## Version 14.12.0 +## Version 1.14.13 Методы `Audits` в cloudapi/compute, cloudbroker/compute, cloudapi/account, cloudbroker/account, cloudapi/vins, cloudbroker/vins, cloudapi/rg и cloudbroker/rg стали deprecated и в следующих версиях будут удалены, вместо них необходимо использовать метод `List` в cloudapi/audit и cloudbroker/audit с соответствующими фильтрами Методы `AccessGrant`, `AccessGrantToPool`, `AccessRevoke`, `AccessRevokeToPool` в cloudbroker/sep стали deprecated и в следующих версиях будут удалены @@ -7,9 +7,25 @@ Все методы группы `.SDN()` находятся в альфа-версии. -### Исправлено -#### sep + +### Добавлено + +#### sdn logicalports | Идентификатор задачи | Описание | | --- | --- | -| BGOS-949 | Тип возвращаемого значения в методе `AddConsumerNodes` с `uint64` на `[]uint64` в cloudbroker/sep | +| BGOS-967 | Вычисляемое поле `ExcludeFirewall` в структуру ответа `LogicalPort` в sdn/logicalports | + + +### Изменено + +#### sdn logicalports +| Идентификатор задачи | Описание | +| --- | --- | +| BGOS-967 | Тип опционального поля `LogicalPortAddresses` в структуре запроса `CreateRequest` с `[]LogicalPortAddress` на `[]LogicalPortAddressRequest` в sdn/logicalports | +| BGOS-967 | Тип обязательного поля `IP` в структуре запроса `LogicalPortAddressRequest` с `string` на `interface{}` в sdn/logicalports | +| BGOS-967 | Тип поля `IsDiscovered` c опционального на обязательное в структурах запросов `UpdateAddress` и `AddAddress` в sdn/logicalports | +| BGOS-967 | Тип обязательного поля `IsDiscovered` в структуре запроса `UpdateAddress` и `AddAddress` с `bool` на `interface{}` в sdn/logicalports | +| BGOS-967 | Тип опционального поля `Labels` в структуре запроса `CreateRequest` с `CreateLabels` на `*CreateLabels` в sdn/logicalports | +| BGOS-967 | Тип опционального поля `Labels` в структуре запроса `UpdateRequest` с `UpdateLabels` на `*UpdateLabels` в sdn/logicalports | + diff --git a/internal/validators/custom.go b/internal/validators/custom.go index 26cbd718..b26822cd 100644 --- a/internal/validators/custom.go +++ b/internal/validators/custom.go @@ -350,6 +350,10 @@ func isBoolTypeValidator(fe validator.FieldLevel) bool { return fe.Field().CanConvert(reflect.TypeOf(true)) } +func isStringTypeValidator(fe validator.FieldLevel) bool { + return fe.Field().Kind() == reflect.String +} + func urlValidartor(fl validator.FieldLevel) bool { fieldValues := fl.Field().String() diff --git a/internal/validators/helper.go b/internal/validators/helper.go index ea86d476..34577099 100644 --- a/internal/validators/helper.go +++ b/internal/validators/helper.go @@ -2,6 +2,7 @@ package validators import ( "errors" + "repository.basistech.ru/BASIS/dynamix-golang-sdk/v14/internal/multierror" "github.com/go-playground/validator/v10" diff --git a/internal/validators/messages.go b/internal/validators/messages.go index 6894d6d0..dca4fc49 100644 --- a/internal/validators/messages.go +++ b/internal/validators/messages.go @@ -27,6 +27,8 @@ func errorMessage(fe validator.FieldError) string { return fmt.Sprintf("%s %s: unexpected E-Mail format", prefix, fe.Field()) case "isBool": return fmt.Sprintf("%s %s: must be bool type", prefix, fe.Field()) + case "isString": + return fmt.Sprintf("%s %s: must be string type", prefix, fe.Field()) case "accessType": return fmt.Sprintf("%s %s must be one of the following: %s", diff --git a/internal/validators/validator.go b/internal/validators/validator.go index 38c26da7..09e8390c 100644 --- a/internal/validators/validator.go +++ b/internal/validators/validator.go @@ -231,6 +231,11 @@ func registerAllValidators(validate *validator.Validate) error { return err } + err = validate.RegisterValidation("isString", isStringTypeValidator) + if err != nil { + return err + } + err = validate.RegisterValidation("url", urlValidartor) if err != nil { return err diff --git a/pkg/sdn/logicalports/create.go b/pkg/sdn/logicalports/create.go index 6852252a..c4845f13 100644 --- a/pkg/sdn/logicalports/create.go +++ b/pkg/sdn/logicalports/create.go @@ -55,34 +55,35 @@ type CreateRequest struct { // Logical port addresses // Required: false - LogicalPortAddresses []LogicalPortAddress `url:"logical_port_addresses,omitempty" json:"logical_port_addresses,omitempty" validate:"dive"` + LogicalPortAddresses []LogicalPortAddressRequest `url:"logical_port_addresses,omitempty" json:"logical_port_addresses,omitempty" validate:"dive"` // Labels // Required: false - Labels CreateLabels `url:"labels,omitempty" json:"labels,omitempty"` + Labels *CreateLabels `url:"labels,omitempty" json:"labels"` } // LogicalPortAddressRequest struct representing logical port address type LogicalPortAddressRequest struct { - // IP address + // IP address. IPv4 or IPv6 address of the logical port + // If nil (allowed only when IsPrimary is true), the system will automatically generate a valid address // Required: true - IP string `url:"ip" json:"ip" validate:"required"` + IP interface{} `url:"ip" json:"ip" validate:"omitempty,isString"` // IP type // Required: true IPType string `url:"ip_type" json:"ip_type" validate:"required,oneof=IPv4 IPv6"` - // Is primary. True or False + // Is primary // Required: true IsPrimary interface{} `url:"is_primary" json:"is_primary" validate:"required,isBool"` + // Is discovered + // Required: true + IsDiscovered interface{} `url:"is_discovered" json:"is_discovered" validate:"required,isBool"` + // MAC address // Required: false MAC string `url:"mac,omitempty" json:"mac,omitempty"` - - // Is discovered. True or False - // Required: false - IsDiscovered interface{} `url:"is_discovered,omitempty" json:"is_discovered,omitempty" validate:"omitempty,isBool"` } // Create creates a logical port diff --git a/pkg/sdn/logicalports/models.go b/pkg/sdn/logicalports/models.go index 98905cf6..d4322be6 100644 --- a/pkg/sdn/logicalports/models.go +++ b/pkg/sdn/logicalports/models.go @@ -34,6 +34,9 @@ type LogicalPort struct { // Enabled Enabled bool `json:"enabled"` + // Exclude firewall information + ExcludeFirewall ExcludeFirewall `json:"exclude_firewall"` + // External network ID ExternalNetworkID string `json:"external_network_id"` @@ -162,6 +165,18 @@ type MigrationStatus struct { VersionID uint64 `json:"version_id"` } +// ExcludeFirewall information +type ExcludeFirewall struct { + // Exclusion reason + ExclusionReason string `json:"exclusion_reason"` + + // Whether logical port addresses are excluded from firewall + LogicalPortAddressesExcluded bool `json:"logical_port_addresses_excluded"` + + // Whether logical port is excluded from firewall + LogicalPortExcluded bool `json:"logical_port_excluded"` +} + // Labels information type Labels struct { // VM ID diff --git a/pkg/sdn/logicalports/update.go b/pkg/sdn/logicalports/update.go index 2a0ad916..fd719d5d 100644 --- a/pkg/sdn/logicalports/update.go +++ b/pkg/sdn/logicalports/update.go @@ -67,11 +67,15 @@ type UpdateRequest struct { // Labels // Required: false - Labels UpdateLabels `url:"labels,omitempty" json:"labels,omitempty"` + Labels *UpdateLabels `url:"labels,omitempty" json:"labels"` } // UpdateAddress struct representing update address type UpdateAddress struct { + // ID of the address + // Required: true + ID string `url:"id" json:"id" validate:"required"` + // IP address // Required: true IP string `url:"ip" json:"ip" validate:"required"` @@ -81,8 +85,8 @@ type UpdateAddress struct { IPType string `url:"ip_type" json:"ip_type" validate:"required,oneof=IPv4 IPv6"` // Is discovered. True or False - // Required: false - IsDiscovered interface{} `url:"is_discovered,omitempty" json:"is_discovered,omitempty" validate:"omitempty,isBool"` + // Required: true + IsDiscovered interface{} `url:"is_discovered" json:"is_discovered" validate:"required,isBool"` // Is primary. True or False // Required: true @@ -103,11 +107,11 @@ type AddAddress struct { // Required: true IPType string `url:"ip_type" json:"ip_type" validate:"required,oneof=IPv4 IPv6"` - // Is discovered. True or False - // Required: false - IsDiscovered interface{} `url:"is_discovered,omitempty" json:"is_discovered,omitempty" validate:"omitempty,isBool"` + // Is discovered + // Required: true + IsDiscovered interface{} `url:"is_discovered" json:"is_discovered" validate:"required,isBool"` - // Is primary. True or False + // Is primary // Required: true IsPrimary interface{} `url:"is_primary" json:"is_primary" validate:"required,isBool"`