From 4fb3974367f5435985fe86d2dbae4b0aed4c129b Mon Sep 17 00:00:00 2001 From: Qiu Jian Date: Wed, 9 Jan 2019 16:42:59 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E5=AF=B9=E5=8C=85?= =?UTF-8?q?=E5=B9=B4=E5=8C=85=E6=9C=88=E4=B8=BB=E6=9C=BA=E7=BB=AD=E8=B4=B9?= =?UTF-8?q?=E5=90=8E=E6=B2=A1=E6=9C=89=E6=95=88=E6=9E=9C=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/climc/climc.go | 2 +- pkg/cloudprovider/retry.go | 16 ++++++++++++++++ pkg/compute/guestdrivers/managedvirtual.go | 4 ++++ pkg/compute/models/host_recycle.go | 8 ++++++++ pkg/compute/models/hosts.go | 4 ++++ pkg/compute/tasks/guest_renew_task.go | 16 ++++++++++++++-- 6 files changed, 47 insertions(+), 3 deletions(-) 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/cloudprovider/retry.go b/pkg/cloudprovider/retry.go index 7fb70fd6da..6c07b7b2ff 100644 --- a/pkg/cloudprovider/retry.go +++ b/pkg/cloudprovider/retry.go @@ -3,6 +3,8 @@ package cloudprovider import ( "strings" "time" + + "yunion.io/x/log" ) func IsError(err error, errs []string) bool { @@ -29,3 +31,17 @@ func RetryOnError(tryFunc func() error, errs []string, maxTries int) error { } return ErrTimeout } + +func Retry(tryFunc func() error, maxTries int) error { + tried := 0 + for tried < maxTries { + err := tryFunc() + if err == nil { + return nil + } + tried += 1 + log.Errorf("Tried %d fail %s", tried, err) + time.Sleep(10 * time.Duration(tried) * time.Second) + } + return ErrTimeout +} 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/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) From d809566780d8e066e201afe21f58b92d18dc71a4 Mon Sep 17 00:00:00 2001 From: Qiu Jian Date: Wed, 9 Jan 2019 16:44:58 +0800 Subject: [PATCH 2/3] minor fixes --- pkg/cloudprovider/retry.go | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/pkg/cloudprovider/retry.go b/pkg/cloudprovider/retry.go index 6c07b7b2ff..7fb70fd6da 100644 --- a/pkg/cloudprovider/retry.go +++ b/pkg/cloudprovider/retry.go @@ -3,8 +3,6 @@ package cloudprovider import ( "strings" "time" - - "yunion.io/x/log" ) func IsError(err error, errs []string) bool { @@ -31,17 +29,3 @@ func RetryOnError(tryFunc func() error, errs []string, maxTries int) error { } return ErrTimeout } - -func Retry(tryFunc func() error, maxTries int) error { - tried := 0 - for tried < maxTries { - err := tryFunc() - if err == nil { - return nil - } - tried += 1 - log.Errorf("Tried %d fail %s", tried, err) - time.Sleep(10 * time.Duration(tried) * time.Second) - } - return ErrTimeout -} From a14fad1b9cd1b7fcd3ede71ad35d2e120155fef1 Mon Sep 17 00:00:00 2001 From: Qiu Jian Date: Wed, 9 Jan 2019 18:26:42 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=EF=BC=9A=E6=B8=85?= =?UTF-8?q?=E7=90=86=E5=88=B0=E6=9C=9F=E5=8C=85=E5=B9=B4=E5=8C=85=E6=9C=88?= =?UTF-8?q?=E4=B8=BB=E6=9C=BA=E9=9C=80=E8=A6=81=E6=8A=8A=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E4=BF=9D=E6=8A=A4=E5=8E=BB=E6=8E=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/compute/models/guests.go | 1 + 1 file changed, 1 insertion(+) 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) } }