hashicorptools 0.1.2 → 0.2.2
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 +5 -5
- data/.ruby-version +1 -1
- data/Gemfile.lock +54 -45
- data/VERSION +1 -1
- data/hashicorptools.gemspec +4 -4
- data/lib/hashicorptools/ami_configs/standard-ami.json +40 -28
- data/lib/hashicorptools/auto_scaling_group.rb +15 -5
- data/lib/hashicorptools/packer.rb +20 -3
- data/lib/hashicorptools/terraform.rb +7 -1
- data/lib/hashicorptools/update_launch_configuration.rb +2 -0
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 3480aac6dcba04268d682dbd19fddb5d3fa43220e5e9b3cc0c679391749d217e
|
|
4
|
+
data.tar.gz: fe0b0c9a625b495dc830913a3a4b957ec7a1c68dc3aa98b41ac48888abea33e4
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 16bdfd1e3ecf8152f230e5f145b70d8e0356cef6af22651294567a8b1eb33c66edc1e4582816610a8180ce53067873d4894203dd03a2b1699183b04007d9d5c2
|
|
7
|
+
data.tar.gz: e61e5e7c5418954fedf936e187d778c8f413236020cc193bd80934b95efa72135a74f4f13cef32b21553c8198978a5400501cee9de98723f5eb1c55ee4d3c9c6
|
data/.ruby-version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
ruby-2.
|
|
1
|
+
ruby-2.5.1
|
data/Gemfile.lock
CHANGED
|
@@ -1,47 +1,52 @@
|
|
|
1
1
|
GEM
|
|
2
2
|
remote: http://rubygems.org/
|
|
3
3
|
specs:
|
|
4
|
-
activesupport (
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
activesupport (5.1.4)
|
|
5
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
6
|
+
i18n (~> 0.7)
|
|
7
|
+
minitest (~> 5.1)
|
|
8
|
+
tzinfo (~> 1.1)
|
|
9
|
+
addressable (2.5.2)
|
|
10
|
+
public_suffix (>= 2.0.2, < 4.0)
|
|
11
|
+
aws-sdk (2.11.86)
|
|
12
|
+
aws-sdk-resources (= 2.11.86)
|
|
13
|
+
aws-sdk-core (2.11.86)
|
|
11
14
|
aws-sigv4 (~> 1.0)
|
|
12
15
|
jmespath (~> 1.0)
|
|
13
|
-
aws-sdk-resources (2.
|
|
14
|
-
aws-sdk-core (= 2.
|
|
15
|
-
aws-sdk-v1 (1.
|
|
16
|
+
aws-sdk-resources (2.11.86)
|
|
17
|
+
aws-sdk-core (= 2.11.86)
|
|
18
|
+
aws-sdk-v1 (1.67.0)
|
|
16
19
|
json (~> 1.4)
|
|
17
|
-
nokogiri (
|
|
18
|
-
aws-sigv4 (1.0.
|
|
20
|
+
nokogiri (~> 1)
|
|
21
|
+
aws-sigv4 (1.0.3)
|
|
19
22
|
builder (3.2.3)
|
|
20
|
-
byebug (
|
|
23
|
+
byebug (10.0.2)
|
|
24
|
+
concurrent-ruby (1.0.5)
|
|
21
25
|
descendants_tracker (0.0.4)
|
|
22
26
|
thread_safe (~> 0.3, >= 0.3.1)
|
|
23
27
|
diff-lcs (1.3)
|
|
24
28
|
docile (1.1.5)
|
|
25
|
-
domain_name (0.5.
|
|
29
|
+
domain_name (0.5.20170404)
|
|
26
30
|
unf (>= 0.0.5, < 1.0.0)
|
|
27
|
-
dotenv (2.
|
|
31
|
+
dotenv (2.2.1)
|
|
28
32
|
dynect_rest (0.4.6)
|
|
29
33
|
rest-client
|
|
30
|
-
faraday (0.
|
|
34
|
+
faraday (0.12.2)
|
|
31
35
|
multipart-post (>= 1.2, < 3)
|
|
32
36
|
git (1.3.0)
|
|
33
|
-
github_api (0.
|
|
34
|
-
addressable (~> 2.4
|
|
37
|
+
github_api (0.18.2)
|
|
38
|
+
addressable (~> 2.4)
|
|
35
39
|
descendants_tracker (~> 0.0.4)
|
|
36
|
-
faraday (~> 0.8
|
|
37
|
-
hashie (>= 3.
|
|
40
|
+
faraday (~> 0.8)
|
|
41
|
+
hashie (~> 3.5, >= 3.5.2)
|
|
38
42
|
oauth2 (~> 1.0)
|
|
39
43
|
hashie (3.5.6)
|
|
40
|
-
highline (1.7.
|
|
44
|
+
highline (1.7.10)
|
|
41
45
|
http-cookie (1.0.3)
|
|
42
46
|
domain_name (~> 0.5)
|
|
43
|
-
i18n (0.
|
|
44
|
-
|
|
47
|
+
i18n (0.9.1)
|
|
48
|
+
concurrent-ruby (~> 1.0)
|
|
49
|
+
jmespath (1.4.0)
|
|
45
50
|
json (1.8.6)
|
|
46
51
|
juwelier (2.4.7)
|
|
47
52
|
builder
|
|
@@ -61,13 +66,14 @@ GEM
|
|
|
61
66
|
mime-types (3.1)
|
|
62
67
|
mime-types-data (~> 3.2015)
|
|
63
68
|
mime-types-data (3.2016.0521)
|
|
64
|
-
mini_portile2 (2.
|
|
65
|
-
|
|
69
|
+
mini_portile2 (2.3.0)
|
|
70
|
+
minitest (5.10.3)
|
|
71
|
+
multi_json (1.12.2)
|
|
66
72
|
multi_xml (0.6.0)
|
|
67
73
|
multipart-post (2.0.0)
|
|
68
74
|
netrc (0.11.0)
|
|
69
|
-
nokogiri (1.
|
|
70
|
-
mini_portile2 (~> 2.
|
|
75
|
+
nokogiri (1.8.4)
|
|
76
|
+
mini_portile2 (~> 2.3.0)
|
|
71
77
|
oauth2 (1.4.0)
|
|
72
78
|
faraday (>= 0.8, < 0.13)
|
|
73
79
|
jwt (~> 1.0)
|
|
@@ -75,38 +81,41 @@ GEM
|
|
|
75
81
|
multi_xml (~> 0.5)
|
|
76
82
|
rack (>= 1.2, < 3)
|
|
77
83
|
psych (2.2.4)
|
|
84
|
+
public_suffix (3.0.1)
|
|
78
85
|
rack (2.0.3)
|
|
79
|
-
rake (12.
|
|
86
|
+
rake (12.3.0)
|
|
80
87
|
rdoc (3.12.2)
|
|
81
88
|
json (~> 1.4)
|
|
82
|
-
rest-client (2.0.
|
|
89
|
+
rest-client (2.0.2)
|
|
83
90
|
http-cookie (>= 1.0.2, < 2.0)
|
|
84
91
|
mime-types (>= 1.16, < 4.0)
|
|
85
92
|
netrc (~> 0.8)
|
|
86
|
-
rspec (3.
|
|
87
|
-
rspec-core (~> 3.
|
|
88
|
-
rspec-expectations (~> 3.
|
|
89
|
-
rspec-mocks (~> 3.
|
|
90
|
-
rspec-core (3.
|
|
91
|
-
rspec-support (~> 3.
|
|
92
|
-
rspec-expectations (3.
|
|
93
|
+
rspec (3.7.0)
|
|
94
|
+
rspec-core (~> 3.7.0)
|
|
95
|
+
rspec-expectations (~> 3.7.0)
|
|
96
|
+
rspec-mocks (~> 3.7.0)
|
|
97
|
+
rspec-core (3.7.0)
|
|
98
|
+
rspec-support (~> 3.7.0)
|
|
99
|
+
rspec-expectations (3.7.0)
|
|
93
100
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
94
|
-
rspec-support (~> 3.
|
|
95
|
-
rspec-mocks (3.
|
|
101
|
+
rspec-support (~> 3.7.0)
|
|
102
|
+
rspec-mocks (3.7.0)
|
|
96
103
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
97
|
-
rspec-support (~> 3.
|
|
98
|
-
rspec-support (3.
|
|
104
|
+
rspec-support (~> 3.7.0)
|
|
105
|
+
rspec-support (3.7.0)
|
|
99
106
|
semver2 (3.4.2)
|
|
100
|
-
simplecov (0.
|
|
107
|
+
simplecov (0.15.1)
|
|
101
108
|
docile (~> 1.1.0)
|
|
102
109
|
json (>= 1.8, < 3)
|
|
103
110
|
simplecov-html (~> 0.10.0)
|
|
104
|
-
simplecov-html (0.10.
|
|
105
|
-
thor (0.
|
|
111
|
+
simplecov-html (0.10.2)
|
|
112
|
+
thor (0.20.0)
|
|
106
113
|
thread_safe (0.3.6)
|
|
114
|
+
tzinfo (1.2.4)
|
|
115
|
+
thread_safe (~> 0.1)
|
|
107
116
|
unf (0.1.4)
|
|
108
117
|
unf_ext
|
|
109
|
-
unf_ext (0.0.7.
|
|
118
|
+
unf_ext (0.0.7.4)
|
|
110
119
|
|
|
111
120
|
PLATFORMS
|
|
112
121
|
ruby
|
|
@@ -127,4 +136,4 @@ DEPENDENCIES
|
|
|
127
136
|
thor
|
|
128
137
|
|
|
129
138
|
BUNDLED WITH
|
|
130
|
-
1.
|
|
139
|
+
1.16.2
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.2.2
|
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.2.2 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.2.2"
|
|
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 = "
|
|
14
|
+
s.date = "2018-07-20"
|
|
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]
|
|
@@ -46,7 +46,7 @@ Gem::Specification.new do |s|
|
|
|
46
46
|
]
|
|
47
47
|
s.homepage = "http://github.com/woodhull/hashicorptools".freeze
|
|
48
48
|
s.licenses = ["MIT".freeze]
|
|
49
|
-
s.rubygems_version = "2.
|
|
49
|
+
s.rubygems_version = "2.7.6".freeze
|
|
50
50
|
s.summary = "Wrappers for terraform and packer".freeze
|
|
51
51
|
|
|
52
52
|
if s.respond_to? :specification_version then
|
|
@@ -1,47 +1,59 @@
|
|
|
1
1
|
{
|
|
2
|
-
"variables": {
|
|
3
|
-
"aws_access_key": "",
|
|
4
|
-
"aws_secret_key": "",
|
|
5
|
-
"source_ami": "",
|
|
6
|
-
"ami_tag": "",
|
|
7
|
-
"cookbook_name": ""
|
|
8
|
-
},
|
|
9
|
-
|
|
10
2
|
"builders": [
|
|
11
3
|
{
|
|
12
|
-
"type": "amazon-ebs",
|
|
13
4
|
"access_key": "{{user `aws_access_key`}}",
|
|
14
|
-
"
|
|
5
|
+
"ami_name": "{{user `ami_tag`}} {{timestamp}}",
|
|
6
|
+
"associate_public_ip_address": true,
|
|
7
|
+
"ena_support": true,
|
|
8
|
+
"instance_type": "c5.large",
|
|
9
|
+
"launch_block_device_mappings": [
|
|
10
|
+
{
|
|
11
|
+
"delete_on_termination": true,
|
|
12
|
+
"device_name": "/dev/sda1",
|
|
13
|
+
"volume_size": 8,
|
|
14
|
+
"volume_type": "gp2"
|
|
15
|
+
}
|
|
16
|
+
],
|
|
15
17
|
"region": "us-east-1",
|
|
18
|
+
"run_tags": {
|
|
19
|
+
"kind": "packer",
|
|
20
|
+
"role": "AMI builder"
|
|
21
|
+
},
|
|
22
|
+
"secret_key": "{{user `aws_secret_key`}}",
|
|
16
23
|
"source_ami": "{{user `source_ami`}}",
|
|
17
|
-
"
|
|
24
|
+
"ssh_interface": "public_ip",
|
|
18
25
|
"ssh_username": "ubuntu",
|
|
19
|
-
"
|
|
26
|
+
"subnet_id": "{{user `subnet_id`}}",
|
|
20
27
|
"tags": {
|
|
21
28
|
"Name": "{{user `ami_tag`}}",
|
|
22
29
|
"created_at": "{{isotime}}",
|
|
23
30
|
"parent_ami": "{{user `source_ami`}}"
|
|
24
31
|
},
|
|
25
|
-
"
|
|
26
|
-
|
|
27
|
-
"role": "AMI builder"
|
|
28
|
-
},
|
|
29
|
-
"launch_block_device_mappings": [{
|
|
30
|
-
"device_name": "/dev/sda1",
|
|
31
|
-
"volume_size": 8,
|
|
32
|
-
"volume_type": "gp2",
|
|
33
|
-
"delete_on_termination": true
|
|
34
|
-
}]
|
|
32
|
+
"type": "amazon-ebs",
|
|
33
|
+
"vpc_id": "{{user `vpc_id`}}"
|
|
35
34
|
}
|
|
36
35
|
],
|
|
36
|
+
"post-processors": [],
|
|
37
37
|
"provisioners": [
|
|
38
38
|
{
|
|
39
|
-
"
|
|
40
|
-
|
|
41
|
-
|
|
39
|
+
"cookbook_paths": [
|
|
40
|
+
"cookbooks",
|
|
41
|
+
"site-cookbooks"
|
|
42
|
+
],
|
|
43
|
+
"run_list": [
|
|
44
|
+
"{{user `cookbook_name`}}"
|
|
45
|
+
],
|
|
42
46
|
"skip_install": true,
|
|
43
|
-
"
|
|
44
|
-
"encrypted_data_bag_secret_path": "/etc/chef/encrypted_data_bag_secret"
|
|
47
|
+
"type": "chef-solo"
|
|
45
48
|
}
|
|
46
|
-
]
|
|
49
|
+
],
|
|
50
|
+
"variables": {
|
|
51
|
+
"ami_tag": "",
|
|
52
|
+
"aws_access_key": "",
|
|
53
|
+
"aws_secret_key": "",
|
|
54
|
+
"cookbook_name": "",
|
|
55
|
+
"source_ami": "",
|
|
56
|
+
"subnet_id": "",
|
|
57
|
+
"vpc_id": ""
|
|
58
|
+
}
|
|
47
59
|
}
|
|
@@ -24,12 +24,13 @@ module Hashicorptools
|
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
puts "waiting for scaling events to finish"
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
wait_for_activities_to_complete(group)
|
|
28
|
+
puts "all scaling activities finished."
|
|
29
|
+
|
|
30
|
+
if desired_instances > 0
|
|
31
|
+
wait_until_instances_ready
|
|
32
|
+
puts "all #{desired_instances} instances ready."
|
|
29
33
|
end
|
|
30
|
-
puts "all #{desired_instances} scaling activities successful."
|
|
31
|
-
wait_until_instances_ready
|
|
32
|
-
puts "all #{desired_instances} instances ready."
|
|
33
34
|
end
|
|
34
35
|
|
|
35
36
|
def wait_until_instances_ready
|
|
@@ -89,6 +90,15 @@ module Hashicorptools
|
|
|
89
90
|
end
|
|
90
91
|
end
|
|
91
92
|
|
|
93
|
+
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
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
92
102
|
private
|
|
93
103
|
|
|
94
104
|
def wait_for_activities_to_complete(group)
|
|
@@ -5,6 +5,10 @@ module Hashicorptools
|
|
|
5
5
|
include Ec2Utilities
|
|
6
6
|
include Variables
|
|
7
7
|
|
|
8
|
+
def self.exit_on_failure?
|
|
9
|
+
true
|
|
10
|
+
end
|
|
11
|
+
|
|
8
12
|
desc "build", "creates an AMI from the current config"
|
|
9
13
|
option :debug, :required => false
|
|
10
14
|
def build
|
|
@@ -16,6 +20,11 @@ module Hashicorptools
|
|
|
16
20
|
system "packer validate #{ami_config_path}"
|
|
17
21
|
end
|
|
18
22
|
|
|
23
|
+
desc "fix", "runs the packer fix cmd"
|
|
24
|
+
def fix
|
|
25
|
+
system "packer fix #{ami_config_path}"
|
|
26
|
+
end
|
|
27
|
+
|
|
19
28
|
desc "console", "interactive session"
|
|
20
29
|
def console
|
|
21
30
|
require 'byebug'
|
|
@@ -70,17 +79,17 @@ module Hashicorptools
|
|
|
70
79
|
protected
|
|
71
80
|
|
|
72
81
|
def _build(settings_overrides={})
|
|
73
|
-
settings_overrides.merge!({source_ami: source_ami_id, ami_tag: tag_name, cookbook_name: cookbook_name})
|
|
82
|
+
settings_overrides.merge!({source_ami: source_ami_id, vpc_id: ami_building_vpc_id, subnet_id: ami_building_subnet_id, ami_tag: tag_name, cookbook_name: cookbook_name})
|
|
74
83
|
|
|
75
84
|
if options[:debug]
|
|
76
85
|
puts "[DEBUG] Executing 'packer build -debug #{variables(settings_overrides)} #{ami_config_path}'"
|
|
77
86
|
system "packer build -debug \
|
|
78
87
|
#{variables(settings_overrides)} \
|
|
79
|
-
#{ami_config_path}"
|
|
88
|
+
#{ami_config_path}" or exit(1)
|
|
80
89
|
else
|
|
81
90
|
system "packer build \
|
|
82
91
|
#{variables(settings_overrides)} \
|
|
83
|
-
#{ami_config_path}"
|
|
92
|
+
#{ami_config_path}" or exit(1)
|
|
84
93
|
end
|
|
85
94
|
|
|
86
95
|
clean_amis
|
|
@@ -90,6 +99,14 @@ module Hashicorptools
|
|
|
90
99
|
current_ami('base-image').image_id
|
|
91
100
|
end
|
|
92
101
|
|
|
102
|
+
def ami_building_vpc_id
|
|
103
|
+
vpc_with_name('ami-building').vpc_id
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def ami_building_subnet_id
|
|
107
|
+
ec2.client.describe_subnets({filters: [{name: "vpc-id", values: [ami_building_vpc_id]}]}).subnet_set.first.subnet_id
|
|
108
|
+
end
|
|
109
|
+
|
|
93
110
|
def format_variable(key, value)
|
|
94
111
|
"-var '#{key}=#{value}'"
|
|
95
112
|
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
module Hashicorptools
|
|
2
2
|
class Terraform < Thor
|
|
3
|
-
TERRAFORM_VERSION = '0.
|
|
3
|
+
TERRAFORM_VERSION = '0.11.0'
|
|
4
4
|
|
|
5
5
|
include Ec2Utilities
|
|
6
6
|
include Variables
|
|
@@ -11,6 +11,12 @@ module Hashicorptools
|
|
|
11
11
|
apply
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
+
desc 'init', 'install providers into local terraform'
|
|
15
|
+
option :environment, :required => true
|
|
16
|
+
def init
|
|
17
|
+
|
|
18
|
+
end
|
|
19
|
+
|
|
14
20
|
[:apply, :plan, :destroy, :pull, :refresh].each do |cmd|
|
|
15
21
|
desc cmd, "terraform #{cmd}"
|
|
16
22
|
option :environment, :required => true
|
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.2.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Nathan Woodhull
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2018-07-20 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: aws-sdk
|
|
@@ -244,7 +244,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
244
244
|
version: '0'
|
|
245
245
|
requirements: []
|
|
246
246
|
rubyforge_project:
|
|
247
|
-
rubygems_version: 2.
|
|
247
|
+
rubygems_version: 2.7.6
|
|
248
248
|
signing_key:
|
|
249
249
|
specification_version: 4
|
|
250
250
|
summary: Wrappers for terraform and packer
|