knife-s3 0.0.1 → 0.0.2
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/lib/chef/knife/s3_base.rb +3 -2
- data/lib/chef/knife/s3_download.rb +75 -0
- data/lib/chef/knife/s3_list.rb +11 -11
- data/lib/chef/knife/s3_upload.rb +80 -0
- data/lib/knife-s3/version.rb +1 -1
- metadata +3 -1
data/lib/chef/knife/s3_base.rb
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
# limitations under the License.
|
13
13
|
#
|
14
14
|
|
15
|
-
# s3_base.rb based on cfn_base.rb by
|
15
|
+
# s3_base.rb based on cfn_base.rb by Neill Turner, which can be found at https://github.com/neillturner/knife-cfn
|
16
16
|
|
17
17
|
require 'chef/knife'
|
18
18
|
|
@@ -43,8 +43,9 @@ class Chef
|
|
43
43
|
option :region,
|
44
44
|
:long => "--region REGION",
|
45
45
|
:description => "Your AWS region",
|
46
|
-
:default => "us-
|
46
|
+
:default => "us-east-1",
|
47
47
|
:proc => Proc.new { |key| Chef::Config[:knife][:region] = key }
|
48
|
+
|
48
49
|
end
|
49
50
|
end
|
50
51
|
def connection
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require 'chef/knife'
|
2
|
+
require 'chef/knife/s3_base'
|
3
|
+
|
4
|
+
class Chef
|
5
|
+
class Knife
|
6
|
+
class S3Download < Chef::Knife::S3Base
|
7
|
+
|
8
|
+
deps do
|
9
|
+
require 'fog'
|
10
|
+
require 'readline'
|
11
|
+
require 'chef/json_compat'
|
12
|
+
require 'chef/knife/bootstrap'
|
13
|
+
Chef::Knife::Bootstrap.load_deps
|
14
|
+
end
|
15
|
+
|
16
|
+
banner "knife s3 download -b <bucket_name> -r REMOTE_FILE [-f FILE]"
|
17
|
+
|
18
|
+
option :bucket,
|
19
|
+
:short => "-b BUCKET",
|
20
|
+
:long => "--bucket BUCKET",
|
21
|
+
:description => "Specify the S3 bucket"
|
22
|
+
|
23
|
+
option :pathname,
|
24
|
+
:short => "-r REMOTE_FILE",
|
25
|
+
:long => "--remote REMOTE_FILE",
|
26
|
+
:description => "Specify the remote path (and filename) to download."
|
27
|
+
|
28
|
+
option :localfile,
|
29
|
+
:short => "-f FILE",
|
30
|
+
:long => "--file FILE",
|
31
|
+
:description => "The local file to write to. Defaults to the remote filename."
|
32
|
+
|
33
|
+
option :overwrite,
|
34
|
+
:short => "-o",
|
35
|
+
:long => "--overwrite",
|
36
|
+
:description => "Forces the local file to be overwritten if it exists."
|
37
|
+
|
38
|
+
def run
|
39
|
+
$stdout.sync = true
|
40
|
+
|
41
|
+
validate!
|
42
|
+
|
43
|
+
if config[:bucket].nil?
|
44
|
+
puts "No bucket specified"
|
45
|
+
exit 1
|
46
|
+
end
|
47
|
+
|
48
|
+
if config[:pathname].nil?
|
49
|
+
puts "No path specified"
|
50
|
+
exit 1
|
51
|
+
end
|
52
|
+
|
53
|
+
if config[:localfile].nil?
|
54
|
+
config[:localfile] = config[:pathname] #TODO: should strip "directory" elements from the path?
|
55
|
+
end
|
56
|
+
|
57
|
+
if File.exists?(config[:localfile]) and config[:overwrite].nil?
|
58
|
+
print config[:localfile] + " exists. Overwrite (y/n)? "
|
59
|
+
ans=$stdin.gets
|
60
|
+
if !ans.match(/^y/i)
|
61
|
+
puts "Not overwriting, exiting"
|
62
|
+
exit 0
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
begin
|
67
|
+
remote_file = connection.directories.get(config[:bucket]).files.get(config[:pathname])
|
68
|
+
local_file = File.open(config[:localfile],'w')
|
69
|
+
local_file.write(remote_file.body)
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
data/lib/chef/knife/s3_list.rb
CHANGED
@@ -13,12 +13,12 @@ class Chef
|
|
13
13
|
Chef::Knife::Bootstrap.load_deps
|
14
14
|
end
|
15
15
|
|
16
|
-
banner "knife s3 list <bucket name>"
|
16
|
+
banner "knife s3 list -b <bucket name> [-p <prefix>]"
|
17
17
|
|
18
|
-
option :
|
19
|
-
:short
|
20
|
-
:long
|
21
|
-
:description => "
|
18
|
+
option :bucket,
|
19
|
+
:short => "-b BUCKET",
|
20
|
+
:long => "--bucket BUCKET",
|
21
|
+
:description => "Specify the S3 bucket"
|
22
22
|
|
23
23
|
option :prefix,
|
24
24
|
:short => "-p PREFIX",
|
@@ -30,24 +30,24 @@ class Chef
|
|
30
30
|
|
31
31
|
validate!
|
32
32
|
|
33
|
-
if config[:
|
34
|
-
puts "Listing bucket " + config[:
|
33
|
+
if config[:bucket]
|
34
|
+
puts "Listing bucket " + config[:bucket]
|
35
35
|
else
|
36
|
-
puts "
|
36
|
+
puts "No bucket specified"
|
37
37
|
exit 1
|
38
38
|
end
|
39
39
|
|
40
40
|
if config[:prefix]
|
41
|
-
puts "
|
41
|
+
puts "Listing with prefix " + config[:prefix]
|
42
42
|
end
|
43
43
|
|
44
44
|
begin
|
45
45
|
if config[:prefix].nil?
|
46
|
-
connection.directories.get(config[:
|
46
|
+
connection.directories.get(config[:bucket]).files.map do |file|
|
47
47
|
puts file.key
|
48
48
|
end
|
49
49
|
else
|
50
|
-
connection.directories.get(config[:
|
50
|
+
connection.directories.get(config[:bucket], prefix: config[:prefix]).files.map do |file|
|
51
51
|
puts file.key
|
52
52
|
end
|
53
53
|
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
require 'chef/knife'
|
2
|
+
require 'chef/knife/s3_base'
|
3
|
+
|
4
|
+
class Chef
|
5
|
+
class Knife
|
6
|
+
class S3Upload < Chef::Knife::S3Base
|
7
|
+
|
8
|
+
deps do
|
9
|
+
require 'fog'
|
10
|
+
require 'readline'
|
11
|
+
require 'chef/json_compat'
|
12
|
+
require 'chef/knife/bootstrap'
|
13
|
+
Chef::Knife::Bootstrap.load_deps
|
14
|
+
end
|
15
|
+
|
16
|
+
banner "knife s3 upload -b <bucket_name> -f <FILE> [-r REMOTE_FILE]"
|
17
|
+
|
18
|
+
option :bucket,
|
19
|
+
:short => "-b BUCKET",
|
20
|
+
:long => "--bucket BUCKET",
|
21
|
+
:description => "Specify the S3 bucket"
|
22
|
+
|
23
|
+
option :pathname,
|
24
|
+
:short => "-r REMOTE_FILE",
|
25
|
+
:long => "--remote REMOTE_FILE",
|
26
|
+
:description => "Remote path (and filename) to upload to."
|
27
|
+
|
28
|
+
option :localfile,
|
29
|
+
:short => "-f FILE",
|
30
|
+
:long => "--file FILE",
|
31
|
+
:description => "The local file to upload."
|
32
|
+
|
33
|
+
option :is_public,
|
34
|
+
:short => "-p",
|
35
|
+
:long => "--public",
|
36
|
+
:description => "If set, then the file will be set with public read access."
|
37
|
+
|
38
|
+
def run
|
39
|
+
$stdout.sync = true
|
40
|
+
|
41
|
+
validate!
|
42
|
+
|
43
|
+
public = false
|
44
|
+
|
45
|
+
if config[:bucket].nil?
|
46
|
+
puts "No bucket specified"
|
47
|
+
exit 1
|
48
|
+
end
|
49
|
+
|
50
|
+
if config[:localfile].nil?
|
51
|
+
puts "No file specified"
|
52
|
+
exit 1
|
53
|
+
end
|
54
|
+
|
55
|
+
if !File.exists?(config[:localfile])
|
56
|
+
puts "file '" + config[:localfile] + "' does not exist"
|
57
|
+
exit 1
|
58
|
+
end
|
59
|
+
|
60
|
+
if config[:pathname].nil?
|
61
|
+
puts "No remote path specified. Uploading as " + config[:localfile]
|
62
|
+
config[:pathname] = config[:localfile]
|
63
|
+
end
|
64
|
+
|
65
|
+
if !config[:is_public].nil?
|
66
|
+
public = true
|
67
|
+
end
|
68
|
+
|
69
|
+
begin
|
70
|
+
remote_file = connection.directories.get(config[:bucket]).files.create(
|
71
|
+
:key => config[:pathname],
|
72
|
+
:body => File.open(config[:localfile]),
|
73
|
+
:public => public
|
74
|
+
)
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
data/lib/knife-s3/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: knife-s3
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -50,7 +50,9 @@ extensions: []
|
|
50
50
|
extra_rdoc_files: []
|
51
51
|
files:
|
52
52
|
- lib/chef/knife/s3_list.rb
|
53
|
+
- lib/chef/knife/s3_download.rb
|
53
54
|
- lib/chef/knife/s3_base.rb
|
55
|
+
- lib/chef/knife/s3_upload.rb
|
54
56
|
- lib/knife-s3/version.rb
|
55
57
|
homepage: https://github.com/brettcave/knife-s3
|
56
58
|
licenses: []
|