awful 0.0.156 → 0.0.157

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: fa2e4e1d43bfad8b21595bed66a0e0ace3fd6d60
4
- data.tar.gz: 65b664e4c00ce9f994dd565036fda1bd8efdf604
3
+ metadata.gz: 99c05896c178d666894061616bd3be84723558a0
4
+ data.tar.gz: b93e53d0adbb16b05775c6d51fd2d9e6dbbc6687
5
5
  SHA512:
6
- metadata.gz: 34d192afd958c3cba722be347cd605ce79ef74a7ee9358f364523beaf6c17ee30c410b7a46e1c0b6e15e12b19e3f3acea69724bd292b5fcfa868cd9ed0828a08
7
- data.tar.gz: 6b508c4f4667af73f0113602839fd266e83ea106255fa7d7c62d88784095dd0a1d0378de2de5b4645c771f30b1498cfc3c01d6806003a071196f238c9cb6bb55
6
+ metadata.gz: 17a626a26ac67317a14dd5ba156bd9f67a2ffac41a2323cce9d9428b92bd0bad2f3d42f8cc6824e9ee537c41edd34305ca86a8df1c23b7a4d3fefe87ef379277
7
+ data.tar.gz: efa5ee2168f77efd3da46f30cf212412f6674696beafd12c1ad9484f65c10fdfeae547b0d517fb86bf8ff059435bd266f8ce9adca6709c8129f9647f9a8ed231
data/bin/eip ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/ruby
2
+ #-*- mode: ruby; -*-
3
+
4
+ require 'awful'
5
+ require 'awful/eip'
6
+
7
+ Awful::Eip.start(ARGV)
data/lib/awful/ecr.rb CHANGED
@@ -21,9 +21,14 @@ module Awful
21
21
  end
22
22
  end
23
23
 
24
- ## parse created date from manifest of Aws::ECR::Types::Image object
25
- def parse_created(image)
26
- JSON.parse(JSON.parse(image.image_manifest)['history'].first['v1Compatibility'])['created']
24
+ def describe_images(repository, tag_status = nil)
25
+ paginate(:image_details) do |next_token|
26
+ ecr.describe_images(
27
+ repository_name: repository,
28
+ filter: { tag_status: tag_status },
29
+ next_token: next_token,
30
+ )
31
+ end
27
32
  end
28
33
  end
29
34
 
@@ -87,24 +92,22 @@ module Awful
87
92
  end
88
93
 
89
94
  desc 'images REPO', 'list images for repo'
90
- method_option :long, aliases: '-l', type: :boolean, default: false, desc: 'Long listing'
91
- def images(repository, token: nil)
92
- next_token = token
93
- images = []
94
- loop do
95
- response = ecr.list_images(repository_name: repository, next_token: next_token)
96
- images = images + response.image_ids
97
- next_token = response.next_token
98
- break unless next_token
99
- end
100
-
101
- images.output do |list|
95
+ method_option :long, aliases: '-l', type: :boolean, default: false, desc: 'Long listing'
96
+ method_option :tagged, aliases: '-t', type: :boolean, default: false, desc: 'show only tagged images'
97
+ method_option :untagged, aliases: '-u', type: :boolean, default: false, desc: 'show only untagged images'
98
+ def images(repository)
99
+ tag_status = 'TAGGED' if options[:tagged]
100
+ tag_status = 'UNTAGGED' if options[:untagged]
101
+
102
+ describe_images(repository, tag_status).output do |list|
102
103
  if options[:long]
103
104
  print_table list.map { |i|
104
- [i.image_tag, i.image_digest]
105
+ tags = i.image_tags || []
106
+ size = "%.2f MiB" % (i.image_size_in_bytes/(1024*1024))
107
+ [tags.join(','), i.image_pushed_at, size, i.image_digest]
105
108
  }
106
109
  else
107
- puts list.map(&:image_tag)
110
+ puts list.map(&:image_tags).flatten
108
111
  end
109
112
  end
110
113
  end
@@ -146,7 +149,7 @@ module Awful
146
149
  (imgs.empty? ? false : true).output(&method(:puts))
147
150
  end
148
151
 
149
- desc 'reap REPO', 'reap old images for repo'
152
+ desc 'reap REPO DAYS', 'reap old images for repo'
150
153
  method_option :batch, aliases: '-b', type: :numeric, default: 10, desc: 'batch size to get and delete'
151
154
  method_option :dry_run, aliases: '-d', type: :boolean, default: false, desc: 'dry run, do not delete, implies verbose'
152
155
  method_option :verbose, aliases: '-v', type: :boolean, default: false, desc: 'print images to be deleted'
@@ -157,15 +160,13 @@ module Awful
157
160
 
158
161
  deleted = failures = 0
159
162
  loop do
160
- ## get a batch of image ids
161
- response = ecr.list_images(repository_name: repository, next_token: next_token, max_results: options[:batch])
163
+ response = ecr.describe_images(repository_name: repository, next_token: next_token, max_results: options[:batch])
162
164
 
