You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
963 B
43 lines
963 B
package client
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"errors"
|
|
|
|
decortsdk "repository.basistech.ru/BASIS/decort-golang-sdk"
|
|
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/compute"
|
|
)
|
|
|
|
type Migrator interface {
|
|
Migrate(ctxOrigin context.Context, vmUUID, to uint64) (bool, error)
|
|
}
|
|
|
|
type migrator struct {
|
|
cfg *Config
|
|
client decortsdk.ClientInterface
|
|
}
|
|
|
|
func NewMigrator(cfg *Config, c decortsdk.ClientInterface) Migrator {
|
|
return &migrator{
|
|
cfg: cfg,
|
|
client: c,
|
|
}
|
|
}
|
|
|
|
func (m *migrator) Migrate(ctxOrigin context.Context, dxVMID, stackID uint64) (bool, error) {
|
|
req := compute.MigrateRequest{
|
|
ComputeID: dxVMID,
|
|
TargetStackID: stackID,
|
|
Force: false,
|
|
}
|
|
ctx, cancel := context.WithTimeout(ctxOrigin, m.cfg.QueryTimeout)
|
|
ok, err := m.client.CloudBroker().Compute().Migrate(ctx, req)
|
|
cancel()
|
|
if err != nil {
|
|
return false, errors.Join(err, fmt.Errorf("Migrate VM %d to Node %d", dxVMID, stackID))
|
|
}
|
|
return ok, nil
|
|
}
|