From 20e5fc584b16a0bc0102f7ef9c47a7f6db4bf10c Mon Sep 17 00:00:00 2001 From: ioito Date: Tue, 12 Apr 2022 14:29:37 +0800 Subject: [PATCH] fix(region): huawei api --- pkg/compute/models/guest_actions.go | 2 +- pkg/multicloud/huawei/instance.go | 56 +++++++++-------------------- 2 files changed, 18 insertions(+), 40 deletions(-) diff --git a/pkg/compute/models/guest_actions.go b/pkg/compute/models/guest_actions.go index c0a0318b2a..b50704180a 100644 --- a/pkg/compute/models/guest_actions.go +++ b/pkg/compute/models/guest_actions.go @@ -3812,7 +3812,7 @@ func (self *SGuest) doSaveRenewInfo( } if expireAt != nil && !expireAt.IsZero() { self.ExpiredAt = *expireAt - } else { + } else if bc != nil { self.BillingCycle = bc.String() self.ExpiredAt = bc.EndAt(self.ExpiredAt) } diff --git a/pkg/multicloud/huawei/instance.go b/pkg/multicloud/huawei/instance.go index 8ac3d5d81a..badb4d18dc 100644 --- a/pkg/multicloud/huawei/instance.go +++ b/pkg/multicloud/huawei/instance.go @@ -68,6 +68,7 @@ type Image struct { type VMMetadata struct { MeteringImageID string `json:"metering.image_id"` MeteringImagetype string `json:"metering.imagetype"` + MeteringOrderId string `json:"metering.order_id"` MeteringResourcespeccode string `json:"metering.resourcespeccode"` ImageName string `json:"image_name"` OSBit string `json:"os_bit"` @@ -336,6 +337,12 @@ func (self *SInstance) GetCreatedAt() time.Time { // charging_mode “0”:按需计费 “1”:按包年包月计费 func (self *SInstance) GetExpiredAt() time.Time { + if len(self.Metadata.MeteringOrderId) > 0 { + res, _ := self.host.zone.region.GetOrderResources(self.Metadata.MeteringOrderId, []string{self.ID}, true) + for i := range res { + return res[i].ExpireTime + } + } var expiredTime time.Time if self.Metadata.ChargingMode == "1" { res, err := self.host.zone.region.GetOrderResourceDetail(self.GetId()) @@ -948,47 +955,18 @@ func (self *SRegion) CreateInstance(name string, imageId string, instanceType st return "", err } - var ids []string - if params.Extendparam.ChargingMode == POST_PAID { - // 按需计费 - ids, err = self.GetAllSubTaskEntityIDs(self.ecsClient.Servers.ServiceType(), _id, "server_id") - } else { - // 包年包月 - err = cloudprovider.WaitCreated(10*time.Second, 300*time.Second, func() bool { - log.Debugf("WaitCreated %s", _id) - order, e := self.GetOrder(_id) - if e != nil { - log.Debugf(e.Error()) - return false - } - - if order.TotalSize == 0 { - return false - } - - ids, err = self.getAllResIdsByType(_id, RESOURCE_TYPE_VM) - if err != nil { - log.Debugln(err) - return false - } - - if len(ids) > 0 { - return true - } - - return false - }) - } - + ids, err := self.GetAllSubTaskEntityIDs(self.ecsClient.Servers.ServiceType(), _id, "server_id") if err != nil { - return "", err - } else if len(ids) == 0 { - return "", fmt.Errorf("CreateInstance job %s result is emtpy", _id) - } else if len(ids) == 1 { - return ids[0], nil - } else { - return "", fmt.Errorf("CreateInstance job %s mutliple instance id returned. %s", _id, ids) + return "", errors.Wrapf(err, "GetAllSubTaskEntityIDs(%s)", _id) } + + if len(ids) == 0 { + return "", fmt.Errorf("CreateInstance job %s result is emtpy", _id) + } + if len(ids) == 1 { + return ids[0], nil + } + return "", fmt.Errorf("CreateInstance job %s mutliple instance id returned. %s", _id, ids) } // https://support.huaweicloud.com/api-ecs/zh-cn_topic_0067161469.html