hashicorptools 0.5.1 → 2.1.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: 8678bee5e4e1f1c2a2efa53625d495e3c91eb1b1170ca29831f9f21c0b92d6a1
4
- data.tar.gz: e233456a2da0aca57736ddcbe400ea97bc0366a8d5e3b11cfb9f2b77b08dee22
3
+ metadata.gz: e67a96a4dfde0442db2f2a7765bb8bccef2c2a241a6035a2cc71668cd7c52a2e
4
+ data.tar.gz: 160e51476f890b2f986277ef7caf9ae18cd72d3062ec0de4a28ef3352757a1a1
5
5
  SHA512:
6
- metadata.gz: c5c10e25f54a76390e3b39434e166f4bbd754a19096063ef760feaafd01a4cfccaa971674ecf7d61f9f0165a0d71651400d62615248da3fe7940e7b21bb6d326
7
- data.tar.gz: 8a09c1eaac106fbc2716a43f26384fbaab1cc2d6a0386167e187e363ed043e88efe693a0cebabb1e9d050bb3bc8bb1ed0d769ae53b40002725627f0475b6cca6
6
+ metadata.gz: c3b67f51f3fbd83fc526ee4ac71623c045dcd2c0949d0eda49bdd0a09820933a1e2b38c290517a1627c8b6f4c960294e2a3269566337f798d7700c020200446c
7
+ data.tar.gz: 0c0f240592241afb1956f5f03c34d769b2161b01e50cde3c755eee8da6f5f671901abf6526c0a8bcb041467ac38b846d454f5e875c1c6eb78ce9e72a6b9af7ab
@@ -0,0 +1,14 @@
1
+ name: CI
2
+ on: [push]
3
+
4
+ jobs:
5
+ test:
6
+ runs-on: ubuntu-latest
7
+ steps:
8
+ - uses: actions/checkout@v2
9
+ - uses: ruby/setup-ruby@477b21f02be01bcb8030d50f37cfec92bfa615b6
10
+ with:
11
+ ruby-version: 2.7
12
+ bundler-cache: true
13
+ - run: bundle install
14
+ - run: bundle exec rspec
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- ruby-2.6.6
1
+ ruby-2.7.4
data/Gemfile CHANGED
@@ -1,10 +1,10 @@
1
1
  source "http://rubygems.org"
2
2
 
3
- # try to slowly migrate to v2 of the aws api
4
- gem 'aws-sdk', '~> 2'
3
+ gem 'aws-sdk-autoscaling', '~> 1'
4
+ gem 'aws-sdk-codedeploy', '~> 1'
5
+ gem 'aws-sdk-ec2', '~> 1'
6
+ gem 'aws-sdk-elasticloadbalancing', '~> 1'
5
7
 
6
- # this is somewhat undesirable but lets us update json gem version. We should really replace the old v1 code.
7
- gem 'aws-sdk-v1-ruby24', github: 'seielit/aws-sdk-v1-ruby24', ref: 'aws-sdk-v1-ruby24'
8
8
  gem 'dotenv', '~> 2.2', '>= 2.2.1'
9
9
  gem 'thor', '>= 0.20.0'
10
10
  gem 'activesupport', '>= 5.1.4'
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # hashicorptools
2
2
  a set of ruby utilities for interacting with and wrapping packer, terraform and amazon web services.
3
3
 
