image_builder 0.0.6 → 0.0.7

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4dad5330712e1e493380c06ce30c27c631bc8668
4
- data.tar.gz: 7cc941b95547d231ae5d0f01ded310a8efa65eda
3
+ metadata.gz: f0421ca79ce0ab1bc492fb62634cd3299266ccf2
4
+ data.tar.gz: 024b9010de1ba6bca39d627f5a5599dc03111c47
5
5
  SHA512:
6
- metadata.gz: 5a456a9d62cf45f077491b14500c7fc02989b6dc64c59ea89b84a73e39ed4c02366086f29cbee57b21a09d243ef3df7d902ea6f3599eb01d44c5414a42bd6060
7
- data.tar.gz: 1f078bc505be1671a1f324d8ce094bbddeadce32dd179bda7b8effb0f5ccac09946144c95b6ece6aabe097fa3dae0eb75a7af8b3c7d588927151cc017ae0a0f6
6
+ metadata.gz: de380363d056d213b946d2435e78d0acdd747c7086aaa072f0024e76b4e47b303029a416f9c14b04a0ac243f4abd5a985163ac5cc7b1fb38d990a461d9aab929
7
+ data.tar.gz: b190d74ea7d04a35895951d57bbf1c7d6f57346b75e92bfa382a6aee373dde92ae4e93dc22dffc2166f9d4cae52d34932e2a76bf658f68ad0692c953563c4157
data/bin/image_builder CHANGED
@@ -141,6 +141,14 @@ def convert_tags(tag_opt)
141
141
  hash
142
142
  end
143
143
 
144
+ def find_ami_snapshot(ami_obj)
145
+ root_dev = ami_obj.root_device_name
146
+
147
+ ami_obj.block_device_mappings.each do |k, v|
148
+ return v[:snapshot_id] if root_dev.start_with? k
149
+ end
150
+ end
151
+
144
152
  # NOTE: Array options are in format '--opt arg1,arg2' (comma-seperated, no space!)
145
153
  Commander.configure do
146
154
  program :name, prog_name
@@ -233,4 +241,75 @@ Commander.configure do
233
241
  run_packer(builders, provisioners, [vagrant].compact, options.p_packer_path, options.debug)
234
242
  end
235
243
  end
244
+
245
+ command :tag_snapshot do |c|
246
+ c.syntax = "#{prog_name} tag_snapshot -a ami1[,ami2,...] [-r aws_region1,aws_region2,...]"
247
+ c.description = 'A command to set the name of an EBS-backed AMI snapshot to match its AMI.'
248
+
249
+ c.option '-a, --amis AMIS', Array, 'An array of AMI ID or names to operate on (REQUIRED)'
250
+ c.option '-r, --regions REGIONS', Array, 'An array of AWS regions to do the tagging on, defaults to us-east-1'
251
+
252
+ c.action do |_args, options|
253
+ options.default r_regions: ['us-east-1']
254
+
255
+ fail ArgumentError, 'Missing required -a option' if options.a_amis.nil? || options.a_amis.empty?
256
+
257
+ options.r_regions.each do |r|
258
+ cu = Cloudutil::AWS::EC2.new(region: r)
259
+ ec2 = ::AWS::EC2.new(config: cu.config(true))
260
+
261
+ options.a_amis.each do |a|
262
+ ami_obj = cu.lookup_ami(a).first # Get AWS SDK AMI objects instead of just the id
263
+
264
+ if ami_obj.nil?
265
+ puts "WARNING: AMI #{a} not found in region #{r}, skipping"
266
+ else
267
+ if ami_obj.root_device_type.eql? :ebs
268
+ # AWS SDK only allows setting a snapshot description at create time, so we can't
269
+ # add a custom description here :(
270
+ snap_id = find_ami_snapshot(ami_obj)
271
+ ami_name = ami_obj.name
272
+ ec2.snapshots[snap_id].add_tag('Name', value: ami_name)
273
+ puts "Set name for #{snap_id} (#{a}, #{r}) to #{ami_name}"
274
+ end
275
+ end
276
+ end
277
+ end
278
+ end
279
+ end
280
+
281
+ command :list_ami do |c|
282
+ c.syntax = "#{prog_name} list_ami -a ami1[,ami2,...] [-r aws_region1,aws_region2,...]"
283
+ c.description = 'A command to generate a JSON mapping of AMI names to AMI ids across AWS regions.'
284
+
285
+ c.option '-a, --amis AMIS', Array, 'An array of AMI ID or names to operate on (REQUIRED)'
286
+ c.option '-r, --regions REGIONS', Array, 'An array of AWS regions to do the tagging on, defaults to us-east-1'
287
+
288
+ c.action do |_args, options|
289
+ options.default r_regions: ['us-east-1']
290
+
291
+ fail ArgumentError, 'Missing required -a option' if options.a_amis.nil? || options.a_amis.empty?
292
+
293
+ ami_data = {}
294
+
295
+ options.r_regions.each do |r|
296
+ cu = Cloudutil::AWS::EC2.new(region: r)
297
+
298
+ options.a_amis.each do |a|
299
+ ami_obj = cu.lookup_ami(a).first # Get AWS SDK AMI objects instead of just the id
300
+
301
+ if ami_obj.nil?
302
+ puts "WARNING: AMI #{a} not found in region #{r}, skipping"
303
+ else
304
+ ami_name = ami_obj.name
305
+
306
+ ami_data[ami_name] = {} unless ami_data.key? ami_name
307
+ ami_data[ami_name][r] = ami_obj.id
308
+ end
309
+ end
310
+ end
311
+
312
+ puts ami_data.to_json
313
+ end
314
+ end
236
315
  end
@@ -1,4 +1,4 @@
1
1
  # Generic top-level module comment
2
2
  module ImageBuilder
3
- VERSION = '0.0.6'
3
+ VERSION = '0.0.7'
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: image_builder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Morris
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-25 00:00:00.000000000 Z
11
+ date: 2014-11-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler