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 +4 -4
- data/VERSION +1 -1
- data/hashicorptools.gemspec +19 -33
- data/lib/hashicorptools/code_deploy.rb +2 -10
- data/lib/hashicorptools/packer.rb +33 -17
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 254a2ff3deed5490e6c62c5b07dcddd20f60488e4f9dca3821ee931363ce37cc
|
4
|
+
data.tar.gz: 1e8f691dfb3e803620e949651c8a2a68c871f783182c7bf48c07a247d404e99c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c48cdfba1b075d54763e14930b200cc89c7926e7d4ec6fabaf8cc3b64f7e4b87076944910ca21c07960522d126134a5c5a94db83d2c4988a6f19907b195f71ab
|
7
|
+
data.tar.gz: 2155084c9795853030119225cd7534e710870c9f3bba04ee97d44852e2583d9d3009e0298c27eef8d953dc42d67f8b087deb5b41d1177a02ecfd8877f655624c
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.5.0
|
data/hashicorptools.gemspec
CHANGED
@@ -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.
|
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.
|
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-
|
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.
|
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
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
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
|
-
|
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
|
-
|
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:
|
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:
|
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
|
-
|
151
|
-
|
152
|
-
|
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
|
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
|
-
|
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
|
+
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-
|
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.
|
268
|
+
rubygems_version: 3.1.2
|
269
269
|
signing_key:
|
270
270
|
specification_version: 4
|
271
271
|
summary: Wrappers for terraform and packer
|