4
+ ![CI Status](https://github.com/controlshift/hashicorptools/actions/workflows/ci.yml/badge.svg)
5
+
4
6
  ## ec2_host
5
7
 
6
8
  Allows quick lookup and ssh to machines by role and environment. Queries for instances by AWS tags.
data/Rakefile CHANGED
@@ -15,12 +15,12 @@ require 'juwelier'
15
15
  Juwelier::Tasks.new do |gem|
16
16
  # gem is a Gem::Specification... see http://guides.rubygems.org/specification-reference/ for more options
17
17
  gem.name = "hashicorptools"
18
- gem.homepage = "http://github.com/woodhull/hashicorptools"
18
+ gem.homepage = "http://github.com/controlshift/hashicorptools"
19
19
  gem.license = "MIT"
20
20
  gem.summary = %Q{Wrappers for terraform and packer}
21
21
  gem.description = %Q{Wrappers for terraform and packer}
22
22
  gem.email = "systems@controlshiftlabs.com"
23
- gem.authors = ["Nathan Woodhull"]
23
+ gem.authors = ['Kathy Lu', 'Diego Marcet', 'Grey Moore', 'Nathan Woodhull']
24
24
  gem.executables = ['ec2_host']
25
25
  # dependencies defined in Gemfile
26
26
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.1
1
+ 2.1.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.5.1 ruby lib
5
+ # stub: hashicorptools 2.1.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "hashicorptools".freeze
9
- s.version = "0.5.1"
9
+ s.version = "2.1.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
- s.authors = ["Nathan Woodhull".freeze]
14
- s.date = "2020-07-29"
13
+ s.authors = ["Kathy Lu".freeze, "Diego Marcet".freeze, "Grey Moore".freeze, "Nathan Woodhull".freeze]
14
+ s.date = "2022-02-03"
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]
@@ -20,9 +20,9 @@ Gem::Specification.new do |s|
20
20
  "README.md"
21
21
  ]
22
22
  s.files = [
23
+ ".github/workflows/ci.yml",
23
24
  ".ruby-gemset",
24
25
  ".ruby-version",
25
- ".travis.yml",
26
26
  "Gemfile",
27
27
  "LICENSE",
28
28
  "README.md",
@@ -39,47 +39,38 @@ Gem::Specification.new do |s|
39
39
  "lib/hashicorptools/packer.rb",
40
40
  "lib/hashicorptools/update_launch_configuration.rb",
41
41
  "lib/hashicorptools/variables.rb",
42
- "spec/hashicorptools_spec.rb",
42
+ "spec/ec2_utilities_spec.rb",
43
43
  "spec/spec_helper.rb"
44
44
  ]
45
- s.homepage = "http://github.com/woodhull/hashicorptools".freeze
45
+ s.homepage = "http://github.com/controlshift/hashicorptools".freeze
46
46
  s.licenses = ["MIT".freeze]
47
- s.rubygems_version = "3.0.8".freeze
47
+ s.rubygems_version = "3.2.32".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<aws-sdk-v1-ruby24>.freeze, [">= 0"])
56
- s.add_runtime_dependency(%q<dotenv>.freeze, ["~> 2.2", ">= 2.2.1"])
57
- s.add_runtime_dependency(%q<thor>.freeze, [">= 0.20.0"])
58
- s.add_runtime_dependency(%q<activesupport>.freeze, [">= 5.1.4"])
59
- s.add_runtime_dependency(%q<byebug>.freeze, [">= 10.0.2"])
60
- s.add_runtime_dependency(%q<git>.freeze, ["> 1.3"])
61
- s.add_development_dependency(%q<rspec>.freeze, ["> 3.7"])
62
- s.add_development_dependency(%q<rdoc>.freeze, ["> 3.12"])
63
- s.add_development_dependency(%q<bundler>.freeze, ["> 2.0"])
64
- s.add_development_dependency(%q<juwelier>.freeze, [">= 0"])
65
- s.add_development_dependency(%q<simplecov>.freeze, [">= 0"])
66
- else
67
- s.add_dependency(%q<aws-sdk>.freeze, ["~> 2"])
68
- s.add_dependency(%q<aws-sdk-v1-ruby24>.freeze, [">= 0"])
69
- s.add_dependency(%q<dotenv>.freeze, ["~> 2.2", ">= 2.2.1"])
70
- s.add_dependency(%q<thor>.freeze, [">= 0.20.0"])
71
- s.add_dependency(%q<activesupport>.freeze, [">= 5.1.4"])
72
- s.add_dependency(%q<byebug>.freeze, [">= 10.0.2"])
73
- s.add_dependency(%q<git>.freeze, ["> 1.3"])
74
- s.add_dependency(%q<rspec>.freeze, ["> 3.7"])
75
- s.add_dependency(%q<rdoc>.freeze, ["> 3.12"])
76
- s.add_dependency(%q<bundler>.freeze, ["> 2.0"])
77
- s.add_dependency(%q<juwelier>.freeze, [">= 0"])
78
- s.add_dependency(%q<simplecov>.freeze, [">= 0"])
79
- end
54
+ if s.respond_to? :add_runtime_dependency then
55
+ s.add_runtime_dependency(%q<aws-sdk-autoscaling>.freeze, ["~> 1"])
56
+ s.add_runtime_dependency(%q<aws-sdk-codedeploy>.freeze, ["~> 1"])
57
+ s.add_runtime_dependency(%q<aws-sdk-ec2>.freeze, ["~> 1"])
58
+ s.add_runtime_dependency(%q<aws-sdk-elasticloadbalancing>.freeze, ["~> 1"])
59
+ s.add_runtime_dependency(%q<dotenv>.freeze, ["~> 2.2", ">= 2.2.1"])
60
+ s.add_runtime_dependency(%q<thor>.freeze, [">= 0.20.0"])
61
+ s.add_runtime_dependency(%q<activesupport>.freeze, [">= 5.1.4"])
62
+ s.add_runtime_dependency(%q<byebug>.freeze, [">= 10.0.2"])
63
+ s.add_runtime_dependency(%q<git>.freeze, ["> 1.3"])
64
+ s.add_development_dependency(%q<rspec>.freeze, ["> 3.7"])
65
+ s.add_development_dependency(%q<rdoc>.freeze, ["> 3.12"])
66
+ s.add_development_dependency(%q<bundler>.freeze, ["> 2.0"])
67
+ s.add_development_dependency(%q<juwelier>.freeze, [">= 0"])
68
+ s.add_development_dependency(%q<simplecov>.freeze, [">= 0"])
80
69
  else
