ruby-s3cmd 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Changelog +47 -0
- data/MIT-LICENSE +21 -0
- data/README +19 -0
- data/lib/ruby-s3cmd/s3cmd.rb +740 -0
- data/lib/ruby-s3cmd/version.rb +10 -0
- data/lib/ruby-s3cmd.rb +12 -0
- data/setup.rb +1585 -0
- data/test/test_helper.rb +2 -0
- data/test/test_ruby_s3cmd.rb +11 -0
- metadata +75 -0
@@ -0,0 +1,740 @@
|
|
1
|
+
# = ruby-s3cmd - A gem providing a ruby interface to s3cmd Amazon S3 client.
|
2
|
+
#
|
3
|
+
# Homepage:: http://github.com/jjuliano/ruby-s3cmd
|
4
|
+
# Author:: Joel Bryan Juliano
|
5
|
+
# Copyright:: (cc) 2011 Joel Bryan Juliano
|
6
|
+
# License:: MIT
|
7
|
+
#
|
8
|
+
|
9
|
+
#
|
10
|
+
# class RubyS3CMD::S3Cmd.new( array, str, array)
|
11
|
+
#
|
12
|
+
class RubyS3Cmd::S3Cmd
|
13
|
+
|
14
|
+
#
|
15
|
+
# Options common for all commands (where it makes sense indeed)
|
16
|
+
#
|
17
|
+
|
18
|
+
#
|
19
|
+
# Recursive upload, download or removal. When used with del it can remove all the files in a bucket.
|
20
|
+
#
|
21
|
+
attr_accessor :recursive
|
22
|
+
|
23
|
+
#
|
24
|
+
# Force overwrite and other dangerous operations. Can be used to remove a non-empty buckets with s3cmd
|
25
|
+
# rb --force s3://bkt
|
26
|
+
#
|
27
|
+
attr_accessor :force
|
28
|
+
|
29
|
+
#
|
30
|
+
# Specify datacentre where to create the bucket. Possible values are US (default) or EU.
|
31
|
+
#
|
32
|
+
attr_accessor :bucket_location
|
33
|
+
|
34
|
+
#
|
35
|
+
# Print sizes in human readable form.
|
36
|
+
#
|
37
|
+
attr_accessor :human_readable_sizes
|
38
|
+
|
39
|
+
#
|
40
|
+
# Include MD5 sums in bucket listings (only for ls command).
|
41
|
+
#
|
42
|
+
attr_accessor :list_md5
|
43
|
+
|
44
|
+
#
|
45
|
+
# Display or don't display progress meter. When running on TTY (e.g. console or xterm) the default is
|
46
|
+
# to display progress meter. If not on TTY (e.g. output is redirected somewhere or running from cron)
|
47
|
+
# the default is to not display progress meter.
|
48
|
+
#
|
49
|
+
attr_accessor :progress, :no_progress
|
50
|
+
|
51
|
+
#
|
52
|
+
# Override autodetected terminal and filesystem encoding (character set).
|
53
|
+
#
|
54
|
+
attr_accessor :encoding
|
55
|
+
|
56
|
+
#
|
57
|
+
# Enable verbose output.
|
58
|
+
#
|
59
|
+
attr_accessor :verbose
|
60
|
+
|
61
|
+
#
|
62
|
+
# Enable debug output.
|
63
|
+
#
|
64
|
+
attr_accessor :debug
|
65
|
+
|
66
|
+
#
|
67
|
+
# Config file related options.
|
68
|
+
#
|
69
|
+
|
70
|
+
#
|
71
|
+
# Config file name. Defaults to $HOME/.s3cfg
|
72
|
+
#
|
73
|
+
attr_accessor :config
|
74
|
+
|
75
|
+
#
|
76
|
+
# Options specific for file transfer commands (sync, put and get):
|
77
|
+
#
|
78
|
+
|
79
|
+
#
|
80
|
+
# Only show what should be uploaded or downloaded but don't actually do it. May still perform S3
|
81
|
+
# requests to get bucket listings and other in formation though.
|
82
|
+
#
|
83
|
+
attr_accessor :dry_run
|
84
|
+
|
85
|
+
#
|
86
|
+
# Delete remote objects with no corresponding local file when syncing to S3 or delete local files with
|
87
|
+
# no corresponding object in S3 when syncing from S3.
|
88
|
+
#
|
89
|
+
attr_accessor :delete_removed
|
90
|
+
|
91
|
+
#
|
92
|
+
# Don't delete remote objects. Default for sync command.
|
93
|
+
#
|
94
|
+
attr_accessor :no_delete_removed
|
95
|
+
|
96
|
+
#
|
97
|
+
# Preserve filesystem attributes (mode, ownership, timestamps). Default for sync command.
|
98
|
+
#
|
99
|
+
attr_accessor :preserve
|
100
|
+
|
101
|
+
#
|
102
|
+
# Don't store filesystem attributes with uploaded files.
|
103
|
+
#
|
104
|
+
attr_accessor :no_preserve
|
105
|
+
|
106
|
+
#
|
107
|
+
# Exclude files matching GLOB (a.k.a. shell-style wildcard) from sync. See FILE TRANSFERS section and
|
108
|
+
# http://s3tools.org/s3cmd-sync for more information.
|
109
|
+
#
|
110
|
+
attr_accessor :exclude # GLOB
|
111
|
+
|
112
|
+
#
|
113
|
+
# Same as --exclude but reads GLOBs from the given FILE instead of expecting them on the command line.
|
114
|
+
#
|
115
|
+
attr_accessor :exclude_from # FILE
|
116
|
+
|
117
|
+
#
|
118
|
+
# Same as --exclude but works with REGEXPs (Regular expressions).
|
119
|
+
#
|
120
|
+
attr_accessor :rexclude # REGEXP
|
121
|
+
|
122
|
+
#
|
123
|
+
# Same as --exclude-from but works with REGEXPs.
|
124
|
+
#
|
125
|
+
attr_accessor :rexclude_from # FILE
|
126
|
+
|
127
|
+
#
|
128
|
+
# Filenames and paths matching GLOB or REGEXP will be included even if previously excluded by one of
|
129
|
+
# --(r)exclude(-from) patterns
|
130
|
+
#
|
131
|
+
attr_accessor :include # GLOB
|
132
|
+
attr_accessor :include_from # FILE
|
133
|
+
attr_accessor :rinclude # REGEXP
|
134
|
+
attr_accessor :rinclude_from # FILE
|
135
|
+
|
136
|
+
#
|
137
|
+
# Continue getting a partially downloaded file (only for get command). This comes handy once download
|
138
|
+
# of a large file, say an ISO image, from a S3 bucket fails and a partially downloaded file is left on
|
139
|
+
# the disk. Unfortunately put command doesn't support restarting of failed upload due to Amazon S3
|
140
|
+
# limitations.
|
141
|
+
#
|
142
|
+
attr_accessor :continue
|
143
|
+
|
144
|
+
#
|
145
|
+
# Skip over files that exist at the destination (only for get and sync commands).
|
146
|
+
#
|
147
|
+
attr_accessor :skip_existing
|
148
|
+
|
149
|
+
#
|
150
|
+
# Default MIME-type to be set for objects stored.
|
151
|
+
#
|
152
|
+
attr_accessor :mime_type # MIME/TYPE
|
153
|
+
|
154
|
+
#
|
155
|
+
# Guess MIME‐type of files by their extension. Falls back to default MIME‐Type as specified by
|
156
|
+
# --mime-type option
|
157
|
+
#
|
158
|
+
attr_accessor :guess_mime_type
|
159
|
+
|
160
|
+
#
|
161
|
+
# Add a given HTTP header to the upload request. Can be used multiple times with different header
|
162
|
+
# names. For instance set 'Expires' or 'Cache-Control' headers (or both) using this options if you
|
163
|
+
# like.
|
164
|
+
#
|
165
|
+
attr_accessor :add_header # NAME:VALUE
|
166
|
+
|
167
|
+
#
|
168
|
+
# Store objects with permissions allowing read for anyone. See http://s3tools.org/s3cmd-public for
|
169
|
+
# details and hints for storing publicly accessible files.
|
170
|
+
#
|
171
|
+
attr_accessor :acl_public
|
172
|
+
|
173
|
+
#
|
174
|
+
# Store objects with default ACL allowing access for you only.
|
175
|
+
#
|
176
|
+
attr_accessor :acl_private
|
177
|
+
|
178
|
+
#
|
179
|
+
# Use GPG encryption to protect stored objects from unauthorized access. See http://s3tools.org/s3cmd-
|
180
|
+
# public for details about encryption.
|
181
|
+
#
|
182
|
+
attr_accessor :encrypt
|
183
|
+
|
184
|
+
#
|
185
|
+
# Don't encrypt files.
|
186
|
+
#
|
187
|
+
attr_accessor :no_encrypt
|
188
|
+
|
189
|
+
#
|
190
|
+
# Options for CloudFront commands
|
191
|
+
#
|
192
|
+
# See http://s3tools.org/s3cmd-cloudfront for more details.
|
193
|
+
#
|
194
|
+
|
195
|
+
#
|
196
|
+
# Enable given CloudFront distribution (only for cfmodify command)
|
197
|
+
#
|
198
|
+
attr_accessor :enable
|
199
|
+
|
200
|
+
#
|
201
|
+
# Enable given CloudFront distribution (only for cfmodify command)
|
202
|
+
#
|
203
|
+
attr_accessor :disable
|
204
|
+
|
205
|
+
#
|
206
|
+
# Add given CNAME to a CloudFront distribution (only for cfcreate and cfmodify commands)
|
207
|
+
#
|
208
|
+
attr_accessor :cf_add_cname # CNAME
|
209
|
+
|
210
|
+
#
|
211
|
+
# Remove given CNAME from a CloudFront distribution (only for cfmodify command)
|
212
|
+
#
|
213
|
+
attr_accessor :cf_remove_cname # CNAME
|
214
|
+
|
215
|
+
#
|
216
|
+
# Set COMMENT for a given CloudFront distribution (only for cfcreate and cfmodify commands)
|
217
|
+
#
|
218
|
+
attr_accessor :cf_comment # COMMENT
|
219
|
+
|
220
|
+
#
|
221
|
+
# Sets the executable path, otherwise the environment path will be used.
|
222
|
+
#
|
223
|
+
attr_accessor :path_to_s3cmd
|
224
|
+
|
225
|
+
#
|
226
|
+
# Returns a new RubyS3CMD::S3Cmd Object
|
227
|
+
#
|
228
|
+
def initialize()
|
229
|
+
end
|
230
|
+
|
231
|
+
#
|
232
|
+
# Show the help message and exit
|
233
|
+
#
|
234
|
+
def help
|
235
|
+
tmp = Tempfile.new('tmp')
|
236
|
+
command = option_string() + "--help " + " 2> " + tmp.path
|
237
|
+
success = system(command)
|
238
|
+
if success
|
239
|
+
begin
|
240
|
+
while (line = tmp.readline)
|
241
|
+
line.chomp
|
242
|
+
selected_string = line
|
243
|
+
end
|
244
|
+
rescue EOFError
|
245
|
+
tmp.close
|
246
|
+
end
|
247
|
+
return selected_string
|
248
|
+
else
|
249
|
+
tmp.close!
|
250
|
+
return success
|
251
|
+
end
|
252
|
+
end
|
253
|
+
|
254
|
+
#
|
255
|
+
# Show s3cmd version and exit.
|
256
|
+
#
|
257
|
+
def version
|
258
|
+
tmp = Tempfile.new('tmp')
|
259
|
+
command = option_string() + "--version " + " 2> " + tmp.path
|
260
|
+
success = system(command)
|
261
|
+
if success
|
262
|
+
begin
|
263
|
+
while (line = tmp.readline)
|
264
|
+
line.chomp
|
265
|
+
selected_string = line
|
266
|
+
end
|
267
|
+
rescue EOFError
|
268
|
+
tmp.close
|
269
|
+
end
|
270
|
+
return selected_string
|
271
|
+
else
|
272
|
+
tmp.close!
|
273
|
+
return success
|
274
|
+
end
|
275
|
+
end
|
276
|
+
|
277
|
+
#
|
278
|
+
# Invoke interactive (re)configuration tool. Don't worry, you won't lose your settings on subsequent
|
279
|
+
# runs.
|
280
|
+
#
|
281
|
+
def configure
|
282
|
+
tmp = Tempfile.new('tmp')
|
283
|
+
command = option_string() + "--configure " + " 2> " + tmp.path
|
284
|
+
success = system(command)
|
285
|
+
if success
|
286
|
+
begin
|
287
|
+
while (line = tmp.readline)
|
288
|
+
line.chomp
|
289
|
+
selected_string = line
|
290
|
+
end
|
291
|
+
rescue EOFError
|
292
|
+
tmp.close
|
293
|
+
end
|
294
|
+
return selected_string
|
295
|
+
else
|
296
|
+
tmp.close!
|
297
|
+
return success
|
298
|
+
end
|
299
|
+
end
|
300
|
+
|
301
|
+
#
|
302
|
+
# Dump current configuration after parsing config files and command line options and exit.
|
303
|
+
#
|
304
|
+
def dump_config
|
305
|
+
tmp = Tempfile.new('tmp')
|
306
|
+
command = option_string() + "--dump-config " + " 2> " + tmp.path
|
307
|
+
success = system(command)
|
308
|
+
if success
|
309
|
+
begin
|
310
|
+
while (line = tmp.readline)
|
311
|
+
line.chomp
|
312
|
+
selected_string = line
|
313
|
+
end
|
314
|
+
rescue EOFError
|
315
|
+
tmp.close
|
316
|
+
end
|
317
|
+
return selected_string
|
318
|
+
else
|
319
|
+
tmp.close!
|
320
|
+
return success
|
321
|
+
end
|
322
|
+
end
|
323
|
+
|
324
|
+
# Make bucket
|
325
|
+
def mb(bucket) # s3://BUCKET
|
326
|
+
tmp = Tempfile.new('tmp')
|
327
|
+
command = option_string() + "mb " + bucket.to_s + " 2> " + tmp.path
|
328
|
+
success = system(command)
|
329
|
+
if success
|
330
|
+
begin
|
331
|
+
while (line = tmp.readline)
|
332
|
+
line.chomp
|
333
|
+
selected_string = line
|
334
|
+
end
|
335
|
+
rescue EOFError
|
336
|
+
tmp.close
|
337
|
+
end
|
338
|
+
return selected_string
|
339
|
+
else
|
340
|
+
tmp.close!
|
341
|
+
return success
|
342
|
+
end
|
343
|
+
end
|
344
|
+
|
345
|
+
# Remove bucket
|
346
|
+
def rb(bucket) # s3://BUCKET
|
347
|
+
tmp = Tempfile.new('tmp')
|
348
|
+
command = option_string() + "rb " + bucket.to_s + " 2> " + tmp.path
|
349
|
+
success = system(command)
|
350
|
+
if success
|
351
|
+
begin
|
352
|
+
while (line = tmp.readline)
|
353
|
+
line.chomp
|
354
|
+
selected_string = line
|
355
|
+
end
|
356
|
+
rescue EOFError
|
357
|
+
tmp.close
|
358
|
+
end
|
359
|
+
return selected_string
|
360
|
+
else
|
361
|
+
tmp.close!
|
362
|
+
return success
|
363
|
+
end
|
364
|
+
end
|
365
|
+
|
366
|
+
# List objects or buckets
|
367
|
+
def ls(bucket) # s3://BUCKET[/PREFIX]]
|
368
|
+
tmp = Tempfile.new('tmp')
|
369
|
+
command = option_string() + "ls " + bucket.to_s + " 2> " + tmp.path
|
370
|
+
success = system(command)
|
371
|
+
if success
|
372
|
+
begin
|
373
|
+
while (line = tmp.readline)
|
374
|
+
line.chomp
|
375
|
+
selected_string = line
|
376
|
+
end
|
377
|
+
rescue EOFError
|
378
|
+
tmp.close
|
379
|
+
end
|
380
|
+
return selected_string
|
381
|
+
else
|
382
|
+
tmp.close!
|
383
|
+
return success
|
384
|
+
end
|
385
|
+
end
|
386
|
+
|
387
|
+
# List all object in all buckets
|
388
|
+
def la
|
389
|
+
tmp = Tempfile.new('tmp')
|
390
|
+
command = option_string() + "la " + " 2> " + tmp.path
|
391
|
+
success = system(command)
|
392
|
+
if success
|
393
|
+
begin
|
394
|
+
while (line = tmp.readline)
|
395
|
+
line.chomp
|
396
|
+
selected_string = line
|
397
|
+
end
|
398
|
+
rescue EOFError
|
399
|
+
tmp.close
|
400
|
+
end
|
401
|
+
return selected_string
|
402
|
+
else
|
403
|
+
tmp.close!
|
404
|
+
return success
|
405
|
+
end
|
406
|
+
end
|
407
|
+
|
408
|
+
# Put file into bucket (i.e. upload to S3)
|
409
|
+
def put(files, bucket) # FILE [FILE...] s3://BUCKET[/PREFIX]
|
410
|
+
tmp = Tempfile.new('tmp')
|
411
|
+
command = option_string() + "put " + files.to_s + " " + bucket.to_s + " 2> " + tmp.path
|
412
|
+
success = system(command)
|
413
|
+
if success
|
414
|
+
begin
|
415
|
+
while (line = tmp.readline)
|
416
|
+
line.chomp
|
417
|
+
selected_string = line
|
418
|
+
end
|
419
|
+
rescue EOFError
|
420
|
+
tmp.close
|
421
|
+
end
|
422
|
+
return selected_string
|
423
|
+
else
|
424
|
+
tmp.close!
|
425
|
+
return success
|
426
|
+
end
|
427
|
+
end
|
428
|
+
|
429
|
+
# Get file from bucket (i.e. download from S3)
|
430
|
+
def get(bucket, local_file) # s3://BUCKET/OBJECT LOCAL_FILE
|
431
|
+
tmp = Tempfile.new('tmp')
|
432
|
+
command = option_string() + "get " + bucket.to_s + " " + local_file.to_s + " 2> " + tmp.path
|
433
|
+
success = system(command)
|
434
|
+
if success
|
435
|
+
begin
|
436
|
+
while (line = tmp.readline)
|
437
|
+
line.chomp
|
438
|
+
selected_string = line
|
439
|
+
end
|
440
|
+
rescue EOFError
|
441
|
+
tmp.close
|
442
|
+
end
|
443
|
+
return selected_string
|
444
|
+
else
|
445
|
+
tmp.close!
|
446
|
+
return success
|
447
|
+
end
|
448
|
+
end
|
449
|
+
|
450
|
+
# Delete file from bucket
|
451
|
+
def del(bucket) # s3://BUCKET/OBJECT
|
452
|
+
tmp = Tempfile.new('tmp')
|
453
|
+
command = option_string() + "del " + bucket.to_s + " 2> " + tmp.path
|
454
|
+
success = system(command)
|
455
|
+
if success
|
456
|
+
begin
|
457
|
+
while (line = tmp.readline)
|
458
|
+
line.chomp
|
459
|
+
selected_string = line
|
460
|
+
end
|
461
|
+
rescue EOFError
|
462
|
+
tmp.close
|
463
|
+
end
|
464
|
+
return selected_string
|
465
|
+
else
|
466
|
+
tmp.close!
|
467
|
+
return success
|
468
|
+
end
|
469
|
+
end
|
470
|
+
|
471
|
+
# Backup a directory tree to S3
|
472
|
+
# Restore a tree from S3 to local directory
|
473
|
+
def sync(src_object, dest_object) # LOCAL_DIR s3://BUCKET[/PREFIX] or s3://BUCKET[/PREFIX] LOCAL_DIR
|
474
|
+
tmp = Tempfile.new('tmp')
|
475
|
+
command = option_string() + "sync " + src_object.to_s + " " + dest_object.to_s + " 2> " + tmp.path
|
476
|
+
success = system(command)
|
477
|
+
if success
|
478
|
+
begin
|
479
|
+
while (line = tmp.readline)
|
480
|
+
line.chomp
|
481
|
+
selected_string = line
|
482
|
+
end
|
483
|
+
rescue EOFError
|
484
|
+
tmp.close
|
485
|
+
end
|
486
|
+
return selected_string
|
487
|
+
else
|
488
|
+
tmp.close!
|
489
|
+
return success
|
490
|
+
end
|
491
|
+
end
|
492
|
+
|
493
|
+
# Make a copy of a file (cp) or move a file (mv). Destination can be in the same bucket with a dif‐
|
494
|
+
# ferent name or in another bucket with the same or different name. Adding --acl-public will make the
|
495
|
+
# destination object publicly accessible (see below).
|
496
|
+
def cp(src_bucket, dest_bucket) # s3://BUCKET1/OBJECT1 s3://BUCKET2[/OBJECT2]
|
497
|
+
tmp = Tempfile.new('tmp')
|
498
|
+
command = option_string() + "cp " + src_bucket.to_s + " " + dest_bucket.to_s + " 2> " + tmp.path
|
499
|
+
success = system(command)
|
500
|
+
if success
|
501
|
+
begin
|
502
|
+
while (line = tmp.readline)
|
503
|
+
line.chomp
|
504
|
+
selected_string = line
|
505
|
+
end
|
506
|
+
rescue EOFError
|
507
|
+
tmp.close
|
508
|
+
end
|
509
|
+
return selected_string
|
510
|
+
else
|
511
|
+
tmp.close!
|
512
|
+
return success
|
513
|
+
end
|
514
|
+
end
|
515
|
+
|
516
|
+
# Make a copy of a file (cp) or move a file (mv). Destination can be in the same bucket with a dif‐
|
517
|
+
# ferent name or in another bucket with the same or different name. Adding --acl-public will make the
|
518
|
+
# destination object publicly accessible (see below).
|
519
|
+
def mv(src_bucket, dest_bucket) # s3://BUCKET1/OBJECT1 s3://BUCKET2[/OBJECT2]
|
520
|
+
tmp = Tempfile.new('tmp')
|
521
|
+
command = option_string() + "mv " + src_bucket.to_s + " " + dest_bucket.to_s + " 2> " + tmp.path
|
522
|
+
success = system(command)
|
523
|
+
if success
|
524
|
+
begin
|
525
|
+
while (line = tmp.readline)
|
526
|
+
line.chomp
|
527
|
+
selected_string = line
|
528
|
+
end
|
529
|
+
rescue EOFError
|
530
|
+
tmp.close
|
531
|
+
end
|
532
|
+
return selected_string
|
533
|
+
else
|
534
|
+
tmp.close!
|
535
|
+
return success
|
536
|
+
end
|
537
|
+
end
|
538
|
+
|
539
|
+
# Modify Access control list for Bucket or Files. Use with --acl-public or --acl-private
|
540
|
+
def setacl(bucket) # s3://BUCKET[/OBJECT]
|
541
|
+
tmp = Tempfile.new('tmp')
|
542
|
+
command = option_string() + "setacl " + bucket.to_s + " 2> " + tmp.path
|
543
|
+
success = system(command)
|
544
|
+
if success
|
545
|
+
begin
|
546
|
+
while (line = tmp.readline)
|
547
|
+
line.chomp
|
548
|
+
selected_string = line
|
549
|
+
end
|
550
|
+
rescue EOFError
|
551
|
+
tmp.close
|
552
|
+
end
|
553
|
+
return selected_string
|
554
|
+
else
|
555
|
+
tmp.close!
|
556
|
+
return success
|
557
|
+
end
|
558
|
+
end
|
559
|
+
|
560
|
+
# Get various information about a Bucket or Object
|
561
|
+
def info(bucket) # s3://BUCKET[/OBJECT]
|
562
|
+
tmp = Tempfile.new('tmp')
|
563
|
+
command = option_string() + "info " + bucket.to_s + " 2> " + tmp.path
|
564
|
+
success = system(command)
|
565
|
+
if success
|
566
|
+
begin
|
567
|
+
while (line = tmp.readline)
|
568
|
+
line.chomp
|
569
|
+
selected_string = line
|
570
|
+
end
|
571
|
+
rescue EOFError
|
572
|
+
tmp.close
|
573
|
+
end
|
574
|
+
return selected_string
|
575
|
+
else
|
576
|
+
tmp.close!
|
577
|
+
return success
|
578
|
+
end
|
579
|
+
end
|
580
|
+
|
581
|
+
# Disk usage - amount of data stored in S3
|
582
|
+
def du(bucket) # [s3://BUCKET[/PREFIX]]
|
583
|
+
tmp = Tempfile.new('tmp')
|
584
|
+
command = option_string() + "du " + bucket.to_s + " 2> " + tmp.path
|
585
|
+
success = system(command)
|
586
|
+
if success
|
587
|
+
begin
|
588
|
+
while (line = tmp.readline)
|
589
|
+
line.chomp
|
590
|
+
selected_string = line
|
591
|
+
end
|
592
|
+
rescue EOFError
|
593
|
+
tmp.close
|
594
|
+
end
|
595
|
+
return selected_string
|
596
|
+
else
|
597
|
+
tmp.close!
|
598
|
+
return success
|
599
|
+
end
|
600
|
+
end
|
601
|
+
|
602
|
+
# Commands for CloudFront management
|
603
|
+
|
604
|
+
# List CloudFront distribution points
|
605
|
+
def cflist
|
606
|
+
tmp = Tempfile.new('tmp')
|
607
|
+
command = option_string() + "cflist " + " 2> " + tmp.path
|
608
|
+
success = system(command)
|
609
|
+
if success
|
610
|
+
begin
|
611
|
+
while (line = tmp.readline)
|
612
|
+
line.chomp
|
613
|
+
selected_string = line
|
614
|
+
end
|
615
|
+
rescue EOFError
|
616
|
+
tmp.close
|
617
|
+
end
|
618
|
+
return selected_string
|
619
|
+
else
|
620
|
+
tmp.close!
|
621
|
+
return success
|
622
|
+
end
|
623
|
+
end
|
624
|
+
|
625
|
+
# Display CloudFront distribution point parameters
|
626
|
+
def cfinfo(dist_id) # [cf://DIST_ID]
|
627
|
+
tmp = Tempfile.new('tmp')
|
628
|
+
command = option_string() + "cfinfo " + dist_id.to_s + " 2> " + tmp.path
|
629
|
+
success = system(command)
|
630
|
+
if success
|
631
|
+
begin
|
632
|
+
while (line = tmp.readline)
|
633
|
+
line.chomp
|
634
|
+
selected_string = line
|
635
|
+
end
|
636
|
+
rescue EOFError
|
637
|
+
tmp.close
|
638
|
+
end
|
639
|
+
return selected_string
|
640
|
+
else
|
641
|
+
tmp.close!
|
642
|
+
return success
|
643
|
+
end
|
644
|
+
end
|
645
|
+
|
646
|
+
# Create CloudFront distribution point
|
647
|
+
def cfcreate(bucket) # s3://BUCKET
|
648
|
+
tmp = Tempfile.new('tmp')
|
649
|
+
command = option_string() + "cfcreate " + bucket.to_s + " 2> " + tmp.path
|
650
|
+
success = system(command)
|
651
|
+
if success
|
652
|
+
begin
|
653
|
+
while (line = tmp.readline)
|
654
|
+
line.chomp
|
655
|
+
selected_string = line
|
656
|
+
end
|
657
|
+
rescue EOFError
|
658
|
+
tmp.close
|
659
|
+
end
|
660
|
+
return selected_string
|
661
|
+
else
|
662
|
+
tmp.close!
|
663
|
+
return success
|
664
|
+
end
|
665
|
+
end
|
666
|
+
|
667
|
+
# Delete CloudFront distribution point
|
668
|
+
def cfdelete(dist_id) # cf://DIST_ID
|
669
|
+
tmp = Tempfile.new('tmp')
|
670
|
+
command = option_string() + "cfdelete " + dist_id.to_s + " 2> " + tmp.path
|
671
|
+
success = system(command)
|
672
|
+
if success
|
673
|
+
begin
|
674
|
+
while (line = tmp.readline)
|
675
|
+
line.chomp
|
676
|
+
selected_string = line
|
677
|
+
end
|
678
|
+
rescue EOFError
|
679
|
+
tmp.close
|
680
|
+
end
|
681
|
+
return selected_string
|
682
|
+
else
|
683
|
+
tmp.close!
|
684
|
+
return success
|
685
|
+
end
|
686
|
+
end
|
687
|
+
|
688
|
+
# Change CloudFront distribution point parameters
|
689
|
+
def cfmodify(dist_id) # cf://DIST_ID
|
690
|
+
tmp = Tempfile.new('tmp')
|
691
|
+
command = option_string() + "cfmodify " + dist_id.to_s + " 2> " + tmp.path
|
692
|
+
success = system(command)
|
693
|
+
if success
|
694
|
+
begin
|
695
|
+
while (line = tmp.readline)
|
696
|
+
line.chomp
|
697
|
+
selected_string = line
|
698
|
+
end
|
699
|
+
rescue EOFError
|
700
|
+
tmp.close
|
701
|
+
end
|
702
|
+
return selected_string
|
703
|
+
else
|
704
|
+
tmp.close!
|
705
|
+
return success
|
706
|
+
end
|
707
|
+
end
|
708
|
+
|
709
|
+
def show_config
|
710
|
+
option_string()
|
711
|
+
end
|
712
|
+
|
713
|
+
private
|
714
|
+
|
715
|
+
def option_string()
|
716
|
+
|
717
|
+
unless @path_to_s3cmd
|
718
|
+
ostring = "s3cmd "
|
719
|
+
else
|
720
|
+
ostring = @path_to_s3cmd + " "
|
721
|
+
end
|
722
|
+
|
723
|
+
self.instance_variables.each do |i|
|
724
|
+
tmp_value = self.instance_variable_get "#{i}"
|
725
|
+
tmp_string = i.gsub("_", "-").gsub("@", "--")
|
726
|
+
unless tmp_string == "--path-to-s3cmd"
|
727
|
+
if (tmp_value.is_a? TrueClass) || (tmp_value.is_a? FalseClass)
|
728
|
+
ostring += "#{tmp_string} "
|
729
|
+
else
|
730
|
+
ostring += "#{tmp_string} #{tmp_value} "
|
731
|
+
end
|
732
|
+
end
|
733
|
+
end
|
734
|
+
|
735
|
+
return ostring
|
736
|
+
|
737
|
+
end
|
738
|
+
|
739
|
+
end
|
740
|
+
|