Skip to content

Commit

Permalink
Merge c55e36b into e8f032c
Browse files Browse the repository at this point in the history
  • Loading branch information
kkuai committed Jun 13, 2019
2 parents e8f032c + c55e36b commit c1e4e76
Show file tree
Hide file tree
Showing 36 changed files with 1,898 additions and 2,001 deletions.
9 changes: 4 additions & 5 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,7 @@ script:
- "$HOME/gopath/bin/goveralls -coverprofile=coverage.out -service=travis-ci"
env:
global:
- secure: YO0OXWMcm0O+VH5xrQ66kKN/346bYnlLuk6hSbsR1Uvkg2OUkAXQVcIxnNkzCjSu2iYW8mvnx20GenjCLphlLK4n7vRBmRMhDm6UbHfi4ivVG7rx9q2Rl6q5Apd+TItafK9mxMaVxY7mSgMEgU4Mq9BMPP3bI7qfIvo5jJlpu6Lzr2PZKqLkVRzf0H+XoOdvKKz/HeneOztcMixhhKdq7IE60YG7lA+US67B43Ztgrw7B/LnieZGYtVqHnVvqc8LCBEuBYlSM1k3uPQZ8e8Un9An6KwpRcj4Ei94guvhN3SKuglVG93EUF2VluS+kuvHKQFsRHDOwU9vzPKUhmJ27HUSC4QC9IduiZ1NhWuCH8+yuaqjmeVmWEZu9XSSYn6/VIxD/DXPDTvfeyni256RatxIQLzgRrcmxzfHpfb7qQRQt9h0sqLOSeVDbyCUaufWZFR7WzPHGMVNEH2Z01zbjb7RTjdPPMP25PPPaNyERe4Udp1ezBuEdtaY3/UYMBxKqQNqZF23zXlJrl2srPZr1tASxBvU+vy7IIJUBVWYrWoPfoAGMMjXb8FhFeT/Ci/pTRnzBEBxL05Sz8T1KYRPWxQUtuFuV5JGcaP3epBSVGyMvI+p8cU2JnJC6d97lM5SAG9cWgevgvL7N1yBojK6w4lfi4kypEuhPGAOSCLhcGc=
- secure: R1DGbPdXHg6jMy9OfZBCpIU4+ksB/6GzTuVayGx5QGHUWIgZ7KJeaYQBNms+Gh615bGFKK4POl4F/TS/2eRjefhbF+vk7OGa101gZYt/H7eGWrDbmtL+kd/RU8f+jSXLV/qnakv8Owx02+ovSONLn++0jSWb4AnH+8uQV1z3gsGAIfaCmtkIRVWjnBbL6zS9drwRFW/jrldh3ivfK2/0CCJvJe2n0rv0pE0QzXI23IXHS5wlw8cQTU3Sxw4ozcPytu7+52vXRejKdqnWCUeDbcVvayVzuOX3UeHkm719aMncagw3M5V2lbGE9GhnSxN06fpwkxhsGXNAQhqz9qA8O8+3rK8Ibtq3vfGc6sNQPF+Q/13FwUStOof4lhV+wPKO9nBMp3tkMeoMw4t4zMw6vY3ZXsQqwQRpItLX7qSE93qy70Nmq9ZNFNYLD9YE4whV4sBbR1KFjXUOe4HacURN42wAaTJv3ZpSt7TTQULgRWYehQ+pVenmqzQQ9PON0VTvWmmV780+FdcqZPaTYfB3C/aFQZotuKiwFFzcK9gxrqtKj4g/6hFA8TtME46aeK5NskI1jyeCjLc/0PBL3Ff6r/IKHdZHGBDjHuep89ZXeh9NBC4hzijSVEywClk+sO97BQYXPe5rbGJysF1bp/4Kqwy/ZVeTWJAS2enxGdSfk/Q=
- secure: kLAGI8kNWrWCEPJDCyMAmKr6Z9TkgRSdR+eh93g8gfUjsEpePpP0PWBx+onnt0Ale62Ic9BZlj0Li8VUOgM1Cr6CRVDBiNj0Dj3PkdmovNWJwZG+C9KlD2UmMbaovOEBjoA4qw6TxdoY9hx9GWX3fduz2yDnK/lGuF6jb6gh1AjYYYMeQIFZhJ1WOgYAvdUEoXtolXQgv+HMhN13TU7v6VbNpkS3v3qP0vFoNhkFgIGS6Sa+NnEIB+YQGrQ8CoSUOh4CbJqT0LpUE7YQPRJsegGgQfQAVIB//fDsICGMiPI/QmBiKk3QuZpAViyGRc3CJm+GxYBJ6mEPRGxgSuPWH60YT+OWNzyiw07dT1u3XrqxAeyFGh9pCtW7UP5L5bWvFiOtZZhhBSPfaZE7RaukS9MCm2j7m3iPhqbu3TDFxwbD4UOXcuNTJa6UZWuwyereZjkiIFXfzYTGazvHKbx+8T627sXg5luKvuhAL9M+iEJOlezVtkCIEdkIVEC2q19I2KoZzc7Bzl+4lbq9gomDnul//sKbVQqjWoYQNwJmSRqxIkZf9Y8MIlyEwK3W8zyvi73oasBJJuxfEtlbN2bc0Su7HFnIQoEoG/+F5l7dZAKWS0qDy/Br/jGovnM9HoWAV6CQ+wyY9MmSxGO/PbK2XGWKmOXOs6VCXdaRO0Nz0DY=
- secure: NUcfrTX8QcD8k5qWe6DLkbVWkcTlm2GGzSzs8byp557ctmIqk/OWyzeWKHZZbzkKxKcwj3vdSPLldwE9XpfqB0zomZPus3NKcex3izvW4TCAevbqdDE1QbZiqQ9rUh9I3CrEmYkB7nCQ1LnNvXI0RRZkei6N9/AeUFE2NcxW+p2hp1BJvivT1EziEB1VjPpBHyKkikwdvqcpWCosB2ehZmt1EDuEZSVWDz3mxcjk8UBXbs4St7Pm6QWF9598DxY3EwCbvPtqjkPns92afrWshPpXhB+ioqUyyV6jn3JXV6tT8DinUW7u065YoSEURBb2XjTp+A2sYBnSAEvYNwsDkTqlcA0mwxZPolyPUaOXIxJmUt0GMVEB73rVZ16asZ0Zb2QSXN0lEg6nwOS4jRXOHkhCpYPhHDYdihkNb6D5Z6Mk1EbMhOJiq2Mql4FtRn/YcoKU1jFr0FSe4mrynS3yrDsMshn1VYTslp2UbQZGoZCe8VnTogJwC47vramO3/oDA00ZKSZW+kRznikhE/wD8Zh+J5jwIVqvYHFqxn0ZNAVSYz5miDO9Oa5hBl+FitQQgk67v9GMcJXxN3Z03IQrD3TK+djXsi8aX8HDv5SujXTmfgjTJMdPXR76gr/XsBVokmkXZYZDRhWQdZUqFPOQ1/87QyV86AQEdGAbabQ0eI0=
- secure: t0DjGUs3JBZOK8LvMwsVRKL23EJGFPhUcBrFxBVgt0ZPUfe5vMh/QBYesMhAZFNajKWE8g2UJa0ecURXSsnm5xpa7XF+f/12DRCR2/RqflY12/i8D8rc3V7hEmuK3TyBcu4ki+d3vgGdTm6EKgrk0n5x4U29O0hYApctPFCIJXZbU+J85KH8VVNL0uo6tnihzDcEgGe5o4SrCGqpzT4upEhw7jXeoy07118EgGCRvT6GeS6lJi6TbuIsAop7K+uVmEG6HXOpo7jzWcdf7aUGIWoVYwVeTcm9twUv6isbde5mVkkUGHMwDrzi+wv5QL/uv5qkk4fz+zYWqbWNN5QuS4kSgsinsGDNVkx69KaqoqXaYaxLH/TWvlQsvigA32vpKQXdb3NcEeZFABAOEgTl08bygJIAHYOOy9XPl5bEmHboyr7oMSkkqgHGn+rITNRFLhvXUKe/U9SYq4Rth3jcI0OzbSIW1ErNalC6ZW4g8kBKFDvYapE5W3EB8EmW2GkRWd3WgB2USPra5DwsLyq+7kLM06Otg8ZIzcYHNqU5HWpScB/xLrPDBZXYzF2/vjSoweSRCHoTQkEj4PecxMn8YE9cyGSC83HzzIwtQ1kmWoZ6kUtcYTENhq0SnRIK0JrdqbtNYx68ODhZAkFSBACG44ssjBuBEeHV7hXv+DKMIlc=
- secure: E4ecPKOTVmgnfEeT2xEBeS6M7LIcbl5GfuKFg5K6jLD9sWT7j2cFsaLvria18GM6n02ZhT2tPLERKfJGOLn24UylKKRiPl6/O6M3XrSFHHm/UGiUgafW6WE3j8mV741KDLH+NQhusUgfn+aMqHTYuE5j2HoS33PIXLJSEQYk/lZZ2oihwAuW3Ayke3XpIrXNJYulJC/UGfzV/TSC9dra20l2MtYyymZ0JRNtqx3r4AkeMJyiYCZxbaWBx2JMWQmZsYRptyuMyUwhFwzLwMzGXPcrs20kI4m5yaWKjtPAnDyKSfwaWHoBiO0nyfobr6ra2F8S7RQ2A/a9CXctM6k+yRVVAiXZy6od8g0Kg2UA3+K1EA2pGNMLAzDaz78AP4loAk4+aM2Hge8Djr4Nd9cyZiHDiyfJ7XDohKtyINv7WQTuzzWYejnEfgYFvfUPLmMmQf5a1TD6RUYkFaMPWqo1asFEUchW9STTQhoJsAaOjozR8iatpIQfUVkpfShSuWqqvHoMf4sBPXIsQDy/ekvTWxyz8fI5559jgjY7TTWdP0Ei57v3lxHb7Vt2nFCDIlxSiT6l4ZksEtrWhKhPfterCvw+gv0JqtaPEYwB2/HPe5F8ChzScOvG60QMLZE+XNUB/MNVfvUFT6UB+sSxgHebZABcC9Ye6CbxKonCGjkcCyw=
- secure: IPiTlRhZqrc3ObMEBLWyMVm0+Rz2DrhPfFQrY1ubIIw2X9pTnB9CCcYZc6SuJVHuc+rmLEukEZgoFO5dEGzuy5PQCJrq5PrcZ0Fg8zb6VjZV2iJU+k+kIKXFwnk2BznT1DQMLLsvEis7TdvKjQqoUl7u5rM8aBeXMctORsg+vQWBJyLmSpl4WQBsxbtoy+m5tLY15Yr138Qd4uZfaRJIPU7hz24XoqzwUev6bmvccVDZzJRLTfGoLdPKjnNZb767exb9LbhuNDCoXOHcT5cTT+Bsj/+gzKavWGByODYk4jBd9bMQlNwhlm6L6+lhXjZ3HtK0nID7S49BDOchpcbGvXCtxOEF5W1hUXtZhPaxlpb6/v9EOIOrhpnj9pIuymiqcOU7NlqJF6zHcJduBDhrywHeJZ9/v2kPbK/h9Y43uPKCIXsY/OU5Nq5IqfrHirPSmlOl27Dekc8ue6vJdBv986b5v82o585Xb6X+avF8FwIiYps7/IdPhcd3tT3zg5G8YZnsOpzgYVhEDTJT69PCCgAfw54a1QvPXTXcqCdvTyp9jKHwVZXMpOaQb+m6Ne+1KOa8wa+TmC7ylK3m8piLdXGrvC9DdU6U3wys5B/1+BsQFiqT3zVh/zNayspFw6N8dpWos+8aiM6H5Klnjqu0HyVKAR5dZ5z+jHuFpd29/2Y=
- secure: iHDR0VOXBqhfon23yWWYRDffY+eYWAuh2RaYLJ2kF+/6zjoFNutaC3I6/wd4bzOd3gsr9btcscvysUvX2J5nzpvG/q+mW8C+uyP2hZPDirDVjaCvPGaEDJWfeWKr3mJNhI7MYTBNaycUgEa1DYokZ75yZoBvXblWHIM/dlPRIUBYrYw7J90FWgoF061EaZtB5whWt5sgeKMYn0Dex3w7/Fioqzu/uKghNgZ3HmbTcDhTA6inr39cFI+DC8PeMGynR2isqyw3icwb2i06UroYnmDl5cyVwU3MJ8wRKz4zBHuc3Qg1idedXBzSnnPEZqzB0AAqAYnrudhNHSRXBHj8gd21apu/IJnsC+KjyiLiKoEs59+ekQM7UnYa5Ddy5sUBsrQQMQBqN684liIa6uFSd38PKDIGqygADqWQRzMUJjWIxXMtpNpeoZnbImTuhPuZGGDCTLuR9eXDlcE+puGTT3uCStLxmW9anUHx/n7jiqDJ/VuJ2zELAseadLjrAGbpcB6jHENWGQYstWaRC6sl31fdIUdShM2BLhtxcwQRzq+cigsySikYLe6wq+TthwAZG/tK5IHY+zYtI721r6R41ucExU/RuVvMAbjRoueCAdS0DzgZNGAuLCDgk4SsMJJf8IeKWblwZDhedAw9FM0S75FHLJSMukDQVb0MFqHWaRI=
- secure: WCLdz5dsgBAmmCXEq6kRNUGFtvH290pr1kG352c1NF1CufMHjKOfx+lf08u0/NntRbNB22NTZPXs/OC6iAYOfVooejRKjrKvpWVRvHXbT+27/bVvnFlTcgQgzn0hUdZtSFMN9V9JLoFsnMOPq4VnIX455mX4+S9DRVIGykcci0B+gUyI1r4rKp8+K6pX/JHpaD45SGrSZBOzeLZaNWhQw6uZ12pf+0G2XIn3ud+tmY5RYZubj5svjjaZ/xuUMHJ302BjA/iaxybhfOEMH+NVmdkzud3Mhd7zFbyp4jBgQOwAkS4BWcPG8R6khgRv34L4JD8VpqidbgeBIE7RrluoxgBGiil0AqhTKSvtS0v6A8swEkPFDxhzHjTYqLgVGNEgRDzIKLMhbquWFwXR1B4Dcm82Uii7pskH4/rk0C3KRAM7YGM3aJ0HdnTmoIFFCgJK48vpTAwO5gSGzCSLt2Axqu7xd3u07OHiMVjkPghnptgpoKJeqhr+B76Z2084U3KZK7/QOVVk7NkcyyF2TxCIHKNanI8/d0KMNZ5cBT6erNTNueSnAY/84JIkBKJ8LfKVbQSJ1c6V6un3GgCf53ikm+UP/f4m0ws8wg3C/WGBCrjjtPMPrOG52CLKnx5ywjUs45V3vvTjdqPwcd9KValL90LfCfhuOf6YMN4uh8Urq6c=
4 changes: 0 additions & 4 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@
## 版本号:v1.6.2 日期:2019-06-06
### 变更内容
- 增加:增加多版本versioning特性

