oss/lib/bucket_worm.go (222 lines of code) (raw):

package lib import ( "encoding/xml" "fmt" "strconv" "github.com/aliyun/aliyun-oss-go-sdk/oss" ) var specChineseWorm = SpecText{ synopsisText: "设置、删除、修改、提交bucket的Worm配置", paramText: "command_name bucket_url [days] [wormId] [options]", syntaxText: ` ossutil worm init oss://bucket days ossutil worm abort oss://bucket ossutil worm complete oss://bucket wormId ossutil worm extend oss://bucket days wormId ossutil worm get oss://bucket `, detailHelpText: ` worm命令通过设置第一个参数为init、abort、complete、extend、get,可以创建、删除、提交、修改或者查询bucket的worm配置 用法: 该命令有五种用法: 1) ossutil worm init oss://bucket days 这个命令创建worm配置,Object的保留天数为days 2) ossutil worm abort oss://bucket 这个命令删除bucket的Worm配置 3) ossutil worm complete oss://bucket wormId 这个命令提交worm配置,成功后worm状态将由InProgress变为Locked 4) ossutil worm extend oss://bucket days wormId 这个命令修改worm配置,将Object的保留天数修改为days 5) ossutil worm get oss://bucket 这个命令查询worm配置 `, sampleText: ` `, } var specEnglishWorm = SpecText{ synopsisText: "set、delete、complete、get bucket's worm configuration", paramText: "command_name bucket_url [days] [wormId] [options]", syntaxText: ` ossutil worm init oss://bucket days ossutil worm abort oss://bucket ossutil worm complete oss://bucket wormId ossutil worm extend oss://bucket days wormId ossutil worm get oss://bucket `, detailHelpText: ` The worm command can create, delete, complete, modify or get the worm configuration of the bucket by setting the first parameter to init, abort, complete, extend, and get Usage: There are 5 usages for this command: 1) ossutil worm init oss://bucket days This command creates a worm configuration, the object's retention period is days 2) ossutil worm abort oss://bucket This command deletes the worm configuration of the bucket 3) ossutil worm complete oss://bucket wormId This command complete the worm configuration. After success, the worm status will change from InProgress to Locked 4) ossutil worm extend oss://bucket days wormId This command modifies the worm configuration and changes the retention period of objects to days 5) ossutil worm get oss://bucket This command get worm configuration `, sampleText: ` `, } type wormOptionType struct { bucketName string wormConfig oss.WormConfiguration } type WormCommand struct { command Command wmOption wormOptionType } var wormCommand = WormCommand{ command: Command{ name: "worm", nameAlias: []string{"worm"}, minArgc: 2, maxArgc: 4, specChinese: specChineseWorm, specEnglish: specEnglishWorm, group: GroupTypeNormalCommand, validOptionNames: []string{ OptionConfigFile, OptionEndpoint, OptionAccessKeyID, OptionAccessKeySecret, OptionSTSToken, OptionProxyHost, OptionProxyUser, OptionProxyPwd, OptionLogLevel, OptionPassword, OptionMode, OptionECSRoleName, OptionTokenTimeout, OptionRamRoleArn, OptionRoleSessionName, OptionExternalId, OptionReadTimeout, OptionConnectTimeout, OptionSTSRegion, OptionSkipVerifyCert, OptionUserAgent, OptionSignVersion, OptionRegion, OptionCloudBoxID, OptionForcePathStyle, }, }, } // function for FormatHelper interface func (wormc *WormCommand) formatHelpForWhole() string { return wormc.command.formatHelpForWhole() } func (wormc *WormCommand) formatIndependHelp() string { return wormc.command.formatIndependHelp() } // Init simulate inheritance, and polymorphism func (wormc *WormCommand) Init(args []string, options OptionMapType) error { return wormc.command.Init(args, options, wormc) } // RunCommand simulate inheritance, and polymorphism func (wormc *WormCommand) RunCommand() error { // init all command name commandDict := make(map[string]string) commandDict["init"] = "init" commandDict["abort"] = "abort" commandDict["complete"] = "complete" commandDict["extend"] = "extend" commandDict["get"] = "get" // check command name strCommand := wormc.command.args[0] _, ok := commandDict[strCommand] if !ok { return fmt.Errorf("invalid parameter %s,which must be init, abort, complete, extend, get", strCommand) } bucketUrL, err := StorageURLFromString(wormc.command.args[1], "") if err != nil { return err } if !bucketUrL.IsCloudURL() { return fmt.Errorf("parameter is not a cloud url,url is %s", bucketUrL.ToString()) } cloudUrl := bucketUrL.(CloudURL) if cloudUrl.bucket == "" { return fmt.Errorf("bucket name is empty,url is %s", bucketUrL.ToString()) } wormc.wmOption.bucketName = cloudUrl.bucket if strCommand == "init" { err = wormc.InitiateBucketWorm() } else if strCommand == "abort" { err = wormc.AbortBucketWorm() } else if strCommand == "complete" { err = wormc.CompleteBucketWorm() } else if strCommand == "extend" { err = wormc.ExtendBucketWorm() } else if strCommand == "get" { err = wormc.GetBucketWorm() } return err } func (wormc *WormCommand) InitiateBucketWorm() error { if len(wormc.command.args) < 3 { return fmt.Errorf("missing parameter,the parameter day is empty") } retentionDays, err := strconv.Atoi(wormc.command.args[2]) if err != nil { return err } client, err := wormc.command.ossClient(wormc.wmOption.bucketName) if err != nil { return err } wormID, err := client.InitiateBucketWorm(wormc.wmOption.bucketName, retentionDays) if wormID != "" { fmt.Printf("init success,worm id is %s", wormID) } return err } func (wormc *WormCommand) AbortBucketWorm() error { client, err := wormc.command.ossClient(wormc.wmOption.bucketName) if err != nil { return err } return client.AbortBucketWorm(wormc.wmOption.bucketName) } func (wormc *WormCommand) CompleteBucketWorm() error { if len(wormc.command.args) < 3 { return fmt.Errorf("missing parameter,the wormId is empty") } client, err := wormc.command.ossClient(wormc.wmOption.bucketName) if err != nil { return err } return client.CompleteBucketWorm(wormc.wmOption.bucketName, wormc.command.args[2]) } func (wormc *WormCommand) ExtendBucketWorm() error { if len(wormc.command.args) < 4 { return fmt.Errorf("missing parameter, need 4 parameters") } retentionDays, err := strconv.Atoi(wormc.command.args[2]) if err != nil { return err } client, err := wormc.command.ossClient(wormc.wmOption.bucketName) if err != nil { return err } return client.ExtendBucketWorm(wormc.wmOption.bucketName, retentionDays, wormc.command.args[3]) } func (wormc *WormCommand) GetBucketWorm() error { client, err := wormc.command.ossClient(wormc.wmOption.bucketName) if err != nil { return err } wormConfig, err := client.GetBucketWorm(wormc.wmOption.bucketName) if err != nil { return err } wormc.wmOption.wormConfig = wormConfig output, err := xml.MarshalIndent(wormConfig, " ", " ") if err == nil { fmt.Println(string(output)) } return err }