awsclean 1.0 → 1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/Gemfile.lock +2 -2
- data/README.md +9 -2
- data/lib/awsclean/ami_clean.rb +11 -3
- data/lib/awsclean/commands.rb +2 -0
- data/lib/awsclean/ecr_clean.rb +1 -14
- data/lib/awsclean/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 85e8e88ab01e03117ce712c5c67f0ad5abd3f9f1b34af56532ec41e2fb96f906
|
4
|
+
data.tar.gz: e0799e7ba427ef13dbab6353eee09ba2908acd3cdf6de9a923692969e6d1e26a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f88083fa73bf4e057983a520a57c1e314813bf7d7e990389ca3f94fb769bd79eb327ce5ec8311853975ec2206d65e04e3a5c2d5e4d1b7b49057c95f12a423c33
|
7
|
+
data.tar.gz: 898f34a86760599b8ce5fca81c1bac04181619527cbd2307823ce90a503e4ed10c4efba24b3170fd8b8f553f0923edd5cdca9072e5ee4382d80e4b687005e9e5
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -34,7 +34,7 @@ Locates and deletes stale docker images stored in Amazon ECR.
|
|
34
34
|
An ECR image is considered stale when:
|
35
35
|
|
36
36
|
1. It was created over `--e` days ago (default: 60).
|
37
|
-
2. It
|
37
|
+
2. It was untagged.
|
38
38
|
|
39
39
|
#### Listing images eligible for cleanup:
|
40
40
|
|
@@ -45,7 +45,7 @@ $ awsclean clean_ecr_images
|
|
45
45
|
```
|
46
46
|
[clean_ecr_images] Checking region: us-east-2
|
47
47
|
REGION IN USE? REPOSITORY URI TAGS IMAGE ID CREATED SIZE ELEGIBLE FOR CLEANUP?
|
48
|
-
us-east-2
|
48
|
+
us-east-2 false 3333344444.dkr.ecr.us-east-2.amazonaws.com/foobar (!TAG) sha256:464ea4713d51 2017-04-05T21:00:45+00:00 (100 days ago) 184.0 MB true
|
49
49
|
us-east-2 true 3333344444.dkr.ecr.us-east-2.amazonaws.com/foobar latest sha256:464ea4713d51 2017-04-05T21:00:45+00:00 (100 days ago) 184.0 MB false
|
50
50
|
us-east-2 false 3333344444.dkr.ecr.us-east-2.amazonaws.com/foobar_v2 (!TAG) sha256:f47d0c6acbe9 2017-06-22T22:55:44+00:00 (21 days ago) 136.0 MB false
|
51
51
|
us-east-2 false 3333344444.dkr.ecr.us-east-2.amazonaws.com/foobar_v2 latest sha256:58e584fd7654 2017-06-23T16:13:22+00:00 (21 days ago) 15.0 MB false
|
@@ -71,6 +71,7 @@ The following flags are available to use in both commands:
|
|
71
71
|
* `--c`: delete images marked as eligible for cleanup. (default: false)
|
72
72
|
* `--e`: images older than `--e` days are considered old. (default: 60)
|
73
73
|
* `--r`: select which AWS regions to perform on. (default: all)
|
74
|
+
* `--a`: specify AMIs will not be deleted. (default: [])
|
74
75
|
|
75
76
|
The `--r` flag accepts a space separated list of region names.
|
76
77
|
|
@@ -78,6 +79,12 @@ The `--r` flag accepts a space separated list of region names.
|
|
78
79
|
$ awsclean clean_amis -r us-east-2 ca-central-1
|
79
80
|
```
|
80
81
|
|
82
|
+
The `--a` flag accepts a space separated list of AMI IDs.
|
83
|
+
|
84
|
+
```
|
85
|
+
$ awsclean clean_amis -a ami-xxxxxx ami-yyyyyy
|
86
|
+
```
|
87
|
+
|
81
88
|
## Development
|
82
89
|
After checking out the repo, run `bin/setup` to install dependencies.
|
83
90
|
|
data/lib/awsclean/ami_clean.rb
CHANGED
@@ -6,8 +6,8 @@ module Awsclean
|
|
6
6
|
|
7
7
|
SERVICE_IDENTIFIER = "EC2"
|
8
8
|
|
9
|
-
IMAGE_LIST_HEADER = ['REGION', 'IN USE?', 'AMI ID', 'CREATED', 'ELEGIBLE FOR CLEANUP?']
|
10
|
-
IMAGE_LIST_FORMAT = '%-
|
9
|
+
IMAGE_LIST_HEADER = ['REGION', 'IN USE?', 'NAME', 'AMI ID', 'CREATED', 'ELEGIBLE FOR CLEANUP?']
|
10
|
+
IMAGE_LIST_FORMAT = '%-10s%-10s%-24s%-24s%-42s%-6s'
|
11
11
|
|
12
12
|
def self.run options
|
13
13
|
regions = filter_regions(options[:r])
|
@@ -31,6 +31,14 @@ module Awsclean
|
|
31
31
|
instances = res.reservations.flat_map(&:instances)
|
32
32
|
amis_in_use = instances.map(&:image_id).uniq
|
33
33
|
|
34
|
+
# Allow user to define a list of locked AMIs
|
35
|
+
if !options[:a].empty?
|
36
|
+
options[:a].each do |ami|
|
37
|
+
puts "Locked AMI: #{ami}"
|
38
|
+
amis_in_use << ami
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
34
42
|
# Get a list of all of AMI's owned by the account.
|
35
43
|
#
|
36
44
|
res = ec2.describe_images(owners: %w(self))
|
@@ -72,7 +80,7 @@ module Awsclean
|
|
72
80
|
created << " (#{image.days_since_creation} days ago)"
|
73
81
|
|
74
82
|
sprintf(IMAGE_LIST_FORMAT,
|
75
|
-
region, image.in_use, image.image_id,
|
83
|
+
region, image.in_use, image.name, image.image_id,
|
76
84
|
created, image.elegible_for_cleanup)
|
77
85
|
end
|
78
86
|
end
|
data/lib/awsclean/commands.rb
CHANGED
@@ -10,12 +10,14 @@ module Awsclean
|
|
10
10
|
-- -e [days] the number of days considered "unused", default is 60
|
11
11
|
-- -l and -c can be used with -e but -l and -c cannot be used together. Default mode is -l.
|
12
12
|
-- -r [regions] to specify regions to check, in the form of "us-west-1,us-east-1,..." separated by comma
|
13
|
+
-- -a [amis] to specify amis to skip for deletion, in the form of "ami-xxxxxx,ami-yyyyyy,..." separated by comma
|
13
14
|
=end
|
14
15
|
|
15
16
|
option :l, type: :boolean, default: true #list
|
16
17
|
option :c, type: :boolean
|
17
18
|
option :e, type: :numeric, default: 60
|
18
19
|
option :r, type: :array, default: %w(all)
|
20
|
+
option :a, type: :array, default: %w()
|
19
21
|
|
20
22
|
# TODO: dynamically generate these based on listing out subclasses of AwsCommand?
|
21
23
|
|
data/lib/awsclean/ecr_clean.rb
CHANGED
@@ -20,19 +20,6 @@ module Awsclean
|
|
20
20
|
exit 1
|
21
21
|
end
|
22
22
|
|
23
|
-
# List images used in active task definitions from all regions.
|
24
|
-
# This is a global operation so we run it once.
|
25
|
-
#
|
26
|
-
images_in_active_task_defs = supported_regions.flat_map do |region|
|
27
|
-
ecs = Aws::ECS::Client.new(region: region)
|
28
|
-
res = ecs.list_task_definitions(status: 'ACTIVE', max_results: 100)
|
29
|
-
|
30
|
-
res.task_definition_arns.flat_map do |td|
|
31
|
-
ecs.describe_task_definition(task_definition: td)
|
32
|
-
.task_definition.container_definitions.map(&:image)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
23
|
regions.each do |region|
|
37
24
|
puts "[clean_ecr_images] Checking region: #{region}"
|
38
25
|
|
@@ -48,7 +35,7 @@ module Awsclean
|
|
48
35
|
|
49
36
|
images.each do |image|
|
50
37
|
image.region = region
|
51
|
-
image.in_use = !
|
38
|
+
image.in_use = !image.image_uris.empty?
|
52
39
|
image.elegible_for_cleanup = (image.stale?(options[:e]) && !image.in_use)
|
53
40
|
end
|
54
41
|
|
data/lib/awsclean/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: awsclean
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '1.
|
4
|
+
version: '1.1'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-11-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -183,7 +183,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
183
183
|
version: '0'
|
184
184
|
requirements: []
|
185
185
|
rubyforge_project:
|
186
|
-
rubygems_version: 2.
|
186
|
+
rubygems_version: 2.7.7
|
187
187
|
signing_key:
|
188
188
|
specification_version: 4
|
189
189
|
summary: CLI to clean up AWS AMIs and ECR images
|