163
- ## get details for the batch of images and calculate age
164
- old_images = ecr.batch_get_image(repository_name: repository, image_ids: response.image_ids).images.select do |image|
165
- date = Time.parse(parse_created(image)).utc
165
+ old_images = response.image_details.select do |image|
166
+ date = image.image_pushed_at.utc
166
167
  age = ((now - date)/(24*60*60)).to_i
167
168
  if age > days.to_i
168
- puts "#{date} #{age} #{image.image_id.image_tag}" if verbose
169
+ puts "#{date} #{age} #{image.image_digest} #{image.image_tags}" if verbose
169
170
  true
170
171
  else
171
172
  false
@@ -174,7 +175,10 @@ module Awful
174
175
 
175
176
  ## delete old images
176
177
  unless options[:dry_run] || old_images.empty?
177
- r = ecr.batch_delete_image(repository_name: repository, image_ids: old_images.map(&:image_id))
178
+ r = ecr.batch_delete_image(
179
+ repository_name: repository,
180
+ image_ids: old_images.map { |i| {image_digest: i.image_digest} }
181
+ )
178
182
  deleted += r.image_ids.count
179
183
  failures += r.failures.count
180
184
  end
data/lib/awful/eip.rb ADDED
@@ -0,0 +1,67 @@
1
+ module Awful
2
+ module Short
3
+ def eip(*args)
4
+ Awful::Eip.new.invoke(*args)
5
+ end
6
+ end
7
+
8
+ class Eip < Cli
9
+ no_commands do
10
+
11
+ ## get an EIP by id or public ip
12
+ def find_eip(thing)
13
+ ec2.describe_addresses.addresses.find do |eip|
14
+ (thing == eip.public_ip) || (thing == eip.allocation_id) || (thing == eip.association_id)
15
+ end
16
+ end
17
+ end
18
+
19
+ desc 'ls', 'list elastic IPs'
20
+ method_option :long, aliases: '-l', type: :boolean, default: false, desc: 'long listing'
21
+ def ls
22
+ ec2.describe_addresses.addresses.output do |eips|
23
+ if options[:long]
24
+ print_table eips.map { |i|
25
+ [i.public_ip, i.allocation_id, i.instance_id, i.private_ip_address, i.domain, i.association_id, i.network_interface_id, i.network_interface_owner_id]
26
+ }.sort
27
+ else
28
+ puts eips.map(&:public_ip).sort
29
+ end
30
+ end
31
+ end
32
+
33
+ desc 'allocate', 'acquire an elastic IP'
34
+ method_option :domain, aliases: '-d', type: :string, default: 'vpc', desc: 'domain: vpc or standard (ec2 classic)'
35
+ def allocate
36
+ ec2.allocate_address(domain: options[:domain]).output do |eip|
37
+ puts eip.public_ip
38
+ end
39
+ end
40
+
41
+ desc 'release ID', 'release elastic IP back to pool'
42
+ def release(id)
43
+ find_eip(id).tap do |eip|
44
+ unless eip.nil?
45
+ if eip.domain == 'vpc'
46
+ ec2.release_address(allocation_id: eip.allocation_id)
47
+ else
48
+ ec2.release_address(public_ip: eip.public_ip)
49
+ end
50
+ end
51
+ end
52
+ end
53
+
54
+ desc 'associate ID INSTANCE', 'associate EIP with an instance'
55
+ def associate(id, instance)
56
+ ec2.associate_address(
57
+ allocation_id: find_eip(id).allocation_id,
58
+ instance_id: instance
59
+ ).association_id.output(&method(:puts))
60
+ end
61
+
62
+ desc 'disassociate ID', 'disassociate EIP from current instance association'
63
+ def disassociate(id)
64
+ ec2.disassociate_address(association_id: find_eip(id).association_id)
65
+ end
66
+ end
67
+ end
data/lib/awful/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Awful
2
- VERSION = '0.0.156'
2
+ VERSION = '0.0.157'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: awful
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.156
4
+ version: 0.0.157
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ric Lister
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-05 00:00:00.000000000 Z
11
+ date: 2017-01-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -99,6 +99,7 @@ executables:
99
99
  - ec2
100
100
  - ecr
101
101
  - ecs
102
+ - eip
102
103
  - elasticache
103
104
  - elb
104
105
  - iam
@@ -141,6 +142,7 @@ files:
141
142
  - bin/ec2
142
143
  - bin/ecr
143
144
  - bin/ecs
145
+ - bin/eip
144
146
  - bin/elasticache
145
147
  - bin/elb
146
148
  - bin/iam
@@ -181,6 +183,7 @@ files:
181
183
  - lib/awful/ec2.rb
182
184
  - lib/awful/ecr.rb
183
185
  - lib/awful/ecs.rb
186
+ - lib/awful/eip.rb
184
187
  - lib/awful/elasticache.rb
185
188
  - lib/awful/elb.rb
186
189
  - lib/awful/iam.rb