81
- s.add_dependency(%q<aws-sdk>.freeze, ["~> 2"])
82
- s.add_dependency(%q<aws-sdk-v1-ruby24>.freeze, [">= 0"])
70
+ s.add_dependency(%q<aws-sdk-autoscaling>.freeze, ["~> 1"])
71
+ s.add_dependency(%q<aws-sdk-codedeploy>.freeze, ["~> 1"])
72
+ s.add_dependency(%q<aws-sdk-ec2>.freeze, ["~> 1"])
73
+ s.add_dependency(%q<aws-sdk-elasticloadbalancing>.freeze, ["~> 1"])
83
74
  s.add_dependency(%q<dotenv>.freeze, ["~> 2.2", ">= 2.2.1"])
84
75
  s.add_dependency(%q<thor>.freeze, [">= 0.20.0"])
85
76
  s.add_dependency(%q<activesupport>.freeze, [">= 5.1.4"])
@@ -1,4 +1,7 @@
1
1
  require "timeout"
2
+ require 'aws-sdk-autoscaling'
3
+ require 'aws-sdk-ec2'
4
+ require 'aws-sdk-elasticloadbalancing'
2
5
 
3
6
  module Hashicorptools
4
7
  class AutoScalingGroup
@@ -91,11 +94,13 @@ module Hashicorptools
91
94
  end
92
95
 
93
96
  def verify_all_instances_using_correct_ami
94
- launch_configuration = Aws::AutoScaling::LaunchConfiguration.new(name: group.launch_configuration_name, client: autoscaling)
95
- image_id = launch_configuration.image_id
96
- group.instances.each do |i|
97
- instance = Aws::EC2::Instance.new(i.instance_id, client: ec2)
98
- raise "#{i.instance_id} has the incorrect AMI, not #{image_id} from current LaunchConfig" if instance.image_id != image_id
97
+ if group.launch_configuration_name
98
+ launch_configuration = Aws::AutoScaling::LaunchConfiguration.new(name: group.launch_configuration_name, client: autoscaling)
99
+ image_id = launch_configuration.image_id
100
+ group.instances.each do |i|
101
+ instance = Aws::EC2::Instance.new(i.instance_id, client: ec2)
102
+ raise "#{i.instance_id} has the incorrect AMI, not #{image_id} from current LaunchConfig" if instance.image_id != image_id
103
+ end
99
104
  end
100
105
  end
101
106
 
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'aws-sdk'
3
+ require 'aws-sdk-codedeploy'
4
4
  require 'dotenv'
5
5
  require 'git'
6
6
  require 'logger'
@@ -31,6 +31,9 @@ module Hashicorptools
31
31
  })
32
32
  output "created deployment #{response.deployment_id}"
