Skip to content

Commit

Permalink
Merge pull request #381 from YangSen-qn/support-lifecycle
Browse files Browse the repository at this point in the history
Support lifecycle
  • Loading branch information
bachue authored May 8, 2023
2 parents 67a7c93 + 9255e55 commit bffde89
Show file tree
Hide file tree
Showing 44 changed files with 853 additions and 150 deletions.
Binary file removed .DS_Store
Binary file not shown.
92 changes: 47 additions & 45 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -225,51 +225,53 @@ qshell 命令配置 > 账号配置 > 全局配置
| user | 账号 | 列举账号信息,在各个账号之间切换, 删除账号 | [文档](docs/user.md) |

### 存储相关命令
| 命令 | 类别 | 描述 | 详细 |
|----------------| ------ |-----------------------------------------|------------------------------|
| mkbucket | 创建 | 创建存储空间 | [文档](docs/mkbucket.md) |
| bucket | 查看 | 查看存储空间信息 | [文档](docs/bucket.md) |
| batchdelete | 删除 | 批量删除七牛空间中的文件,可以直接根据 `listbucket` 的结果来删除 | [文档](docs/batchdelete.md) |
| delete | 删除 | 删除七牛空间中的一个文件 | [文档](docs/delete.md) |
| batchchgm | 修改 | 批量修改七牛空间中文件的MimeType | [文档](docs/batchchgm.md) |
| chgm | 修改 | 修改七牛空间中的一个文件的MimeType | [文档](docs/chgm.md) |
| batchchtype | 修改 | 批量修改七牛空间中的文件的存储类型 | [文档](docs/batchchtype.md) |
| chtype | 修改 | 修改七牛空间中的一个文件的存储类型 | [文档](docs/chtype.md) |
| batchexpire | 修改 | 批量修改七牛空间中的文件的生存时间 | [文档](docs/batchexpire.md) |
| expire | 修改 | 修改七牛空间中的一个文件的生存时间 | [文档](docs/expire.md) |
| batchcopy | 拷贝 | 批量复制七牛空间中的文件到另一个空间 | [文档](docs/batchcopy.md) |
| copy | 拷贝 | 复制七牛空间中的一个文件 | [文档](docs/copy.md) |
| batchmove | 移动 | 批量移动七牛空间中的文件到另一个空间 | [文档](docs/batchmove.md) |
| move | 移动 | 移动或重命名七牛空间中的一个文件 | [文档](docs/move.md) |
| batchrename | 重命名 | 批量重命名七牛空间中的文件 | [文档](docs/batchrename.md) |
| rename | 重命名 | 重命名七牛空间中的文件 | [文档](docs/rename.md) |
| batchrestorear | 解冻 | 批量解冻七牛空间中的归档/深度归档存储类型文件 | [文档](docs/batchrestorear.md) |
| restorear | 解冻 | 解冻七牛空间中的归档/深度归档存储类型文件 | [文档](docs/restorear.md) |
| batchstat | 查询 | 批量查询七牛空间中文件的基本信息 | [文档](docs/batchstat.md) |
| stat | 查询 | 查询七牛空间中一个文件的基本信息 | [文档](docs/stat.md) |
| buckets | 查询 | 获取当前账号下所有的空间名称 | [文档](docs/buckets.md) |
| domains | 查询 | 获取指定空间的所有关联域名 | [文档](docs/domains.md) |
| listbucket | 列举 | 列举七牛空间里面的所有文件 | [文档](docs/listbucket.md) |
| listbucket2 | 列举 | 列举七牛空间里面的所有文件 | [文档](docs/listbucket2.md) |
| batchforbidden | 禁用 | 批量修改文件可访问状态 | [文档](docs/batchforbidden.md) |
| forbidden | 禁用 | 修改文件可访问状态 | [文档](docs/forbidden.md) |
| fput | 上传 | 以文件表单的方式上传一个文件 | [文档](docs/fput.md) |
| rput | 上传 | 以分片上传的方式上传一个文件 | [文档](docs/rput.md) |
| qupload | 上传 | 同步数据到七牛空间, 带同步进度信息,和数据上传完整性检查(配置式) | [文档](docs/qupload.md) |
| qupload2 | 上传 | 同步数据到七牛空间, 带同步进度信息,和数据上传完整性检查(命令式) | [文档](docs/qupload2.md) |
| qdownload | 下载 | 从七牛空间同步数据到本地,支持只同步某些前缀的文件,支持增量同步(配置式) | [文档](docs/qdownload.md) |
| qdownload2 | 下载 | 从七牛空间同步数据到本地,支持只同步某些前缀的文件,支持增量同步(命令式) | [文档](docs/qdownload2.md) |
| get | 下载 | 下载存储空间中的文件 | [文档](docs/get.md) |
| fetch | 抓取 | 从Internet上抓取一个资源并存储到七牛空间中 | [文档](docs/fetch.md) |
| batchfetch | 抓取 | 从Internet上抓取一个资源并存储到七牛空间中 | [文档](docs/batchfetch.md) |
| sync | 抓取 | 从Internet上抓取一个资源并存储到七牛空间中,适合大文件的场合 | [文档](docs/sync.md) |
| abfetch | 抓取 | 异步抓取网络资源到七牛存储空间 | [文档](docs/abfetch.md) |
| m3u8delete | m3u8 | 根据流媒体播放列表文件删除七牛空间中的流媒体切片 | [文档](docs/m3u8delete.md) |
| m3u8replace | m3u8 | 修改流媒体播放列表文件中的切片引用域名 | [文档](docs/m3u8replace.md) |
| batchsign | 其他 | 批量根据资源的公开外链生成资源的私有外链 | [文档](docs/batchsign.md) |
| dircache | 其他 | 输出本地指定路径下所有的文件列表 | [文档](docs/dircache.md) |
| prefetch | 其他 | 更新七牛空间中从源站镜像过来的文件 | [文档](docs/prefetch.md) |
| privateurl | 其他 | 生成私有空间资源的访问外链 | [文档](docs/privateurl.md) |
| 命令 | 类别 | 描述 | 详细 |
|------------------|------|-----------------------------------------|-----------------------------|
| mkbucket | 创建 | 创建存储空间 | [文档](docs/mkbucket.md) |
| bucket | 查看 | 查看存储空间信息 | [文档](docs/bucket.md) |
| batchdelete | 删除 | 批量删除七牛空间中的文件,可以直接根据 `listbucket` 的结果来删除 | [文档](docs/batchdelete.md) |
| delete | 删除 | 删除七牛空间中的一个文件 | [文档](docs/delete.md) |
| batchchgm | 修改 | 批量修改七牛空间中文件的MimeType | [文档](docs/batchchgm.md) |
| chgm | 修改 | 修改七牛空间中的一个文件的MimeType | [文档](docs/chgm.md) |
| batchchtype | 修改 | 批量修改七牛空间中的文件的存储类型 | [文档](docs/batchchtype.md) |
| chtype | 修改 | 修改七牛空间中的一个文件的存储类型 | [文档](docs/chtype.md) |
| batchexpire | 修改 | 批量修改七牛空间中的文件的生存时间 | [文档](docs/batchexpire.md) |
| expire | 修改 | 修改七牛空间中的一个文件的生存时间 | [文档](docs/expire.md) |
| batchcopy | 拷贝 | 批量复制七牛空间中的文件到另一个空间 | [文档](docs/batchcopy.md) |
| copy | 拷贝 | 复制七牛空间中的一个文件 | [文档](docs/copy.md) |
| batchmove | 移动 | 批量移动七牛空间中的文件到另一个空间 | [文档](docs/batchmove.md) |
| move | 移动 | 移动或重命名七牛空间中的一个文件 | [文档](docs/move.md) |
| batchrename | 重命名 | 批量重命名七牛空间中的文件 | [文档](docs/batchrename.md) |
| rename | 重命名 | 重命名七牛空间中的文件 | [文档](docs/rename.md) |
| batchrestorear | 解冻 | 批量解冻七牛空间中的归档/深度归档存储类型文件 | [文档](docs/batchrestorear.md) |
| restorear | 解冻 | 解冻七牛空间中的归档/深度归档存储类型文件 | [文档](docs/restorear.md) |
| batchstat | 查询 | 批量查询七牛空间中文件的基本信息 | [文档](docs/batchstat.md) |
| stat | 查询 | 查询七牛空间中一个文件的基本信息 | [文档](docs/stat.md) |
| chlifecycle | 修改 | 修改七牛空间中一个文件的生命周期 | [文档](docs/chlifecycle.md) |
| batchchlifecycle | 修改 | 批量修改七牛空间中文件的生命周期 | [文档](docs/batchchlifecycle.md) |
| buckets | 查询 | 获取当前账号下所有的空间名称 | [文档](docs/buckets.md) |
| domains | 查询 | 获取指定空间的所有关联域名 | [文档](docs/domains.md) |
| listbucket | 列举 | 列举七牛空间里面的所有文件 | [文档](docs/listbucket.md) |
| listbucket2 | 列举 | 列举七牛空间里面的所有文件 | [文档](docs/listbucket2.md) |
| batchforbidden | 禁用 | 批量修改文件可访问状态 | [文档](docs/batchforbidden.md) |
| forbidden | 禁用 | 修改文件可访问状态 | [文档](docs/forbidden.md) |
| fput | 上传 | 以文件表单的方式上传一个文件 | [文档](docs/fput.md) |
| rput | 上传 | 以分片上传的方式上传一个文件 | [文档](docs/rput.md) |
| qupload | 上传 | 同步数据到七牛空间, 带同步进度信息,和数据上传完整性检查(配置式) | [文档](docs/qupload.md) |
| qupload2 | 上传 | 同步数据到七牛空间, 带同步进度信息,和数据上传完整性检查(命令式) | [文档](docs/qupload2.md) |
| qdownload | 下载 | 从七牛空间同步数据到本地,支持只同步某些前缀的文件,支持增量同步(配置式) | [文档](docs/qdownload.md) |
| qdownload2 | 下载 | 从七牛空间同步数据到本地,支持只同步某些前缀的文件,支持增量同步(命令式) | [文档](docs/qdownload2.md) |
| get | 下载 | 下载存储空间中的文件 | [文档](docs/get.md) |
| fetch | 抓取 | 从Internet上抓取一个资源并存储到七牛空间中 | [文档](docs/fetch.md) |
| batchfetch | 抓取 | 从Internet上抓取一个资源并存储到七牛空间中 | [文档](docs/batchfetch.md) |
| sync | 抓取 | 从Internet上抓取一个资源并存储到七牛空间中,适合大文件的场合 | [文档](docs/sync.md) |
| abfetch | 抓取 | 异步抓取网络资源到七牛存储空间 | [文档](docs/abfetch.md) |
| m3u8delete | m3u8 | 根据流媒体播放列表文件删除七牛空间中的流媒体切片 | [文档](docs/m3u8delete.md) |
| m3u8replace | m3u8 | 修改流媒体播放列表文件中的切片引用域名 | [文档](docs/m3u8replace.md) |
| batchsign | 其他 | 批量根据资源的公开外链生成资源的私有外链 | [文档](docs/batchsign.md) |
| dircache | 其他 | 输出本地指定路径下所有的文件列表 | [文档](docs/dircache.md) |
| prefetch | 其他 | 更新七牛空间中从源站镜像过来的文件 | [文档](docs/prefetch.md) |
| privateurl | 其他 | 生成私有空间资源的访问外链 | [文档](docs/privateurl.md) |


