hashicorptools 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 37a352203b9237ad1070e5fb6268a6ef6575a88d6bf9e016e62850a78b8f2fd6
4
- data.tar.gz: 7f0bb691aff8809d32bd1ba4fd52eb9818d67d4afd5f99af7f8c08b9ae4f1b7c
3
+ metadata.gz: 254a2ff3deed5490e6c62c5b07dcddd20f60488e4f9dca3821ee931363ce37cc
4
+ data.tar.gz: 1e8f691dfb3e803620e949651c8a2a68c871f783182c7bf48c07a247d404e99c
5
5
  SHA512:
6
- metadata.gz: 793c19ae4a5464798edbd1ef56b74bf11af0829a4795b47637ac5eb712bc9c34fe18dd60cfe742a24cfec52c6fa78382de02248825038cc5d10e9a057ced865c
7
- data.tar.gz: 76c73130b8b95dcd318b5c25be3736e682673bc660c450321787dac1b14c2925dc6374693831b032e210b4a26c166ab74f11222e0ed42a2a9aa385d27f8e064d
6
+ metadata.gz: c48cdfba1b075d54763e14930b200cc89c7926e7d4ec6fabaf8cc3b64f7e4b87076944910ca21c07960522d126134a5c5a94db83d2c4988a6f19907b195f71ab
7
+ data.tar.gz: 2155084c9795853030119225cd7534e710870c9f3bba04ee97d44852e2583d9d3009e0298c27eef8d953dc42d67f8b087deb5b41d1177a02ecfd8877f655624c
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.0
1
+ 0.5.0
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: hashicorptools 0.3.0 ruby lib
5
+ # stub: hashicorptools 0.5.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "hashicorptools".freeze
9
- s.version = "0.4.0"
9
+ s.version = "0.5.0"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib".freeze]
13
13
  s.authors = ["Nathan Woodhull".freeze]
14
- s.date = "2020-06-18"
14
+ s.date = "2020-07-17"
15
15
  s.description = "Wrappers for terraform and packer".freeze
16
16
  s.email = "systems@controlshiftlabs.com".freeze
17
17
  s.executables = ["ec2_host".freeze]
@@ -44,41 +44,27 @@ Gem::Specification.new do |s|
44
44
  ]
45
45
  s.homepage = "http://github.com/woodhull/hashicorptools".freeze
46
46
  s.licenses = ["MIT".freeze]
47
- s.rubygems_version = "3.0.3".freeze
47
+ s.rubygems_version = "3.1.2".freeze
48
48
  s.summary = "Wrappers for terraform and packer".freeze
49
49
 
50
50
  if s.respond_to? :specification_version then
51
51
  s.specification_version = 4
52
+ end
52
53
 