33
33
  output "https://console.aws.amazon.com/codedeploy/home?region=#{aws_region}#/deployments/#{response.deployment_id}"
34
+
35
+ # Classes that override this method should return true for a successful deployment, false otherwise
36
+ return true
34
37
  end
35
38
 
36
39
  private
@@ -47,23 +50,25 @@ module Hashicorptools
47
50
  class CodeDeploy < Thor
48
51
  AWS_REGION_US_EAST_1 = 'us-east-1'
49
52
 
53
+ attr_reader :git
54
+
50
55
  desc 'deploy', 'deploy latest code to environment'
51
56
  option :environment, required: true
52
57
  option :branch
53
58
  option :aws_regions, type: :array
54
59
  option :commit
55
60
  def deploy
56
- g = Git.open('..')
61
+ @git = Git.open('..')
57
62
 
58
63
  # We set defaults (depending on environment) for aws_regions if not passed in
59
64
  aws_regions = options[:aws_regions] || default_regions
60
65
 
61
66
  commit = if options[:commit].present?
62
- g.gcommit(options[:commit])
67
+ git.gcommit(options[:commit])
63
68
  else
64
69
  branch = options[:branch].nil? ? :main : options[:branch].to_sym
65
- g.checkout(branch)
66
- g.log.first
70
+ git.checkout(branch)
71
+ git.log.first
67
72
  end
68
73
 
69
74
  puts "Deploying to environment #{options[:environment]} - regions: #{aws_regions.join(', ')}
@@ -72,9 +77,11 @@ module Hashicorptools
72
77
 
73
78
  puts "Deploying for regions: #{aws_regions}"
74
79
 
75
- threads = []
80
+ all_succeeded = true
76
81
  aws_regions.each_slice(2) do |aws_regions_batch|
77
82
  puts "Deploying for batch of regions: #{aws_regions_batch}"
83
+
84
+ threads = []
78
85
  aws_regions_batch.each do |aws_region|
79
86
  thread = Thread.new{ region_deployment(aws_region).create_deployment(commit.sha, commit.message) }
80
87
  threads.push(thread)
@@ -82,13 +89,24 @@ module Hashicorptools
82
89
 
83
90
  threads.each_with_index do |thread, index|
84
91
  begin
85
- thread.join
86
- rescue Exception => e
92
+ # thread.value waits for the thread to finish with #join, then returns the value of the expression
93
+ thread_succeeded = thread.value
94
+ all_succeeded = all_succeeded && thread_succeeded
95
+ rescue StandardError => e
87
96
  # Don't quit whole program on exception in thread, just print exception and exit thread
88
97
  puts "[#{aws_regions[index]}] EXCEPTION: #{e}"
98
+ all_succeeded = false
89
99
  end
90
100
  end
91
101
  end
102
+
103
+ # If deployment succeeded, tag the commit that was deployed for the environment
104
+ if all_succeeded
105
+ create_tag(options[:environment], commit)
106
+ end
107
+
108
+ # Return a success or failure status code to be consumed by bash
109
+ exit(all_succeeded)
92
110
  end
93
111
 
94
112
  private
@@ -100,5 +118,14 @@ module Hashicorptools
100
118
  def default_regions
101
119
  [AWS_REGION_US_EAST_1]
102
120
  end
121
+
122
+ def create_tag(environment, commit)
123
+ # Delete previous tag in the remote repository
124
+ git.push('origin', ":#{environment}")
125
+
126
+ # Create the tag (replacing if it already exists) and push to remote repository
127
+ git.add_tag(environment, commit.sha, {f: true})
128
+ git.push('origin', environment)
129
+ end
103
130
  end
104
131
  end
@@ -1,3 +1,5 @@
1
+ require 'aws-sdk-ec2'
2
+
1
3
  module Hashicorptools
2
4
  module Ec2Utilities
3
5
  def current_ami(tag = tag_name)
@@ -5,7 +7,8 @@ module Hashicorptools
5
7
  end
6
8
 
7
9
  def amis(tag = tag_name)
8
- sort_by_created_at( ec2.images.with_owner('self').with_tag('Name', tag).to_a )
10
+ images = ec2.describe_images({owners: ['self'], filters: [{name: 'tag:Name', values: [tag]}]}).images
11
+ sort_by_created_at(images)
9
12
  end
