This commit is contained in:
asteam
2025-07-15 17:39:18 +03:00
parent 1f8637400f
commit 7dacf35cd6
163 changed files with 4322 additions and 504 deletions

View File

@@ -6,6 +6,7 @@ import (
"net/url"
"reflect"
"regexp"
"strconv"
"strings"
"github.com/go-playground/validator/v10"
@@ -414,6 +415,12 @@ func languageValidator(fe validator.FieldLevel) bool {
return IsInSlice(fieldValue, languageValues)
}
func userProviderValidator(fe validator.FieldLevel) bool {
fieldValue := fe.Field().String()
return IsInSlice(fieldValue, userProviders)
}
// sepTypeValidator is used to validate sepType fields
func sepTypeValidator(fe validator.FieldLevel) bool {
fieldValue := fe.Field().String()
@@ -421,6 +428,13 @@ func sepTypeValidator(fe validator.FieldLevel) bool {
return IsInSlice(fieldValue, sepTypeValues)
}
// deviceValidator is used to validate extnet device fields
func deviceValidator(fe validator.FieldLevel) bool {
fieldValue := fe.Field().String()
return IsInSlice(fieldValue, deviceValues)
}
// ValidateRAM checks if request contains RAM value that is positive integer divisible by divisibility passed.
// It is recommended to pass constants.RAM_DIVISIBILITY as divisility arguement
func ValidateRAM(r interfaces.RequestWithRAM, divisibility uint64) error {
@@ -442,3 +456,13 @@ func ValidateRAM(r interfaces.RequestWithRAM, divisibility uint64) error {
}
return multierror.Join(errs...)
}
// trunkTagsValidator checks if trunk_tags is in range from 1 to 4095
func trunkTagsValidator(fe validator.FieldLevel) bool {
fieldValue := fe.Field().String()
numFieldValue, err := strconv.ParseInt(fieldValue, 10, 64)
if err != nil {
return false
}
return uint64(numFieldValue) >= uint64(trunkTagsMin) && uint64(numFieldValue) <= uint64(trunkTagsMax)
}

View File

@@ -333,6 +333,25 @@ func errorMessage(fe validator.FieldError) string {
prefix,
fe.Field(),
joinValues(sepTypeValues))
// user validators
case "userProvider":
return fmt.Sprintf("%s %s must be one of the following: %s",
prefix,
fe.Field(),
joinValues(userProviders))
// trunk tags validator
case "trunkTags":
return fmt.Sprintf("%s %s must be in range from 1 to 4095",
prefix,
fe.Field())
case "device":
return fmt.Sprintf("%s %s must be one of the following: %s",
prefix,
fe.Field(),
joinValues(deviceValues))
}
return fe.Error()

View File

@@ -281,10 +281,25 @@ func registerAllValidators(validate *validator.Validate) error {
return err
}
err = validate.RegisterValidation("userProvider", userProviderValidator)
if err != nil {
return err
}
err = validate.RegisterValidation("sepType", sepTypeValidator)
if err != nil {
return err
}
err = validate.RegisterValidation("device", deviceValidator)
if err != nil {
return err
}
err = validate.RegisterValidation("trunkTags", trunkTagsValidator)
if err != nil {
return err
}
return nil
}

View File

@@ -17,17 +17,17 @@ var (
computeModeValues = []string{"EQ", "EN", "ANY"}
computeDiskTypeValues = []string{"D", "B"}
computeNetTypeValues = []string{"EXTNET", "VINS"}
computex86NetTypeValues = []string{"EXTNET", "VINS", "VFNIC", "DPDK"}
computex86NetTypeValues = []string{"EXTNET", "VINS", "VFNIC", "DPDK", "SDN", "EMPTY", "TRUNK"}
computeOrderValues = []string{"cdrom", "network", "hd"}
computeDataDisksValues = []string{"KEEP", "DETACH", "DESTROY"}
computeDriverValues = []string{"KVM_X86", "SVA_KVM_X86"}
computeDriverValues = []string{"KVM_X86"}
diskTypeValues = []string{"B", "T", "D"}
flipgroupClientTypeValues = []string{"compute", "vins"}
kvmNetTypeValues = []string{"EXTNET", "VINS", "NONE"}
kvmx86NetTypeValues = []string{"EXTNET", "VINS", "NONE", "VFNIC", "DPDK"}
kvmx86NetTypeValues = []string{"EXTNET", "VINS", "EMPTY", "VFNIC", "DPDK", "SDN", "TRUNK"}
lbAlgorithmValues = []string{"roundrobin", "static-rr", "leastconn"}
@@ -49,11 +49,11 @@ var (
interfaceStateValues = []string{"on", "off"}
actionValues = []string{"power_on", "shutdown", "force_shutdown", "reboot"}
actionValues = []string{"is_powered", "power_on", "shutdown", "force_shutdown", "reboot"}
vmActionValues = []string{"stop", "move"}
computeFeaturesValues = []string{"hugepages", "numa", "cpupin", "vfnic", "dpdk", "changemac"}
computeFeaturesValues = []string{"hugepages", "numa", "cpupin", "vfnic", "dpdk", "changemac", "trunk"}
networkInterfaceNamingValues = []string{"eth", "ens"}
@@ -72,10 +72,16 @@ var (
sepTypeValues = []string{"hitachi", "dorado", "tatlin", "shared", "local", "des"}
languageValues = []string{"ru", "en"}
userProviders = []string{"bvs", "decs3o"}
deviceValues = []string{"primary", "secondary"}
)
const (
mtuMin = 1
mtuMax = 9216
trunkTagsMin = 1
trunkTagsMax = 4095
)