1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
use clap::{App, Arg, SubCommand};
pub fn build_cli<'a>(app: &str, home: &'a str, version: &'a str) -> App<'a, 'a> {
App::new(app)
.about("S3 Client Utility that can access AWS S3, Ceph or any third party S3 enable environment")
.author("Chris Jones <chris.jones@lambdastack.io>")
.version(version)
.after_help("For more information about a specific command, try `s3lsio <command> --help`\nSource code for s3lsio available at: https://github.com/lambdastackio/s3lsio")
.arg(Arg::with_name("generate-bash-completions")
.short("g")
.long("generate-bash-completions")
.help("Outputs bash completions"))
.arg(Arg::with_name("config")
.short("c")
.long("config")
.value_name("FILE")
.default_value(home)
.help("Sets a custom config file. Default is $HOME/.s3lsio/config")
.takes_value(true))
.arg(Arg::with_name("endpoint")
.short("e")
.long("endpoint")
.value_name("URL:<port>")
.help("Sets a custom endpoint URL:<port> (port is optional). Default is AWS default endpoints based on Region")
.takes_value(true))
.arg(Arg::with_name("output-color")
.short("l")
.long("output-color")
.default_value("green")
.value_name("green or red or blue or yellow or white or normal")
.help("Specifies the output color. Default is green.")
.takes_value(true))
.arg(Arg::with_name("output")
.short("o")
.long("output")
.default_value("pretty-json")
.value_name("pretty-json or json or plain or serialize")
.help("Specifies the output. Default is pretty-json. Options are json, pretty-json, plain and serialize")
.takes_value(true))
.arg(Arg::with_name("proxy")
.short("p")
.long("proxy")
.value_name("URL:<port>")
.help("Sets a custom proxy URL:<port>. Default is to ready http(s)_proxy")
.takes_value(true))
.arg(Arg::with_name("quiet")
.short("q")
.long("quiet")
.help("No output is produced"))
.arg(Arg::with_name("region")
.short("r")
.long("region")
.value_name("Region")
.default_value("UsEast1")
.help("Sets S3 Region. Default is UsEast1")
.takes_value(true))
.arg(Arg::with_name("signature")
.short("s")
.long("signature")
.value_name("V2 or V4")
.default_value("V4")
.help("Sets an API Signature version. Default is V4")
.takes_value(true))
.arg(Arg::with_name("yes")
.short("y")
.long("yes")
.help("Answer yes automatically"))
.subcommand(SubCommand::with_name("bucket")
.about("Perform all bucket specific operations. Example: bucket command <your bucket name>...")
.subcommand(SubCommand::with_name("create")
.about("Create a bucket")
.arg_from_usage("[name] 'Bucket name'"))
.subcommand(SubCommand::with_name("delete")
.about("Delete operation for bucket")
.arg_from_usage("[name] 'Bucket name'"))
.subcommand(SubCommand::with_name("get")
.about("Get operation for bucket")
.arg_from_usage("[name] 'Bucket name'")
.subcommand(SubCommand::with_name("acl")
.about("Returns the bucket ACLs"))
.subcommand(SubCommand::with_name("head")
.about("Returns the bucket head"))
.subcommand(SubCommand::with_name("versioning")
.about("Returns versioning")))
.subcommand(SubCommand::with_name("list")
.about("Lists the buckets"))
.subcommand(SubCommand::with_name("put")
.about("Put operation for bucket")
.arg_from_usage("[name] 'Bucket name'")
.subcommand(SubCommand::with_name("acl")
.about("Sets the bucket ACLs")
.subcommand(SubCommand::with_name("public-read")
.about("Allows the public to read the bucket content"))
.subcommand(SubCommand::with_name("public-readwrite")
.about("Allows the public to read/write the bucket content"))
.subcommand(SubCommand::with_name("public-rw")
.about("Allows the public to read/write the bucket content"))
.subcommand(SubCommand::with_name("private")
.about("Sets the bucket content to private")))
.subcommand(SubCommand::with_name("versioning")
.about("Enables versioning for a bucket"))))
.subcommand(SubCommand::with_name("object")
.about("Perform all object specific operations. Example: object <your bucket name> command <your object name> <options>...")
.arg_from_usage("[bucket] 'Bucket name'")
.subcommand(SubCommand::with_name("delete")
.about("DELETE operation for objects")
.arg_from_usage("[object] 'Object name'")
.arg_from_usage("[version] 'Object Version ID'"))
.subcommand(SubCommand::with_name("get")
.about("GET operations for objects")
.arg_from_usage("[object] 'Object name'")
.arg_from_usage("[path] 'Full file path'")
.subcommand(SubCommand::with_name("acl")
.about("Returns the object ACLs"))
.subcommand(SubCommand::with_name("head")
.about("Returns object metadata")))
.subcommand(SubCommand::with_name("list")
.about("Returns a list of objects for a bucket"))
.subcommand(SubCommand::with_name("put")
.about("PUT operations for objects")
.arg_from_usage("[object] 'Object name'")
.arg_from_usage("[path] 'Full file path'")
.subcommand(SubCommand::with_name("acl")
.about("Sets the Object ACLs")
.subcommand(SubCommand::with_name("public-read")
.about("Allows the public to read the object"))
.subcommand(SubCommand::with_name("public-readwrite")
.about("Allows the public to read/write the object"))
.subcommand(SubCommand::with_name("public-rw")
.about("Allows the public to read/write the object"))
.subcommand(SubCommand::with_name("private")
.about("Sets the object to private")))
.subcommand(SubCommand::with_name("key")
.about("Use as object key name")
.arg_from_usage("[key] 'Object Key'"))))
}