aws-ec2 1.2.2 → 1.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 48b09df35ebd69e9cb3cf1fedda041365f7b64caf4622836445dac9a54a8a1c5
4
- data.tar.gz: 852c3e979764d3cdfe700d0884ba6a329a883510c34d417840cb248a716a826b
3
+ metadata.gz: b609d157c4ac6348d6fa370a17549c95987d2637060a34f84da9ad3dd303df80
4
+ data.tar.gz: d6c436bca85ddac006a853f6a6fe3bdc6cb848dc524b2e913912069047755e89
5
5
  SHA512:
6
- metadata.gz: a71147807f1f6167df3c14ca3dab108f1e56037d42a352faef842a0e337a2ed6749e912539ab9d6d5ee4e07b22c55642091bd6231764c50702f49cfc4f95422b
7
- data.tar.gz: 22e6360dbe5eb4cc6948cd23de0e3a7d7b951ba1e67e5feb50c5f757e358da756db9c4a40c5268b7ac6a4fd2e775c54e5df6e884f9b51257f74e91d72109aca7
6
+ metadata.gz: 410535c2bda5df7ab1d97bcc015158be003fa41cf41dda9c2ff5c97aa78f493a4c7eeb38080eaf3c93b14bb64344708adff7422eda516c6f987da38ff0842434
7
+ data.tar.gz: 44fc0c559ad6565742c66c0022097c93509bf6aad785b912d506cf75bf6d0bf728fe423555678c33cc7135cef3613369e7a828cc160baf0a86d69f8da8ac084d
@@ -3,6 +3,9 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  This project *tries* to adhere to [Semantic Versioning](http://semver.org/), even before v1.0.
5
5
 
6
+ ## [1.3.0]
7
+ - Merge pull request #7 from tongueroo/clean: aws-ec2 clean ami command
8
+
6
9
  ## [1.2.2]
7
10
  - add render_me_pretty as gem instead of submodule
8
11
 
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- aws-ec2 (1.2.1)
4
+ aws-ec2 (1.3.0)
5
5
  activesupport
6
6
  aws-sdk-ec2
7
7
  aws-sdk-s3
@@ -13,6 +13,7 @@ module AwsEc2
13
13
  autoload :Create, "aws_ec2/create"
14
14
  autoload :Ami, "aws_ec2/ami"
15
15
  autoload :Wait, "aws_ec2/wait"
16
+ autoload :Clean, "aws_ec2/clean"
16
17
  autoload :Template, "aws_ec2/template"
17
18
  autoload :Script, "aws_ec2/script"
18
19
  autoload :Config, "aws_ec2/config"
@@ -0,0 +1,12 @@
1
+ module AwsEc2
2
+ autoload :Cleaner, 'aws_ec2/cleaner'
3
+
4
+ class Clean < Command
5
+ desc "ami", "Clean until AMI available."
6
+ long_desc Help.text("clean:ami")
7
+ option :keep, type: :numeric, default: 2, desc: "Number of images to keep"
8
+ def ami(query)
9
+ Cleaner::Ami.new(options.merge(query: query)).clean
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,5 @@
1
+ module AwsEc2
2
+ module Cleaner
3
+ autoload :Ami, 'aws_ec2/cleaner/ami'
4
+ end
5
+ end
@@ -0,0 +1,40 @@
1
+ module AwsEc2::Cleaner
2
+ class Ami < AwsEc2::Base
3
+ include AwsEc2::AwsService
4
+
5
+ def clean
6
+ query = @options[:query] + "*" # use query as base of name for search
7
+ keep = @options[:keep] || 2
8
+ puts "Cleaning out old AMIs with base name: #{@options[:query]}"
9
+ return if ENV['TEST']
10
+
11
+ images = search_ami(query)
12
+ images.sort_by! { |i| i.name }.reverse
13
+ delete_list = images[keep..-1] || []
14
+ puts "Deleting #{delete_list.size} images."
15
+ delete_list.each do |i|
16
+ puts "Deleting image: #{i.image_id} #{i.name}"
17
+ delete(i.image_id)
18
+ end
19
+ end
20
+
21
+ private
22
+ def delete(image_id)
23
+ ec2.deregister_image(image_id: image_id)
24
+ rescue Aws::EC2::Errors::InvalidAMIIDUnavailable
25
+ # happens when image was just deleted but its still
26
+ # showing up as available when calling describe_images
27
+ puts "WARN: #{e.message}"
28
+ end
29
+
30
+ def search_ami(query, owners=["self"])
31
+ ec2.describe_images(
32
+ owners: owners,
33
+ filters: [
34
+ {name: "name", values: [query]},
35
+ {name: "state", values: ["available"]}
36
+ ]
37
+ ).images
38
+ end
39
+ end
40
+ end
@@ -3,6 +3,10 @@ module AwsEc2
3
3
  class_option :noop, type: :boolean
4
4
  class_option :profile, desc: "profile name to use"
5
5
 
6
+ desc "clean SUBCOMMAND", "clean subcommands"
7
+ long_desc Help.text(:clean)
8
+ subcommand "clean", Clean
9
+
6
10
  desc "wait SUBCOMMAND", "wait subcommands"
7
11
  long_desc Help.text(:wait)
8
12
  subcommand "wait", Wait
@@ -0,0 +1,21 @@
1
+ Examples:
2
+
3
+ $ aws-ec2 clean ami base-amazonlinux2
4
+ $ aws-ec2 clean ami base-ubuntu --keep 5
5
+
6
+ Deletes old AMIs using the provided name as the base portion of the AMI name to search for.
7
+
8
+ Let's say you have these images:
9
+
10
+ base-ubuntu_2018-03-25-04-20
11
+ base-ubuntu_2018-03-25-03-39
12
+ base-ubuntu_2018-03-25-02-57
13
+ base-ubuntu_2018-03-25-02-47
14
+ base-ubuntu_2018-03-25-02-43
15
+ base-ubuntu_2018-03-23-00-15
16
+
17
+ Running:
18
+
19
+ $ aws-ec2 clean ami base-ubuntu
20
+
21
+ Would delete all images and keep the 2 most recent AMIs. The default `--keep` value is 2.
@@ -1,3 +1,3 @@
1
1
  module AwsEc2
2
- VERSION = "1.2.2"
2
+ VERSION = "1.3.0"
3
3
  end
@@ -2,7 +2,6 @@ module AwsEc2
2
2
  autoload :Waiter, 'aws_ec2/waiter'
3
3
 
4
4
  class Wait < Command
5
-
6
5
  desc "ami", "Wait until AMI available."
7
6
  long_desc Help.text("wait:ami")
8
7
  option :timeout, type: :numeric, default: 1800, desc: "Timeout in seconds."
@@ -19,6 +19,11 @@ describe AwsEc2::CLI do
19
19
  expect(out).to include("Waiting for")
20
20
  end
21
21
 
22
+ it "clean ami" do
23
+ out = execute("exe/aws-ec2 clean ami imagebasename")
24
+ expect(out).to include("Cleaning out old AMIs")
25
+ end
26
+
22
27
  commands = {
23
28
  "am" => "ami",
24
29
  "compile" => "--profile",
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aws-ec2
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.2
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tung Nguyen
@@ -253,6 +253,9 @@ files:
253
253
  - lib/aws_ec2/ami.rb
254
254
  - lib/aws_ec2/aws_service.rb
255
255
  - lib/aws_ec2/base.rb
256
+ - lib/aws_ec2/clean.rb
257
+ - lib/aws_ec2/cleaner.rb
258
+ - lib/aws_ec2/cleaner/ami.rb
256
259
  - lib/aws_ec2/cli.rb
257
260
  - lib/aws_ec2/command.rb
258
261
  - lib/aws_ec2/completer.rb
@@ -266,6 +269,7 @@ files:
266
269
  - lib/aws_ec2/dotenv.rb
267
270
  - lib/aws_ec2/help.rb
268
271
  - lib/aws_ec2/help/ami.md
272
+ - lib/aws_ec2/help/clean/ami.md
269
273
  - lib/aws_ec2/help/compile.md
270
274
  - lib/aws_ec2/help/completion.md
271
275
  - lib/aws_ec2/help/completion_script.md