10
13
 
11
14
  def ec2
@@ -17,17 +20,15 @@ module Hashicorptools
17
20
  'us-east-1'
18
21
  end
19
22
 
20
- @_ec2 = AWS::EC2.new(region: reg)
23
+ @_ec2 = Aws::EC2::Client.new(region: reg)
21
24
  end
22
25
 
23
26
  def vpc_with_name(name)
24
- vpcs = ec2.client.describe_vpcs({filters: [{name: 'tag:Name', values: [name]}]}).vpc_set
25
- vpcs.first
27
+ ec2.describe_vpcs({filters: [{name: 'tag:Name', values: [name]}]}).vpcs.first
26
28
  end
27
29
 
28
30
  def internet_gateway_for_vpc(vpc_id)
29
- igs = ec2.client.describe_internet_gateways({filters: [{name: 'attachment.vpc-id', values: [vpc_id]}]}).internet_gateway_set
30
- igs.first
31
+ ec2.describe_internet_gateways({filters: [{name: 'attachment.vpc-id', values: [vpc_id]}]}).internet_gateways.first
31
32
  end
32
33
 
33
34
  def sort_by_created_at(collection)
@@ -1,3 +1,5 @@
1
+ require 'aws-sdk-ec2'
2
+
1
3
  module Hashicorptools
2
4
  class Host < Thor
3
5
 
@@ -1,3 +1,6 @@
1
+ require 'aws-sdk-autoscaling'
2
+ require 'aws-sdk-ec2'
3
+
1
4
  module Hashicorptools
2
5
  NUMBER_OF_AMIS_TO_KEEP = 2
3
6
 
@@ -45,7 +48,7 @@ module Hashicorptools
45
48
 
46
49
  desc "clean_snapshots", "clean obsolete EBS snapshots not associated with any AMI"
47
50
  def clean_snapshots
48
- snapshots = ec2.snapshots.with_owner('self')
51
+ snapshots = ec2.describe_snapshots({owner_ids: ['self']}).snapshots
49
52
  snapshots.each do |snapshot|
50
53
  match = snapshot.description.match(/Created by CreateImage\(.+\) for (ami-[0-9a-f]+) from vol-.+/)
51
54
  if match.nil?
@@ -54,25 +57,28 @@ module Hashicorptools
54
57
  end
55
58
 
56
59
  ami_id = match[1]
57
- unless ec2.images[ami_id].exists?
58
- puts "Removing obsolete snapshot #{snapshot.id} - #{snapshot.description}"
59
- snapshot = AWS::EC2::Snapshot.new(snapshot.id)
60
- snapshot.delete
60
+ unless Aws::EC2::Image.new(ami_id, region: region).exists?
61
+ puts "Removing obsolete snapshot #{snapshot.snapshot_id} - #{snapshot.description}"
62
+ ec2.delete_snapshot({snapshot_id: snapshot.snapshot_id})
61
63
  end
62
64
  end
63
65
  end
64
66
 
65
67
  desc "boot", "start up an instance of the latest version of AMI"
66
68
  def boot
67
- run_instances_resp = ec2.run_instances(image_id: current_ami('base-image').image_id,
69
+ run_instances_resp = ec2.run_instances({
70
+ image_id: current_ami('base-image').image_id,
68
71
  min_count: 1,
69
72
  max_count: 1,
70
- instance_type: "t2.micro")
73
+ instance_type: "t2.micro"
74
+ })
71
75
 
72
- ec2.create_tags( resources: run_instances_resp.instances.collect(&:instance_id),
73
- tags: [ {key: 'Name', value: "packer test boot #{tag_name}"},
74
- {key: 'environment', value: 'packer-development'},
75
- {key: 'temporary', value: 'kill me'}])
76
+ ec2.create_tags({
77
+ resources: run_instances_resp.instances.collect(&:instance_id),
78
+ tags: [ {key: 'Name', value: "packer test boot #{tag_name}"},
79
+ {key: 'environment', value: 'packer-development'},
80
+ {key: 'temporary', value: 'kill me'}]
81
+ })
76
82
 
77
83
  require 'byebug'
78
84
  byebug
@@ -106,7 +112,7 @@ module Hashicorptools
106
112
  end
