Skip to content

Commit e783772

Browse files
committed
feat: add huawei obs ls function
1 parent 31cc766 commit e783772

File tree

15 files changed

+439
-48
lines changed

15 files changed

+439
-48
lines changed

cmd/huawei/huawei.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package huawei
2+
3+
import (
4+
"github.com/spf13/cobra"
5+
"github.com/teamssix/cf/cmd"
6+
)
7+
8+
func init() {
9+
cmd.RootCmd.AddCommand(huaweiCmd)
10+
}
11+
12+
var huaweiCmd = &cobra.Command{
13+
Use: "huawei",
14+
Short: "执行与华为云相关的操作 (Perform Huawei Cloud related operations)",
15+
Long: "执行与华为云相关的操作 (Perform Huawei Cloud related operations)",
16+
}

cmd/huawei/obs.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package huawei
2+
3+
import (
4+
log "github.com/sirupsen/logrus"
5+
"github.com/spf13/cobra"
6+
"github.com/teamssix/cf/pkg/cloud/huawei/huaweiobs"
7+
)
8+
9+
var (
10+
obsLsRegion string
11+
obsLsFlushCache bool
12+
obsLsObjectNumber string
13+
)
14+
15+
func init() {
16+
huaweiCmd.AddCommand(obsCmd)
17+
obsCmd.AddCommand(obsLsCmd)
18+
19+
obsLsCmd.Flags().StringVarP(&obsLsObjectNumber, "number", "n", "all", "指定列出对象的数量 (Specify the number of objects to list)")
20+
obsLsCmd.Flags().StringVarP(&obsLsRegion, "region", "r", "all", "指定区域 ID (Specify region ID)")
21+
obsLsCmd.Flags().BoolVar(&obsLsFlushCache, "flushCache", false, "刷新缓存,不使用缓存数据 (Refresh the cache without using cached data)")
22+
23+
}
24+
25+
var obsCmd = &cobra.Command{
26+
Use: "obs",
27+
Short: "执行与对象存储相关的操作 (Perform obs-related operations)",
28+
Long: "执行与对象存储相关的操作 (Perform obs-related operations)",
29+
}
30+
31+
var obsLsCmd = &cobra.Command{
32+
Use: "ls",
33+
Short: "列出所有的存储桶 (List all buckets)",
34+
Long: "列出所有的存储桶 (List all buckets)",
35+
Run: func(cmd *cobra.Command, args []string) {
36+
log.Debugf("obsLsRegion: %s, obsLsFlushCache: %v", obsLsRegion, obsLsFlushCache)
37+
huaweiobs.PrintBucketsList(obsLsRegion, obsLsFlushCache, obsLsObjectNumber)
38+
},
39+
}