53
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
54
- s.add_runtime_dependency(%q<aws-sdk>.freeze, ["~> 2"])
55
- s.add_runtime_dependency(%q<dynect_rest>.freeze, ["= 0.4.6"])
56
- s.add_runtime_dependency(%q<aws-sdk-v1>.freeze, ["~> 1.67"])
57
- s.add_runtime_dependency(%q<dotenv>.freeze, ["~> 2.2", ">= 2.2.1"])
58
- s.add_runtime_dependency(%q<thor>.freeze, ["= 0.20.0"])
59
- s.add_runtime_dependency(%q<activesupport>.freeze, ["~> 5.1", ">= 5.1.4"])
60
- s.add_runtime_dependency(%q<byebug>.freeze, ["~> 10.0", ">= 10.0.2"])
61
- s.add_runtime_dependency(%q<git>.freeze, ["~> 1.3"])
62
- s.add_development_dependency(%q<rspec>.freeze, ["~> 3.7"])
63
- s.add_development_dependency(%q<rdoc>.freeze, ["~> 3.12"])
64
- s.add_development_dependency(%q<bundler>.freeze, ["~> 2.0"])
65
- s.add_development_dependency(%q<juwelier>.freeze, ["~> 2.4", ">= 2.4.7"])
66
- s.add_development_dependency(%q<simplecov>.freeze, [">= 0"])
67
- else
68
- s.add_dependency(%q<aws-sdk>.freeze, ["~> 2"])
69
- s.add_dependency(%q<dynect_rest>.freeze, ["= 0.4.6"])
70
- s.add_dependency(%q<aws-sdk-v1>.freeze, ["~> 1.67"])
71
- s.add_dependency(%q<dotenv>.freeze, ["~> 2.2", ">= 2.2.1"])
72
- s.add_dependency(%q<thor>.freeze, ["= 0.20.0"])
73
- s.add_dependency(%q<activesupport>.freeze, ["~> 5.1", ">= 5.1.4"])
74
- s.add_dependency(%q<byebug>.freeze, ["~> 10.0", ">= 10.0.2"])
75
- s.add_dependency(%q<git>.freeze, ["~> 1.3"])
76
- s.add_dependency(%q<rspec>.freeze, ["~> 3.7"])
77
- s.add_dependency(%q<rdoc>.freeze, ["~> 3.12"])
78
- s.add_dependency(%q<bundler>.freeze, ["~> 2.0"])
79
- s.add_dependency(%q<juwelier>.freeze, ["~> 2.4", ">= 2.4.7"])
80
- s.add_dependency(%q<simplecov>.freeze, [">= 0"])
81
- end
54
+ if s.respond_to? :add_runtime_dependency then
55
+ s.add_runtime_dependency(%q<aws-sdk>.freeze, ["~> 2"])
56
+ s.add_runtime_dependency(%q<dynect_rest>.freeze, ["= 0.4.6"])
57
+ s.add_runtime_dependency(%q<aws-sdk-v1>.freeze, ["~> 1.67"])
58
+ s.add_runtime_dependency(%q<dotenv>.freeze, ["~> 2.2", ">= 2.2.1"])
59
+ s.add_runtime_dependency(%q<thor>.freeze, ["= 0.20.0"])
60
+ s.add_runtime_dependency(%q<activesupport>.freeze, ["~> 5.1", ">= 5.1.4"])
61
+ s.add_runtime_dependency(%q<byebug>.freeze, ["~> 10.0", ">= 10.0.2"])
62
+ s.add_runtime_dependency(%q<git>.freeze, ["~> 1.3"])
63
+ s.add_development_dependency(%q<rspec>.freeze, ["~> 3.7"])
64
+ s.add_development_dependency(%q<rdoc>.freeze, ["~> 3.12"])
65
+ s.add_development_dependency(%q<bundler>.freeze, ["~> 2.0"])
66
+ s.add_development_dependency(%q<juwelier>.freeze, ["~> 2.4", ">= 2.4.7"])
67
+ s.add_development_dependency(%q<simplecov>.freeze, [">= 0"])
82
68
  else
83
69
  s.add_dependency(%q<aws-sdk>.freeze, ["~> 2"])
84
70
  s.add_dependency(%q<dynect_rest>.freeze, ["= 0.4.6"])
@@ -58,19 +58,11 @@ module Hashicorptools
58
58
  # We set defaults (depending on environment) for aws_regions if not passed in
59
59
  aws_regions = options[:aws_regions] || default_regions
60
60
 
61
- # TODO restore defaulting branch to the default branch (and remove below check)
62
- # once all the repos have the same default branch name of `main`
63
- # Currently, `agra` is using `master` while other apps are using `main`.
64
- # and we are unable to detect what the default branch is
65
- # via the git client here.
66
- if options[:commit].nil? && options[:branch].nil?
67
- raise 'You must supply either commit or branch to deploy'
68
- end
69
-
70
61
  commit = if options[:commit].present?
71
62
  g.gcommit(options[:commit])
72
63
  else
73
- g.checkout(options[:branch].to_sym)
64
+ branch = options[:branch].nil? ? :main : options[:branch].to_sym
65
+ g.checkout(branch)
74
66
  g.log.first
75
67
  end
76
68
 
@@ -33,7 +33,7 @@ module Hashicorptools
33
33
 
34
34
  desc "list", "list all available amis"
35
35
  def list
36
- amis.each do |ami|
36
+ amis_in_region(region).each do |ami|
37
37
  puts ami.image_id
38
38
  end
39
39
  end
@@ -129,39 +129,49 @@ module Hashicorptools
129
129
  'us-east-1'
130
130
  end
131
131
 
132
- def auto_scaling
133
- @auto_scaling ||= Aws::AutoScaling::Client.new(region: region)
132
+ def auto_scaling(client_region=region)
133
+ @auto_scaling ||= Aws::AutoScaling::Client.new(region: client_region)
134
134
  end
135
135
 