107
113
 
108
114
  def ami_building_subnet_id
109
- ec2.client.describe_subnets({filters: [{name: "vpc-id", values: [ami_building_vpc_id]}]}).subnet_set.first.subnet_id
115
+ ec2.describe_subnets({filters: [{name: "vpc-id", values: [ami_building_vpc_id]}]}).subnets.first.subnet_id
110
116
  end
111
117
 
112
118
  def format_variable(key, value)
@@ -133,15 +139,16 @@ module Hashicorptools
133
139
  @auto_scaling ||= Aws::AutoScaling::Client.new(region: client_region)
134
140
  end
135
141
 
136
- def ec2_v2(client_region=region)
137
- @ec2 ||= Aws::EC2::Client.new(region: client_region)
142
+ def regional_ec2_client(client_region=region)
143
+ @_regional_ec2_clients = {} if @_regional_ec2_clients.nil?
144
+ @_regional_ec2_clients[client_region] ||= Aws::EC2::Client.new(region: client_region)
138
145
  end
139
146
 
140
147
  def amis_in_use(client_region)
141
148
  launch_configs = auto_scaling(client_region).describe_launch_configurations
142
149
  image_ids = launch_configs.data['launch_configurations'].collect{|lc| lc.image_id}.flatten
143
150
 
144
- ec2_reservations = ec2_v2(client_region).describe_instances
151
+ ec2_reservations = regional_ec2_client(client_region).describe_instances
145
152
  image_ids << ec2_reservations.reservations.collect{|res| res.instances.collect{|r| r.image_id}}.flatten
146
153
  image_ids.flatten
147
154
  end
@@ -170,7 +177,9 @@ module Hashicorptools
170
177
  amis_to_remove.each do |ami|
171
178
  ebs_mappings = ami.block_device_mappings
172
179
  puts "Deregistering #{ami.image_id}"
173
- ami.deregister
180
+ regional_ec2_client(region_to_clean).deregister_image({
181
+ image_id: ami.image_id
182
+ })
174
183
  delete_ami_snapshots(ebs_mappings, snapshot_region: region_to_clean)
175
184
  end
176
185
 
@@ -184,16 +193,21 @@ module Hashicorptools
184
193
  end
185
194
 
186
195
  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 )
196
+ images = regional_ec2_client(ami_region).describe_images({
197
+ owners: ['self'],
198
+ filters: [{name: 'tag:Name', values: [tag_name]}]
199
+ }).images
200
+ sort_by_created_at(images)
190
201
  end
191
202
 
192
203
  def delete_ami_snapshots(ebs_mappings, snapshot_region:)
193
- regional_ec2_client = AWS::EC2::Client.new(region: snapshot_region)
194
- ebs_mappings.each do |volume, attributes|
195
- puts "Deleting snapshot #{attributes[:snapshot_id]}"
196
- regional_ec2_client.delete_snapshot(snapshot_id: attributes[:snapshot_id])
204
+ ec2_client = regional_ec2_client(snapshot_region)
205
+
206
+ ebs_mappings.each do |ebs_mapping|
207
+ unless ebs_mapping.ebs.nil?
208
+ puts "Deleting snapshot #{ebs_mapping.ebs.snapshot_id}"
209
+ ec2_client.delete_snapshot({snapshot_id: ebs_mapping.ebs.snapshot_id})
210
+ end
197
211
  end
198
212
  end
199
213
  end
@@ -2,8 +2,6 @@ require 'bundler/setup'
2
2
  require 'dotenv'
3
3
  require 'thor'
4
4
  require 'active_support/all'
5
- require 'aws-sdk-v1'
6
- require 'aws-sdk'
7
5
 
8
6
  module Hashicorptools
9
7
  end
@@ -0,0 +1,14 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe Hashicorptools::Ec2Utilities, type: :helper do
4
+ let(:including_class) { Class.new { include Hashicorptools::Ec2Utilities } }
5
+
6
+ subject { including_class.new }
7
+
8
+ describe '#ec2' do
9
+ it 'should return a client' do
10
+ client = subject.ec2
11
+ expect(client).to be_a Aws::EC2::Client
12
+ end
13
+ end
14
+ end
metadata CHANGED
@@ -1,43 +1,74 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hashicorptools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
+ - Kathy Lu
8
+ - Diego Marcet
9
+ - Grey Moore
7
10
  - Nathan Woodhull
