Merge pull request #5991 from ioito/automated-cherry-pick-of-#5918-upstream-release-3.2

Automated cherry pick of #5918: fix: 修复华为云eneterprise-project-list异常问题
This commit is contained in:
Zexi Li
2020-04-24 18:18:08 +08:00
committed by GitHub
6 changed files with 36 additions and 28 deletions
+10 -10
View File
@@ -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
}
@@ -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)
}
@@ -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",
}}
+4 -4
View File
@@ -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")
}
+2 -2
View File
@@ -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
}
@@ -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
}