From 86bd47d3fda64b5daa2e9e42e0790d92651cbfb0 Mon Sep 17 00:00:00 2001 From: Qu Xuan Date: Thu, 28 Jan 2021 16:19:07 +0800 Subject: [PATCH] fix(region): add huawei credit amount check --- pkg/multicloud/huawei/huawei.go | 32 +++++++++++----------- pkg/multicloud/huawei/provider/provider.go | 2 +- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/pkg/multicloud/huawei/huawei.go b/pkg/multicloud/huawei/huawei.go index 49ca71984e..7188a44b51 100644 --- a/pkg/multicloud/huawei/huawei.go +++ b/pkg/multicloud/huawei/huawei.go @@ -418,7 +418,9 @@ func (self *SHuaweiClient) GetIStorageById(id string) (cloudprovider.ICloudStora // 总账户余额 type SAccountBalance struct { - AvailableAmount float64 + AvailableAmount float64 + CreditAmount float64 + DesignatedAmount float64 } // 账户余额 @@ -428,8 +430,8 @@ type SBalance struct { Currency string `json:"currency"` AccountID string `json:"account_id"` AccountType int64 `json:"account_type"` - DesignatedAmount *int64 `json:"designated_amount,omitempty"` - CreditAmount *int64 `json:"credit_amount,omitempty"` + DesignatedAmount float64 `json:"designated_amount,omitempty"` + CreditAmount float64 `json:"credit_amount,omitempty"` MeasureUnit int64 `json:"measure_unit"` } @@ -440,35 +442,33 @@ func (self *SHuaweiClient) QueryAccountBalance() (*SAccountBalance, error) { return nil, err } - amount := float64(0) + result := &SAccountBalance{} for _, domain := range domains { - v, err := self.queryDomainBalance(domain.ID) + balances, err := self.queryDomainBalances(domain.ID) if err != nil { return nil, err } - - amount += v + for _, balance := range balances { + result.AvailableAmount += balance.Amount + result.CreditAmount += balance.CreditAmount + result.DesignatedAmount += balance.DesignatedAmount + } } - return &SAccountBalance{AvailableAmount: amount}, nil + return result, nil } // https://support.huaweicloud.com/api-bpconsole/zh-cn_topic_0075213309.html -func (self *SHuaweiClient) queryDomainBalance(domainId string) (float64, error) { +func (self *SHuaweiClient) queryDomainBalances(domainId string) ([]SBalance, error) { huawei, _ := self.newGeneralAPIClient() huawei.Balances.SetDomainId(domainId) balances := make([]SBalance, 0) err := doListAll(huawei.Balances.List, nil, &balances) if err != nil { - return 0, err + return nil, err } - amount := float64(0) - for _, balance := range balances { - amount += balance.Amount - } - - return amount, nil + return balances, nil } func (self *SHuaweiClient) GetVersion() string { diff --git a/pkg/multicloud/huawei/provider/provider.go b/pkg/multicloud/huawei/provider/provider.go index 6c13d5e3ff..4cf057f598 100644 --- a/pkg/multicloud/huawei/provider/provider.go +++ b/pkg/multicloud/huawei/provider/provider.go @@ -199,7 +199,7 @@ func (self *SHuaweiProvider) GetBalance() (float64, string, error) { return 0.0, api.CLOUD_PROVIDER_HEALTH_UNKNOWN, err } status := api.CLOUD_PROVIDER_HEALTH_NORMAL - if balance.AvailableAmount <= 0.0 { + if balance.AvailableAmount <= 0.0 && balance.CreditAmount <= 0.0 { status = api.CLOUD_PROVIDER_HEALTH_ARREARS } return balance.AvailableAmount, status, nil