Class: Awful::S3
Instance Method Summary
collapse
Methods inherited from Cli
#initialize
Constructor Details
This class inherits a constructor from Awful::Cli
Instance Method Details
#buckets(name = /./) ⇒ Object
42
43
44
45
46
47
48
49
50
51
52
|
# File 'lib/awful/s3.rb', line 42
def buckets(name = /./)
s3.list_buckets.buckets.select do |bucket|
bucket.name.match(/#{name}/)
end.output do |list|
if options[:long]
print_table list.map { |b| [ b.name, b.creation_date ] }
else
puts list.map(&:name)
end
end
end
|
#cat(path) ⇒ Object
106
107
108
109
110
111
|
# File 'lib/awful/s3.rb', line 106
def cat(path)
bucket, key = path.split('/', 2)
s3.get_object(bucket: bucket, key: key) do |chunk|
$stdout.write(chunk)
end
end
|
#clean(name) ⇒ Object
192
193
194
195
196
|
# File 'lib/awful/s3.rb', line 192
def clean(name)
if yes? "Really delete ALL objects in bucket #{name}?", :yellow
clean_objects(name)
end
end
|
#copy(bucket, key) ⇒ Object
150
151
152
153
154
155
156
157
158
|
# File 'lib/awful/s3.rb', line 150
def copy(bucket, key)
s3.copy_object(
bucket: bucket,
key: key,
server_side_encryption: options[:kms] ? 'aws:kms' : nil,
ssekms_key_id: options[:kms],
copy_source: options[:source],
)
end
|
#delete(bucket, *objects) ⇒ Object
199
200
201
202
203
204
205
206
|
# File 'lib/awful/s3.rb', line 199
def delete(bucket, *objects)
s3.delete_objects(
bucket: bucket,
delete: {
objects: objects.map{ |k| {key: k} }
}
)
end
|
#empty?(bucket_name) ⇒ Boolean
71
72
73
|
# File 'lib/awful/s3.rb', line 71
def empty?(bucket_name)
s3.list_objects(bucket: bucket_name, max_keys: 1).contents.empty?.output(&method(:puts))
end
|
#exists?(bucket_name) ⇒ Boolean
62
63
64
65
66
67
68
|
# File 'lib/awful/s3.rb', line 62
def exists?(bucket_name)
begin
s3.head_bucket(bucket: bucket_name) && true
rescue Aws::S3::Errors::NotFound
false
end.output(&method(:puts))
end
|
#get(bucket, key, filename = nil) ⇒ Object
115
116
117
118
119
120
121
122
123
|
# File 'lib/awful/s3.rb', line 115
def get(bucket, key, filename = nil)
if filename
s3.get_object(bucket: bucket, key: key, response_target: filename)
else
s3.get_object(bucket: bucket, key: key).output do |response|
puts response.body.read
end
end
end
|
#ls(name = '.') ⇒ Object
31
32
33
34
35
36
37
38
|
# File 'lib/awful/s3.rb', line 31
def ls(name = '.')
if name.include?('/')
bucket, prefix = name.split('/', 2)
invoke 'objects', [bucket, prefix], options
else
invoke 'buckets', [name], options
end
end
|
#objects(bucket, prefix = nil) ⇒ Object
55
56
57
58
59
|
# File 'lib/awful/s3.rb', line 55
def objects(bucket, prefix = nil)
s3_resource.bucket(bucket).objects(prefix: prefix).map do |object|
object.key
end.output { |list| puts list }
end
|
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
|
# File 'lib/awful/s3.rb', line 210
def orphans
s3.list_buckets.buckets.each do |b|
stack = get_tags(b.name)&.find{ |t| t.key == 'aws:cloudformation:stack-name' }&.value
next if cfn_stack(stack)
if options[:delete]
if s3.list_objects_v2(bucket: b.name, max_keys: 1).key_count == 0
s3.delete_bucket(bucket: b.name) if yes?("Delete empty bucket #{b.name}?", :yellow)
else
puts "#{b.name} not empty"
end
else
puts b.name
end
end
end
|
#put(bucket, key, filename = nil) ⇒ Object
136
137
138
139
140
141
142
143
144
145
|
# File 'lib/awful/s3.rb', line 136
def put(bucket, key, filename = nil)
body = options.fetch('string', file_or_stdin(filename))
s3.put_object(
bucket: bucket,
key: key,
body: body,
server_side_encryption: options[:kms] ? 'aws:kms' : nil,
ssekms_key_id: options[:kms],
)
end
|
rb is an alias for remove_bucket
168
|
# File 'lib/awful/s3.rb', line 168
map :rb => :remove_bucket
|
#remove_bucket(name) ⇒ Object
161
162
163
164
165
|
# File 'lib/awful/s3.rb', line 161
def remove_bucket(name)
if yes? "Really delete bucket #{name}?", :yellow
s3.delete_bucket(bucket: name)
end
end
|
#tagged(name = '.') ⇒ Object
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
# File 'lib/awful/s3.rb', line 79
def tagged(name = '.')
conditions = options[:tags].map do |tag|
key, value = tag.split('=')
->(set) { (set[0] == key) && (set[1] == value) }
end
if options[:stack]
conditions << ->(set) { (set[0] == 'aws:cloudformation:stack-name') && (set[1] == options[:stack]) }
end
if options[:resource]
conditions << ->(set) { (set[0] == 'aws:cloudformation:logical-id') && (set[1] == options[:resource]) }
end
s3.list_buckets.buckets.select do |b|
b.name.match(/^#{name}/i)
end.map do |bucket|
tags = get_tags(bucket.name) or next
tags.any? do |set|
conditions.any? { |c| c.call(set) }
end && bucket
end.select{|b| b}.output do |buckets|
puts buckets.map(&:name)
end
end
|
#upload(file, s3path) ⇒ Object
127
128
129
130
|
# File 'lib/awful/s3.rb', line 127
def upload(file, s3path)
bucket, key = s3path.split('/', 2)
s3_resource.bucket(bucket).object(key).upload_file(file)
end
|