hashicorptools 0.0.7 → 0.3.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 +5 -5
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +5 -1
- data/Gemfile +12 -14
- data/README.md +1 -2
- data/Rakefile +4 -4
- data/VERSION +1 -1
- data/hashicorptools.gemspec +58 -58
- data/lib/hashicorptools.rb +0 -1
- data/lib/hashicorptools/ami_configs/standard-ami.json +60 -0
- data/lib/hashicorptools/auto_scaling_group.rb +19 -9
- data/lib/hashicorptools/code_deploy.rb +13 -3
- data/lib/hashicorptools/ec2_utilities.rb +6 -12
- data/lib/hashicorptools/packer.rb +60 -9
- data/lib/hashicorptools/update_launch_configuration.rb +4 -1
- data/lib/hashicorptools/variables.rb +8 -6
- data/spec/hashicorptools_spec.rb +1 -0
- metadata +59 -36
- data/Gemfile.lock +0 -124
- data/data/standard-ami.json +0 -48
- data/lib/hashicorptools/terraform.rb +0 -344
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 75178f2878dffffbcca566e4ed6fa81c9cc612f55b601adf82a5a31da8492e74
|
|
4
|
+
data.tar.gz: 47fef27c27f49f242188b474872ef4b57128e8998e9a277de2c19f6752a74759
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 75d5ca009f079b41864ec1e5d66b1d6a2e88dcbab943ee2aff7f7cb869a41e667ef32483c0de2c865fe885f5c9d726c6c32122d79a3f7077fa7eec418de111de
|
|
7
|
+
data.tar.gz: d346e24bc5ae25eb45e9406894701d96095d75eec0b40838cd85e647943b6c21a019913a21bb4ba51f9426d9bfa56fbee0cd0b80e90bf0b2bf73b75d62f24996
|
data/.ruby-gemset
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
hashicorptools
|
data/.ruby-version
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ruby-2.6.6
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
|
@@ -3,21 +3,19 @@ source "http://rubygems.org"
|
|
|
3
3
|
# try to slowly migrate to v2 of the aws api
|
|
4
4
|
gem 'aws-sdk', '~> 2'
|
|
5
5
|
|
|
6
|
-
gem 'dynect_rest'
|
|
6
|
+
gem 'dynect_rest', '= 0.4.6'
|
|
7
7
|
|
|
8
|
-
gem 'aws-sdk-v1'
|
|
9
|
-
gem 'dotenv'
|
|
10
|
-
gem 'thor'
|
|
11
|
-
gem 'activesupport'
|
|
12
|
-
gem 'byebug'
|
|
13
|
-
gem 'git'
|
|
8
|
+
gem 'aws-sdk-v1', '~> 1.67'
|
|
9
|
+
gem 'dotenv', '~> 2.2', '>= 2.2.1'
|
|
10
|
+
gem 'thor', '= 0.20.0'
|
|
11
|
+
gem 'activesupport', '~> 5.1', '>= 5.1.4'
|
|
12
|
+
gem 'byebug', '~> 10.0', '>= 10.0.2'
|
|
13
|
+
gem 'git', '~> 1.3'
|
|
14
14
|
|
|
15
|
-
# Add dependencies to develop your gem here.
|
|
16
|
-
# Include everything needed to run rake, tests, features, etc.
|
|
17
15
|
group :development do
|
|
18
|
-
gem
|
|
19
|
-
gem
|
|
20
|
-
gem
|
|
21
|
-
gem
|
|
22
|
-
gem
|
|
16
|
+
gem 'rspec', '~> 3.7'
|
|
17
|
+
gem 'rdoc', '~> 3.12'
|
|
18
|
+
gem 'bundler', '~> 2.0'
|
|
19
|
+
gem 'juwelier', '~> 2.4', '>= 2.4.7'
|
|
20
|
+
gem 'simplecov', '>= 0'
|
|
23
21
|
end
|
data/README.md
CHANGED
|
@@ -11,8 +11,7 @@ Wraps the packer product from hashicorp with standard configuration.
|
|
|
11
11
|
|
|
12
12
|
## terraform wrapper
|
|
13
13
|
|
|
14
|
-
Wraps the terraform product from hashicorp with
|
|
15
|
-
and staging environments.
|
|
14
|
+
Wraps the terraform product from hashicorp with segmented production and staging environments.
|
|
16
15
|
|
|
17
16
|
|
|
18
17
|
Copyright (c) 2015 ChangeSprout Inc. See LICENSE for
|
data/Rakefile
CHANGED
|
@@ -11,8 +11,8 @@ rescue Bundler::BundlerError => e
|
|
|
11
11
|
end
|
|
12
12
|
require 'rake'
|
|
13
13
|
|
|
14
|
-
require '
|
|
15
|
-
|
|
14
|
+
require 'juwelier'
|
|
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
18
|
gem.homepage = "http://github.com/woodhull/hashicorptools"
|
|
@@ -21,10 +21,10 @@ Jeweler::Tasks.new do |gem|
|
|
|
21
21
|
gem.description = %Q{Wrappers for terraform and packer}
|
|
22
22
|
gem.email = "systems@controlshiftlabs.com"
|
|
23
23
|
gem.authors = ["Nathan Woodhull"]
|
|
24
|
-
gem.executables = ['ec2_host']
|
|
24
|
+
gem.executables = ['ec2_host']
|
|
25
25
|
# dependencies defined in Gemfile
|
|
26
26
|
end
|
|
27
|
-
|
|
27
|
+
Juwelier::RubygemsDotOrgTasks.new
|
|
28
28
|
|
|
29
29
|
require 'rspec/core'
|
|
30
30
|
require 'rspec/core/rake_task'
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.0
|
|
1
|
+
0.3.0
|
data/hashicorptools.gemspec
CHANGED
|
@@ -1,98 +1,98 @@
|
|
|
1
|
-
# Generated by
|
|
1
|
+
# Generated by juwelier
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
|
3
|
-
# Instead, edit
|
|
3
|
+
# Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
|
5
|
-
# stub: hashicorptools 0.0
|
|
5
|
+
# stub: hashicorptools 0.3.0 ruby lib
|
|
6
6
|
|
|
7
7
|
Gem::Specification.new do |s|
|
|
8
|
-
s.name = "hashicorptools"
|
|
9
|
-
s.version = "0.0
|
|
8
|
+
s.name = "hashicorptools".freeze
|
|
9
|
+
s.version = "0.3.0"
|
|
10
10
|
|
|
11
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
12
|
-
s.require_paths = ["lib"]
|
|
13
|
-
s.authors = ["Nathan Woodhull"]
|
|
14
|
-
s.date = "
|
|
15
|
-
s.description = "Wrappers for terraform and packer"
|
|
16
|
-
s.email = "systems@controlshiftlabs.com"
|
|
17
|
-
s.executables = ["ec2_host"]
|
|
11
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
|
12
|
+
s.require_paths = ["lib".freeze]
|
|
13
|
+
s.authors = ["Nathan Woodhull".freeze]
|
|
14
|
+
s.date = "2020-06-18"
|
|
15
|
+
s.description = "Wrappers for terraform and packer".freeze
|
|
16
|
+
s.email = "systems@controlshiftlabs.com".freeze
|
|
17
|
+
s.executables = ["ec2_host".freeze]
|
|
18
18
|
s.extra_rdoc_files = [
|
|
19
19
|
"LICENSE",
|
|
20
20
|
"README.md"
|
|
21
21
|
]
|
|
22
22
|
s.files = [
|
|
23
|
+
".ruby-gemset",
|
|
24
|
+
".ruby-version",
|
|
23
25
|
".travis.yml",
|
|
24
26
|
"Gemfile",
|
|
25
|
-
"Gemfile.lock",
|
|
26
27
|
"LICENSE",
|
|
27
28
|
"README.md",
|
|
28
29
|
"Rakefile",
|
|
29
30
|
"VERSION",
|
|
30
31
|
"bin/ec2_host",
|
|
31
|
-
"data/standard-ami.json",
|
|
32
32
|
"hashicorptools.gemspec",
|
|
33
33
|
"lib/hashicorptools.rb",
|
|
34
|
+
"lib/hashicorptools/ami_configs/standard-ami.json",
|
|
34
35
|
"lib/hashicorptools/auto_scaling_group.rb",
|
|
35
36
|
"lib/hashicorptools/code_deploy.rb",
|
|
36
37
|
"lib/hashicorptools/ec2_utilities.rb",
|
|
37
38
|
"lib/hashicorptools/host.rb",
|
|
38
39
|
"lib/hashicorptools/packer.rb",
|
|
39
|
-
"lib/hashicorptools/terraform.rb",
|
|
40
40
|
"lib/hashicorptools/update_launch_configuration.rb",
|
|
41
41
|
"lib/hashicorptools/variables.rb",
|
|
42
42
|
"spec/hashicorptools_spec.rb",
|
|
43
43
|
"spec/spec_helper.rb"
|
|
44
44
|
]
|
|
45
|
-
s.homepage = "http://github.com/woodhull/hashicorptools"
|
|
46
|
-
s.licenses = ["MIT"]
|
|
47
|
-
s.rubygems_version = "
|
|
48
|
-
s.summary = "Wrappers for terraform and packer"
|
|
45
|
+
s.homepage = "http://github.com/woodhull/hashicorptools".freeze
|
|
46
|
+
s.licenses = ["MIT".freeze]
|
|
47
|
+
s.rubygems_version = "3.0.3".freeze
|
|
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
52
|
|
|
53
53
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
|
54
|
-
s.add_runtime_dependency(%q<aws-sdk
|
|
55
|
-
s.add_runtime_dependency(%q<dynect_rest
|
|
56
|
-
s.add_runtime_dependency(%q<aws-sdk-v1
|
|
57
|
-
s.add_runtime_dependency(%q<dotenv
|
|
58
|
-
s.add_runtime_dependency(%q<thor
|
|
59
|
-
s.add_runtime_dependency(%q<activesupport
|
|
60
|
-
s.add_runtime_dependency(%q<byebug
|
|
61
|
-
s.add_runtime_dependency(%q<git
|
|
62
|
-
s.add_development_dependency(%q<rspec
|
|
63
|
-
s.add_development_dependency(%q<rdoc
|
|
64
|
-
s.add_development_dependency(%q<bundler
|
|
65
|
-
s.add_development_dependency(%q<
|
|
66
|
-
s.add_development_dependency(%q<simplecov
|
|
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
67
|
else
|
|
68
|
-
s.add_dependency(%q<aws-sdk
|
|
69
|
-
s.add_dependency(%q<dynect_rest
|
|
70
|
-
s.add_dependency(%q<aws-sdk-v1
|
|
71
|
-
s.add_dependency(%q<dotenv
|
|
72
|
-
s.add_dependency(%q<thor
|
|
73
|
-
s.add_dependency(%q<activesupport
|
|
74
|
-
s.add_dependency(%q<byebug
|
|
75
|
-
s.add_dependency(%q<git
|
|
76
|
-
s.add_dependency(%q<rspec
|
|
77
|
-
s.add_dependency(%q<rdoc
|
|
78
|
-
s.add_dependency(%q<bundler
|
|
79
|
-
s.add_dependency(%q<
|
|
80
|
-
s.add_dependency(%q<simplecov
|
|
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
81
|
end
|
|
82
82
|
else
|
|
83
|
-
s.add_dependency(%q<aws-sdk
|
|
84
|
-
s.add_dependency(%q<dynect_rest
|
|
85
|
-
s.add_dependency(%q<aws-sdk-v1
|
|
86
|
-
s.add_dependency(%q<dotenv
|
|
87
|
-
s.add_dependency(%q<thor
|
|
88
|
-
s.add_dependency(%q<activesupport
|
|
89
|
-
s.add_dependency(%q<byebug
|
|
90
|
-
s.add_dependency(%q<git
|
|
91
|
-
s.add_dependency(%q<rspec
|
|
92
|
-
s.add_dependency(%q<rdoc
|
|
93
|
-
s.add_dependency(%q<bundler
|
|
94
|
-
s.add_dependency(%q<
|
|
95
|
-
s.add_dependency(%q<simplecov
|
|
83
|
+
s.add_dependency(%q<aws-sdk>.freeze, ["~> 2"])
|
|
84
|
+
s.add_dependency(%q<dynect_rest>.freeze, ["= 0.4.6"])
|
|
85
|
+
s.add_dependency(%q<aws-sdk-v1>.freeze, ["~> 1.67"])
|
|
86
|
+
s.add_dependency(%q<dotenv>.freeze, ["~> 2.2", ">= 2.2.1"])
|
|
87
|
+
s.add_dependency(%q<thor>.freeze, ["= 0.20.0"])
|
|
88
|
+
s.add_dependency(%q<activesupport>.freeze, ["~> 5.1", ">= 5.1.4"])
|
|
89
|
+
s.add_dependency(%q<byebug>.freeze, ["~> 10.0", ">= 10.0.2"])
|
|
90
|
+
s.add_dependency(%q<git>.freeze, ["~> 1.3"])
|
|
91
|
+
s.add_dependency(%q<rspec>.freeze, ["~> 3.7"])
|
|
92
|
+
s.add_dependency(%q<rdoc>.freeze, ["~> 3.12"])
|
|
93
|
+
s.add_dependency(%q<bundler>.freeze, ["~> 2.0"])
|
|
94
|
+
s.add_dependency(%q<juwelier>.freeze, ["~> 2.4", ">= 2.4.7"])
|
|
95
|
+
s.add_dependency(%q<simplecov>.freeze, [">= 0"])
|
|
96
96
|
end
|
|
97
97
|
end
|
|
98
98
|
|
data/lib/hashicorptools.rb
CHANGED
|
@@ -13,7 +13,6 @@ require_relative 'hashicorptools/variables'
|
|
|
13
13
|
require_relative 'hashicorptools/ec2_utilities'
|
|
14
14
|
require_relative 'hashicorptools/auto_scaling_group'
|
|
15
15
|
require_relative 'hashicorptools/packer'
|
|
16
|
-
require_relative 'hashicorptools/terraform'
|
|
17
16
|
require_relative 'hashicorptools/host'
|
|
18
17
|
require_relative 'hashicorptools/update_launch_configuration'
|
|
19
18
|
require_relative 'hashicorptools/code_deploy'
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"builders": [
|
|
3
|
+
{
|
|
4
|
+
"access_key": "{{user `aws_access_key`}}",
|
|
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
|
+
],
|
|
17
|
+
"region": "us-east-1",
|
|
18
|
+
"ami_regions": ["us-east-1", "eu-central-1"],
|
|
19
|
+
"run_tags": {
|
|
20
|
+
"kind": "packer",
|
|
21
|
+
"role": "AMI builder"
|
|
22
|
+
},
|
|
23
|
+
"secret_key": "{{user `aws_secret_key`}}",
|
|
24
|
+
"source_ami": "{{user `source_ami`}}",
|
|
25
|
+
"ssh_interface": "public_ip",
|
|
26
|
+
"ssh_username": "ubuntu",
|
|
27
|
+
"subnet_id": "{{user `subnet_id`}}",
|
|
28
|
+
"tags": {
|
|
29
|
+
"Name": "{{user `ami_tag`}}",
|
|
30
|
+
"created_at": "{{isotime}}",
|
|
31
|
+
"parent_ami": "{{user `source_ami`}}"
|
|
32
|
+
},
|
|
33
|
+
"type": "amazon-ebs",
|
|
34
|
+
"vpc_id": "{{user `vpc_id`}}"
|
|
35
|
+
}
|
|
36
|
+
],
|
|
37
|
+
"post-processors": [],
|
|
38
|
+
"provisioners": [
|
|
39
|
+
{
|
|
40
|
+
"cookbook_paths": [
|
|
41
|
+
"cookbooks",
|
|
42
|
+
"site-cookbooks"
|
|
43
|
+
],
|
|
44
|
+
"run_list": [
|
|
45
|
+
"{{user `cookbook_name`}}"
|
|
46
|
+
],
|
|
47
|
+
"skip_install": true,
|
|
48
|
+
"type": "chef-solo"
|
|
49
|
+
}
|
|
50
|
+
],
|
|
51
|
+
"variables": {
|
|
52
|
+
"ami_tag": "",
|
|
53
|
+
"aws_access_key": "",
|
|
54
|
+
"aws_secret_key": "",
|
|
55
|
+
"cookbook_name": "",
|
|
56
|
+
"source_ami": "",
|
|
57
|
+
"subnet_id": "",
|
|
58
|
+
"vpc_id": ""
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -2,7 +2,7 @@ require "timeout"
|
|
|
2
2
|
|
|
3
3
|
module Hashicorptools
|
|
4
4
|
class AutoScalingGroup
|
|
5
|
-
attr_accessor :name
|
|
5
|
+
attr_accessor :name, :region
|
|
6
6
|
|
|
7
7
|
def initialize(attrs = {})
|
|
8
8
|
attrs.each do |key,value|
|
|
@@ -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)
|
|
@@ -105,15 +115,15 @@ module Hashicorptools
|
|
|
105
115
|
end
|
|
106
116
|
|
|
107
117
|
def autoscaling
|
|
108
|
-
@autoscaling ||= Aws::AutoScaling::Client.new(region:
|
|
118
|
+
@autoscaling ||= Aws::AutoScaling::Client.new(region: region)
|
|
109
119
|
end
|
|
110
120
|
|
|
111
121
|
def ec2
|
|
112
|
-
@ec2 ||= Aws::EC2::Client.new(region:
|
|
122
|
+
@ec2 ||= Aws::EC2::Client.new(region: region)
|
|
113
123
|
end
|
|
114
124
|
|
|
115
125
|
def elb
|
|
116
|
-
@elb ||= Aws::ElasticLoadBalancing::Client.new(region:
|
|
126
|
+
@elb ||= Aws::ElasticLoadBalancing::Client.new(region: region)
|
|
117
127
|
end
|
|
118
128
|
|
|
119
129
|
def groups
|
|
@@ -11,11 +11,21 @@ module Hashicorptools
|
|
|
11
11
|
|
|
12
12
|
desc 'deploy', 'deploy latest code to environment'
|
|
13
13
|
option :environment, :required => true
|
|
14
|
-
option :branch
|
|
14
|
+
option :branch
|
|
15
|
+
option :aws_region, default: 'us-east-1'
|
|
15
16
|
option :commit
|
|
16
17
|
def deploy
|
|
17
18
|
g = Git.open('..')
|
|
18
19
|
|
|
20
|
+
# TODO restore defaulting branch to the default branch (and remove below check)
|
|
21
|
+
# once all the repos have the same default branch name of `main`
|
|
22
|
+
# Currently, `agra` is using `master` while other apps are using `main`.
|
|
23
|
+
# and we are unable to detect what the default branch is
|
|
24
|
+
# via the git client here.
|
|
25
|
+
if options[:commit].nil? && options[:branch].nil?
|
|
26
|
+
raise 'You must supply either commit or branch to deploy'
|
|
27
|
+
end
|
|
28
|
+
|
|
19
29
|
commit = if options[:commit].present?
|
|
20
30
|
g.gcommit(options[:commit])
|
|
21
31
|
else
|
|
@@ -34,7 +44,7 @@ module Hashicorptools
|
|
|
34
44
|
def create_deployment(commit_id, commit_message = nil)
|
|
35
45
|
Dotenv.load
|
|
36
46
|
|
|
37
|
-
client = Aws::CodeDeploy::Client.new
|
|
47
|
+
client = Aws::CodeDeploy::Client.new(region: options[:aws_region])
|
|
38
48
|
response = client.create_deployment({
|
|
39
49
|
application_name: application_name,
|
|
40
50
|
deployment_group_name: "#{application_name}-#{options[:environment]}",
|
|
@@ -48,7 +58,7 @@ module Hashicorptools
|
|
|
48
58
|
description: (commit_message || "commit #{commit_id}").slice(0,99)
|
|
49
59
|
})
|
|
50
60
|
puts "created deployment #{response.deployment_id}"
|
|
51
|
-
puts "https://console.aws.amazon.com/codedeploy/home?region=#{
|
|
61
|
+
puts "https://console.aws.amazon.com/codedeploy/home?region=#{options[:aws_region]}#/deployments/#{response.deployment_id}"
|
|
52
62
|
end
|
|
53
63
|
|
|
54
64
|
def application_name
|
|
@@ -5,17 +5,19 @@ module Hashicorptools
|
|
|
5
5
|
end
|
|
6
6
|
|
|
7
7
|
def amis(tag = tag_name)
|
|
8
|
-
sort_by_created_at( ec2.images.with_owner('self').
|
|
8
|
+
sort_by_created_at( ec2.images.with_owner('self').with_tag('Name', tag).to_a )
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
def ec2
|
|
12
|
+
return @_ec2 unless @_ec2.nil?
|
|
13
|
+
|
|
12
14
|
reg = if self.methods.include?(:region)
|
|
13
15
|
self.region
|
|
14
16
|
else
|
|
15
17
|
'us-east-1'
|
|
16
18
|
end
|
|
17
19
|
|
|
18
|
-
AWS::EC2.new(region: reg)
|
|
20
|
+
@_ec2 = AWS::EC2.new(region: reg)
|
|
19
21
|
end
|
|
20
22
|
|
|
21
23
|
def vpc_with_name(name)
|
|
@@ -28,16 +30,8 @@ module Hashicorptools
|
|
|
28
30
|
igs.first
|
|
29
31
|
end
|
|
30
32
|
|
|
31
|
-
def
|
|
32
|
-
|
|
33
|
-
image.tags.to_h[tag].to_i
|
|
34
|
-
else
|
|
35
|
-
0
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def sort_by_created_at(collection, tag = tag_name)
|
|
40
|
-
collection.sort{|a, b| self.image_created_at(b, tag) <=> self.image_created_at(a, tag) }
|
|
33
|
+
def sort_by_created_at(collection)
|
|
34
|
+
collection.sort{|a, b| b.creation_date <=> a.creation_date }
|
|
41
35
|
end
|
|
42
36
|
end
|
|
43
37
|
end
|