From 835b7e9d1e0e21b973f55b09b27ca1afa8b657f8 Mon Sep 17 00:00:00 2001 From: ioito Date: Thu, 6 Apr 2023 22:01:31 +0800 Subject: [PATCH] fix(region): azure china user create --- go.mod | 2 +- go.sum | 4 ++-- vendor/modules.txt | 2 +- .../x/cloudmux/pkg/multicloud/azure/azure.go | 11 +++++++++++ .../x/cloudmux/pkg/multicloud/azure/cloudgroup.go | 3 +++ .../x/cloudmux/pkg/multicloud/azure/clouduser.go | 11 +++++------ 6 files changed, 23 insertions(+), 10 deletions(-) diff --git a/go.mod b/go.mod index edce13ea72..ecaeb67a4f 100644 --- a/go.mod +++ b/go.mod @@ -83,7 +83,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.20230406105729-f8da6df0afdb + yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20230406135917-db04e7cb9d6e yunion.io/x/executor v0.0.0-20211018100936-39a2cd966656 yunion.io/x/jsonutils v1.0.1-0.20220819091305-3bab322ab4fd yunion.io/x/log v1.0.0 diff --git a/go.sum b/go.sum index b1ab3b549d..5b5e3ae548 100644 --- a/go.sum +++ b/go.sum @@ -1164,8 +1164,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.20230406105729-f8da6df0afdb h1:GKybau2Ra065D8jAa1XiBi3inXxhPAfHvy94B4g30e0= -yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20230406105729-f8da6df0afdb/go.mod h1:VBAtfyGMDW11x5JmF0vUEmn/PmNpZ8CKBAQCiyz+cDY= +yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20230406135917-db04e7cb9d6e h1:+zRaNZcXOYv28+2MZNoRC5a5SOefYPwFRgNRKa8EV0M= +yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20230406135917-db04e7cb9d6e/go.mod h1:VBAtfyGMDW11x5JmF0vUEmn/PmNpZ8CKBAQCiyz+cDY= yunion.io/x/executor v0.0.0-20211018100936-39a2cd966656 h1:0zlZD5uhZoIHgLVAWCz2aHaYk2ZrNsACCYD7R6EIBII= yunion.io/x/executor v0.0.0-20211018100936-39a2cd966656/go.mod h1:Uxuou9WQIeJXNpy7t2fPLL0BYLvLiMvGQwY7Qc6aSws= yunion.io/x/jsonutils v0.0.0-20190625054549-a964e1e8a051/go.mod h1:4N0/RVzsYL3kH3WE/H1BjUQdFiWu50JGCFQuuy+Z634= diff --git a/vendor/modules.txt b/vendor/modules.txt index 8a79cf578b..362e4688da 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1442,7 +1442,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.20230406105729-f8da6df0afdb +# yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20230406135917-db04e7cb9d6e ## 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/azure/azure.go b/vendor/yunion.io/x/cloudmux/pkg/multicloud/azure/azure.go index cf333f79e1..c89e15d95a 100644 --- a/vendor/yunion.io/x/cloudmux/pkg/multicloud/azure/azure.go +++ b/vendor/yunion.io/x/cloudmux/pkg/multicloud/azure/azure.go @@ -184,6 +184,10 @@ func (self *SAzureClient) getClient(resource TAzureResource) (*azureAuthClient, case GraphResource: ret.domain = env.GraphEndpoint conf.Resource = env.GraphEndpoint + if self.envName == "AzureChinaCloud" { + ret.domain = "https://graph.chinacloudapi.cn/" + conf.Resource = "https://graph.chinacloudapi.cn/" + } case LoganalyticsResource: ret.domain = env.ResourceIdentifiers.OperationalInsights conf.Resource = env.ResourceIdentifiers.OperationalInsights @@ -1107,12 +1111,19 @@ func (self *SAzureClient) msGraphClient() *http.Client { TokenURL: fmt.Sprintf("https://login.microsoftonline.com/%s/oauth2/v2.0/token", self.tenantId), Scopes: []string{"https://graph.microsoft.com/.default"}, } + if self.envName == "AzureChinaCloud" { + conf.TokenURL = fmt.Sprintf("https://login.partner.microsoftonline.cn/%s/oauth2/v2.0/token", self.tenantId) + conf.Scopes = []string{"https://microsoftgraph.chinacloudapi.cn/.default"} + } return conf.Client(context.TODO()) } func (self *SAzureClient) msGraphRequest(method string, resource string, body jsonutils.JSONObject) (jsonutils.JSONObject, error) { client := self.msGraphClient() url := fmt.Sprintf("https://graph.microsoft.com/v1.0/%s", resource) + if self.envName == "AzureChinaCloud" { + url = fmt.Sprintf("https://microsoftgraph.chinacloudapi.cn/v1.0/%s", resource) + } req := httputils.NewJsonRequest(httputils.THttpMethod(method), url, body) ae := AzureResponseError{} cli := httputils.NewJsonClient(client) diff --git a/vendor/yunion.io/x/cloudmux/pkg/multicloud/azure/cloudgroup.go b/vendor/yunion.io/x/cloudmux/pkg/multicloud/azure/cloudgroup.go index 2daee24d25..62a09c85b9 100644 --- a/vendor/yunion.io/x/cloudmux/pkg/multicloud/azure/cloudgroup.go +++ b/vendor/yunion.io/x/cloudmux/pkg/multicloud/azure/cloudgroup.go @@ -239,6 +239,9 @@ func (self *SAzureClient) AddGroupUser(id, userName string) error { params := map[string]string{ "@odata.id": fmt.Sprintf("https://graph.microsoft.com/v1.0/directoryObjects/%s", user.Id), } + if self.envName == "AzureChinaCloud" { + params["@odata.id"] = fmt.Sprintf("https://microsoftgraph.chinacloudapi.cn/v1.0/directoryObjects/%s", user.Id) + } err = self.gcreate(resource, jsonutils.Marshal(params), nil) if err != nil && !strings.Contains(err.Error(), "One or more added object references already exist for the following modified properties") { return err diff --git a/vendor/yunion.io/x/cloudmux/pkg/multicloud/azure/clouduser.go b/vendor/yunion.io/x/cloudmux/pkg/multicloud/azure/clouduser.go index 7e0f3079e2..3d33435171 100644 --- a/vendor/yunion.io/x/cloudmux/pkg/multicloud/azure/clouduser.go +++ b/vendor/yunion.io/x/cloudmux/pkg/multicloud/azure/clouduser.go @@ -17,7 +17,6 @@ package azure import ( "fmt" "net/url" - "strings" "time" "yunion.io/x/jsonutils" @@ -277,6 +276,7 @@ func (self *SAzureClient) CreateIClouduser(conf *cloudprovider.SClouduserCreateC type SDomain struct { Name string + Id string AuthenticationType string AvailabilityStatus string IsAdminManaged bool @@ -301,14 +301,13 @@ func (self *SAzureClient) GetDomains() ([]SDomain, error) { } func (self *SAzureClient) GetDefaultDomain() (string, error) { - users, err := self.ListGraphUsers() + domains, err := self.GetDomains() if err != nil { return "", errors.Wrapf(err, "ListGraphUsers") } - for i := range users { - idx := strings.Index(users[i].UserPrincipalName, "@") - if idx > -1 { - return users[i].UserPrincipalName[idx+1:], nil + for i := range domains { + if domains[i].IsDefault && domains[i].IsVerified && domains[i].IsRoot { + return domains[i].Id, nil } } return "", cloudprovider.ErrNotFound