hashicorptools 0.4.0 → 0.5.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: 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