### CDN 相关的命令
Expand Down
29 changes: 29 additions & 0 deletions cmd/rs.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,34 @@ var deleteCmdBuilder = func(cfg *iqshell.Config) *cobra.Command {
return cmd
}

var changeLifecycleCmdBuilder = func(cfg *iqshell.Config) *cobra.Command {
var info = &operations.ChangeLifecycleInfo{}
var cmd = &cobra.Command{
Use: "chlifecycle <Bucket> <Key> [--to-ia-after-days <ToIAAfterDays>] [--to-archive-after-days <ToArchiveAfterDays>] [--to-deep-archive-after-days <ToDeepArchiveAfterDays>] [--delete-after-days <DeleteAfterDays>]",
Short: "Set the lifecycle of a file.",
Long: `Set the lifecycle of a file. Lifecycle value must great than or equal to -1, unit: day.
* less than -1: there's no point and it won't trigger any effect
* equal to -1: cancel lifecycle
* equal to 0: there's no point and it won't trigger any effect
* bigger than 0: set lifecycle`,
Run: func(cmd *cobra.Command, args []string) {
cfg.CmdCfg.CmdId = docs.ChangeLifecycle
if len(args) > 0 {
info.Bucket = args[0]
}
if len(args) > 1 {
info.Key = args[1]
}
operations.ChangeLifecycle(cfg, info)
},
}
cmd.Flags().IntVarP(&info.ToIAAfterDays, "to-ia-after-days", "", 0, "to IA storage after some days. the range is -1 or bigger than 0. -1 means cancel to IA storage")
cmd.Flags().IntVarP(&info.ToArchiveAfterDays, "to-archive-after-days", "", 0, "to archive storage after some days. the range is -1 or bigger than 0. -1 means cancel to archive storage")
cmd.Flags().IntVarP(&info.ToDeepArchiveAfterDays, "to-deep-archive-after-days", "", 0, "to deep archive storage after some days. the range is -1 or bigger than 0. -1 means cancel to deep archive storage")
cmd.Flags().IntVarP(&info.DeleteAfterDays, "delete-after-days", "", 0, "delete after some days. the range is -1 or bigger than 0. -1 means cancel to delete")
return cmd
}