## 版本号:v1.6.1 日期:2019-05-29
### 变更内容
- 增加:增加bucket-tagging命令
Expand Down
4 changes: 2 additions & 2 deletions README-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,15 @@
### [README of English](https://github.com/aliyun/ossutil/blob/master/README.md)

## 关于
- 此工具采用go语言,基于OSS[阿里云对象存储服务](http://www.aliyun.com/product/oss/)官方GO SDK v2.0.0alpha 构建。
- 此工具采用go语言,基于OSS[阿里云对象存储服务](http://www.aliyun.com/product/oss/)官方GO SDK v1.9.8 构建。
- 阿里云对象存储(Object Storage Service,简称OSS),是阿里云对外提供的海量,安全,低成本,高可靠的云存储服务。
- OSS适合存放任意文件类型,适合各种网站、开发企业及开发者使用。
- 该工具旨在为用户提供一个方便的,以命令行方式管理OSS数据的途径。
- 当前版本提供了列举和删除Multipart Uploads功能。
- 当前版本未提供Bucket管理功能功能,相关功能会在后续版本中开发。

## 版本
- 当前版本:v1.6.2
- 当前版本:v1.6.1

## 运行环境
- Linux
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,15 @@
### [README of Chinese](https://github.com/aliyun/ossutil/blob/master/README-CN.md)

## About
- This tool is developed with Go and built on the official GO SDK v2.0.0alpha of OSS [Alibaba Cloud Object Storage Service](http://www.aliyun.com/product/oss/).
- This tool is developed with Go and built on the official GO SDK v1.9.8 of OSS [Alibaba Cloud Object Storage Service](http://www.aliyun.com/product/oss/).
- OSS is a cloud storage service provided by Alibaba Cloud, featuring massive capacity, security, low cost, and high reliability.
- OSS can store any type of files. It applies to various websites, development enterprises and developers.
- This tool aims to provide a convenient-to-use command line for users to manage data in OSS.
- The current version provides to list and delete multipart upload tasks.
- The current version does not support bucket management. The feature will be available in future versions.

## Version
- Current version: v1.6.2
- Current version: v1.6.1

## Run environment
- Linux
Expand Down
File renamed without changes.
File renamed without changes.
3 changes: 1 addition & 2 deletions lib/bucket_encryption.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,7 @@ var specEnglishBucketEncryption = SpecText{
`,
detailHelpText: `
bucket-encryption command can set, get and delete the encryption configuration of the oss bucket by set method option value to put, get, delete
The option --sse-algorithm value can only be KMS, AES256.
If the --sse-algorithm option value is AES256, you cannot input the option --kms-masterkey-id
The option --sse-algorithm value can only be KMS, AES256, When the --sse-algorithm option value is AES256, you cannot input the option --kms-masterkey-id
Usage:
There are three usages for this command:
Expand Down
317 changes: 317 additions & 0 deletions lib/bucket_lifecycle.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,317 @@
package lib

import (
"encoding/xml"
"fmt"
"io/ioutil"
"os"
"strings"

oss "github.com/aliyun/aliyun-oss-go-sdk/oss"
)

var specChineseBucketLifeCycle = SpecText{
synopsisText: "设置、查询或者删除bucket的lifecycle配置",

paramText: "bucket_url local_xml_file [options]",

syntaxText: `
ossutil lifecycle --method put oss://bucket local_xml_file [options]
ossutil lifecycle --method get oss://bucket [local_file]
ossuitl lifecycle --method delete oss://bucket
`,
detailHelpText: `
lifecycle命令通过设置method选项值为put、get、delete,可以设置、查询或者删除bucket的lifecycle配置
用法:
该命令有三种用法:
1) ossutil lifecycle --method put oss://bucket local_xml_file [options]
这个命令从配置文件local_xml_file中读取lifecycle配置,然后设置bucket的lifecycle规则
配置文件是一个xml格式的文件,举例如下
<?xml version="1.0" encoding="UTF-8"?>
<LifecycleConfiguration>
<Rule>
<ID>RuleID</ID>
<Prefix>Prefix</Prefix>
<Status>Status</Status>
<Expiration>
<Days>Days</Days>
</Expiration>
<Transition>
<Days>Days</Days>
<StorageClass>StorageClass</StorageClass>
</Transition>
<AbortMultipartUpload>
<Days>Days</Days>
</AbortMultipartUpload>
</Rule>
</LifecycleConfiguration>
2) ossutil lifecycle --method get oss://bucket [local_xml_file]
这个命令查询bucket的lifecycle配置
如果输入参数local_xml_file,lifecycle配置将输出到该文件,否则输出到屏幕上
3) ossutil lifecycle --method delete oss://bucket
这个命令删除bucket的lifecycle配置
`,
sampleText: `
1) 设置bucket的lifecycle配置
ossutil lifecycle --method put oss://bucket local_xml_file
2) 查询bucket的lifecycle配置,结果输出到标准输出
ossutil lifecycle --method get oss://bucket
3) 查询bucket的lifecycle配置,结果输出到本地文件
ossutil lifecycle --method get oss://bucket local_xml_file
4) 删除bucket的lifecycle配置
ossutil lifecycle --method delete oss://bucket
`,
}

var specEnglishBucketLifeCycle = SpecText{
synopsisText: "Set、get or delete bucket lifecycle configuration",

paramText: "bucket_url lifecycle [options]",

syntaxText: `
ossutil lifecycle --method put oss://bucket local_xml_file [options]
ossutil lifecycle --method get oss://bucket [local_xml_file]
ossuitl lifecycle --method delete oss://bucket
`,
detailHelpText: `
lifecycle command can set、get and delete the lifecycle configuration of the oss bucket by
set method option value to put, get,delete
Usage:
There are three usages for this command:
1) ossutil lifecycle --method put oss://bucket local_xml_file [options]
The command sets the lifecycle configuration of bucket from local file local_xml_file
the local_xml_file is xml format
The following is an example of the contents of local_xml_file
<?xml version="1.0" encoding="UTF-8"?>
<LifecycleConfiguration>
<Rule>
<ID>RuleID</ID>
<Prefix>Prefix</Prefix>
<Status>Status</Status>
<Expiration>
<Days>Days</Days>
</Expiration>
<Transition>
<Days>Days</Days>
<StorageClass>StorageClass</StorageClass>
</Transition>
<AbortMultipartUpload>
<Days>Days</Days>
</AbortMultipartUpload>
</Rule>
</LifecycleConfiguration>
2) ossutil lifecycle --method get oss://bucket [local_xml_file]
The command gets the lifecycle configuration of bucket
If you input parameter local_xml_file,the configuration will be output to local_xml_file
If you don't input parameter local_xml_file,the configuration will be output to stdout
3) ossutil lifecycle --method delete oss://bucket
The command deletes the lifecycle configuration of bucket
`,
sampleText: `
1) put bucket lifecycle
ossutil lifecycle --method put oss://bucket local_xml_file
2) get lifecycle configuration to stdout
ossutil lifecycle --method get oss://bucket
3) get lifecycle configuration to local file
ossutil lifecycle --method get oss://bucket local_xml_file
5) delete lifecycle configuration
ossutil lifecycle --method delete oss://bucket
`,
}

type bucketLifeCycleOptionType struct {
bucketName string
}

type BucketLifeCycleCommand struct {
command Command
blOption bucketLifeCycleOptionType
}

var bucketLifeCycleCommand = BucketLifeCycleCommand{
command: Command{
name: "lifecycle",
nameAlias: []string{"lifecycle"},
minArgc: 1,
maxArgc: 2,
specChinese: specChineseBucketLifeCycle,
specEnglish: specEnglishBucketLifeCycle,
group: GroupTypeNormalCommand,
validOptionNames: []string{
OptionConfigFile,
OptionEndpoint,
OptionAccessKeyID,
OptionAccessKeySecret,
OptionSTSToken,
OptionLogLevel,
OptionMethod,
},
},
}

// function for FormatHelper interface
func (blc *BucketLifeCycleCommand) formatHelpForWhole() string {
return blc.command.formatHelpForWhole()
}

func (blc *BucketLifeCycleCommand) formatIndependHelp() string {
return blc.command.formatIndependHelp()
}

// Init simulate inheritance, and polymorphism
func (blc *BucketLifeCycleCommand) Init(args []string, options OptionMapType) error {
return blc.command.Init(args, options, blc)
}

// RunCommand simulate inheritance, and polymorphism
func (blc *BucketLifeCycleCommand) RunCommand() error {
strMethod, _ := GetString(OptionMethod, blc.command.options)
if strMethod == "" {
return fmt.Errorf("--method value is empty")
}

strMethod = strings.ToLower(strMethod)
if strMethod != "put" && strMethod != "get" && strMethod != "delete" {
return fmt.Errorf("--method value is not in the optional value:put|get|delete")
}

srcBucketUrL, err := GetCloudUrl(blc.command.args[0], "")
if err != nil {
return err
}

blc.blOption.bucketName = srcBucketUrL.bucket

if strMethod == "put" {
err = blc.PutBucketLifecycle()
} else if strMethod == "get" {
err = blc.GetBucketLifecycle()
} else if strMethod == "delete" {
err = blc.DeleteBucketLifecycle()
}
return err
}

func (blc *BucketLifeCycleCommand) PutBucketLifecycle() error {
if len(blc.command.args) < 2 {
return fmt.Errorf("put bucket lifecycle need at least 2 parameters,the local xml file is empty")
}

xmlFile := blc.command.args[1]
fileInfo, err := os.Stat(xmlFile)
if err != nil {
return err
}

if fileInfo.IsDir() {
return fmt.Errorf("%s is dir,not the expected file", xmlFile)
}

if fileInfo.Size() == 0 {
return fmt.Errorf("%s is empty file", xmlFile)
}

// parsing the xml file
file, err := os.Open(xmlFile)
if err != nil {
return err
}
defer file.Close()
text, err := ioutil.ReadAll(file)
if err != nil {
return err
}

rulesConfig := oss.LifecycleConfiguration{}
err = xml.Unmarshal(text, &rulesConfig)
if err != nil {
return err
}

// put bucket lifecycle
client, err := blc.command.ossClient(blc.blOption.bucketName)
if err != nil {
return err
}

return client.SetBucketLifecycle(blc.blOption.bucketName, rulesConfig.Rules)
}

func (blc *BucketLifeCycleCommand) confirm(str string) bool {
var val string
fmt.Printf(getClearStr(fmt.Sprintf("bucket lifecycle: overwrite \"%s\"(y or N)? ", str)))
if _, err := fmt.Scanln(&val); err != nil || (strings.ToLower(val) != "yes" && strings.ToLower(val) != "y") {
return false
}
return true
}

func (blc *BucketLifeCycleCommand) GetBucketLifecycle() error {
client, err := blc.command.ossClient(blc.blOption.bucketName)
if err != nil {
return err
}

lifeCycleRes, err := client.GetBucketLifecycle(blc.blOption.bucketName)
if err != nil {
return err
}

output, err := xml.MarshalIndent(lifeCycleRes, " ", " ")
if err != nil {
return err
}

var outFile *os.File
if len(blc.command.args) >= 2 {
fileName := blc.command.args[1]
_, err = os.Stat(fileName)
if err == nil {
bConitnue := blc.confirm(fileName)
if !bConitnue {
return nil
}
}

outFile, err = os.OpenFile(fileName, os.O_CREATE|os.O_TRUNC|os.O_RDWR, 0660)
if err != nil {
return err
}
defer outFile.Close()
} else {
outFile = os.Stdout
}

outFile.Write([]byte(xml.Header))
outFile.Write(output)

fmt.Printf("\n\n")

return nil
}

func (blc *BucketLifeCycleCommand) DeleteBucketLifecycle() error {
// delete bucket lifecycle
client, err := blc.command.ossClient(blc.blOption.bucketName)
if err != nil {
return err
}

return client.DeleteBucketLifecycle(blc.blOption.bucketName)
}

0 comments on commit c1e4e76

Please sign in to comment.