fix(region): vendor update for lb backend sync (#20977)

This commit is contained in:
屈轩
2024-08-07 18:50:44 +08:00
committed by GitHub
parent 65859262f1
commit 5dca24586c
8 changed files with 107 additions and 60 deletions
+1 -1
View File
@@ -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
+2 -2
View File
@@ -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=
+11 -4
View File
@@ -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())
}
+1 -1
View File
@@ -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
+70 -50
View File
@@ -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:
+8
View File
@@ -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 {
+9 -2
View File
@@ -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 {
@@ -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 ""
}