136
- def ec2_v2
137
- @ec2 ||= Aws::EC2::Client.new(region: region)
136
+ def ec2_v2(client_region=region)
137
+ @ec2 ||= Aws::EC2::Client.new(region: client_region)
138
138
  end
139
139
 
140
- def amis_in_use
141
- launch_configs = auto_scaling.describe_launch_configurations
140
+ def amis_in_use(client_region)
141
+ launch_configs = auto_scaling(client_region).describe_launch_configurations
142
142
  image_ids = launch_configs.data['launch_configurations'].collect{|lc| lc.image_id}.flatten
143
143
 
144
- ec2_reservations = ec2_v2.describe_instances
144
+ ec2_reservations = ec2_v2(client_region).describe_instances
145
145
  image_ids << ec2_reservations.reservations.collect{|res| res.instances.collect{|r| r.image_id}}.flatten
146
146
  image_ids.flatten
147
147
  end
148
148
 
149
+ def ami_regions
150
+ ['us-east-1', 'eu-central-1']
151
+ end
152
+
149
153
  def clean_amis
150
- ami_ids = amis.collect{|a| a.image_id}
151
- ami_ids_to_remove = ami_ids - amis_in_use
152
- potential_amis_to_remove = amis
154
+ ami_regions.each do |ami_region|
155
+ clean_amis_for_region(ami_region)
156
+ end
157
+ end
158
+
159
+ def clean_amis_for_region(region_to_clean)
160
+ ami_ids = amis_in_region(region_to_clean).collect{|a| a.image_id}
161
+ ami_ids_to_remove = ami_ids - amis_in_use(region_to_clean)
162
+ potential_amis_to_remove = amis_in_region(region_to_clean)
153
163
  potential_amis_to_remove.keep_if {|a| ami_ids_to_remove.include?(a.image_id) }
154
164
 
155
165
  if potential_amis_to_remove.size > NUMBER_OF_AMIS_TO_KEEP
156
166
  amis_to_remove = potential_amis_to_remove[NUMBER_OF_AMIS_TO_KEEP..-1]
157
167
  amis_to_keep = potential_amis_to_remove[0..(NUMBER_OF_AMIS_TO_KEEP-1)]
158
168
 
159
- puts "Deregistering old AMIs..."
169
+ puts "Deregistering old AMIs in #{region_to_clean}..."
160
170
  amis_to_remove.each do |ami|
161
171
  ebs_mappings = ami.block_device_mappings
162
172
  puts "Deregistering #{ami.image_id}"
163
173
  ami.deregister
164
- delete_ami_snapshots(ebs_mappings)
174
+ delete_ami_snapshots(ebs_mappings, snapshot_region: region_to_clean)
165
175
  end
166
176
 
167
177
  puts "Currently active AMIs..."
@@ -169,15 +179,21 @@ module Hashicorptools
169
179
  puts ami.image_id
170
180
  end
171
181
  else
172
- puts "no AMIs to clean."
182
+ puts "no AMIs to clean in #{region_to_clean}."
173
183
  end
174
184
  end
175
185
 
176
- def delete_ami_snapshots(ebs_mappings)
186
+ def amis_in_region(ami_region)
187
+ regional_ec2_client = AWS::EC2.new(region: ami_region)
188
+
189
+ sort_by_created_at( regional_ec2_client.images.with_owner('self').with_tag('Name', tag_name).to_a )
190
+ end
191
+
192
+ def delete_ami_snapshots(ebs_mappings, snapshot_region:)
193
+ regional_ec2_client = AWS::EC2::Client.new(region: snapshot_region)
177
194
  ebs_mappings.each do |volume, attributes|
178
195
  puts "Deleting snapshot #{attributes[:snapshot_id]}"
179
- snapshot = AWS::EC2::Snapshot.new(attributes[:snapshot_id])
180
- snapshot.delete
196
+ regional_ec2_client.delete_snapshot(snapshot_id: attributes[:snapshot_id])
181
197
  end
182
198
  end
183
199
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hashicorptools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Woodhull
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-06-18 00:00:00.000000000 Z
11
+ date: 2020-07-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk
@@ -265,7 +265,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
265
265
  - !ruby/object:Gem::Version
266
266
  version: '0'
267
267
  requirements: []
268
- rubygems_version: 3.0.3
268
+ rubygems_version: 3.1.2
269
269
  signing_key:
270
270
  specification_version: 4
271
271
  summary: Wrappers for terraform and packer