oss/lib/lcb.go (142 lines of code) (raw):

package lib import ( "fmt" oss "github.com/aliyun/aliyun-oss-go-sdk/oss" ) var specChineseListCloudBox = SpecText{ synopsisText: "列举云盒信息", paramText: "[options]", syntaxText: ` ossutil lcb [-e endpoint] `, detailHelpText: ` 该命令列举云盒的详细信息 `, sampleText: ` 1) ossutil lcb --sign-version v4 --region cn-hangzhou --cloudbox-id cb-abcdef `, } var specEnglishListCloudBox = SpecText{ synopsisText: "List cloud box information", paramText: "[options]", syntaxText: ` ossutil lcb [-e endpoint] `, detailHelpText: ` This command lists cloud box information `, sampleText: ` 1) ossutil lcb --sign-version v4 --region cn-hangzhou --cloudbox-id cb-abcdef `, } // LcbCommand is the command list region buckets or objects type LcbCommand struct { command Command } var lcbCommand = LcbCommand{ command: Command{ name: "lcb", nameAlias: []string{"lcb"}, minArgc: 0, maxArgc: 1, specChinese: specChineseListCloudBox, specEnglish: specEnglishListCloudBox, group: GroupTypeNormalCommand, validOptionNames: []string{ OptionConfigFile, OptionEndpoint, OptionAccessKeyID, OptionAccessKeySecret, OptionSTSToken, OptionProxyHost, OptionProxyUser, OptionProxyPwd, OptionRetryTimes, OptionLogLevel, OptionPassword, OptionMode, OptionECSRoleName, OptionTokenTimeout, OptionRamRoleArn, OptionExternalId, OptionRoleSessionName, OptionReadTimeout, OptionConnectTimeout, OptionSTSRegion, OptionSkipVerifyCert, OptionUserAgent, OptionRegion, OptionSignVersion, OptionLimitedNum, OptionMarker, OptionCloudBoxID, OptionForcePathStyle, }, }, } // function for FormatHelper interface func (lc *LcbCommand) formatHelpForWhole() string { return lc.command.formatHelpForWhole() } func (lc *LcbCommand) formatIndependHelp() string { return lc.command.formatIndependHelp() } // Init simulate inheritance, and polymorphism func (lc *LcbCommand) Init(args []string, options OptionMapType) error { return lc.command.Init(args, options, lc) } // RunCommand simulate inheritance, and polymorphism func (lc *LcbCommand) RunCommand() error { prefix := "" if len(lc.command.args) > 0 { cloudURL, err := CloudURLFromString(lc.command.args[0], "") if err != nil { return err } prefix = cloudURL.bucket } limitedNum, _ := GetInt(OptionLimitedNum, lc.command.options) vmarker, _ := GetString(OptionMarker, lc.command.options) if vmarker, err := lc.command.getRawMarker(vmarker); err != nil { return fmt.Errorf("invalid marker: %s, marker is not url encoded, %s", vmarker, err.Error()) } var num int64 num = 0 client, err := lc.command.ossClient("") if err != nil { return err } // list all cloudbox pre := oss.Prefix(prefix) marker := oss.Marker(vmarker) for limitedNum < 0 || num < limitedNum { lcr, err := lc.ossListCloudBoxesRetry(client, pre, marker) if err != nil { return err } pre = oss.Prefix(lcr.Prefix) marker = oss.Marker(lcr.NextMarker) for _, box := range lcr.CloudBoxes { if limitedNum >= 0 && num >= limitedNum { break } fmt.Printf("%-15s:%d\n", "No", num) fmt.Printf("%-15s:%s\n", "Id", box.ID) fmt.Printf("%-15s:%s\n", "Name", box.Name) fmt.Printf("%-15s:%s\n", "Owner", lcr.Owner) fmt.Printf("%-15s:%s\n", "Region", box.Region) fmt.Printf("%-15s:%s\n", "ControlEndpoint", box.ControlEndpoint) fmt.Printf("%-15s:%s\n", "DataEndpoint", box.DataEndpoint) fmt.Printf("----------------------------------------------------------------------\n") num++ } if !lcr.IsTruncated { break } } return nil } func (lc *LcbCommand) ossListCloudBoxesRetry(client *oss.Client, options ...oss.Option) (oss.ListCloudBoxResult, error) { retryTimes, _ := GetInt(OptionRetryTimes, lc.command.options) for i := 1; ; i++ { lbr, err := client.ListCloudBoxes(options...) if err == nil || int64(i) >= retryTimes { return lbr, err } } }