vominator 0.0.6 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -2
- data/lib/ec2/instances.rb +8 -11
- data/lib/ec2/security_groups.rb +1 -0
- data/lib/ec2/ssm.rb +1 -0
- data/lib/vominator/aws.rb +1 -3
- data/lib/vominator/version.rb +1 -1
- data/lib/vpc/create.rb +17 -2
- data/spec/lib/vominator/vominator_spec.rb +0 -2
- data/test/puke/config.yaml +1 -0
- data/test/vominator.yaml +0 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f0c0d2ced046104f160fbe3dcfe0eb1d62bda5de
|
4
|
+
data.tar.gz: 5c5d4b48d8c3f3e608b81e67b97754e95307a926
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ab07df9cde02ebf6fa2708dfa06d285ae8e47f5d18333c9b74f1f7e550c8d49f25200574af4fa9daed8ea41e92265e737cd75eb98630523cfbbe546a2988a4c1
|
7
|
+
data.tar.gz: e435d4d9781779295c8aea362c675c473463d84ed6d5fab1e192e1b58a261540159e34e541354db2682ddeae7b1e604a6ec978e92b04dd7eb84c850b2f6db5ff
|
data/README.md
CHANGED
@@ -18,8 +18,6 @@ See Usage for details about puke
|
|
18
18
|
2. Create ~/.vominator.yaml
|
19
19
|
```
|
20
20
|
---
|
21
|
-
access_key_id: AWS_SECRET_KEY
|
22
|
-
secret_access_key: AWS_SECRET_ACCESS_KEY
|
23
21
|
configuration_path: Location to puke
|
24
22
|
key_pair_name: infrastructure@example.com
|
25
23
|
instances_file: Location for cache file IE /Users/foo/.vominator/instances-metadata
|
@@ -69,6 +67,7 @@ Usage: vominate vpc create [options]
|
|
69
67
|
--parent-domain PARENT DOMAIN
|
70
68
|
REQUIRED: The parent domain name that will be used to create a seperate subdomain zone file for the new environment. IE, if you provide foo.org and your environment as bar, this will yield a new Route 53 zone file called bar.foo.org
|
71
69
|
--cidr-block CIDR Block REQUIRED: The network block for the new environment. This must be a /16 and the second octet should be unique for this environment. IE. 10.123.0.0/16
|
70
|
+
--account ACCOUNT REQUIRED: The AWS account that you want to create this VPC in
|
72
71
|
-d, --debug OPTIONAL: debug output
|
73
72
|
-h, --help OPTIONAL: Display this screen
|
74
73
|
```
|
data/lib/ec2/instances.rb
CHANGED
@@ -29,10 +29,6 @@ OptionParser.new do |opts|
|
|
29
29
|
options[:test] = true
|
30
30
|
end
|
31
31
|
|
32
|
-
opts.on('--fix-security-groups', 'OPTIONAL: Fix an instances security groups') do
|
33
|
-
options[:fix_security_groups] = true
|
34
|
-
end
|
35
|
-
|
36
32
|
opts.on('--disable-term-protection', 'OPTIONAL: This will disable termination protection on the targeted instances') do
|
37
33
|
options[:disable_term_protection] = true
|
38
34
|
end
|
@@ -114,6 +110,7 @@ unless instances
|
|
114
110
|
end
|
115
111
|
|
116
112
|
#Get ec2 connection, which is then passed to specific functions. Maybe a better way to do this?
|
113
|
+
Aws.config[:credentials] = Aws::SharedCredentials.new(:profile_name => puke_config['account'])
|
117
114
|
ec2 = Aws::EC2::Resource.new(region: puke_config['region_name'])
|
118
115
|
ec2_client = Aws::EC2::Client.new(region: puke_config['region_name'])
|
119
116
|
|
@@ -146,6 +143,7 @@ instances.each do |instance|
|
|
146
143
|
instance_ebs_volumes = instance['ebs'].nil? ? [] : instance['ebs']
|
147
144
|
key_name = Vominator.get_key_pair(VOMINATOR_CONFIG)
|
148
145
|
ssm_documents = instance['ssm_documents'].nil? ? [] : instance['ssm_documents']
|
146
|
+
instance_az = instance['az'][options[:environment]] || instance['az']
|
149
147
|
|
150
148
|
LOGGER.info("Working on #{fqdn}")
|
151
149
|
|
@@ -168,9 +166,9 @@ instances.each do |instance|
|
|
168
166
|
#Check to see if the subnet exists for the instance. If not we should create it.
|
169
167
|
subnet = "#{instance_ip.rpartition('.')[0]}.0/24"
|
170
168
|
unless existing_subnets[subnet]
|
171
|
-
unless test?("Would create a subnet for #{subnet} in #{
|
172
|
-
existing_subnets[subnet] = Vominator::EC2.create_subnet(ec2, subnet,
|
173
|
-
LOGGER.success("Created #{subnet} in #{
|
169
|
+
unless test?("Would create a subnet for #{subnet} in #{instance_az} and associate with the appropriate routing table")
|
170
|
+
existing_subnets[subnet] = Vominator::EC2.create_subnet(ec2, subnet, instance_az, puke_config['vpc_id'], puke_config['route_tables'][instance_az])
|
171
|
+
LOGGER.success("Created #{subnet} in #{instance_az} for #{fqdn}")
|
174
172
|
end
|
175
173
|
end
|
176
174
|
|
@@ -289,7 +287,7 @@ instances.each do |instance|
|
|
289
287
|
LOGGER.info("#{fqdn} is missing the following security groups: #{sg_missing.join(', ')}")
|
290
288
|
updated_groups = instance_security_groups - Vominator::EC2.set_security_groups(ec2, ec2_instance.id, instance_security_groups, vpc_security_groups)
|
291
289
|
if updated_groups.count > 0
|
292
|
-
LOGGER.
|
290
|
+
LOGGER.warning "Failed to set #{updated_groups.join(', ')} for #{fqdn}"
|
293
291
|
else
|
294
292
|
LOGGER.success "Succesfully set security groups for #{fqdn}"
|
295
293
|
end
|
@@ -346,10 +344,9 @@ instances.each do |instance|
|
|
346
344
|
|
347
345
|
else #The instance does not exist, in which case we want to create it.
|
348
346
|
user_data = Vominator::Instances.generate_cloud_config(hostname, options[:environment], instance['family'], instance['chef_roles'], instance['chef_recipes'])
|
349
|
-
security_group_ids = instance_security_groups.map {|sg| vpc_security_groups[sg] }
|
350
|
-
|
347
|
+
security_group_ids = instance_security_groups.map {|sg| vpc_security_groups[sg] }.compact
|
351
348
|
unless test?("Would create #{fqdn}")
|
352
|
-
ec2_instance = Vominator::EC2.create_instance(ec2, hostname, options[:environment], ami, existing_subnets[subnet].id, instance_type, key_name, instance_ip,
|
349
|
+
ec2_instance = Vominator::EC2.create_instance(ec2, hostname, options[:environment], ami, existing_subnets[subnet].id, instance_type, key_name, instance_ip, instance_az, security_group_ids, user_data, ebs_optimized, instance['iam_profile'])
|
353
350
|
if ec2_instance
|
354
351
|
LOGGER.success("Succesfully created #{fqdn}")
|
355
352
|
ec2_instances[instance_ip] = {:instance_id => ec2_instance.id, :security_groups => ec2_instance.security_groups.map { |sg| sg.group_name}}
|
data/lib/ec2/security_groups.rb
CHANGED
@@ -104,6 +104,7 @@ unless puke_security_groups
|
|
104
104
|
LOGGER.fatal('Unable to load security groups . Make sure the product is correctly defined for the environment you have selected and that a security_groups.yaml file exists with at least one group defined.')
|
105
105
|
end
|
106
106
|
|
107
|
+
Aws.config[:credentials] = Aws::SharedCredentials.new(:profile_name => puke_config['account'])
|
107
108
|
ec2_client = Aws::EC2::Client.new(region: puke_config['region_name'])
|
108
109
|
|
109
110
|
|
data/lib/ec2/ssm.rb
CHANGED
@@ -58,6 +58,7 @@ unless test?('Vominator is running in test mode. It will NOT make any changes.')
|
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
|
+
Aws.config[:credentials] = Aws::SharedCredentials.new(:profile_name => puke_config['account'])
|
61
62
|
ssm = Aws::SSM::Client.new(region: puke_config['region_name'])
|
62
63
|
|
63
64
|
aws_documents = Vominator::SSM.get_documents(ssm)
|
data/lib/vominator/aws.rb
CHANGED
@@ -2,8 +2,6 @@ require 'aws-sdk'
|
|
2
2
|
require_relative 'vominator'
|
3
3
|
require_relative 'constants'
|
4
4
|
|
5
|
-
Aws.config[:credentials] = Aws::Credentials.new(VOMINATOR_CONFIG['access_key_id'], VOMINATOR_CONFIG['secret_access_key'])
|
6
|
-
|
7
5
|
module Vominator
|
8
6
|
class AWS
|
9
7
|
def self.get_availability_zones(ec2_client)
|
@@ -12,4 +10,4 @@ module Vominator
|
|
12
10
|
return zones
|
13
11
|
end
|
14
12
|
end
|
15
|
-
end
|
13
|
+
end
|
data/lib/vominator/version.rb
CHANGED
data/lib/vpc/create.rb
CHANGED
@@ -31,7 +31,11 @@ OptionParser.new do |opts|
|
|
31
31
|
opts.on('--cidr-block CIDR Block', 'REQUIRED: The network block for the new environment. This must be a /16 and the second octet should be unique for this environment. IE. 10.123.0.0/16') do |value|
|
32
32
|
options[:cidr_block] = value
|
33
33
|
end
|
34
|
-
|
34
|
+
|
35
|
+
opts.on('--account ACCOUNT', 'REQUIRED: The AWS account that you want to create this VPC in') do |value|
|
36
|
+
options[:account] = value
|
37
|
+
end
|
38
|
+
|
35
39
|
#opts.on('-t', '--test', 'OPTIONAL: Test run. Show what would be changed without making any actual changes') do
|
36
40
|
# options[:test] = true
|
37
41
|
#end
|
@@ -52,7 +56,7 @@ OptionParser.new do |opts|
|
|
52
56
|
begin
|
53
57
|
opts.parse!
|
54
58
|
## Validate Data Inputs
|
55
|
-
throw Exception unless ((options.include? :environment) && (options.include? :region) && (options.include? :parent_domain) && (options.include? :cidr_block)) || options[:list]
|
59
|
+
throw Exception unless ((options.include? :environment) && (options.include? :region) && (options.include? :parent_domain) && (options.include? :cidr_block) && (options.include? :account)) || options[:list]
|
56
60
|
rescue
|
57
61
|
puts opts
|
58
62
|
exit
|
@@ -81,6 +85,7 @@ else
|
|
81
85
|
puke_config['region_name'] = options[:region]
|
82
86
|
end
|
83
87
|
|
88
|
+
Aws.config[:credentials] = Aws::SharedCredentials.new(:profile_name => options[:account])
|
84
89
|
ec2_client = Aws::EC2::Client.new(region: puke_config['region_name'])
|
85
90
|
r53_client = Aws::Route53::Client.new(region: puke_config['region_name'])
|
86
91
|
|
@@ -125,6 +130,8 @@ end
|
|
125
130
|
|
126
131
|
vpc = Vominator::VPC.create_vpc(ec2_client,options[:cidr_block])
|
127
132
|
|
133
|
+
Vominator::EC2.tag_resource(ec2_client, vpc.vpc_id,[{key: 'Name', value: fqdn}])
|
134
|
+
|
128
135
|
gateway = Vominator::VPC.create_internet_gateway(ec2_client)
|
129
136
|
|
130
137
|
Vominator::VPC.attach_internet_gateway(ec2_client, gateway.internet_gateway_id, vpc.vpc_id)
|
@@ -146,6 +153,13 @@ availability_zones.each do |zone|
|
|
146
153
|
|
147
154
|
Vominator::EC2.tag_resource(ec2_client, private_route_table.route_table_id,[{key: 'Name', value: "nat-#{options[:environment]}-#{zone}"}])
|
148
155
|
|
156
|
+
# Seed Initial Private Subnet
|
157
|
+
private_subnet_cidr_block = "#{options[:cidr_block].split('.')[0]}.#{options[:cidr_block].split('.')[1]}.1#{third_octet}.0/24"
|
158
|
+
private_subnet = Vominator::VPC.create_subnet(ec2_client, vpc.vpc_id, private_subnet_cidr_block, zone)
|
159
|
+
|
160
|
+
Vominator::VPC.associate_route_table(ec2_client, private_subnet.subnet_id, private_route_table.route_table_id)
|
161
|
+
|
162
|
+
# Seed Initial Public Subnet
|
149
163
|
public_subnet_cidr_block = "#{options[:cidr_block].split('.')[0]}.#{options[:cidr_block].split('.')[1]}.#{third_octet}.0/24"
|
150
164
|
public_subnet = Vominator::VPC.create_subnet(ec2_client, vpc.vpc_id, public_subnet_cidr_block, zone)
|
151
165
|
|
@@ -168,6 +182,7 @@ end
|
|
168
182
|
|
169
183
|
config = {
|
170
184
|
options[:environment] => {
|
185
|
+
'account' => options[:account],
|
171
186
|
'vpc_id' => vpc.vpc_id,
|
172
187
|
'route_tables' => route_tables,
|
173
188
|
'region_name' => options[:region],
|
@@ -23,8 +23,6 @@ describe Vominator do
|
|
23
23
|
subject { vominator_config }
|
24
24
|
|
25
25
|
it { is_expected.not_to be false }
|
26
|
-
it { is_expected.to include('access_key_id' => 'DUMMY_ACCESS_KEY') }
|
27
|
-
it { is_expected.to include('secret_access_key' => 'DUMMY_SECRET_KEY') }
|
28
26
|
it { is_expected.to include('configuration_path' => 'test/puke') }
|
29
27
|
it { is_expected.to include('key_pair_name' => 'ci@example.com') }
|
30
28
|
it { is_expected.to include('chef_client_key' => 'ci.pem') }
|
data/test/puke/config.yaml
CHANGED
data/test/vominator.yaml
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vominator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Kelly
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2016-
|
13
|
+
date: 2016-04-04 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: aws-sdk
|