@@ -38,6 +38,7 @@ const (
3838 instancesInterfaces = "interfaces"
3939 instancesPutIntoServerGroup = "put_into_servergroup"
4040 instancesRemoveFromServerGroup = "remove_from_servergroup"
41+ instancesLiveMigration = "migrate"
4142)
4243
4344// InstancesService is an interface for creating and managing Instances with the EdgecenterCloud API.
@@ -58,6 +59,7 @@ type InstancesService interface {
5859 InterfaceList (context.Context , string ) ([]InstancePortInterface , * Response , error )
5960 PutIntoServerGroup (context.Context , string , * InstancePutIntoServerGroupRequest ) (* TaskResponse , * Response , error )
6061 RemoveFromServerGroup (context.Context , string ) (* TaskResponse , * Response , error )
62+ Migrate (context.Context , string , * InstanceMigrateRequest ) (* TaskResponse , * Response , error )
6163
6264 InstanceAction
6365 InstanceFlavor
@@ -262,6 +264,11 @@ type InstanceCheckFlavorVolumeRequest struct {
262264 Volumes []InstanceVolumeCreate `json:"volumes" required:"true" validate:"required,dive"`
263265}
264266
267+ // InstanceMigrateRequest represents a request to migrate an Instance to another availability zone.
268+ type InstanceMigrateRequest struct {
269+ AvailabilityZone string `json:"availability_zone" required:"true"`
270+ }
271+
265272type InstanceAvailableNames struct {
266273 AllowedBMNameWinTemplates []string `json:"allowed_bm_name_win_templates"`
267274 NameTemplatesLimited bool `json:"name_templates_limited"`
@@ -471,6 +478,37 @@ func (s *InstancesServiceOp) Delete(ctx context.Context, instanceID string, opts
471478 return tasks , resp , err
472479}
473480
481+ // Migrate the Instance to another availability zone.
482+ func (s * InstancesServiceOp ) Migrate (ctx context.Context , instanceID string , reqBody * InstanceMigrateRequest ) (* TaskResponse , * Response , error ) {
483+ if resp , err := isValidUUID (instanceID , "instanceID" ); err != nil {
484+ return nil , resp , err
485+ }
486+
487+ if resp , err := s .client .Validate (); err != nil {
488+ return nil , resp , err
489+ }
490+
491+ path := fmt .Sprintf (
492+ "%s/%s/%s" ,
493+ s .client .addProjectRegionPath (instancesBasePathV1 ),
494+ instanceID ,
495+ instancesLiveMigration ,
496+ )
497+
498+ req , err := s .client .NewRequest (ctx , http .MethodPost , path , reqBody )
499+ if err != nil {
500+ return nil , nil , err
501+ }
502+
503+ tasks := new (TaskResponse )
504+ resp , err := s .client .Do (ctx , req , tasks )
505+ if err != nil {
506+ return nil , resp , err
507+ }
508+
509+ return tasks , resp , err
510+ }
511+
474512// MetadataGet instance detailed metadata (tags).
475513func (s * InstancesServiceOp ) MetadataGet (ctx context.Context , instanceID string ) (* MetadataDetailed , * Response , error ) {
476514 if resp , err := isValidUUID (instanceID , "instanceID" ); err != nil {
0 commit comments