8
11
  autorequire:
9
12
  bindir: bin
10
13
  cert_chain: []
11
- date: 2020-07-29 00:00:00.000000000 Z
14
+ date: 2022-02-03 00:00:00.000000000 Z
12
15
  dependencies:
13
16
  - !ruby/object:Gem::Dependency
14
- name: aws-sdk
17
+ name: aws-sdk-autoscaling
15
18
  requirement: !ruby/object:Gem::Requirement
16
19
  requirements:
17
20
  - - "~>"
18
21
  - !ruby/object:Gem::Version
19
- version: '2'
22
+ version: '1'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
27
  - - "~>"
25
28
  - !ruby/object:Gem::Version
26
- version: '2'
29
+ version: '1'
27
30
  - !ruby/object:Gem::Dependency
28
- name: aws-sdk-v1-ruby24
31
+ name: aws-sdk-codedeploy
29
32
  requirement: !ruby/object:Gem::Requirement
30
33
  requirements:
31
- - - ">="
34
+ - - "~>"
32
35
  - !ruby/object:Gem::Version
33
- version: '0'
36
+ version: '1'
34
37
  type: :runtime
35
38
  prerelease: false
36
39
  version_requirements: !ruby/object:Gem::Requirement
37
40
  requirements:
38
- - - ">="
41
+ - - "~>"
39
42
  - !ruby/object:Gem::Version
40
- version: '0'
43
+ version: '1'
44
+ - !ruby/object:Gem::Dependency
45
+ name: aws-sdk-ec2
46
+ requirement: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - "~>"
49
+ - !ruby/object:Gem::Version
50
+ version: '1'
51
+ type: :runtime
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - "~>"
56
+ - !ruby/object:Gem::Version
57
+ version: '1'
58
+ - !ruby/object:Gem::Dependency
59
+ name: aws-sdk-elasticloadbalancing
60
+ requirement: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - "~>"
63
+ - !ruby/object:Gem::Version
64
+ version: '1'
65
+ type: :runtime
66
+ prerelease: false
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - "~>"
70
+ - !ruby/object:Gem::Version
71
+ version: '1'
41
72
  - !ruby/object:Gem::Dependency
42
73
  name: dotenv
43
74
  requirement: !ruby/object:Gem::Requirement
@@ -193,9 +224,9 @@ extra_rdoc_files:
193
224
  - LICENSE
194
225
  - README.md
195
226
  files:
227
+ - ".github/workflows/ci.yml"
196
228
  - ".ruby-gemset"
197
229
  - ".ruby-version"
198
- - ".travis.yml"
199
230
  - Gemfile
200
231
  - LICENSE
201
232
  - README.md
@@ -212,9 +243,9 @@ files:
212
243
  - lib/hashicorptools/packer.rb
213
244
  - lib/hashicorptools/update_launch_configuration.rb
214
245
  - lib/hashicorptools/variables.rb
215
- - spec/hashicorptools_spec.rb
246
+ - spec/ec2_utilities_spec.rb
216
247
  - spec/spec_helper.rb
217
- homepage: http://github.com/woodhull/hashicorptools
248
+ homepage: http://github.com/controlshift/hashicorptools
218
249
  licenses:
219
250
  - MIT
220
251
  metadata: {}
@@ -233,7 +264,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
233
264
  - !ruby/object:Gem::Version
234
265
  version: '0'
235
266
  requirements: []
236
- rubygems_version: 3.0.8
267
+ rubygems_version: 3.2.32
237
268
  signing_key:
238
269
  specification_version: 4
239
270
  summary: Wrappers for terraform and packer
data/.travis.yml DELETED
@@ -1,7 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - "2.6.6"
4
- # TravisCI uses Bundler 1 by default, but we want Bundler 2
5
- # https://docs.travis-ci.com/user/languages/ruby/#bundler-20
6
- before_install:
7
- - gem install bundler
@@ -1,8 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
-
3
- describe "Hashicorptools" do
4
- it "fails" do
5
- pending
6
- fail "hey buddy, you should probably rename this file and start specing for real"
7
- end
8
- end