From ebe6e378e107ded6b31a20f63555c790bdcf704c Mon Sep 17 00:00:00 2001 From: TangBin Date: Wed, 13 Mar 2019 15:51:21 +0800 Subject: [PATCH 1/3] huawei instance renew bugfix --- pkg/util/huawei/instance.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/pkg/util/huawei/instance.go b/pkg/util/huawei/instance.go index 649889936b..053d15bf53 100644 --- a/pkg/util/huawei/instance.go +++ b/pkg/util/huawei/instance.go @@ -1139,7 +1139,17 @@ func (self *SRegion) RenewInstance(instanceId string, bc billing.SBillingCycle) return fmt.Errorf("invalid renew period %s month,must be 1~11 month or 1~3 year", month) } - _, err := self.ecsClient.Orders.RenewPeriodResource(params) + domainId, err := self.getDomianId() + if err != nil { + return err + } + + err = self.ecsClient.Orders.SetDomainId(domainId) + if err != nil { + return err + } + + _, err = self.ecsClient.Orders.RenewPeriodResource(params) return err } From caf6540e61b723cc0c645e6d7c291c54f2d5e4ad Mon Sep 17 00:00:00 2001 From: TangBin Date: Wed, 13 Mar 2019 16:52:38 +0800 Subject: [PATCH 2/3] wait huawei instance renew sucess --- pkg/util/huawei/instance.go | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/pkg/util/huawei/instance.go b/pkg/util/huawei/instance.go index 053d15bf53..b3b9718657 100644 --- a/pkg/util/huawei/instance.go +++ b/pkg/util/huawei/instance.go @@ -1120,6 +1120,14 @@ func (self *SRegion) DetachDisk(instanceId string, diskId string) error { // 只支持传入主资源ID, 根据“查询客户包周期资源列表”接口响应参数中的“is_main_resource”来标识。 // expire_mode 0:进入宽限期 1:转按需 2:自动退订 3:自动续订(当前只支持ECS、EVS和VPC) func (self *SRegion) RenewInstance(instanceId string, bc billing.SBillingCycle) error { + // 记录未续费前的过期时间 + ins, err := self.GetInstanceByID(instanceId) + if err != nil { + return err + } + + oldExpired := ins.GetExpiredAt() + params := jsonutils.NewDict() res := jsonutils.NewArray() res.Add(jsonutils.NewString(instanceId)) @@ -1150,7 +1158,26 @@ func (self *SRegion) RenewInstance(instanceId string, bc billing.SBillingCycle) } _, err = self.ecsClient.Orders.RenewPeriodResource(params) - return err + if err != nil { + return err + } + + // 这里等待更新实例过期时间 + err = cloudprovider.WaitCreated(5*time.Second, 60*time.Second, func() bool { + newExipred := ins.GetExpiredAt() + if newExipred.Sub(oldExpired).Seconds() > 0 { + return true + } + + return false + }) + + // RenewPeriodResource没报错实际上已经表示续费成功.因此如果等待更新超时,抛出错误日志即可 + if err != nil { + log.Debugf(err.Error()) + } + + return nil } // https://support.huaweicloud.com/api-ecs/zh-cn_topic_0065817702.html From 5624a294daf9b9fb85d76c5523b7fed939accfbf Mon Sep 17 00:00:00 2001 From: TangBin Date: Thu, 14 Mar 2019 11:05:37 +0800 Subject: [PATCH 3/3] optimize huawei renew --- pkg/util/huawei/instance.go | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/pkg/util/huawei/instance.go b/pkg/util/huawei/instance.go index b3b9718657..8f9db68fe4 100644 --- a/pkg/util/huawei/instance.go +++ b/pkg/util/huawei/instance.go @@ -1163,21 +1163,14 @@ func (self *SRegion) RenewInstance(instanceId string, bc billing.SBillingCycle) } // 这里等待更新实例过期时间 - err = cloudprovider.WaitCreated(5*time.Second, 60*time.Second, func() bool { + return cloudprovider.WaitCreated(15*time.Second, 180*time.Second, func() bool { newExipred := ins.GetExpiredAt() - if newExipred.Sub(oldExpired).Seconds() > 0 { + if newExipred.After(oldExpired) { return true } return false }) - - // RenewPeriodResource没报错实际上已经表示续费成功.因此如果等待更新超时,抛出错误日志即可 - if err != nil { - log.Debugf(err.Error()) - } - - return nil } // https://support.huaweicloud.com/api-ecs/zh-cn_topic_0065817702.html