diff --git a/pkg/multicloud/huawei/client/client.go b/pkg/multicloud/huawei/client/client.go index fe768b42f1..df4d206006 100644 --- a/pkg/multicloud/huawei/client/client.go +++ b/pkg/multicloud/huawei/client/client.go @@ -83,7 +83,7 @@ type Client struct { Traces *modules.STraceManager CloudEye *modules.SCloudEyeManager Quotas *modules.SQuotaManager - EnterpriceProjects *modules.SEnterpriceProjectManager + EnterpriseProjects *modules.SEnterpriseProjectManager } func (self *Client) SetHttpClient(httpClient *http.Client) { @@ -136,10 +136,10 @@ func (self *Client) SetHttpClient(httpClient *http.Client) { self.DBInstanceJob.SetHttpClient(httpClient) self.Traces.SetHttpClient(httpClient) self.CloudEye.SetHttpClient(httpClient) - self.EnterpriceProjects.SetHttpClient(httpClient) + self.EnterpriseProjects.SetHttpClient(httpClient) } -func (self *Client) InitWithOptions(regionId, projectId string, credential auth.Credential) error { +func (self *Client) InitWithOptions(regionId, domainId, projectId string, credential auth.Credential) error { // 从signer中初始化 signer, err := auth.NewSignerWithCredential(credential) if err != nil { @@ -148,21 +148,20 @@ func (self *Client) InitWithOptions(regionId, projectId string, credential auth. self.signer = signer self.regionId = regionId self.projectId = projectId - // 暂时还未用到domainId - self.domainId = "" + self.domainId = domainId // 初始化 resource manager self.initManagers() return err } -func (self *Client) InitWithAccessKey(regionId, projectId, accessKey, secretKey string) error { +func (self *Client) InitWithAccessKey(regionId, domainId, projectId, accessKey, secretKey string) error { // accessKey signer credential := &credentials.AccessKeyCredential{ AccessKeyId: accessKey, AccessKeySecret: secretKey, } - return self.InitWithOptions(regionId, projectId, credential) + return self.InitWithOptions(regionId, domainId, projectId, credential) } func (self *Client) initManagers() { @@ -217,14 +216,15 @@ func (self *Client) initManagers() { self.Traces = modules.NewTraceManager(self.regionId, self.projectId, self.signer, self.debug) self.CloudEye = modules.NewCloudEyeManager(self.regionId, self.projectId, self.signer, self.debug) self.Quotas = modules.NewQuotaManager(self.regionId, self.projectId, self.signer, self.debug) - self.EnterpriceProjects = modules.NewEnterpriceProjectManager(self.regionId, self.projectId, self.signer, self.debug) + self.EnterpriseProjects = modules.NewEnterpriseProjectManager(self.regionId, self.projectId, self.signer, self.debug) + self.EnterpriseProjects.SetDomainId(self.domainId) } self.init = true } -func NewClientWithAccessKey(regionId, projectId, accessKey, secretKey string, debug bool) (*Client, error) { +func NewClientWithAccessKey(regionId, domainId, projectId, accessKey, secretKey string, debug bool) (*Client, error) { c := &Client{debug: debug} - err := c.InitWithAccessKey(regionId, projectId, accessKey, secretKey) + err := c.InitWithAccessKey(regionId, domainId, projectId, accessKey, secretKey) return c, err } diff --git a/pkg/multicloud/huawei/client/modules/manager_resource.go b/pkg/multicloud/huawei/client/modules/manager_resource.go index 3d73cac23f..fad9a415f9 100644 --- a/pkg/multicloud/huawei/client/modules/manager_resource.go +++ b/pkg/multicloud/huawei/client/modules/manager_resource.go @@ -72,10 +72,11 @@ type SResourceManager struct { ctx manager.IManagerContext ServiceName ServiceNameType // 服务名称: ecs Region string // 区域: cn-north-1 - ProjectId string // 项目ID: uuid - version string // api 版本号 - Keyword string // 资源名称单数。构建URL时使用 - KeywordPlural string // 资源名称复数形式。构建URL时使用 + DomainId string + ProjectId string // 项目ID: uuid + version string // api 版本号 + Keyword string // 资源名称单数。构建URL时使用 + KeywordPlural string // 资源名称复数形式。构建URL时使用 ResourceKeyword string // 资源名称。url中使用 } @@ -104,6 +105,10 @@ func (self *SResourceManager) GetColumns() []string { return []string{} } +func (self *SResourceManager) SetDomainId(domainId string) { + self.DomainId = domainId +} + func (self *SResourceManager) getReourcePath(ctx manager.IManagerContext, rid string, spec string) string { segs := []string{} if ctx != nil { @@ -144,6 +149,9 @@ func (self *SResourceManager) ListInContextWithSpec(ctx manager.IManagerContext, for k, v := range queries { request.AddQueryParam(k, v) } + if len(self.DomainId) > 0 { + request.AddHeaderParam("X-Domain-Id", self.DomainId) + } return self._list(request, responseKey) } diff --git a/pkg/multicloud/huawei/client/modules/mod_enterpriceprojects.go b/pkg/multicloud/huawei/client/modules/mod_enterpriceprojects.go index d8b9f76393..89005bc348 100644 --- a/pkg/multicloud/huawei/client/modules/mod_enterpriceprojects.go +++ b/pkg/multicloud/huawei/client/modules/mod_enterpriceprojects.go @@ -18,19 +18,19 @@ import ( "yunion.io/x/onecloud/pkg/multicloud/huawei/client/auth" ) -type SEnterpriceProjectManager struct { +type SEnterpriseProjectManager struct { SResourceManager } -func NewEnterpriceProjectManager(regionId string, projectId string, signer auth.Signer, debug bool) *SEnterpriceProjectManager { - return &SEnterpriceProjectManager{SResourceManager: SResourceManager{ +func NewEnterpriseProjectManager(regionId string, projectId string, signer auth.Signer, debug bool) *SEnterpriseProjectManager { + return &SEnterpriseProjectManager{SResourceManager: SResourceManager{ SBaseManager: NewBaseManager(signer, debug), ServiceName: ServiceNameEPS, Region: "", ProjectId: "", version: "v1.0", - Keyword: "enterprise-project", - KeywordPlural: "enterprise-projects", + Keyword: "enterprise_project", + KeywordPlural: "enterprise_projects", ResourceKeyword: "enterprise-projects", }} diff --git a/pkg/multicloud/huawei/enterpriceprojects.go b/pkg/multicloud/huawei/enterpriceprojects.go index 68063a21d5..f963bb1d87 100644 --- a/pkg/multicloud/huawei/enterpriceprojects.go +++ b/pkg/multicloud/huawei/enterpriceprojects.go @@ -23,7 +23,7 @@ import ( ) // https://support.huaweicloud.com/api-em/zh-cn_topic_0121230880.html -type SEnterpriceProject struct { +type SEnterpriseProject struct { multicloud.SResourceBase Id string @@ -34,13 +34,13 @@ type SEnterpriceProject struct { UpdatedAt time.Time } -func (self *SHuaweiClient) GetEnterpriceProjects() ([]SEnterpriceProject, error) { - projects := []SEnterpriceProject{} +func (self *SHuaweiClient) GetEnterpriseProjects() ([]SEnterpriseProject, error) { + projects := []SEnterpriseProject{} client, err := self.newGeneralAPIClient() if err != nil { return nil, errors.Wrap(err, "newGeneralAPIClient") } - err = doListAllWithOffset(client.EnterpriceProjects.List, map[string]string{}, &projects) + err = doListAllWithOffset(client.EnterpriseProjects.List, map[string]string{}, &projects) if err != nil { return nil, errors.Wrap(err, "doListAllWithOffset") } diff --git a/pkg/multicloud/huawei/huawei.go b/pkg/multicloud/huawei/huawei.go index 01758c05bd..a96b2c34e8 100644 --- a/pkg/multicloud/huawei/huawei.go +++ b/pkg/multicloud/huawei/huawei.go @@ -138,7 +138,7 @@ func (self *SHuaweiClient) initSigner() error { } func (self *SHuaweiClient) newRegionAPIClient(regionId string) (*client.Client, error) { - cli, err := client.NewClientWithAccessKey(regionId, self.projectId, self.accessKey, self.accessSecret, self.debug) + cli, err := client.NewClientWithAccessKey(regionId, self.ownerId, self.projectId, self.accessKey, self.accessSecret, self.debug) if err != nil { return nil, err } @@ -151,7 +151,7 @@ func (self *SHuaweiClient) newRegionAPIClient(regionId string) (*client.Client, } func (self *SHuaweiClient) newGeneralAPIClient() (*client.Client, error) { - cli, err := client.NewClientWithAccessKey("", "", self.accessKey, self.accessSecret, self.debug) + cli, err := client.NewClientWithAccessKey("", self.ownerId, "", self.accessKey, self.accessSecret, self.debug) if err != nil { return nil, err } diff --git a/pkg/multicloud/huawei/shell/enterpriseprojects.go b/pkg/multicloud/huawei/shell/enterpriseprojects.go index 958d90a06f..e9b28cbddd 100644 --- a/pkg/multicloud/huawei/shell/enterpriseprojects.go +++ b/pkg/multicloud/huawei/shell/enterpriseprojects.go @@ -20,10 +20,10 @@ import ( ) func init() { - type EnterpriceProjectListOptions struct { + type EnterpriseProjectListOptions struct { } - shellutils.R(&EnterpriceProjectListOptions{}, "enterprice-project-list", "List regions", func(cli *huawei.SRegion, args *EnterpriceProjectListOptions) error { - projects, err := cli.GetClient().GetEnterpriceProjects() + shellutils.R(&EnterpriseProjectListOptions{}, "enterprise-project-list", "List regions", func(cli *huawei.SRegion, args *EnterpriseProjectListOptions) error { + projects, err := cli.GetClient().GetEnterpriseProjects() if err != nil { return err }