var deleteAfterCmdBuilder = func(cfg *iqshell.Config) *cobra.Command {
var info = operations.DeleteAfterInfo{}
var cmd = &cobra.Command{
Expand Down Expand Up @@ -368,6 +396,7 @@ func rsCmdLoader(superCmd *cobra.Command, cfg *iqshell.Config) {
superCmd.AddCommand(
statCmdBuilder(cfg),
forbiddenCmdBuilder(cfg),
changeLifecycleCmdBuilder(cfg),
deleteCmdBuilder(cfg),
deleteAfterCmdBuilder(cfg),
moveCmdBuilder(cfg),
Expand Down
28 changes: 28 additions & 0 deletions cmd/rsbatch.go
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,33 @@ var batchDeleteAfterCmdBuilder = func(cfg *iqshell.Config) *cobra.Command {
return cmd
}

var batchChangeLifecycleCmdBuilder = func(cfg *iqshell.Config) *cobra.Command {
var info = operations.BatchChangeLifecycleInfo{}
var cmd = &cobra.Command{
Use: "batchchlifecycle <Bucket> [-i <KeyFile>] [--to-ia-after-days <ToIAAfterDays>] [--to-archive-after-days <ToArchiveAfterDays>] [--to-deep-archive-after-days <ToDeepArchiveAfterDays>] [--delete-after-days <DeleteAfterDays>]",
Short: "Set the lifecycle of some file.",
Long: `Set the lifecycle of some file. <KeyFile> contain all file keys that need to set. one key per line.
Lifecycle value must great than or equal to -1, unit: day.
* less than -1: there's no point and it won't trigger any effect
* equal to -1: cancel lifecycle
* equal to 0: there's no point and it won't trigger any effect
* bigger than 0: set lifecycle`,
Run: func(cmd *cobra.Command, args []string) {
cfg.CmdCfg.CmdId = docs.BatchChangeLifecycle
if len(args) > 0 {
info.Bucket = args[0]
}
operations.BatchChangeLifecycle(cfg, info)
},
}
cmd.Flags().IntVarP(&info.ToIAAfterDays, "to-ia-after-days", "", 0, "to IA storage after some days. the range is -1 or bigger than 0. -1 means cancel to IA storage")
cmd.Flags().IntVarP(&info.ToArchiveAfterDays, "to-archive-after-days", "", 0, "to archive storage after some days. the range is -1 or bigger than 0. -1 means cancel to archive storage")
cmd.Flags().IntVarP(&info.ToDeepArchiveAfterDays, "to-deep-archive-after-days", "", 0, "to deep archive storage after some days. the range is -1 or bigger than 0. -1 means cancel to deep archive storage")
cmd.Flags().IntVarP(&info.DeleteAfterDays, "delete-after-days", "", 0, "delete after some days. the range is -1 or bigger than 0. -1 means cancel to delete")
setBatchCmdDefaultFlags(cmd, &info.BatchInfo)
return cmd
}

var batchMoveCmdBuilder = func(cfg *iqshell.Config) *cobra.Command {
var info = operations.BatchMoveInfo{}
var cmd = &cobra.Command{
Expand Down Expand Up @@ -326,6 +353,7 @@ func rsBatchCmdLoader(superCmd *cobra.Command, cfg *iqshell.Config) {
batchMoveCmdBuilder(cfg),
batchRenameCmdBuilder(cfg),
batchDeleteCmdBuilder(cfg),
batchChangeLifecycleCmdBuilder(cfg),
batchDeleteAfterCmdBuilder(cfg),
batchChangeMimeCmdBuilder(cfg),
batchChangeTypeCmdBuilder(cfg),
Expand Down
8 changes: 4 additions & 4 deletions cmd_test/ali_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,23 +10,23 @@ import (

func TestAliBucketListNoDataCenter(t *testing.T) {
_, errs := test.RunCmdWithError("alilistbucket")
if !strings.Contains(errs, "DataCenter can't empty") {
if !strings.Contains(errs, "DataCenter can't be empty") {
t.Fatal("empty DataCenter check error")
}
return
}

func TestAliBucketListNoBucket(t *testing.T) {
_, errs := test.RunCmdWithError("alilistbucket", "DataCenter")
if !strings.Contains(errs, "Bucket can't empty") {
if !strings.Contains(errs, "Bucket can't be empty") {
t.Fatal("empty Bucket check error")
}
return
}

func TestAliBucketListNoAccessKeyId(t *testing.T) {
_, errs := test.RunCmdWithError("alilistbucket", "DataCenter", "Bucket")
if !strings.Contains(errs, "AccessKeyId can't empty") {
if !strings.Contains(errs, "AccessKeyId can't be empty") {
t.Fatal("empty AccessKeyId check error")
}

Expand All @@ -35,7 +35,7 @@ func TestAliBucketListNoAccessKeyId(t *testing.T) {

func TestAliBucketListNoAccessKeySecret(t *testing.T) {
_, errs := test.RunCmdWithError("alilistbucket", "DataCenter", "Bucket", "AccessKeyId")
if !strings.Contains(errs, "AccessKeySecret can't empty") {
if !strings.Contains(errs, "AccessKeySecret can't be empty") {
t.Fatal("empty AccessKeySecret check error")
}
return
Expand Down
10 changes: 5 additions & 5 deletions cmd_test/async_fetch_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,17 +44,17 @@ func TestAsyncFetch(t *testing.T) {
test.RemoveFile(successLogPath)
}()
if !test.IsFileHasContent(successLogPath) {
t.Fatal("success log can't empty")
t.Fatal("success log can't be empty")
}

if !test.IsFileHasContent(failLogPath) {
t.Fatal("fail log can't empty")
t.Fatal("fail log can't be empty")
}
}

func TestAsyncFetchNoBucket(t *testing.T) {
_, err := test.RunCmdWithError("abfetch")
if !strings.Contains(err, "Bucket can't empty") {
if !strings.Contains(err, "Bucket can't be empty") {
t.Fail()
}
}
Expand All @@ -73,14 +73,14 @@ func TestACheck(t *testing.T) {

func TestACheckNoId(t *testing.T) {
_, err := test.RunCmdWithError("acheck", test.Bucket)
if !strings.Contains(err, "Id can't empty") {
if !strings.Contains(err, "Id can't be empty") {
t.Fail()
}
}

func TestACheckNoBucket(t *testing.T) {
_, err := test.RunCmdWithError("acheck")
if !strings.Contains(err, "Bucket can't empty") {
if !strings.Contains(err, "Bucket can't be empty") {
t.Fail()
}
}
Expand Down
Loading

0 comments on commit bffde89

Please sign in to comment.