This commit is contained in:
2023-03-24 17:09:30 +03:00
parent 437841c8dd
commit 84b64b7d80
433 changed files with 4246 additions and 6516 deletions

View File

@@ -2,38 +2,30 @@ package image
import (
"context"
"errors"
"net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// Request struct for set compute CI
type ComputeCISetRequest struct {
// ID of the image
// Required: true
ImageID uint64 `url:"imageId" json:"imageId"`
ImageID uint64 `url:"imageId" json:"imageId" validate:"required"`
// ID of the compute CI
// Required: true
ComputeCIID uint64 `url:"computeciId" json:"computeciId"`
}
func (irq ComputeCISetRequest) validate() error {
if irq.ImageID == 0 {
return errors.New("validation-error: field ImageID must be set")
}
if irq.ComputeCIID == 0 {
return errors.New("validation-error: field ComputeCIID must be set")
}
return nil
ComputeCIID uint64 `url:"computeciId" json:"computeciId" validate:"required"`
}
// ComputeCISet set compute CI ID for image
func (i Image) ComputeCISet(ctx context.Context, req ComputeCISetRequest) (bool, error) {
err := req.validate()
err := validators.ValidateRequest(req)
if err != nil {
return false, err
for _, validationError := range validators.GetErrors(err) {
return false, validators.ValidationError(validationError)
}
}
url := "/cloudbroker/image/computeciSet"

View File

@@ -2,31 +2,26 @@ package image
import (
"context"
"errors"
"net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// Request struct for unset compute CI
type ComputeCIUnsetRequest struct {
// ID of the image
// Required: true
ImageID uint64 `url:"imageId" json:"imageId"`
}
func (irq ComputeCIUnsetRequest) validate() error {
if irq.ImageID == 0 {
return errors.New("validation-error: field ImageID must be set")
}
return nil
ImageID uint64 `url:"imageId" json:"imageId" validate:"required"`
}
// ComputeCIUnset unset compute CI ID from image
func (i Image) ComputeCIUnset(ctx context.Context, req ComputeCIUnsetRequest) (bool, error) {
err := req.validate()
err := validators.ValidateRequest(req)
if err != nil {
return false, err
for _, validationError := range validators.GetErrors(err) {
return false, validators.ValidationError(validationError)
}
}
url := "/cloudbroker/image/сomputeciUnset"

View File

@@ -2,7 +2,6 @@ package image
import (
"context"
"errors"
"net/http"
"strconv"
@@ -13,15 +12,15 @@ import (
type CreateCDROMImageRequest struct {
// Name of the rescue disk
// Required: true
Name string `url:"name" json:"name"`
Name string `url:"name" json:"name" validate:"required"`
// URL where to download ISO from
// Required: true
URL string `url:"url" json:"url"`
URL string `url:"url" json:"url" validate:"required,url"`
// Grid (platform) ID where this CD-ROM image should be create in
// Required: true
GID uint64 `url:"gid" json:"gid"`
GID uint64 `url:"gid" json:"gid" validate:"required"`
// Account ID to make the image exclusive
// Required: false
@@ -53,37 +52,16 @@ type CreateCDROMImageRequest struct {
// List of types of compute suitable for image.
// Example: [ "KVM_X86" ]
// Required: true
Drivers []string `url:"drivers" json:"drivers"`
}
func (irq CreateCDROMImageRequest) validate() error {
if irq.Name == "" {
return errors.New("validation-error: field Name must be set")
}
if irq.URL == "" {
return errors.New("validation-error: field URL must be set")
}
if irq.GID == 0 {
return errors.New("validation-error: field GID must be set")
}
if len(irq.Drivers) == 0 || len(irq.Drivers) > 1 {
return errors.New("validation-error: field Drivers can not be empty or have 2 or more elements")
}
for _, v := range irq.Drivers {
validate := validators.StringInSlice(v, []string{"KVM_X86"})
if !validate {
return errors.New("validation-error: field Drivers can be KVM_X86 only")
}
}
return nil
Drivers []string `url:"drivers" json:"drivers" validate:"min=1,max=2,imageDrivers"`
}
// CreateCDROMImage creates CD-ROM image from an ISO identified by URL
func (i Image) CreateCDROMImage(ctx context.Context, req CreateCDROMImageRequest) (uint64, error) {
err := req.validate()
err := validators.ValidateRequest(req)
if err != nil {
return 0, err
for _, validationError := range validators.GetErrors(err) {
return 0, validators.ValidationError(validationError)
}
}
url := "/cloudbroker/image/createCDROMImage"

View File

@@ -2,7 +2,6 @@ package image
import (
"context"
"errors"
"net/http"
"strconv"
@@ -13,22 +12,22 @@ import (
type CreateRequest struct {
// Name of the rescue disk
// Required: true
Name string `url:"name" json:"name"`
Name string `url:"name" json:"name" validate:"required"`
// URL where to download media from
// Required: true
URL string `url:"url" json:"url"`
URL string `url:"url" json:"url" validate:"required,url"`
// Grid (platform) ID where this template should be create in
// Required: true
GID uint64 `url:"gid" json:"gid"`
GID uint64 `url:"gid" json:"gid" validate:"required"`
// Boot type of image
// Should be one of:
// - bios
// - UEFI
// Required: true
BootType string `url:"boottype" json:"boottype"`
BootType string `url:"boottype" json:"boottype" validate:"imageBootType"`
// Image type
// Should be one of:
@@ -36,7 +35,7 @@ type CreateRequest struct {
// - windows
// - or other
// Required: true
ImageType string `url:"imagetype" json:"imagetype"`
ImageType string `url:"imagetype" json:"imagetype" validate:"imageType"`
// Does this machine supports hot resize
// Required: false
@@ -80,46 +79,20 @@ type CreateRequest struct {
// List of types of compute suitable for image
// Example: [ "KVM_X86" ]
// Required: true
Drivers []string `url:"drivers" json:"drivers"`
Drivers []string `url:"drivers" json:"drivers" validate:"min=1,max=2,imageDrivers"`
// Bootable image or not
// Required: false
Bootable bool `url:"bootable,omitempty" json:"bootable,omitempty"`
}
func (irq CreateRequest) validate() error {
if irq.Name == "" {
return errors.New("validation-error: field Name must be set")
}
if irq.URL == "" {
return errors.New("validation-error: field URL must be set")
}
if irq.GID == 0 {
return errors.New("validation-error: field GID must be set")
}
if irq.BootType == "" {
return errors.New("validation-error: field BootType must be set")
}
if irq.ImageType == "" {
return errors.New("validation-error: field ImageType must be set")
}
validate := validators.StringInSlice(irq.BootType, []string{"bios", "uefi"})
if !validate {
return errors.New("validation-error: field BootType can be bios or uefi")
}
validate = validators.StringInSlice(irq.ImageType, []string{"windows", "linux", "other"})
if !validate {
return errors.New("validation-error: field ImageType can be windows, linux or other")
}
return nil
}
// CreateImage creates image from a media identified by URL
func (i Image) CreateImage(ctx context.Context, req CreateRequest) (uint64, error) {
err := req.validate()
err := validators.ValidateRequest(req)
if err != nil {
return 0, err
for _, validationError := range validators.GetErrors(err) {
return 0, validators.ValidationError(validationError)
}
}
url := "/cloudbroker/image/createImage"

View File

@@ -2,38 +2,30 @@ package image
import (
"context"
"errors"
"net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// Request struct for create virtual image
type CreateVirtualRequest struct {
// Name of the virtual image to create
// Required: true
Name string `url:"name" json:"name"`
Name string `url:"name" json:"name" validate:"required"`
// ID of real image to link this virtual image to upon creation
// Required: true
TargetID uint64 `url:"targetId" json:"targetId"`
}
func (irq CreateVirtualRequest) validate() error {
if irq.Name == "" {
return errors.New("validation-error: field Name must be set")
}
if irq.TargetID == 0 {
return errors.New("validation-error: field TargetID must be set")
}
return nil
TargetID uint64 `url:"targetId" json:"targetId" validate:"required"`
}
// CreateVirtual creates virtual image
func (i Image) CreateVirtual(ctx context.Context, req CreateVirtualRequest) (uint64, error) {
err := req.validate()
err := validators.ValidateRequest(req)
if err != nil {
return 0, err
for _, validationError := range validators.GetErrors(err) {
return 0, validators.ValidationError(validationError)
}
}
url := "/cloudbroker/image/createVirtual"

View File

@@ -2,42 +2,34 @@ package image
import (
"context"
"errors"
"net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// Request struct for delete image
type DeleteRequest struct {
// ID of the image to delete
// Required: true
ImageID uint64 `url:"imageId" json:"imageId"`
ImageID uint64 `url:"imageId" json:"imageId" validate:"required"`
// Reason for action
// Required: true
Reason string `url:"reason" json:"reason"`
Reason string `url:"reason" json:"reason" validate:"required"`
// Whether to completely delete the image
// Required: false
Permanently bool `url:"permanently,omitempty" json:"permanently,omitempty"`
}
func (irq DeleteRequest) validate() error {
if irq.ImageID == 0 {
return errors.New("validation-error: field ImageID must be set")
}
if irq.Reason == "" {
return errors.New("validation-error: field Reason must be set")
}
return nil
}
// Delete deletes image by ID
func (i Image) Delete(ctx context.Context, req DeleteRequest) (bool, error) {
err := req.validate()
err := validators.ValidateRequest(req)
if err != nil {
return false, err
for _, validationError := range validators.GetErrors(err) {
return false, validators.ValidationError(validationError)
}
}
url := "/cloudbroker/image/delete"

View File

@@ -2,35 +2,30 @@ package image
import (
"context"
"errors"
"net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// Request struct for delete CD-ROM image
type DeleteCDROMImageRequest struct {
// ID of the CD-ROM image to delete
// Required: true
ImageID uint64 `url:"imageId" json:"imageId"`
ImageID uint64 `url:"imageId" json:"imageId" validate:"required"`
// Whether to completely delete the CD-ROM image, needs to be unused
// Required: true
Permanently bool `url:"permanently" json:"permanently"`
}
func (irq DeleteCDROMImageRequest) validate() error {
if irq.ImageID == 0 {
return errors.New("validation-error: field ImageID must be set")
}
return nil
// Required: false
Permanently bool `url:"permanently,omitempty" json:"permanently,omitempty"`
}
// DeleteCDROMImage delete a CD-ROM image
func (i Image) DeleteCDROMImage(ctx context.Context, req DeleteCDROMImageRequest) (bool, error) {
err := req.validate()
err := validators.ValidateRequest(req)
if err != nil {
return false, err
for _, validationError := range validators.GetErrors(err) {
return false, validators.ValidationError(validationError)
}
}
url := "/cloudbroker/image/deleteCDROMImage"

View File

@@ -2,39 +2,34 @@ package image
import (
"context"
"errors"
"net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// Request struct for delete images
type DeleteImagesRequest struct {
// List of images to be deleted
// Required: true
ImageIDs []uint64 `url:"imageIds" json:"imageIds"`
ImageIDs []uint64 `url:"imageIds" json:"imageIds" validate:"min=1"`
// Reason for action
// Required: true
// Required: false
Reason string `url:"reason,omitempty" json:"reason,omitempty"`
// Whether to completely delete the images
// Required: true
// Required: false
Permanently bool `url:"permanently,omitempty" json:"permanently,omitempty"`
}
func (irq DeleteImagesRequest) validate() error {
if len(irq.ImageIDs) == 0 {
return errors.New("validation-error: field ImageIDs must be set")
}
return nil
}
// DeleteImages deletes images
func (i Image) DeleteImages(ctx context.Context, req DeleteImagesRequest) (bool, error) {
err := req.validate()
err := validators.ValidateRequest(req)
if err != nil {
return false, err
for _, validationError := range validators.GetErrors(err) {
return false, validators.ValidationError(validationError)
}
}
url := "/cloudbroker/image/deleteImages"

View File

@@ -2,31 +2,26 @@ package image
import (
"context"
"errors"
"net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// Request struct for disable image
type DisableRequest struct {
// ID of image to be disabled
// Required: true
ImageID uint64 `url:"imageId" json:"imageId"`
}
func (irq DisableRequest) validate() error {
if irq.ImageID == 0 {
return errors.New("validation-error: field ImageID must be set")
}
return nil
ImageID uint64 `url:"imageId" json:"imageId" validate:"required"`
}
// Disable disables image
func (i Image) Disable(ctx context.Context, req DisableRequest) (bool, error) {
err := req.validate()
err := validators.ValidateRequest(req)
if err != nil {
return false, err
for _, validationError := range validators.GetErrors(err) {
return false, validators.ValidationError(validationError)
}
}
url := "/cloudbroker/image/disable"

View File

@@ -2,16 +2,17 @@ package image
import (
"context"
"errors"
"net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// Request struct for edit image
type EditRequest struct {
// ID of the image to edit
// Required: true
ImageID uint64 `url:"imageId" json:"imageId"`
ImageID uint64 `url:"imageId" json:"imageId" validate:"required"`
// Name for the image
// Required: false
@@ -38,19 +39,13 @@ type EditRequest struct {
Bootable bool `url:"bootable,omitempty" json:"bootable,omitempty"`
}
func (irq EditRequest) validate() error {
if irq.ImageID == 0 {
return errors.New("validation-error: field ImageID must be set")
}
return nil
}
// Edit edits an existing image
func (i Image) Edit(ctx context.Context, req EditRequest) (bool, error) {
err := req.validate()
err := validators.ValidateRequest(req)
if err != nil {
return false, err
for _, validationError := range validators.GetErrors(err) {
return false, validators.ValidationError(validationError)
}
}
url := "/cloudbroker/image/edit"

View File

@@ -2,31 +2,26 @@ package image
import (
"context"
"errors"
"net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// Request struct for enable image
type EnableRequest struct {
// ID of image to be enabled
// Required: true
ImageID uint64 `url:"imageId" json:"imageId"`
}
func (irq EnableRequest) validate() error {
if irq.ImageID == 0 {
return errors.New("validation-error: field ImageID must br set")
}
return nil
ImageID uint64 `url:"imageId" json:"imageId" validate:"required"`
}
// Enable enables image
func (i Image) Enable(ctx context.Context, req EnableRequest) (bool, error) {
err := req.validate()
err := validators.ValidateRequest(req)
if err != nil {
return false, err
for _, validationError := range validators.GetErrors(err) {
return false, validators.ValidationError(validationError)
}
}
url := "/cloudbroker/image/enable"

View File

@@ -3,30 +3,25 @@ package image
import (
"context"
"encoding/json"
"errors"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// Request struct for get image details
type GetRequest struct {
// ID of image
// Required: true
ImageID uint64 `url:"imageId" json:"imageId"`
}
func (irq GetRequest) validate() error {
if irq.ImageID == 0 {
return errors.New("validation-error: field ImageID must be set")
}
return nil
ImageID uint64 `url:"imageId" json:"imageId" validate:"required"`
}
// Get get image details by ID
func (i Image) Get(ctx context.Context, req GetRequest) (*RecordImage, error) {
err := req.validate()
err := validators.ValidateRequest(req)
if err != nil {
return nil, err
for _, validationError := range validators.GetErrors(err) {
return nil, validators.ValidationError(validationError)
}
}
url := "/cloudbroker/image/get"

View File

@@ -2,38 +2,30 @@ package image
import (
"context"
"errors"
"net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// Request struct for link virtual image to another image
type LinkRequest struct {
// ID of the virtual image
// Required: true
ImageID uint64 `url:"imageId" json:"imageId"`
ImageID uint64 `url:"imageId" json:"imageId" validate:"required"`
// ID of real image to link this virtual image to
// Required: true
TargetID uint64 `url:"targetId" json:"targetId"`
}
func (irq LinkRequest) validate() error {
if irq.ImageID == 0 {
return errors.New("validation-error: field ImageID must be set")
}
if irq.TargetID == 0 {
return errors.New("validation-error: field TargetID must be set")
}
return nil
TargetID uint64 `url:"targetId" json:"targetId" validate:"required"`
}
// Link links virtual image to another image in the platform
func (i Image) Link(ctx context.Context, req LinkRequest) (bool, error) {
err := req.validate()
err := validators.ValidateRequest(req)
if err != nil {
return false, err
for _, validationError := range validators.GetErrors(err) {
return false, validators.ValidationError(validationError)
}
}
url := "/cloudbroker/image/link"

View File

@@ -3,15 +3,16 @@ package image
import (
"context"
"encoding/json"
"errors"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// Request struct for get list stack
type ListStacksRequest struct {
// Image ID
// Required: true
ImageID uint64 `url:"imageId" json:"imageId"`
ImageID uint64 `url:"imageId" json:"imageId" validate:"required"`
// Page number
// Required: false
@@ -22,19 +23,13 @@ type ListStacksRequest struct {
Size uint64 `url:"size,omitempty" json:"size,omitempty"`
}
func (irq ListStacksRequest) validate() error {
if irq.ImageID == 0 {
return errors.New("validation-error: field ImageID must be set")
}
return nil
}
// ListStacks gets list stack by image ID
func (i Image) ListStacks(ctx context.Context, req ListStacksRequest) (ListStacks, error) {
err := req.validate()
err := validators.ValidateRequest(req)
if err != nil {
return nil, err
for _, validationError := range validators.GetErrors(err) {
return nil, validators.ValidationError(validationError)
}
}
url := "/cloudbroker/image/listStacks"

View File

@@ -2,38 +2,30 @@ package image
import (
"context"
"errors"
"net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// Request struct for rename image
type RenameRequest struct {
// ID of the virtual image to rename
// Required: true
ImageID uint64 `url:"imageId" json:"imageId"`
ImageID uint64 `url:"imageId" json:"imageId" validate:"required"`
// New name
// Required: true
Name string `url:"name" json:"name"`
}
func (irq RenameRequest) validate() error {
if irq.ImageID == 0 {
return errors.New("validation-error: field ImageID must be set")
}
if irq.Name == "" {
return errors.New("validation-error: field Name must be set")
}
return nil
Name string `url:"name" json:"name" validate:"required"`
}
// Rename renames image by ID
func (i Image) Rename(ctx context.Context, req RenameRequest) (bool, error) {
err := req.validate()
err := validators.ValidateRequest(req)
if err != nil {
return false, err
for _, validationError := range validators.GetErrors(err) {
return false, validators.ValidationError(validationError)
}
}
url := "/cloudbroker/image/rename"

View File

@@ -2,38 +2,30 @@ package image
import (
"context"
"errors"
"net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// Request struct for share image
type ShareRequest struct {
// ID of the image to share
// Required: true
ImageId uint64 `url:"imageId" json:"imageId"`
ImageId uint64 `url:"imageId" json:"imageId" validate:"required"`
// List of account IDs
// Required: true
AccountIDs []uint64 `url:"accounts" json:"accounts"`
}
func (irq ShareRequest) validate() error {
if irq.ImageId == 0 {
return errors.New("validation-error: field ImageID must be set")
}
if len(irq.AccountIDs) == 0 || irq.AccountIDs == nil {
return errors.New("validation-error: field must be set")
}
return nil
AccountIDs []uint64 `url:"accounts" json:"accounts" validate:"min=1"`
}
// Share shares image with accounts
func (i Image) Share(ctx context.Context, req ShareRequest) (bool, error) {
err := req.validate()
err := validators.ValidateRequest(req)
if err != nil {
return false, err
for _, validationError := range validators.GetErrors(err) {
return false, validators.ValidationError(validationError)
}
}
url := "/cloudbroker/image/share"

View File

@@ -2,7 +2,6 @@ package image
import (
"context"
"errors"
"net/http"
"strconv"
@@ -13,22 +12,22 @@ import (
type SyncCreateRequest struct {
// Name of the rescue disk
// Required: true
Name string `url:"name" json:"name"`
Name string `url:"name" json:"name" validate:"required"`
// URL where to download media from
// Required: true
URL string `url:"url" json:"url"`
URL string `url:"url" json:"url" validate:"required"`
// Grid (platform) ID where this template should be create in
// Required: true
GID uint64 `url:"gid" json:"gid"`
GID uint64 `url:"gid" json:"gid" validate:"required"`
// Boot type of image
// Should be one of:
// - bios
// - UEFI
// Required: true
BootType string `url:"boottype" json:"boottype"`
BootType string `url:"boottype" json:"boottype" validate:"imageBootType"`
// Image type
// Should be one of:
@@ -36,7 +35,7 @@ type SyncCreateRequest struct {
// - windows
// - or other
// Required: true
ImageType string `url:"imagetype" json:"imagetype"`
ImageType string `url:"imagetype" json:"imagetype" validate:"imageType"`
// Does this machine supports hot resize
// Required: false
@@ -80,55 +79,20 @@ type SyncCreateRequest struct {
// List of types of compute suitable for image
// Example: [ "KVM_X86" ]
// Required: true
Drivers []string `url:"drivers" json:"drivers"`
Drivers []string `url:"drivers" json:"drivers" validate:"min=1,max=2,imageDrivers"`
// Bootable image or not
// Required: false
Bootable bool `url:"bootable,omitempty" json:"bootable,omitempty"`
}
func (irq SyncCreateRequest) validate() error {
if irq.Name == "" {
return errors.New("validation-error: field Name must be set")
}
if irq.URL == "" {
return errors.New("validation-error: field URL must be set")
}
if irq.GID == 0 {
return errors.New("validation-error: field GID must be set")
}
if irq.BootType == "" {
return errors.New("validation-error: field BootType must be set")
}
if irq.ImageType == "" {
return errors.New("validation-error: field ImageType must be set")
}
validate := validators.StringInSlice(irq.BootType, []string{"bios", "uefi"})
if !validate {
return errors.New("validation-error: field BootType can be bios or uefi")
}
validate = validators.StringInSlice(irq.ImageType, []string{"windows", "linux", "other"})
if !validate {
return errors.New("validation-error: field ImageType can be windows, linux or other")
}
if len(irq.Drivers) == 0 || len(irq.Drivers) > 1 {
return errors.New("validation-error: field Drivers can not be empty or have 2 or more elements")
}
for _, v := range irq.Drivers {
validate := validators.StringInSlice(v, []string{"KVM_X86"})
if !validate {
return errors.New("validation-error: field Drivers can be KVM_X86 only")
}
}
return nil
}
// SyncCreate creates image from a media identified by URL (in synchronous mode)
func (i Image) SyncCreate(ctx context.Context, req SyncCreateRequest) (uint64, error) {
err := req.validate()
err := validators.ValidateRequest(req)
if err != nil {
return 0, err
for _, validationError := range validators.GetErrors(err) {
return 0, validators.ValidationError(validationError)
}
}
url := "/cloudbroker/image/syncCreateImage"

View File

@@ -2,35 +2,30 @@ package image
import (
"context"
"errors"
"net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// Request struct for update nodes
type UpdateNodesRequest struct {
// Image ID
// Required: true
ImageID uint64 `url:"imageId" json:"imageId"`
ImageID uint64 `url:"imageId" json:"imageId" validate:"required"`
// List of stacks
// Required: false
EnabledStacks []uint64 `url:"enabledStacks,omitempty" json:"enabledStacks,omitempty"`
}
func (irq UpdateNodesRequest) validate() error {
if irq.ImageID == 0 {
return errors.New("validation-error: field ImageID must be set")
}
return nil
}
// UpdateNodes udates image availability on nodes
func (i Image) UpdateNodes(ctx context.Context, req UpdateNodesRequest) (bool, error) {
err := req.validate()
err := validators.ValidateRequest(req)
if err != nil {
return false, err
for _, validationError := range validators.GetErrors(err) {
return false, validators.ValidationError(validationError)
}
}
url := "/cloudbroker/image/updateNodes"