diff --git a/pkg/multicloud/huawei/bucket.go b/pkg/multicloud/huawei/bucket.go index 6df9a130d2..5b80349141 100644 --- a/pkg/multicloud/huawei/bucket.go +++ b/pkg/multicloud/huawei/bucket.go @@ -42,6 +42,14 @@ type SBucket struct { } func (b *SBucket) GetProjectId() string { + resp, err := b.region.HeadBucket(b.Name) + if err != nil { + return "" + } + epid, _ := resp.ResponseHeaders["epid"] + if len(epid) > 0 { + return epid[0] + } return "" } diff --git a/pkg/multicloud/huawei/region.go b/pkg/multicloud/huawei/region.go index 53cedb968f..38227d1447 100644 --- a/pkg/multicloud/huawei/region.go +++ b/pkg/multicloud/huawei/region.go @@ -957,17 +957,20 @@ func (region *SRegion) DeleteIBucket(name string) error { return nil } -func (region *SRegion) IBucketExist(name string) (bool, error) { +func (region *SRegion) HeadBucket(name string) (*obs.BaseModel, error) { obsClient, err := region.getOBSClient() if err != nil { - return false, errors.Wrap(err, "region.getOBSClient") + return nil, errors.Wrap(err, "region.getOBSClient") } - _, err = obsClient.HeadBucket(name) + return obsClient.HeadBucket(name) +} + +func (region *SRegion) IBucketExist(name string) (bool, error) { + _, err := region.HeadBucket(name) if err != nil { if obsHttpCode(err) == 404 { return false, nil } else { - log.Debugf("%#v %s", err, err) return false, errors.Wrap(err, "HeadBucket") } } diff --git a/pkg/multicloud/huawei/shell/bucket.go b/pkg/multicloud/huawei/shell/bucket.go index 9482e9f16d..3f7238d110 100644 --- a/pkg/multicloud/huawei/shell/bucket.go +++ b/pkg/multicloud/huawei/shell/bucket.go @@ -15,9 +15,35 @@ package shell import ( + "fmt" + + "yunion.io/x/onecloud/pkg/multicloud/huawei" "yunion.io/x/onecloud/pkg/multicloud/objectstore" + "yunion.io/x/onecloud/pkg/util/shellutils" ) func init() { objectstore.S3Shell() + + type BucketNameOptions struct { + NAME string + } + shellutils.R(&BucketNameOptions{}, "bucket-head", "Head bucket", func(cli *huawei.SRegion, args *BucketNameOptions) error { + result, err := cli.HeadBucket(args.NAME) + if err != nil { + return err + } + printObject(result) + return nil + }) + + shellutils.R(&BucketNameOptions{}, "bucket-project", "Show bucket project", func(cli *huawei.SRegion, args *BucketNameOptions) error { + bucket, err := cli.GetIBucketByName(args.NAME) + if err != nil { + return err + } + fmt.Println("project: ", bucket.GetProjectId()) + return nil + }) + }