mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
fix(region): balance currency
This commit is contained in:
@@ -84,7 +84,7 @@ require (
|
||||
k8s.io/client-go v0.19.3
|
||||
k8s.io/cluster-bootstrap v0.19.3
|
||||
moul.io/http2curl/v2 v2.3.0
|
||||
yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20230726030452-d5f9e212ee4b
|
||||
yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20230727061525-c536b9142e2a
|
||||
yunion.io/x/executor v0.0.0-20230705125604-c5ac3141db32
|
||||
yunion.io/x/jsonutils v1.0.1-0.20230613121553-0f3b41e2ef19
|
||||
yunion.io/x/log v1.0.1-0.20230411060016-feb3f46ab361
|
||||
|
||||
@@ -1174,8 +1174,8 @@ sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK
|
||||
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
|
||||
sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q=
|
||||
sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
|
||||
yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20230726030452-d5f9e212ee4b h1:vwsiN/JVzhuXNXh7+cg/RvLdVO02uaYDtjB0DNDQrGc=
|
||||
yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20230726030452-d5f9e212ee4b/go.mod h1:2sgCN7nRPQL3woLfdgqLDd92vwAHqtlz3KKiHxC5BAw=
|
||||
yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20230727061525-c536b9142e2a h1:wqetb7eCo6AjW82dM4i28JerwlkagM4n8jSl7UiEIHs=
|
||||
yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20230727061525-c536b9142e2a/go.mod h1:2sgCN7nRPQL3woLfdgqLDd92vwAHqtlz3KKiHxC5BAw=
|
||||
yunion.io/x/executor v0.0.0-20230705125604-c5ac3141db32 h1:v7POYkQwo1XzOxBoIoRVr/k0V9Y5JyjpshlIFa9raug=
|
||||
yunion.io/x/executor v0.0.0-20230705125604-c5ac3141db32/go.mod h1:Uxuou9WQIeJXNpy7t2fPLL0BYLvLiMvGQwY7Qc6aSws=
|
||||
yunion.io/x/jsonutils v0.0.0-20190625054549-a964e1e8a051/go.mod h1:4N0/RVzsYL3kH3WE/H1BjUQdFiWu50JGCFQuuy+Z634=
|
||||
|
||||
@@ -214,6 +214,10 @@ type CloudaccountCreateInput struct {
|
||||
|
||||
// 跳过指定资源同步
|
||||
SkipSyncResources SkipSyncResources `json:"skip_sync_resources"`
|
||||
|
||||
// 货币类型
|
||||
// enmu: CNY, USD
|
||||
Currency string `json:"currency"`
|
||||
}
|
||||
|
||||
type SProjectMappingResourceInput struct {
|
||||
@@ -384,6 +388,8 @@ type CloudaccountUpdateInput struct {
|
||||
RemoveSkipSyncResources []string `json:"remove_skip_sync_resources"`
|
||||
|
||||
ReadOnly bool `json:"read_only"`
|
||||
|
||||
Currency string `json:"currency"`
|
||||
}
|
||||
|
||||
type CloudaccountPerformPublicInput struct {
|
||||
|
||||
@@ -115,6 +115,10 @@ type SCloudaccount struct {
|
||||
// example: 124.2
|
||||
Balance float64 `list:"domain" width:"20" precision:"6"`
|
||||
|
||||
// 账户余额货币类型
|
||||
// enmu: CNY, USD
|
||||
Currency string `width:"5" charset:"utf8" nullable:"false" list:"domain" create:"domain_optional" update:"domain"`
|
||||
|
||||
// 上次账号探测时间
|
||||
ProbeAt time.Time `list:"domain"`
|
||||
|
||||
@@ -2047,16 +2051,16 @@ func (account *SCloudaccount) probeAccountStatus(ctx context.Context, userCred m
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "account.getProviderInternal")
|
||||
}
|
||||
balance, status, err := manager.GetBalance()
|
||||
balance, err := manager.GetBalance()
|
||||
if err != nil {
|
||||
switch err {
|
||||
case cloudprovider.ErrNotSupported:
|
||||
status = api.CLOUD_PROVIDER_HEALTH_NORMAL
|
||||
balance.Status = api.CLOUD_PROVIDER_HEALTH_NORMAL
|
||||
case cloudprovider.ErrNoBalancePermission:
|
||||
status = api.CLOUD_PROVIDER_HEALTH_NO_PERMISSION
|
||||
balance.Status = api.CLOUD_PROVIDER_HEALTH_NO_PERMISSION
|
||||
default:
|
||||
status = api.CLOUD_PROVIDER_HEALTH_UNKNOWN
|
||||
if account.Status != status {
|
||||
balance.Status = api.CLOUD_PROVIDER_HEALTH_UNKNOWN
|
||||
if account.Status != balance.Status {
|
||||
logclient.AddSimpleActionLog(account, logclient.ACT_PROBE, errors.Wrapf(err, "GetBalance"), userCred, false)
|
||||
}
|
||||
}
|
||||
@@ -2073,14 +2077,15 @@ func (account *SCloudaccount) probeAccountStatus(ctx context.Context, userCred m
|
||||
isPublic := factory.IsPublicCloud()
|
||||
account.IsPublicCloud = tristate.NewFromBool(isPublic)
|
||||
account.IsOnPremise = factory.IsOnPremise()
|
||||
account.Balance = balance
|
||||
account.Balance = balance.Amount
|
||||
if !options.Options.CloudaccountHealthStatusCheck {
|
||||
status = api.CLOUD_PROVIDER_HEALTH_NORMAL
|
||||
balance.Status = api.CLOUD_PROVIDER_HEALTH_NORMAL
|
||||
}
|
||||
if len(account.Currency) == 0 && len(balance.Currency) > 0 {
|
||||
account.Currency = balance.Currency
|
||||
}
|
||||
// if len(account.AccountId) == 0 || account.AccountId != manager.GetAccountId() {
|
||||
account.AccountId = manager.GetAccountId()
|
||||
// }
|
||||
account.HealthStatus = status
|
||||
account.HealthStatus = balance.Status
|
||||
account.ProbeAt = timeutils.UtcNow()
|
||||
account.Version = version
|
||||
account.Sysinfo = sysInfo
|
||||
|
||||
@@ -111,8 +111,11 @@ func (self *SCloudpodsProvider) GetAccountId() string {
|
||||
return self.client.GetAccountId()
|
||||
}
|
||||
|
||||
func (self *SCloudpodsProvider) GetBalance() (float64, string, error) {
|
||||
return 0.0, api.CLOUD_PROVIDER_HEALTH_NORMAL, cloudprovider.ErrNotSupported
|
||||
func (self *SCloudpodsProvider) GetBalance() (*cloudprovider.SBalanceInfo, error) {
|
||||
return &cloudprovider.SBalanceInfo{
|
||||
Currency: "CNY",
|
||||
Status: api.CLOUD_PROVIDER_HEALTH_NORMAL,
|
||||
}, cloudprovider.ErrNotSupported
|
||||
}
|
||||
|
||||
func (self *SCloudpodsProvider) GetBucketCannedAcls(regionId string) []string {
|
||||
|
||||
@@ -143,6 +143,8 @@ type SCloudAccountCreateBaseOptions struct {
|
||||
EnableResourceSync bool
|
||||
|
||||
SkipSyncResources []string `help:"Skip sync resource, etc snapshot"`
|
||||
|
||||
Currency string `choices:"CNY|USD"`
|
||||
}
|
||||
|
||||
type SVMwareCloudAccountCreateOptions struct {
|
||||
@@ -639,6 +641,8 @@ type SCloudAccountUpdateBaseOptions struct {
|
||||
RemoveSkipSyncResources []string
|
||||
|
||||
Desc string `help:"Description" json:"description" token:"desc"`
|
||||
|
||||
Currency string `choices:"CNY|USD"`
|
||||
}
|
||||
|
||||
func (opts *SCloudAccountUpdateBaseOptions) Params() (jsonutils.JSONObject, error) {
|
||||
|
||||
Vendored
+1
-1
@@ -1439,7 +1439,7 @@ sigs.k8s.io/structured-merge-diff/v4/value
|
||||
# sigs.k8s.io/yaml v1.2.0
|
||||
## explicit; go 1.12
|
||||
sigs.k8s.io/yaml
|
||||
# yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20230726030452-d5f9e212ee4b
|
||||
# yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20230727061525-c536b9142e2a
|
||||
## explicit; go 1.18
|
||||
yunion.io/x/cloudmux/pkg/apis
|
||||
yunion.io/x/cloudmux/pkg/apis/billing
|
||||
|
||||
+7
-1
@@ -247,6 +247,12 @@ type ICloudProviderFactory interface {
|
||||
GetAccountIdEqualizer() func(origin, now string) bool
|
||||
}
|
||||
|
||||
type SBalanceInfo struct {
|
||||
Currency string
|
||||
Amount float64
|
||||
Status string
|
||||
}
|
||||
|
||||
type ICloudProvider interface {
|
||||
GetFactory() ICloudProviderFactory
|
||||
|
||||
@@ -261,7 +267,7 @@ type ICloudProvider interface {
|
||||
|
||||
GetOnPremiseIRegion() (ICloudRegion, error)
|
||||
|
||||
GetBalance() (float64, string, error)
|
||||
GetBalance() (*SBalanceInfo, error)
|
||||
|
||||
GetSubAccounts() ([]SSubAccount, error)
|
||||
GetAccountId() string
|
||||
|
||||
+9
-6
@@ -274,20 +274,23 @@ func (self *SAliyunProvider) GetIRegionById(extId string) (cloudprovider.ICloudR
|
||||
return self.client.GetIRegionById(extId)
|
||||
}
|
||||
|
||||
func (self *SAliyunProvider) GetBalance() (float64, string, error) {
|
||||
func (self *SAliyunProvider) GetBalance() (*cloudprovider.SBalanceInfo, error) {
|
||||
ret := &cloudprovider.SBalanceInfo{Currency: "CNY", Status: api.CLOUD_PROVIDER_HEALTH_UNKNOWN}
|
||||
balance, err := self.client.QueryAccountBalance()
|
||||
if err != nil {
|
||||
return 0.0, api.CLOUD_PROVIDER_HEALTH_UNKNOWN, err
|
||||
return ret, err
|
||||
}
|
||||
status := api.CLOUD_PROVIDER_HEALTH_NORMAL
|
||||
ret.Status = api.CLOUD_PROVIDER_HEALTH_NORMAL
|
||||
ret.Currency = balance.Currency
|
||||
if balance.CreditAmount+balance.MybankCreditAmount <= 0 {
|
||||
if balance.AvailableAmount < 0 {
|
||||
status = api.CLOUD_PROVIDER_HEALTH_ARREARS
|
||||
ret.Status = api.CLOUD_PROVIDER_HEALTH_ARREARS
|
||||
} else if balance.AvailableAmount < 100 {
|
||||
status = api.CLOUD_PROVIDER_HEALTH_INSUFFICIENT
|
||||
ret.Status = api.CLOUD_PROVIDER_HEALTH_INSUFFICIENT
|
||||
}
|
||||
}
|
||||
return balance.AvailableAmount, status, nil
|
||||
ret.Amount = balance.AvailableAmount
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func (self *SAliyunProvider) GetIProjects() ([]cloudprovider.ICloudProject, error) {
|
||||
|
||||
+6
-2
@@ -161,8 +161,12 @@ func (self *SApsaraProvider) GetIRegionById(extId string) (cloudprovider.ICloudR
|
||||
return self.client.GetIRegionById(extId)
|
||||
}
|
||||
|
||||
func (self *SApsaraProvider) GetBalance() (float64, string, error) {
|
||||
return 0, api.CLOUD_PROVIDER_HEALTH_NORMAL, nil
|
||||
func (self *SApsaraProvider) GetBalance() (*cloudprovider.SBalanceInfo, error) {
|
||||
return &cloudprovider.SBalanceInfo{
|
||||
Amount: 0.0,
|
||||
Currency: "CNY",
|
||||
Status: api.CLOUD_PROVIDER_HEALTH_NORMAL,
|
||||
}, cloudprovider.ErrNotSupported
|
||||
}
|
||||
|
||||
func (self *SApsaraProvider) GetIProjects() ([]cloudprovider.ICloudProject, error) {
|
||||
|
||||
+10
-2
@@ -271,8 +271,16 @@ func (self *SAwsProvider) GetIRegionById(id string) (cloudprovider.ICloudRegion,
|
||||
return self.client.GetIRegionById(id)
|
||||
}
|
||||
|
||||
func (self *SAwsProvider) GetBalance() (float64, string, error) {
|
||||
return 0.0, api.CLOUD_PROVIDER_HEALTH_NORMAL, cloudprovider.ErrNotSupported
|
||||
func (self *SAwsProvider) GetBalance() (*cloudprovider.SBalanceInfo, error) {
|
||||
ret := &cloudprovider.SBalanceInfo{
|
||||
Amount: 0.0,
|
||||
Currency: "CNY",
|
||||
Status: api.CLOUD_PROVIDER_HEALTH_NORMAL,
|
||||
}
|
||||
if self.client.GetAccessEnv() == api.CLOUD_ACCESS_ENV_AWS_GLOBAL {
|
||||
ret.Currency = "USD"
|
||||
}
|
||||
return ret, cloudprovider.ErrNotSupported
|
||||
}
|
||||
|
||||
func (self *SAwsProvider) GetIProjects() ([]cloudprovider.ICloudProject, error) {
|
||||
|
||||
+10
-2
@@ -191,8 +191,16 @@ func (self *SAzureProvider) GetIRegionById(id string) (cloudprovider.ICloudRegio
|
||||
return self.client.GetIRegionById(id)
|
||||
}
|
||||
|
||||
func (self *SAzureProvider) GetBalance() (float64, string, error) {
|
||||
return 0.0, api.CLOUD_PROVIDER_HEALTH_NORMAL, cloudprovider.ErrNotSupported
|
||||
func (self *SAzureProvider) GetBalance() (*cloudprovider.SBalanceInfo, error) {
|
||||
ret := &cloudprovider.SBalanceInfo{
|
||||
Amount: 0.0,
|
||||
Currency: "CNY",
|
||||
Status: api.CLOUD_PROVIDER_HEALTH_UNKNOWN,
|
||||
}
|
||||
if self.client.GetAccessEnv() == api.CLOUD_ACCESS_ENV_AZURE_GLOBAL {
|
||||
ret.Currency = "USD"
|
||||
}
|
||||
return ret, cloudprovider.ErrNotSupported
|
||||
}
|
||||
|
||||
func (self *SAzureProvider) GetIProjects() ([]cloudprovider.ICloudProject, error) {
|
||||
|
||||
+6
-2
@@ -140,8 +140,12 @@ func (self *SBingoCloudProvider) GetIRegionById(id string) (cloudprovider.ICloud
|
||||
return self.client.GetIRegionById(id)
|
||||
}
|
||||
|
||||
func (self *SBingoCloudProvider) GetBalance() (float64, string, error) {
|
||||
return 0.0, api.CLOUD_PROVIDER_HEALTH_NORMAL, cloudprovider.ErrNotSupported
|
||||
func (self *SBingoCloudProvider) GetBalance() (*cloudprovider.SBalanceInfo, error) {
|
||||
return &cloudprovider.SBalanceInfo{
|
||||
Amount: 0.0,
|
||||
Currency: "CNY",
|
||||
Status: api.CLOUD_PROVIDER_HEALTH_NORMAL,
|
||||
}, cloudprovider.ErrNotSupported
|
||||
}
|
||||
|
||||
func (self *SBingoCloudProvider) GetIProjects() ([]cloudprovider.ICloudProject, error) {
|
||||
|
||||
+6
-2
@@ -166,8 +166,12 @@ func (self *SCtyunProvider) GetIRegionById(id string) (cloudprovider.ICloudRegio
|
||||
return self.client.GetIRegionById(id)
|
||||
}
|
||||
|
||||
func (self *SCtyunProvider) GetBalance() (float64, string, error) {
|
||||
return 0.0, api.CLOUD_PROVIDER_HEALTH_NORMAL, cloudprovider.ErrNotSupported
|
||||
func (self *SCtyunProvider) GetBalance() (*cloudprovider.SBalanceInfo, error) {
|
||||
return &cloudprovider.SBalanceInfo{
|
||||
Amount: 0.0,
|
||||
Currency: "CNY",
|
||||
Status: api.CLOUD_PROVIDER_HEALTH_UNKNOWN,
|
||||
}, cloudprovider.ErrNotSupported
|
||||
}
|
||||
|
||||
func (self *SCtyunProvider) GetIProjects() ([]cloudprovider.ICloudProject, error) {
|
||||
|
||||
+6
-2
@@ -149,8 +149,12 @@ func (p *SEcloudProvider) GetIRegionById(id string) (cloudprovider.ICloudRegion,
|
||||
return iregion, nil
|
||||
}
|
||||
|
||||
func (p *SEcloudProvider) GetBalance() (float64, string, error) {
|
||||
return 0.0, api.CLOUD_PROVIDER_HEALTH_NORMAL, cloudprovider.ErrNotSupported
|
||||
func (p *SEcloudProvider) GetBalance() (*cloudprovider.SBalanceInfo, error) {
|
||||
return &cloudprovider.SBalanceInfo{
|
||||
Amount: 0.0,
|
||||
Currency: "CNY",
|
||||
Status: api.CLOUD_PROVIDER_HEALTH_NORMAL,
|
||||
}, cloudprovider.ErrNotSupported
|
||||
}
|
||||
|
||||
func (p *SEcloudProvider) GetIProjects() ([]cloudprovider.ICloudProject, error) {
|
||||
|
||||
+6
-2
@@ -206,8 +206,12 @@ func (self *SESXiProvider) GetIRegionById(id string) (cloudprovider.ICloudRegion
|
||||
return nil, cloudprovider.ErrNotSupported
|
||||
}
|
||||
|
||||
func (self *SESXiProvider) GetBalance() (float64, string, error) {
|
||||
return 0.0, api.CLOUD_PROVIDER_HEALTH_NORMAL, cloudprovider.ErrNotSupported
|
||||
func (self *SESXiProvider) GetBalance() (*cloudprovider.SBalanceInfo, error) {
|
||||
return &cloudprovider.SBalanceInfo{
|
||||
Amount: 0.0,
|
||||
Currency: "CNY",
|
||||
Status: api.CLOUD_PROVIDER_HEALTH_NORMAL,
|
||||
}, cloudprovider.ErrNotSupported
|
||||
}
|
||||
|
||||
func (self *SESXiProvider) GetOnPremiseIRegion() (cloudprovider.ICloudRegion, error) {
|
||||
|
||||
+6
-2
@@ -224,8 +224,12 @@ func (self *SGoogleProvider) GetIRegionById(extId string) (cloudprovider.ICloudR
|
||||
return self.client.GetIRegionById(extId)
|
||||
}
|
||||
|
||||
func (self *SGoogleProvider) GetBalance() (float64, string, error) {
|
||||
return 0.0, api.CLOUD_PROVIDER_HEALTH_NORMAL, cloudprovider.ErrNotSupported
|
||||
func (self *SGoogleProvider) GetBalance() (*cloudprovider.SBalanceInfo, error) {
|
||||
return &cloudprovider.SBalanceInfo{
|
||||
Amount: 0.0,
|
||||
Currency: "USD",
|
||||
Status: api.CLOUD_PROVIDER_HEALTH_NORMAL,
|
||||
}, cloudprovider.ErrNotSupported
|
||||
}
|
||||
|
||||
func (self *SGoogleProvider) GetIProjects() ([]cloudprovider.ICloudProject, error) {
|
||||
|
||||
+6
-2
@@ -217,8 +217,12 @@ func (self *SHCSOProvider) GetIRegionById(extId string) (cloudprovider.ICloudReg
|
||||
return self.client.GetIRegionById(extId)
|
||||
}
|
||||
|
||||
func (self *SHCSOProvider) GetBalance() (float64, string, error) {
|
||||
return 0.0, api.CLOUD_PROVIDER_HEALTH_NORMAL, nil
|
||||
func (self *SHCSOProvider) GetBalance() (*cloudprovider.SBalanceInfo, error) {
|
||||
return &cloudprovider.SBalanceInfo{
|
||||
Amount: 0.0,
|
||||
Currency: "CNY",
|
||||
Status: api.CLOUD_PROVIDER_HEALTH_NORMAL,
|
||||
}, cloudprovider.ErrNotSupported
|
||||
}
|
||||
|
||||
func (self *SHCSOProvider) GetSubAccounts() ([]cloudprovider.SSubAccount, error) {
|
||||
|
||||
+7
-5
@@ -190,16 +190,18 @@ func (self *SHuaweiProvider) GetIRegionById(extId string) (cloudprovider.ICloudR
|
||||
return self.client.GetIRegionById(extId)
|
||||
}
|
||||
|
||||
func (self *SHuaweiProvider) GetBalance() (float64, string, error) {
|
||||
func (self *SHuaweiProvider) GetBalance() (*cloudprovider.SBalanceInfo, error) {
|
||||
ret := &cloudprovider.SBalanceInfo{Currency: "CNY", Status: api.CLOUD_PROVIDER_HEALTH_UNKNOWN}
|
||||
balance, err := self.client.QueryAccountBalance()
|
||||
if err != nil {
|
||||
return 0.0, api.CLOUD_PROVIDER_HEALTH_UNKNOWN, err
|
||||
return ret, err
|
||||
}
|
||||
status := api.CLOUD_PROVIDER_HEALTH_NORMAL
|
||||
ret.Amount = balance.AvailableAmount
|
||||
ret.Status = api.CLOUD_PROVIDER_HEALTH_NORMAL
|
||||
if balance.AvailableAmount < 0.0 && balance.CreditAmount < 0.0 {
|
||||
status = api.CLOUD_PROVIDER_HEALTH_ARREARS
|
||||
ret.Status = api.CLOUD_PROVIDER_HEALTH_ARREARS
|
||||
}
|
||||
return balance.AvailableAmount, status, nil
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func (self *SHuaweiProvider) GetSubAccounts() ([]cloudprovider.SSubAccount, error) {
|
||||
|
||||
+14
-8
@@ -144,18 +144,24 @@ func (p *SJdcloudProvider) GetIRegionById(id string) (cloudprovider.ICloudRegion
|
||||
return nil, cloudprovider.ErrNotFound
|
||||
}
|
||||
|
||||
func (p *SJdcloudProvider) GetBalance() (float64, string, error) {
|
||||
func (p *SJdcloudProvider) GetBalance() (*cloudprovider.SBalanceInfo, error) {
|
||||
ret := &cloudprovider.SBalanceInfo{
|
||||
Amount: 0.0,
|
||||
Currency: "CNY",
|
||||
Status: api.CLOUD_PROVIDER_HEALTH_NORMAL,
|
||||
}
|
||||
balance, err := p.client.DescribeAccountAmount()
|
||||
if err != nil {
|
||||
return 0.0, api.CLOUD_PROVIDER_HEALTH_NO_PERMISSION, errors.Wrap(err, "DescribeAccountAmount")
|
||||
ret.Status = api.CLOUD_PROVIDER_HEALTH_NO_PERMISSION
|
||||
return ret, errors.Wrap(err, "DescribeAccountAmount")
|
||||
}
|
||||
amount, _ := jsonutils.Marshal(balance).Float("totalAmount")
|
||||
if amount < 0 {
|
||||
return amount, api.CLOUD_PROVIDER_HEALTH_ARREARS, nil
|
||||
} else if amount < 50 {
|
||||
return amount, api.CLOUD_PROVIDER_HEALTH_INSUFFICIENT, nil
|
||||
ret.Amount, _ = jsonutils.Marshal(balance).Float("totalAmount")
|
||||
if ret.Amount < 0 {
|
||||
ret.Status = api.CLOUD_PROVIDER_HEALTH_ARREARS
|
||||
} else if ret.Amount < 50 {
|
||||
ret.Status = api.CLOUD_PROVIDER_HEALTH_INSUFFICIENT
|
||||
}
|
||||
return amount, api.CLOUD_PROVIDER_HEALTH_NORMAL, nil
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func (p *SJdcloudProvider) GetIProjects() ([]cloudprovider.ICloudProject, error) {
|
||||
|
||||
+6
-2
@@ -173,8 +173,12 @@ func (self *SNutanixProvider) GetIRegionById(id string) (cloudprovider.ICloudReg
|
||||
return nil, cloudprovider.ErrNotFound
|
||||
}
|
||||
|
||||
func (self *SNutanixProvider) GetBalance() (float64, string, error) {
|
||||
return 0.0, api.CLOUD_PROVIDER_HEALTH_NORMAL, cloudprovider.ErrNotSupported
|
||||
func (self *SNutanixProvider) GetBalance() (*cloudprovider.SBalanceInfo, error) {
|
||||
return &cloudprovider.SBalanceInfo{
|
||||
Amount: 0.0,
|
||||
Currency: "CNY",
|
||||
Status: api.CLOUD_PROVIDER_HEALTH_NORMAL,
|
||||
}, cloudprovider.ErrNotSupported
|
||||
}
|
||||
|
||||
func (self *SNutanixProvider) GetIProjects() ([]cloudprovider.ICloudProject, error) {
|
||||
|
||||
+6
-2
@@ -119,8 +119,12 @@ func (self *SObjectStoreProvider) GetIRegionById(id string) (cloudprovider.IClou
|
||||
return nil, cloudprovider.ErrNotSupported
|
||||
}
|
||||
|
||||
func (self *SObjectStoreProvider) GetBalance() (float64, string, error) {
|
||||
return 0.0, api.CLOUD_PROVIDER_HEALTH_NORMAL, cloudprovider.ErrNotSupported
|
||||
func (self *SObjectStoreProvider) GetBalance() (*cloudprovider.SBalanceInfo, error) {
|
||||
return &cloudprovider.SBalanceInfo{
|
||||
Amount: 0.0,
|
||||
Currency: "CNY",
|
||||
Status: api.CLOUD_PROVIDER_HEALTH_NORMAL,
|
||||
}, cloudprovider.ErrNotSupported
|
||||
}
|
||||
|
||||
func (self *SObjectStoreProvider) GetOnPremiseIRegion() (cloudprovider.ICloudRegion, error) {
|
||||
|
||||
+6
-2
@@ -190,8 +190,12 @@ func (self *SOpenStackProvider) GetIRegionById(extId string) (cloudprovider.IClo
|
||||
return self.client.GetIRegionById(extId)
|
||||
}
|
||||
|
||||
func (self *SOpenStackProvider) GetBalance() (float64, string, error) {
|
||||
return 0.0, api.CLOUD_PROVIDER_HEALTH_UNKNOWN, cloudprovider.ErrNotSupported
|
||||
func (self *SOpenStackProvider) GetBalance() (*cloudprovider.SBalanceInfo, error) {
|
||||
return &cloudprovider.SBalanceInfo{
|
||||
Amount: 0.0,
|
||||
Currency: "CNY",
|
||||
Status: api.CLOUD_PROVIDER_HEALTH_NORMAL,
|
||||
}, cloudprovider.ErrNotSupported
|
||||
}
|
||||
|
||||
func (self *SOpenStackProvider) GetCloudRegionExternalIdPrefix() string {
|
||||
|
||||
+6
-2
@@ -173,8 +173,12 @@ func (self *SProxmoxProvider) GetIRegionById(id string) (cloudprovider.ICloudReg
|
||||
return nil, cloudprovider.ErrNotFound
|
||||
}
|
||||
|
||||
func (self *SProxmoxProvider) GetBalance() (float64, string, error) {
|
||||
return 0.0, api.CLOUD_PROVIDER_HEALTH_NORMAL, cloudprovider.ErrNotSupported
|
||||
func (self *SProxmoxProvider) GetBalance() (*cloudprovider.SBalanceInfo, error) {
|
||||
return &cloudprovider.SBalanceInfo{
|
||||
Amount: 0.0,
|
||||
Currency: "CNY",
|
||||
Status: api.CLOUD_PROVIDER_HEALTH_NORMAL,
|
||||
}, cloudprovider.ErrNotSupported
|
||||
}
|
||||
|
||||
func (self *SProxmoxProvider) GetIProjects() ([]cloudprovider.ICloudProject, error) {
|
||||
|
||||
+13
-6
@@ -286,16 +286,23 @@ func (self *SQcloudProvider) GetIRegionById(id string) (cloudprovider.ICloudRegi
|
||||
return self.client.GetIRegionById(id)
|
||||
}
|
||||
|
||||
func (self *SQcloudProvider) GetBalance() (float64, string, error) {
|
||||
func (self *SQcloudProvider) GetBalance() (*cloudprovider.SBalanceInfo, error) {
|
||||
ret := &cloudprovider.SBalanceInfo{
|
||||
Amount: 0.0,
|
||||
Currency: "CNY",
|
||||
}
|
||||
balance, err := self.client.QueryAccountBalance()
|
||||
if err != nil {
|
||||
return 0.0, api.CLOUD_PROVIDER_HEALTH_UNKNOWN, err
|
||||
ret.Status = api.CLOUD_PROVIDER_HEALTH_UNKNOWN
|
||||
return ret, nil
|
||||
}
|
||||
status := api.CLOUD_PROVIDER_HEALTH_NORMAL
|
||||
if balance.AvailableAmount < 0.0 {
|
||||
status = api.CLOUD_PROVIDER_HEALTH_ARREARS
|
||||
ret.Amount = balance.Balance
|
||||
ret.Currency = balance.Currency
|
||||
ret.Status = api.CLOUD_PROVIDER_HEALTH_NORMAL
|
||||
if ret.Amount < 0.0 {
|
||||
ret.Status = api.CLOUD_PROVIDER_HEALTH_ARREARS
|
||||
}
|
||||
return balance.AvailableAmount, status, nil
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func (self *SQcloudProvider) GetIProjects() ([]cloudprovider.ICloudProject, error) {
|
||||
|
||||
+13
-9
@@ -929,15 +929,12 @@ func (client *SQcloudClient) GetIStorageById(id string) (cloudprovider.ICloudSto
|
||||
}
|
||||
|
||||
type SAccountBalance struct {
|
||||
AvailableAmount float64
|
||||
AvailableCashAmount float64
|
||||
CreditAmount float64
|
||||
MybankCreditAmount float64
|
||||
Currency string
|
||||
Balance float64
|
||||
Uin int64
|
||||
Currency string
|
||||
}
|
||||
|
||||
func (client *SQcloudClient) QueryAccountBalance() (*SAccountBalance, error) {
|
||||
balance := SAccountBalance{}
|
||||
body, err := client.billingRequest("DescribeAccountBalance", nil)
|
||||
if err != nil {
|
||||
if isError(err, []string{"UnauthorizedOperation.NotFinanceAuth"}) {
|
||||
@@ -945,9 +942,16 @@ func (client *SQcloudClient) QueryAccountBalance() (*SAccountBalance, error) {
|
||||
}
|
||||
return nil, errors.Wrapf(err, "DescribeAccountBalance")
|
||||
}
|
||||
balanceCent, _ := body.Float("Balance")
|
||||
balance.AvailableAmount = balanceCent / 100.0
|
||||
return &balance, nil
|
||||
balance := &SAccountBalance{Currency: "CNY"}
|
||||
err = body.Unmarshal(balance)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
balance.Balance = balance.Balance / 100.0
|
||||
if balance.Uin >= 200000000000 {
|
||||
balance.Currency = "USD"
|
||||
}
|
||||
return balance, nil
|
||||
}
|
||||
|
||||
func (client *SQcloudClient) GetIProjects() ([]cloudprovider.ICloudProject, error) {
|
||||
|
||||
+6
-2
@@ -116,8 +116,12 @@ func (self *SRemoteFileProvider) GetIRegionById(id string) (cloudprovider.ICloud
|
||||
return self.client.GetIRegionById(id)
|
||||
}
|
||||
|
||||
func (self *SRemoteFileProvider) GetBalance() (float64, string, error) {
|
||||
return 0.0, api.CLOUD_PROVIDER_HEALTH_UNKNOWN, cloudprovider.ErrNotSupported
|
||||
func (self *SRemoteFileProvider) GetBalance() (*cloudprovider.SBalanceInfo, error) {
|
||||
return &cloudprovider.SBalanceInfo{
|
||||
Amount: 0.0,
|
||||
Currency: "CNY",
|
||||
Status: api.CLOUD_PROVIDER_HEALTH_NORMAL,
|
||||
}, cloudprovider.ErrNotSupported
|
||||
}
|
||||
|
||||
func (self *SRemoteFileProvider) GetCloudRegionExternalIdPrefix() string {
|
||||
|
||||
+6
-2
@@ -158,8 +158,12 @@ func (self *SUcloudProvider) GetIRegionById(extId string) (cloudprovider.ICloudR
|
||||
return self.client.GetIRegionById(extId)
|
||||
}
|
||||
|
||||
func (self *SUcloudProvider) GetBalance() (float64, string, error) {
|
||||
return 0.0, api.CLOUD_PROVIDER_HEALTH_NORMAL, cloudprovider.ErrNotSupported
|
||||
func (self *SUcloudProvider) GetBalance() (*cloudprovider.SBalanceInfo, error) {
|
||||
return &cloudprovider.SBalanceInfo{
|
||||
Amount: 0.0,
|
||||
Currency: "CNY",
|
||||
Status: api.CLOUD_PROVIDER_HEALTH_NORMAL,
|
||||
}, cloudprovider.ErrNotSupported
|
||||
}
|
||||
|
||||
func (self *SUcloudProvider) GetOnPremiseIRegion() (cloudprovider.ICloudRegion, error) {
|
||||
|
||||
+6
-2
@@ -132,8 +132,12 @@ func (self *SZStackProvider) GetIRegionById(extId string) (cloudprovider.ICloudR
|
||||
return self.client.GetIRegionById(extId)
|
||||
}
|
||||
|
||||
func (self *SZStackProvider) GetBalance() (float64, string, error) {
|
||||
return 0.0, api.CLOUD_PROVIDER_HEALTH_UNKNOWN, cloudprovider.ErrNotSupported
|
||||
func (self *SZStackProvider) GetBalance() (*cloudprovider.SBalanceInfo, error) {
|
||||
return &cloudprovider.SBalanceInfo{
|
||||
Amount: 0.0,
|
||||
Currency: "CNY",
|
||||
Status: api.CLOUD_PROVIDER_HEALTH_NORMAL,
|
||||
}, cloudprovider.ErrNotSupported
|
||||
}
|
||||
|
||||
func (self *SZStackProvider) GetCloudRegionExternalIdPrefix() string {
|
||||
|
||||
Reference in New Issue
Block a user