diff --git a/cmd/climc/climc.go b/cmd/climc/climc.go index fe5e4f8392..95a62e2c24 100644 --- a/cmd/climc/climc.go +++ b/cmd/climc/climc.go @@ -29,7 +29,7 @@ type BaseOptions struct { Debug bool `help:"Show debug information"` Version bool `help:"Show version"` Timeout int `default:"600" help:"Number of seconds to wait for a response"` - Insecure bool `default:"false" help:"Allow skip server cert verification if URL is https" short-token:"k"` + Insecure bool `default:"$YUNION_INSECURE|false" help:"Allow skip server cert verification if URL is https" short-token:"k"` CertFile string `default:"$YUNION_CERT_FILE" help:"certificate file"` KeyFile string `default:"$YUNION_KEY_FILE" help:"private key file"` diff --git a/pkg/compute/guestdrivers/managedvirtual.go b/pkg/compute/guestdrivers/managedvirtual.go index 0f054e822a..9edf528541 100644 --- a/pkg/compute/guestdrivers/managedvirtual.go +++ b/pkg/compute/guestdrivers/managedvirtual.go @@ -580,5 +580,9 @@ func (self *SManagedVirtualizedGuestDriver) RequestRenewInstance(guest *models.S if err != nil { return time.Time{}, err } + err = iVM.Refresh() + if err != nil { + return time.Time{}, err + } return iVM.GetExpiredAt(), nil } diff --git a/pkg/compute/models/guests.go b/pkg/compute/models/guests.go index 8f3e7f02f5..25cd278f68 100644 --- a/pkg/compute/models/guests.go +++ b/pkg/compute/models/guests.go @@ -3430,6 +3430,7 @@ func (manager *SGuestManager) DeleteExpiredPrepaidServers(ctx context.Context, u } for i := 0; i < len(guests); i += 1 { // fake delete expired prepaid servers + guests[i].SetDisableDelete(false) guests[i].StartDeleteGuestTask(ctx, userCred, "", false, false) } } diff --git a/pkg/compute/models/host_recycle.go b/pkg/compute/models/host_recycle.go index a51321f8d7..ccef50735e 100644 --- a/pkg/compute/models/host_recycle.go +++ b/pkg/compute/models/host_recycle.go @@ -726,3 +726,11 @@ func (self *SHost) DoSaveRenewInfo(ctx context.Context, userCred mcclient.TokenC db.OpsLog.LogEvent(self, db.ACT_RENEW, self.GetShortDesc(ctx), userCred) return nil } + +func (self *SHost) SyncWithRealPrepaidVM(ctx context.Context, userCred mcclient.TokenCredential, iVM cloudprovider.ICloudVM) error { + exp := iVM.GetExpiredAt() + if self.ExpiredAt != exp { + return self.DoSaveRenewInfo(ctx, userCred, nil, &exp) + } + return nil +} diff --git a/pkg/compute/models/hosts.go b/pkg/compute/models/hosts.go index 414fdfebb5..f004bbd9b6 100644 --- a/pkg/compute/models/hosts.go +++ b/pkg/compute/models/hosts.go @@ -1637,6 +1637,10 @@ func (self *SHost) SyncHostVMs(ctx context.Context, userCred mcclient.TokenCrede vhost := HostManager.GetHostByRealExternalId(added[i].GetGlobalId()) if vhost != nil { // this recycle vm is not build yet, skip synchronize + err = vhost.SyncWithRealPrepaidVM(ctx, userCred, added[i]) + if err != nil { + syncResult.AddError(err) + } continue } } diff --git a/pkg/compute/tasks/guest_renew_task.go b/pkg/compute/tasks/guest_renew_task.go index 4401fa2a26..9d8feab26c 100644 --- a/pkg/compute/tasks/guest_renew_task.go +++ b/pkg/compute/tasks/guest_renew_task.go @@ -2,11 +2,11 @@ package tasks import ( "context" + "fmt" "yunion.io/x/jsonutils" - - "fmt" "yunion.io/x/log" + "yunion.io/x/onecloud/pkg/cloudcommon/db" "yunion.io/x/onecloud/pkg/cloudcommon/db/taskman" "yunion.io/x/onecloud/pkg/compute/models" @@ -73,6 +73,8 @@ func (self *PrepaidRecycleHostRenewTask) OnInit(ctx context.Context, obj db.ISta return } + log.Debugf("expire before %s", iVM.GetExpiredAt()) + err = iVM.Renew(bc) if err != nil { msg := fmt.Sprintf("iVM.Renew fail %s", err) @@ -81,6 +83,16 @@ func (self *PrepaidRecycleHostRenewTask) OnInit(ctx context.Context, obj db.ISta return } + err = iVM.Refresh() + if err != nil { + msg := fmt.Sprintf("refresh after renew fail %s", err) + log.Errorf(msg) + self.SetStageFailed(ctx, msg) + return + } + + log.Debugf("expire after %s", iVM.GetExpiredAt()) + exp := iVM.GetExpiredAt() err = host.DoSaveRenewInfo(ctx, self.UserCred, &bc, &exp)