swift-manager 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. data/.gitignore +2 -0
  2. data/Gemfile +19 -0
  3. data/LICENSE +201 -0
  4. data/README.md +56 -0
  5. data/README.rdoc +8 -0
  6. data/Rakefile +38 -0
  7. data/bin/swift-manager +337 -0
  8. data/docs/examples.txt +407 -0
  9. data/html/CloudShell.html +308 -0
  10. data/html/CloudShell/Context.html +403 -0
  11. data/html/Configurator.html +270 -0
  12. data/html/Formatter.html +272 -0
  13. data/html/Object.html +165 -0
  14. data/html/Parser.html +291 -0
  15. data/html/README_rdoc.html +102 -0
  16. data/html/SwiftClient.html +656 -0
  17. data/html/SwiftManager.html +181 -0
  18. data/html/bin/swift-manager.html +103 -0
  19. data/html/created.rid +9 -0
  20. data/html/images/brick.png +0 -0
  21. data/html/images/brick_link.png +0 -0
  22. data/html/images/bug.png +0 -0
  23. data/html/images/bullet_black.png +0 -0
  24. data/html/images/bullet_toggle_minus.png +0 -0
  25. data/html/images/bullet_toggle_plus.png +0 -0
  26. data/html/images/date.png +0 -0
  27. data/html/images/find.png +0 -0
  28. data/html/images/loadingAnimation.gif +0 -0
  29. data/html/images/macFFBgHack.png +0 -0
  30. data/html/images/package.png +0 -0
  31. data/html/images/page_green.png +0 -0
  32. data/html/images/page_white_text.png +0 -0
  33. data/html/images/page_white_width.png +0 -0
  34. data/html/images/plugin.png +0 -0
  35. data/html/images/ruby.png +0 -0
  36. data/html/images/tag_green.png +0 -0
  37. data/html/images/wrench.png +0 -0
  38. data/html/images/wrench_orange.png +0 -0
  39. data/html/images/zoom.png +0 -0
  40. data/html/index.html +119 -0
  41. data/html/js/darkfish.js +116 -0
  42. data/html/js/jquery.js +32 -0
  43. data/html/js/quicksearch.js +114 -0
  44. data/html/js/thickbox-compressed.js +10 -0
  45. data/html/lib/cloud_shell_rb.html +75 -0
  46. data/html/lib/configurator_rb.html +75 -0
  47. data/html/lib/formatter_rb.html +75 -0
  48. data/html/lib/parser_rb.html +75 -0
  49. data/html/lib/swift-manager_version_rb.html +75 -0
  50. data/html/lib/swift_client_rb.html +75 -0
  51. data/html/rdoc.css +763 -0
  52. data/lib/cloud_shell.rb +127 -0
  53. data/lib/configurator.rb +69 -0
  54. data/lib/formatter.rb +42 -0
  55. data/lib/parser.rb +60 -0
  56. data/lib/swift-manager_version.rb +21 -0
  57. data/lib/swift_client.rb +172 -0
  58. data/swift-manager.gemspec +48 -0
  59. data/swift-manager.rdoc +2 -0
  60. data/test/tc_nothing.rb +14 -0
  61. metadata +174 -0