go.mod

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ require (
4242
github.com/google/flatbuffers v1.12.1 // indirect
4343
github.com/google/go-cmp v0.5.8 // indirect
4444
github.com/google/uuid v1.3.0 // indirect
45+
github.com/huaweicloud/huaweicloud-sdk-go-obs v3.22.11+incompatible // indirect
46+
github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.15 // indirect
4547
github.com/inconshreveable/mousetrap v1.0.0 // indirect
4648
github.com/jinzhu/inflection v1.0.0 // indirect
4749
github.com/jinzhu/now v1.1.5 // indirect
@@ -66,7 +68,7 @@ require (
6668
github.com/spf13/pflag v1.0.5 // indirect
6769
github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect
6870
go.opencensus.io v0.22.5 // indirect
69-
golang.org/x/crypto v0.0.0-20220131195533-30dcbda58838 // indirect
71+
golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e // indirect
7072
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect
7173
golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4 // indirect
7274
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect
@@ -75,7 +77,7 @@ require (
7577
golang.org/x/time v0.0.0-20220609170525-579cf78fd858 // indirect
7678
golang.org/x/tools v0.1.11 // indirect
7779
google.golang.org/protobuf v1.28.0 // indirect
78-
gopkg.in/ini.v1 v1.66.2 // indirect
80+
gopkg.in/ini.v1 v1.66.6 // indirect
7981
lukechampine.com/uint128 v1.2.0 // indirect
8082
modernc.org/cc/v3 v3.36.0 // indirect
8183
modernc.org/ccgo/v3 v3.16.8 // indirect

go.sum

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
7878
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
7979
github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg=
8080
github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
81+
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
8182
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
8283
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
8384
github.com/gookit/color v1.5.1 h1:Vjg2VEcdHpwq+oY63s/ksHrgJYCTo0bwWvmmYWdE9fQ=
@@ -86,6 +87,10 @@ github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T
8687
github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec h1:qv2VnGeEQHchGaZ/u7lxST/RaJw+cv273q79D81Xbog=
8788
github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec/go.mod h1:Q48J4R4DvxnHolD5P8pOtXigYlRuPLGl6moFx3ulM68=
8889
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
90+
github.com/huaweicloud/huaweicloud-sdk-go-obs v3.22.11+incompatible h1:bSww59mgbqFRGCRvlvfQutsptE3lRjNiU5C0YNT/bWw=
91+
github.com/huaweicloud/huaweicloud-sdk-go-obs v3.22.11+incompatible/go.mod h1:l7VUhRbTKCzdOacdT4oWCwATKyvZqUOlOqr0Ous3k4s=
92+
github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.15 h1:CpgaMg4GMIEl5TU+ts65j4QvXSgHvFaaNDnFVaUEr8s=
93+
github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.15/go.mod h1:QpZ96CRqyqd5fEODVmnzDNp3IWi5W95BFmWz1nfkq+s=
8994
github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
9095
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
9196
github.com/ivanpirog/coloredcobra v1.0.1 h1:aURSdEmlR90/tSiWS0dMjdwOvCVUeYLfltLfbgNxrN4=
@@ -102,6 +107,7 @@ github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGw
102107
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
103108
github.com/json-iterator/go v1.1.5 h1:gL2yXlmiIo4+t+y32d4WGwOjKGYcGOuyrg46vadswDE=
104109
github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
110+
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
105111
github.com/k0kubun/go-ansi v0.0.0-20180517002512-3bf9e2903213/go.mod h1:vNUNkEQ1e29fT/6vq2aBdFsgNPmy8qMdSay1npru+Sw=
106112
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
107113
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
@@ -134,10 +140,12 @@ github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db h1:62I3jR2Em
134140
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw=
135141
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
136142
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
143+
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
137144
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
138145
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
139146
github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
140147
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
148+
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
141149
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
142150
github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
143151
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
@@ -227,6 +235,8 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh
227235
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
228236
golang.org/x/crypto v0.0.0-20220131195533-30dcbda58838 h1:71vQrMauZZhcTVK6KdYM+rklehEEwb3E+ZhaE5jrPrE=
229237
golang.org/x/crypto v0.0.0-20220131195533-30dcbda58838/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
238+
golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e h1:T8NU3HyQ8ClP4SEE+KbFlg6n0NhuTsN4MyznaarGsZM=
239+
golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
230240
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
231241
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
232242
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
@@ -337,6 +347,8 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8
337347
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
338348
gopkg.in/ini.v1 v1.66.2 h1:XfR1dOYubytKy4Shzc2LHrrGhU0lDCfDGG1yLPmpgsI=
339349
gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
350+
gopkg.in/ini.v1 v1.66.6 h1:LATuAqN/shcYAOkv3wl2L4rkaKqkcgTBQjOyYDvcPKI=
351+
gopkg.in/ini.v1 v1.66.6/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
340352
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
341353
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
342354
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=

main.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"github.com/teamssix/cf/cmd"
55
_ "github.com/teamssix/cf/cmd/alibaba"
66
_ "github.com/teamssix/cf/cmd/aws"
7+
_ "github.com/teamssix/cf/cmd/huawei"
78
_ "github.com/teamssix/cf/cmd/tencent"
89
)
910

pkg/cloud/aws/awss3/s3ls.go

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -57,18 +57,16 @@ func FindBucketAcl(bucket string, region string) string {
5757
result, err := svc.GetBucketAcl(input)
5858
errutil.HandleErr(err)
5959
for _, v := range result.Grants {
60-
if *v.Grantee.Type == "Group" {
61-
if *v.Grantee.URI == "http://acs.amazonaws.com/groups/global/AllUsers" {
62-
switch *v.Permission {
63-
case "READ":
64-
read = 1
65-
case "WRITE":
66-
write = 2
67-
case "READ_ACP":
68-
readACP = 4
69-
case "WRITE_ACP":
70-
writeACP = 8
71-
}
60+
if *v.Grantee.Type == "Group" && *v.Grantee.URI == "http://acs.amazonaws.com/groups/global/AllUsers" {
61+
switch *v.Permission {
62+
case "READ":
63+
read = 1
64+
case "WRITE":
65+
write = 2
66+
case "READ_ACP":
67+
readACP = 4
68+
case "WRITE_ACP":
69+
writeACP = 8
7270
}
7371
}
7472
}
@@ -132,7 +130,7 @@ func PrintBucketsListRealTime(region string, s3LsObjectNumber string) {
132130
dataLen int
133131
)
134132
buckets := ListBuckets()
135-
log.Infof("获取到 %d 条 S3 Bucket 信息 (Obtained %d pieces of S3 Bucket information)", len(buckets), len(buckets))
133+
log.Infof("在全部区域下获取到 %d 条 S3 Bucket 信息 (Find %d S3 Bucket under all areas)", len(buckets), len(buckets))
136134
var data = make([][]string, len(buckets))
137135
for i, o := range buckets {
138136
SN := strconv.Itoa(i + 1)
@@ -154,7 +152,7 @@ func PrintBucketsListRealTime(region string, s3LsObjectNumber string) {
154152
if dataLen == 0 {
155153
log.Info("没发现存储桶 (No Buckets Found)")
156154
} else {
157-
Caption := "AWS 资源 (AWS resources)"
155+
Caption := "S3 资源 (S3 resources)"
158156
cloud.PrintTable(td, Caption)
159157
cmdutil.WriteCacheFile(td, "aws", "s3", "all", "all")
160158
util.WriteTimestamp(TimestampType)
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package huaweiobs
2+
3+
import (
4+
"github.com/huaweicloud/huaweicloud-sdk-go-obs/obs"
5+
log "github.com/sirupsen/logrus"
6+
"github.com/teamssix/cf/pkg/util/cmdutil"
7+
"github.com/teamssix/cf/pkg/util/errutil"
8+
"os"
9+
)
10+
11+
func obsClient(region string) *obs.ObsClient {
12+
var (
13+
obsClient *obs.ObsClient
14+
err error
15+
)
16+
config := cmdutil.GetConfig("huawei")
17+
if config.AccessKeyId == "" {
18+
log.Warnln("需要先配置访问密钥 (Access Key need to be configured first)")
19+
os.Exit(0)
20+
return nil
21+
} else {
22+
if region == "all" {
23+
region = "cn-north-1"
24+
}
25+
if config.STSToken == "" {
26+
obsClient, err = obs.New(config.AccessKeyId, config.AccessKeySecret, "https://obs."+region+".myhuaweicloud.com")
27+
} else {
28+
obsClient, err = obs.New(config.AccessKeyId, config.AccessKeySecret, "https://obs."+region+".myhuaweicloud.com", obs.WithSecurityToken(config.STSToken))
29+
}
30+
if err == nil {
31+
log.Traceln("obs Client 连接成功 (obs Client connection successful)")
32+
} else {
33+
errutil.HandleErr(err)
34+
}
35+
return obsClient
36+
}
37+
}

0 commit comments

Comments
 (0)