diff --git a/go.mod b/go.mod index 15caad8bb2..38b6bcd0a1 100644 --- a/go.mod +++ b/go.mod @@ -88,7 +88,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.20240729040029-cb2e2f9a173b + yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20240807034259-674bf1923f49 yunion.io/x/executor v0.0.0-20230705125604-c5ac3141db32 yunion.io/x/jsonutils v1.0.1-0.20240203102553-4096f103b401 yunion.io/x/log v1.0.1-0.20240305175729-7cf2d6cd5a91 diff --git a/go.sum b/go.sum index fc34efc99d..b8190834d0 100644 --- a/go.sum +++ b/go.sum @@ -1210,8 +1210,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.20240729040029-cb2e2f9a173b h1:YECtEQ1IirkldkITfaYPCOZj1MoXIF/gkfTVeDsfBok= -yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20240729040029-cb2e2f9a173b/go.mod h1:iLoBHVR2Eur/1WJSGcbZaEwpzh/iqXvbFCsX9/xt8CI= +yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20240807034259-674bf1923f49 h1:lklD0OVAI9Lq0A2AyGQTfIFIBxmX5/Tn/OY8OhsZv70= +yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20240807034259-674bf1923f49/go.mod h1:iLoBHVR2Eur/1WJSGcbZaEwpzh/iqXvbFCsX9/xt8CI= 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= diff --git a/pkg/compute/models/loadbalancerbackends.go b/pkg/compute/models/loadbalancerbackends.go index 75c32251bb..d41bcd91b8 100644 --- a/pkg/compute/models/loadbalancerbackends.go +++ b/pkg/compute/models/loadbalancerbackends.go @@ -16,6 +16,7 @@ package models import ( "context" + "database/sql" "fmt" "yunion.io/x/cloudmux/pkg/cloudprovider" @@ -581,7 +582,6 @@ func (lbbg *SLoadbalancerBackendGroup) SyncLoadbalancerBackends(ctx context.Cont } func (lbb *SLoadbalancerBackend) constructFieldsFromCloudLoadbalancerBackend(ext cloudprovider.ICloudLoadbalancerBackend, managerId string) error { - // lbb.Name = extLoadbalancerBackend.GetName() lbb.Status = ext.GetStatus() lbb.Weight = ext.GetWeight() @@ -590,14 +590,21 @@ func (lbb *SLoadbalancerBackend) constructFieldsFromCloudLoadbalancerBackend(ext lbb.BackendType = ext.GetBackendType() lbb.BackendRole = ext.GetBackendRole() - if lbb.BackendType == api.LB_BACKEND_IP { - lbb.Address = ext.GetIpAddress() - } else { + ipAddr := ext.GetIpAddress() + if len(lbb.Address) == 0 || ipAddr != lbb.Address { + lbb.Address = ipAddr + } + + if lbb.BackendType == api.LB_BACKEND_GUEST { instance, err := db.FetchByExternalIdAndManagerId(GuestManager, ext.GetBackendId(), func(q *sqlchemy.SQuery) *sqlchemy.SQuery { sq := HostManager.Query().SubQuery() return q.Join(sq, sqlchemy.Equals(sq.Field("id"), q.Field("host_id"))).Filter(sqlchemy.Equals(sq.Field("manager_id"), managerId)) }) if err != nil { + // 部分弹性伸缩组实例未同步, 忽略找不到实例错误 + if errors.Cause(err) == sql.ErrNoRows { + return nil + } return errors.Wrapf(err, "FetchByExternalIdAndManagerId %s", ext.GetBackendId()) } diff --git a/vendor/modules.txt b/vendor/modules.txt index 4d5eb788b1..938b97fef2 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1485,7 +1485,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.20240729040029-cb2e2f9a173b +# yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20240807034259-674bf1923f49 ## explicit; go 1.18 yunion.io/x/cloudmux/pkg/apis yunion.io/x/cloudmux/pkg/apis/billing diff --git a/vendor/yunion.io/x/cloudmux/pkg/multicloud/huawei/huawei.go b/vendor/yunion.io/x/cloudmux/pkg/multicloud/huawei/huawei.go index dc5f54b927..b18fa48c26 100644 --- a/vendor/yunion.io/x/cloudmux/pkg/multicloud/huawei/huawei.go +++ b/vendor/yunion.io/x/cloudmux/pkg/multicloud/huawei/huawei.go @@ -44,42 +44,52 @@ const ( HUAWEI_DEFAULT_REGION = "cn-north-4" HUAWEI_API_VERSION = "2018-12-25" - SERVICE_IAM = "iam" - SERVICE_IAM_V3 = "iam_v3" - SERVICE_IAM_V3_EXT = "iam_v3_ext" - SERVICE_ELB = "elb" - SERVICE_VPC = "vpc" - SERVICE_VPC_V2_0 = "vpc_v2.0" - SERVICE_VPC_V3 = "vpc_v3" - SERVICE_CES = "ces" - SERVICE_RDS = "rds" - SERVICE_ECS = "ecs" - SERVICE_ECS_V1_1 = "ecs_v1.1" - SERVICE_ECS_V2_1 = "ecs_v2.1" - SERVICE_EPS = "eps" - SERVICE_EVS = "evs" - SERVICE_EVS_V1 = "evs_v1" - SERVICE_EVS_V2_1 = "evs_v2.1" - SERVICE_BSS = "bss" - SERVICE_SFS = "sfs-turbo" - SERVICE_CTS = "cts" - SERVICE_NAT = "nat" - SERVICE_NAT_V2 = "nat_v2" - SERVICE_BMS = "bms" - SERVICE_CCI = "cci" - SERVICE_CSBS = "csbs" - SERVICE_IMS = "ims" - SERVICE_IMS_V1 = "ims_v1" - SERVICE_AS = "as" - SERVICE_CCE = "cce" - SERVICE_DCS = "dcs" - SERVICE_MODELARTS = "modelarts" - SERVICE_MODELARTS_V1 = "modelarts_v1" - SERVICE_SCM = "scm" - SERVICE_CDN = "cdn" - SERVICE_GAUSSDB = "gaussdb" - SERVICE_GAUSSDB_NOSQL = "gaussdb-nosql" - SERVICE_FUNCTIONGRAPH = "functiongraph" + SERVICE_IAM = "iam" + SERVICE_IAM_V3 = "iam_v3" + SERVICE_IAM_V3_EXT = "iam_v3_ext" + SERVICE_ELB = "elb" + SERVICE_VPC = "vpc" + SERVICE_VPC_V2_0 = "vpc_v2.0" + SERVICE_VPC_V3 = "vpc_v3" + SERVICE_VPN = "vpn" + SERVICE_CES = "ces" + SERVICE_RDS = "rds" + SERVICE_ECS = "ecs" + SERVICE_ECS_V1_1 = "ecs_v1.1" + SERVICE_ECS_V2_1 = "ecs_v2.1" + SERVICE_EPS = "eps" + SERVICE_EVS = "evs" + SERVICE_EVS_V1 = "evs_v1" + SERVICE_EVS_V2_1 = "evs_v2.1" + SERVICE_BSS = "bss" + SERVICE_BSS_INTL = "bss-intl" + SERVICE_SFS = "sfs-turbo" + SERVICE_CTS = "cts" + SERVICE_NAT = "nat" + SERVICE_NAT_V2 = "nat_v2" + SERVICE_BMS = "bms" + SERVICE_CCI = "cci" + SERVICE_CSBS = "csbs" + SERVICE_IMS = "ims" + SERVICE_IMS_V1 = "ims_v1" + SERVICE_AS = "as" + SERVICE_CCE = "cce" + SERVICE_DCS = "dcs" + SERVICE_MODELARTS = "modelarts" + SERVICE_MODELARTS_V1 = "modelarts_v1" + SERVICE_SCM = "scm" + SERVICE_CDN = "cdn" + SERVICE_GAUSSDB = "gaussdb" + SERVICE_GAUSSDB_V3_1 = "gaussdb_v3.1" + SERVICE_GAUSSDB_NOSQL = "gaussdb-nosql" + SERVICE_GAUSSDB_NOSQL_V3_1 = "gaussdb-nosql_v3.1" + SERVICE_GAUSSDB_OPENGAUSS = "gaussdb-opengauss" + SERVICE_FUNCTIONGRAPH = "functiongraph" + SERVICE_APIG = "apig" + SERVICE_APIG_V1_0 = "apig_v1.0" + SERVICE_MRS = "mrs" + SERVICE_DIS = "dis" + SERVICE_LTS = "lts" ) type HuaweiClientConfig struct { @@ -453,21 +463,31 @@ type SBalance struct { // https://console.huaweicloud.com/apiexplorer/#/openapi/BSS/doc?api=ShowCustomerAccountBalances func (self *SHuaweiClient) QueryAccountBalance() (*SBalance, error) { - resp, err := self.list(SERVICE_BSS, "", "accounts/customer-accounts/balances", nil) - if err != nil { - return nil, err + ret := struct { + AccountBalances []SBalance + Currency string + }{} + for _, service := range []string{SERVICE_BSS, SERVICE_BSS_INTL} { + resp, err := self.list(service, "", "accounts/customer-accounts/balances", nil) + if err != nil { + // 国际区账号会报错: {"error_code":"CBC.0150","error_msg":"Access denied. The customer does not belong to the website you are now at."} + if e, ok := err.(*httputils.JSONClientError); ok && e.Class == "CBC.0150" { + continue + } + return nil, err + } + err = resp.Unmarshal(&ret) + if err != nil { + return nil, err + } + break } - ret := []SBalance{} - err = resp.Unmarshal(&ret, "account_balances") - if err != nil { - return nil, err - } - for i := range ret { - if ret[i].AccountType == 1 { - return &ret[i], nil + for i := range ret.AccountBalances { + if ret.AccountBalances[i].AccountType == 1 { + return &ret.AccountBalances[i], nil } } - return &SBalance{Currency: "CYN"}, nil + return &SBalance{Currency: ret.Currency}, nil } func (self *SHuaweiClient) GetISSLCertificates() ([]cloudprovider.ICloudSSLCertificate, error) { @@ -638,8 +658,8 @@ func (self *SHuaweiClient) getUrl(service, regionId, resource string, method htt url = fmt.Sprintf("https://evs.%s.myhuaweicloud.com/v2/%s/%s", regionId, projectId, resource) case SERVICE_EVS_V2_1: url = fmt.Sprintf("https://evs.%s.myhuaweicloud.com/v2.1/%s/%s", regionId, projectId, resource) - case SERVICE_BSS: - url = fmt.Sprintf("https://bss.myhuaweicloud.com/v2/%s", resource) + case SERVICE_BSS, SERVICE_BSS_INTL: + url = fmt.Sprintf("https://%s.myhuaweicloud.com/v2/%s", service, resource) case SERVICE_SFS: url = fmt.Sprintf("https://sfs-turbo.%s.myhuaweicloud.com/v1/%s/%s", regionId, projectId, resource) case SERVICE_IMS: diff --git a/vendor/yunion.io/x/cloudmux/pkg/multicloud/proxmox/host.go b/vendor/yunion.io/x/cloudmux/pkg/multicloud/proxmox/host.go index 088810bf13..fab77caf2b 100644 --- a/vendor/yunion.io/x/cloudmux/pkg/multicloud/proxmox/host.go +++ b/vendor/yunion.io/x/cloudmux/pkg/multicloud/proxmox/host.go @@ -24,6 +24,7 @@ import ( "yunion.io/x/jsonutils" "yunion.io/x/pkg/errors" + "yunion.io/x/cloudmux/pkg/apis" api "yunion.io/x/cloudmux/pkg/apis/compute" "yunion.io/x/cloudmux/pkg/cloudprovider" "yunion.io/x/cloudmux/pkg/multicloud" @@ -109,6 +110,13 @@ func (self *SHost) GetStatus() string { return api.HOST_STATUS_RUNNING } +func (self *SHost) GetCpuArchitecture() string { + if strings.Contains(self.Kversion, "arm") { + return apis.OS_ARCH_AARCH64 + } + return apis.OS_ARCH_X86_64 +} + func (self *SHost) GetAccessIp() string { network := fmt.Sprintf("nodes/%s/network", self.Node) ret := []struct { diff --git a/vendor/yunion.io/x/cloudmux/pkg/multicloud/proxmox/instance.go b/vendor/yunion.io/x/cloudmux/pkg/multicloud/proxmox/instance.go index 56a9777c59..3571914cf2 100644 --- a/vendor/yunion.io/x/cloudmux/pkg/multicloud/proxmox/instance.go +++ b/vendor/yunion.io/x/cloudmux/pkg/multicloud/proxmox/instance.go @@ -28,6 +28,7 @@ import ( "yunion.io/x/pkg/util/osprofile" "yunion.io/x/pkg/utils" + "yunion.io/x/cloudmux/pkg/apis" api "yunion.io/x/cloudmux/pkg/apis/compute" "yunion.io/x/cloudmux/pkg/cloudprovider" "yunion.io/x/cloudmux/pkg/multicloud" @@ -170,7 +171,10 @@ type SInstance struct { } func (self *SInstance) GetName() string { - return self.Name + if len(self.Name) > 0 { + return self.Name + } + return self.GetId() } func (self *SInstance) GetId() string { @@ -393,7 +397,10 @@ func (self *SInstance) GetOsType() cloudprovider.TOsType { } func (ins *SInstance) GetOsArch() string { - return "x86_64" + if utils.IsInStringArray(ins.QemuCpu, []string{"neoverse-n1"}) || strings.HasPrefix(ins.QemuCpu, "cortex-a") { + return apis.OS_ARCH_AARCH64 + } + return ins.host.GetCpuArchitecture() } func (ins *SInstance) GetOsDist() string { diff --git a/vendor/yunion.io/x/cloudmux/pkg/multicloud/qcloud/loadbalancer_backend.go b/vendor/yunion.io/x/cloudmux/pkg/multicloud/qcloud/loadbalancer_backend.go index 102f20b773..7fc4877174 100644 --- a/vendor/yunion.io/x/cloudmux/pkg/multicloud/qcloud/loadbalancer_backend.go +++ b/vendor/yunion.io/x/cloudmux/pkg/multicloud/qcloud/loadbalancer_backend.go @@ -111,6 +111,11 @@ func (self *SLBBackend) GetBackendId() string { } func (self *SLBBackend) GetIpAddress() string { + for _, ip := range self.PrivateIPAddresses { + if len(ip) > 0 { + return ip + } + } return "" }