@@ -0,0 +1,2 @@
1
+ pkg/*
2
+ Gemfile.lock
data/Gemfile ADDED
@@ -0,0 +1,19 @@
1
+ #
2
+ # Author:: Murali Raju (<murali.raju@.com>)
3
+ # Copyright:: Copyright (c) 2011 Murali Raju.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+ source :rubygems
19
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,201 @@
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship, whether in Source or
36
+ Object form, made available under the License, as indicated by a
37
+ copyright notice that is included in or attached to the work
38
+ (an example is provided in the Appendix below).
39
+
40
+ "Derivative Works" shall mean any work, whether in Source or Object
41
+ form, that is based on (or derived from) the Work and for which the
42
+ editorial revisions, annotations, elaborations, or other modifications
43
+ represent, as a whole, an original work of authorship. For the purposes
44
+ of this License, Derivative Works shall not include works that remain
45
+ separable from, or merely link (or bind by name) to the interfaces of,
46
+ the Work and Derivative Works thereof.
47
+
48
+ "Contribution" shall mean any work of authorship, including
49
+ the original version of the Work and any modifications or additions
50
+ to that Work or Derivative Works thereof, that is intentionally
51
+ submitted to Licensor for inclusion in the Work by the copyright owner
52
+ or by an individual or Legal Entity authorized to submit on behalf of
53
+ the copyright owner. For the purposes of this definition, "submitted"
54
+ means any form of electronic, verbal, or written communication sent
55
+ to the Licensor or its representatives, including but not limited to
56
+ communication on electronic mailing lists, source code control systems,
57
+ and issue tracking systems that are managed by, or on behalf of, the
58
+ Licensor for the purpose of discussing and improving the Work, but
59
+ excluding communication that is conspicuously marked or otherwise
60
+ designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+ "Contributor" shall mean Licensor and any individual or Legal Entity
63
+ on behalf of whom a Contribution has been received by Licensor and
64
+ subsequently incorporated within the Work.
65
+
66
+ 2. Grant of Copyright License. Subject to the terms and conditions of
67
+ this License, each Contributor hereby grants to You a perpetual,
68
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+ copyright license to reproduce, prepare Derivative Works of,
70
+ publicly display, publicly perform, sublicense, and distribute the
71
+ Work and such Derivative Works in Source or Object form.
72
+
73
+ 3. Grant of Patent License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ (except as stated in this section) patent license to make, have made,
77
+ use, offer to sell, sell, import, and otherwise transfer the Work,
78
+ where such license applies only to those patent claims licensable
79
+ by such Contributor that are necessarily infringed by their
80
+ Contribution(s) alone or by combination of their Contribution(s)
81
+ with the Work to which such Contribution(s) was submitted. If You
82
+ institute patent litigation against any entity (including a
83
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+ or a Contribution incorporated within the Work constitutes direct
85
+ or contributory patent infringement, then any patent licenses
86
+ granted to You under this License for that Work shall terminate
87
+ as of the date such litigation is filed.
88
+
89
+ 4. Redistribution. You may reproduce and distribute copies of the
90
+ Work or Derivative Works thereof in any medium, with or without
91
+ modifications, and in Source or Object form, provided that You
92
+ meet the following conditions:
93
+
94
+ (a) You must give any other recipients of the Work or
95
+ Derivative Works a copy of this License; and
96
+
97
+ (b) You must cause any modified files to carry prominent notices
98
+ stating that You changed the files; and
99
+
100
+ (c) You must retain, in the Source form of any Derivative Works
101
+ that You distribute, all copyright, patent, trademark, and
102
+ attribution notices from the Source form of the Work,
103
+ excluding those notices that do not pertain to any part of
104
+ the Derivative Works; and
105
+
106
+ (d) If the Work includes a "NOTICE" text file as part of its
107
+ distribution, then any Derivative Works that You distribute must
108
+ include a readable copy of the attribution notices contained
109
+ within such NOTICE file, excluding those notices that do not
110
+ pertain to any part of the Derivative Works, in at least one
111
+ of the following places: within a NOTICE text file distributed
112
+ as part of the Derivative Works; within the Source form or
113
+ documentation, if provided along with the Derivative Works; or,
114
+ within a display generated by the Derivative Works, if and
115
+ wherever such third-party notices normally appear. The contents
116
+ of the NOTICE file are for informational purposes only and
117
+ do not modify the License. You may add Your own attribution
118
+ notices within Derivative Works that You distribute, alongside
119
+ or as an addendum to the NOTICE text from the Work, provided
120
+ that such additional attribution notices cannot be construed
121
+ as modifying the License.
122
+
123
+ You may add Your own copyright statement to Your modifications and
124
+ may provide additional or different license terms and conditions
125
+ for use, reproduction, or distribution of Your modifications, or
126
+ for any such Derivative Works as a whole, provided Your use,
127
+ reproduction, and distribution of the Work otherwise complies with
128
+ the conditions stated in this License.
129
+
130
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
131
+ any Contribution intentionally submitted for inclusion in the Work
132
+ by You to the Licensor shall be under the terms and conditions of
133
+ this License, without any additional terms or conditions.
134
+ Notwithstanding the above, nothing herein shall supersede or modify
135
+ the terms of any separate license agreement you may have executed
136
+ with Licensor regarding such Contributions.
137
+
138
+ 6. Trademarks. This License does not grant permission to use the trade
139
+ names, trademarks, service marks, or product names of the Licensor,
140
+ except as required for reasonable and customary use in describing the
141
+ origin of the Work and reproducing the content of the NOTICE file.
142
+
143
+ 7. Disclaimer of Warranty. Unless required by applicable law or
144
+ agreed to in writing, Licensor provides the Work (and each
145
+ Contributor provides its Contributions) on an "AS IS" BASIS,
146
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
+ implied, including, without limitation, any warranties or conditions
148
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
+ PARTICULAR PURPOSE. You are solely responsible for determining the
150
+ appropriateness of using or redistributing the Work and assume any
151
+ risks associated with Your exercise of permissions under this License.
152
+
153
+ 8. Limitation of Liability. In no event and under no legal theory,
154
+ whether in tort (including negligence), contract, or otherwise,
155
+ unless required by applicable law (such as deliberate and grossly
156
+ negligent acts) or agreed to in writing, shall any Contributor be
157
+ liable to You for damages, including any direct, indirect, special,
158
+ incidental, or consequential damages of any character arising as a
159
+ result of this License or out of the use or inability to use the
160
+ Work (including but not limited to damages for loss of goodwill,
161
+ work stoppage, computer failure or malfunction, or any and all
162
+ other commercial damages or losses), even if such Contributor
163
+ has been advised of the possibility of such damages.
164
+
165
+ 9. Accepting Warranty or Additional Liability. While redistributing
166
+ the Work or Derivative Works thereof, You may choose to offer,
167
+ and charge a fee for, acceptance of support, warranty, indemnity,
168
+ or other liability obligations and/or rights consistent with this
169
+ License. However, in accepting such obligations, You may act only
170
+ on Your own behalf and on Your sole responsibility, not on behalf
171
+ of any other Contributor, and only if You agree to indemnify,
172
+ defend, and hold each Contributor harmless for any liability
173
+ incurred by, or claims asserted against, such Contributor by reason
174
+ of your accepting any such warranty or additional liability.
175
+
176
+ END OF TERMS AND CONDITIONS
177
+
178
+ APPENDIX: How to apply the Apache License to your work.
179
+
180
+ To apply the Apache License to your work, attach the following
181
+ boilerplate notice, with the fields enclosed by brackets "[]"
182
+ replaced with your own identifying information. (Don't include
183
+ the brackets!) The text should be enclosed in the appropriate
184
+ comment syntax for the file format. We also recommend that a
185
+ file or class name and description of purpose be included on the
186
+ same "printed page" as the copyright notice for easier
187
+ identification within third-party archives.
188
+
189
+ Copyright [yyyy] [name of copyright owner]
190
+
191
+ Licensed under the Apache License, Version 2.0 (the "License");
192
+ you may not use this file except in compliance with the License.
193
+ You may obtain a copy of the License at
194
+
195
+ http://www.apache.org/licenses/LICENSE-2.0
196
+
197
+ Unless required by applicable law or agreed to in writing, software
198
+ distributed under the License is distributed on an "AS IS" BASIS,
199
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
+ See the License for the specific language governing permissions and
201
+ limitations under the License.
@@ -0,0 +1,56 @@
1
+ swift-manager (beta)
2
+ =====
3
+
4
+ swift-manager aims to be a Ruby based OpenStack Swift Client with a git-like interface used to test and manage native Swift and AWS S3 APIs. This version builds on the excellent Ruby Fog gem. Furture versions may use native JSON/XML. Currently uses JSON for configuration files located under ~/.swift-manager.
5
+
6
+ ##Audience
7
+
8
+ swift-manager is targeted towards Developers to test Swift or S3 APIs. However, anyone wanting to use it to test a Swift Cloud or S3 semantics may find it useful.
9
+
10
+ ##Features
11
+
12
+
13
+ Supported on Ruby 1.9.3-p125 and JRuby-1.6.7
14
+
15
+ 1. Ability to create/delete containers and objects in S3 and Swift native APIs. No CDN is supported at this time.
16
+ 2. Ability to list containers and objects (files)
17
+ 3. Batch jobs:
18
+ a. create containers at scale by providing a container prefix and the number of containers to create
19
+ b. upload files to a container (can be used for backups)
20
+ 4. Unix-like(read-only) shell to browse containers with TAB completion (very basic)
21
+
22
+ **Assumptions: The current implementation requires SSL at the Swift Proxy server due to Ruby Fog dependencies. Make sure to have the following in /etc/swift/proxy-server.conf
23
+
24
+ [DEFAULT]
25
+
26
+ cert_file = /etc/swift/cert.crt
27
+
28
+ key_file = /etc/swift/cert.key
29
+
30
+
31
+ ##Install
32
+
33
+ After installing Ruby or JRuby, run:
34
+
35
+ gem install swift-manager
36
+
37
+ ##Documentation
38
+
39
+ 1. swift-manager help command
40
+ 2. Read examples.txt in the docs directory
41
+
42
+ ####ToDos (Patches are Welcome!)
43
+
44
+ In addition to continued improvement in documentation...
45
+
46
+ 1. CDN support and CDN enable existing containers
47
+ 2. Shell support for listing objects
48
+ 3. Write support for Shell. Example, implement"create or touch commands" to create containers and objects
49
+ 4. More granulor metrics for create and delete containers/objects in order to test large requests (millions)
50
+ 5. Implement port, URL, and other parameters for Authentiation Configuration JSON
51
+
52
+
53
+
54
+
55
+
56
+
@@ -0,0 +1,8 @@
1
+ = swift-manager
2
+
3
+ A Ruby OpenStack Swift Client
4
+
5
+ :include:sling.rdoc
6
+
7
+
8
+
@@ -0,0 +1,38 @@
1
+ #
2
+ # Author:: Murali Raju (<murali.raju@.com>)
3
+ # Copyright:: Copyright (c) 2011 Murali Raju.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'rake/clean'
20
+ require 'rubygems'
21
+ require 'rdoc/task'
22
+ require "bundler/gem_tasks"
23
+
24
+ Rake::RDocTask.new do |rd|
25
+ rd.main = "README.rdoc"
26
+ rd.rdoc_files.include("README.rdoc","lib/**/*.rb","bin/**/*")
27
+ rd.title = 'swift-manager'
28
+ end
29
+
30
+
31
+
32
+ require 'rake/testtask'
33
+ Rake::TestTask.new do |t|
34
+ t.libs << "test"
35
+ t.test_files = FileList['test/tc_*.rb']
36
+ end
37
+
38
+ task :default => :test
@@ -0,0 +1,337 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Author:: Murali Raju (<murali.raju@.com>)
4
+ # Copyright:: Copyright (c) 2011 Murali Raju.
5
+ # License:: Apache License, Version 2.0
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+ unless File.respond_to? :realpath
20
+ class File #:nodoc:
21
+ def self.realpath path
22
+ return realpath(File.readlink(path)) if symlink?(path)
23
+ path
24
+ end
25
+ end
26
+ end
27
+ $: << File.expand_path(File.dirname(File.realpath(__FILE__)) + '/../lib')
28
+
29
+ require 'rubygems'
30
+ require 'irb'
31
+ require 'gli'
32
+ require 'swift-manager_version'
33
+ require 'rainbow'
34
+ require 'json'
35
+ require 'fog'
36
+ require 'progress_bar'
37
+ require 'terminal-table'
38
+ require 'configurator'
39
+ require 'parser'
40
+ require 'swift_client'
41
+ require 'cloud_shell'
42
+ require 'formatter'
43
+
44
+ include GLI
45
+ program_desc '[ OpenStack Swift Manager ]'.bright.color(:blue)
46
+ puts ''
47
+
48
+ version SwiftManager::VERSION
49
+
50
+ # desc 'Log output to ~/.swift-manager/log'
51
+ # switch [:l,:log]
52
+
53
+
54
+ desc 'Create Object Storage'
55
+ arg_name 'storage'
56
+ command :create do |c|
57
+
58
+ c.desc 'Type: s3 or swift'
59
+ c.flag [:t, :type]
60
+ c.desc 'Name: a prefix for the container. The result will be [prefix+timestamp] to be unique'
61
+ c.flag [:n, :name]
62
+ c.desc 'Auth Config'
63
+ c.flag [:f, :file]
64
+ c.desc 'Item: container, file'
65
+ c.flag [:i, :item]
66
+
67
+
68
+ c.action do |global_options,options,args|
69
+ type = options[:type]
70
+ name = options[:name]
71
+ file = options[:file]
72
+ item = options[:item]
73
+
74
+ case type
75
+ when 'swift', 's3'
76
+ swift_client = SwiftClient.new(type, file)
77
+ if item == 'container'
78
+ swift_client.create_container_no_cdn(name)
79
+ swift_client.list_containers
80
+ end
81
+ else
82
+ raise 'Incorrect options. Please try again or type \'swift-manager help create\''
83
+ end
84
+
85
+ end
86
+ end
87
+
88
+ desc 'Generate auth configurations'
89
+ arg_name 'config'
90
+ command :generate do |c|
91
+
92
+ c.desc 'Type: auth'
93
+ c.flag [:t, :type]
94
+ c.desc 'Provider: aws, rackspace (for swift)'
95
+ c.flag [:p, :provider]
96
+ c.desc 'Service: s3, swift'
97
+ c.flag [:s, :service]
98
+ c.desc 'Auth URL ip address: Swift '
99
+ c.flag [:i, :ip]
100
+ c.desc 'Secret Access Key or Swift API Key'
101
+ c.flag [:k, :secret_access_key]
102
+ c.desc 'Access Key ID or Swift Username: <user>:<user>'
103
+ c.flag [:a, :access_key_id]
104
+ c.desc 'Tag: Assign a tag for later use'
105
+ c.flag :tag
106
+
107
+ c.action do |global_options,options,args|
108
+
109
+ config_type = options[:type]
110
+ provider = options[:provider]
111
+ service = options[:service]
112
+ secret_access_key = options[:secret_access_key]
113
+ access_key_id = options[:access_key_id]
114
+ tag = options[:tag]
115
+ url_ip = options[:ip]
116
+
117
+ case config_type
118
+ when 'auth'
119
+ auth_config = Configurator.new
120
+ auth_hash = { :provider => provider, :service => service, :url_ip => url_ip,
121
+ :secret_access_key => secret_access_key, :access_key_id => access_key_id, :tag => tag }
122
+ auth_config.create_auth_config(auth_hash)
123
+ else
124
+ raise 'Incorrect options. Please try again or type \'swift-manager help setup\''
125
+ end
126
+
127
+
128
+
129
+ end
130
+ end
131
+
132
+ desc 'Delete Object Storage'
133
+ arg_name 'storage'
134
+ command :delete do |c|
135
+
136
+
137
+ c.desc 'Type: s3 or swift'
138
+ c.flag [:t, :type]
139
+ c.desc 'Auth Config'
140
+ c.flag [:f, :file]
141
+ c.desc 'Item: container, objects (all objects)'
142
+ c.flag [:i, :item]
143
+ c.desc 'Prefix of container'
144
+ c.flag [:p, :prefix]
145
+
146
+
147
+ c.action do |global_options,options,args|
148
+ type = options[:type]
149
+ file = options[:file]
150
+ item = options[:item]
151
+ prefix = options[:prefix]
152
+
153
+ case type
154
+ when 'swift', 's3'
155
+ swift_client = SwiftClient.new(type, file)
156
+ if item == 'container'
157
+ swift_client.delete_container(prefix)
158
+ elsif item == 'files'
159
+ swift_client.delete_objects(prefix)
160
+ end
161
+ else
162
+ raise 'Incorrect options. Please try again or type \'swift-manager help delete\''
163
+ end
164
+
165
+
166
+ end
167
+ end
168
+
169
+ desc 'Interactive Shell (Read-Only)'
170
+ arg_name 'container'
171
+ command :shell do |c|
172
+
173
+ c.desc 'Type: s3, swift'
174
+ c.flag [:t, :type]
175
+ c.desc 'Auth Config'
176
+ c.flag [:f, :file]
177
+
178
+ c.action do |global_options,options,args|
179
+ type = options[:type]
180
+ file = options[:file]
181
+
182
+ case type
183
+ when 'swift', 's3'
184
+ swift_client = SwiftClient.new(type, file)
185
+ swift_client.generate_json_output
186
+ shell = CloudShell.new
187
+ json = File.read(Dir.home + "/.swift-manager/shell/container.json")
188
+ shell.run(json)
189
+ end
190
+
191
+ end
192
+ end
193
+
194
+
195
+ desc 'List: configs, storage. Read examples.txt for more information'
196
+ arg_name 'config, storage'
197
+ command :list do |c|
198
+
199
+ c.desc 'Type: auth, s3, swift'
200
+ c.flag [:t, :type]
201
+ c.desc 'Authentication file (auth_file.json)'
202
+ c.flag [:f, :file]
203
+ c.desc 'Item: container, objects'
204
+ c.flag [:i, :item]
205
+ c.desc 'Name: container name used only when listing objects'
206
+ c.flag [:n, :name]
207
+
208
+ c.action do |global_options,options,args|
209
+ type = options[:type]
210
+ item = options[:item]
211
+ file = options[:file]
212
+ container_name = options[:name]
213
+
214
+ case type
215
+ when 'auth'
216
+ auth_config = Parser.new
217
+ auth_config.list_auth_configs
218
+ when 'swift', 's3'
219
+ swift_client = SwiftClient.new(type, file)
220
+ if item == 'container'
221
+ swift_client.list_containers
222
+ puts ''
223
+ elsif item == 'objects'
224
+ swift_client.list_objects(container_name)
225
+ puts ''
226
+ end
227
+ else
228
+ raise 'Incorrect option. Type \'swift-manager help list\' to see options'
229
+ end
230
+
231
+ end
232
+ end
233
+
234
+ desc 'Show Configuration Parameters'
235
+ arg_name 'config'
236
+ command :show do |c|
237
+
238
+ c.desc 'Type: auth'
239
+ c.flag [:t, :type]
240
+ c.desc 'File: config file'
241
+ c.flag [:f, :file]
242
+
243
+ c.action do |global_options,options,args|
244
+ type = options[:type]
245
+ file = options[:file]
246
+
247
+ case type
248
+ when 'auth'
249
+ config = Parser.new
250
+ config.show_auth_config(file)
251
+ end
252
+
253
+ end
254
+ end
255
+
256
+ desc 'Run batch jobs. Type \'swift-manager help run\' to see options '
257
+ arg_name 'job'
258
+ command :run do |c|
259
+
260
+
261
+ c.desc 'Type: s3, swift'
262
+ c.flag [:t, :type]
263
+ c.desc 'Auth Config'
264
+ c.flag [:f, :file]
265
+ c.desc 'Job: clean, create-containers, create-objects'
266
+ c.flag [:j, :job]
267
+ c.desc 'Source: Path to local directory containing the files. Make sure to include "" for the path'
268
+ c.flag [:s, :source]
269
+ c.desc 'Name of container to backup to. Run \'swift-manager list storage -t s3 -f <auth> -i container\''
270
+ c.flag [:d, :destination]
271
+ c.desc 'Prefix for containers or files'
272
+ c.flag [:p, :prefix]
273
+ c.desc 'N number'
274
+ c.flag [:n, :number]
275
+
276
+ c.action do |global_options,options,args|
277
+ type = options[:type]
278
+ file = options[:file]
279
+ job = options[:job]
280
+ source = options[:source].to_s
281
+ destination = options[:destination].to_s
282
+ number_of = options[:number].to_i
283
+ prefix = options[:prefix]
284
+
285
+ case type
286
+ when 'swift', 's3'
287
+ if job == 'create-objects'
288
+ swift_client = SwiftClient.new(type, file)
289
+ swift_client.create_objects(source, destination)
290
+ elsif job == 'clean'
291
+ swift_client = SwiftClient.new(type, file)
292
+ swift_client.delete_containers
293
+ elsif job == 'create-containers'
294
+ swift_client = SwiftClient.new(type, file)
295
+ puts "Creating #{number_of} containers...please wait".color(:green)
296
+ swift_client.create_containers_no_cdn(prefix, number_of)
297
+ puts ''
298
+ puts 'Create containers completed'.color(:green)
299
+ puts ''
300
+ end
301
+ else
302
+ raise 'Incorrect option. Type \'swift-manager help run\' to see options'
303
+ end
304
+
305
+
306
+ end
307
+ end
308
+
309
+
310
+
311
+ pre do |global,command,options,args|
312
+ # Pre logic here
313
+ # Return true to proceed; false to abourt and not call the
314
+ # chosen command
315
+ # Use skips_pre before a command to skip this block
316
+ # on that command only
317
+
318
+
319
+
320
+ true
321
+
322
+ end
323
+
324
+ post do |global,command,options,args|
325
+ # Post logic here
326
+ # Use skips_post before a command to skip this
327
+ # block on that command only
328
+
329
+ end
330
+
331
+ on_error do |exception|
332
+ # Error logic here
333
+ # return false to skip default error handling
334
+ true
335
+ end
336
+
337
+ exit GLI.run(ARGV)