aws-carb 0.0.7 → 0.0.9
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/README.md +37 -11
- data/aws-carb.gemspec +1 -0
- data/bin/carb +0 -7
- data/{configs → examples/configs}/config.yaml.example +0 -0
- data/{templates → examples/templates}/basic.cloud-config.erb +0 -0
- data/lib/aws-carb.rb +77 -15
- data/lib/aws-carb/cli_argument_parser.rb +32 -8
- data/lib/aws-carb/config.rb +34 -18
- data/lib/aws-carb/log4r.rb +25 -0
- data/lib/aws-carb/services/ec2.rb +1 -0
- data/lib/aws-carb/services/route53.rb +13 -1
- data/lib/aws-carb/user_data.rb +7 -5
- data/lib/aws-carb/version.rb +1 -1
- metadata +43 -28
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 38ba75a70a86a1bc54c0ab553cef41fc6e3ba2e7
|
4
|
+
data.tar.gz: 2dbd06f1265d67589d71805a4af19b05a48b2519
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c9ee66d7bea76d8a1f2a472c07312db3b35743967a5f69711e4ba6d05963ebf09004eac45644dd956e99ea81cfeb846a0a98c06ebc0ef72e98844f906db0ec23
|
7
|
+
data.tar.gz: 15f5d1d128a77a087145ccae1bceeef8dd9edf0b1ddfbc968e5e64c851c94cbf6b7cac876ad9cfe6ffaff1131bc01664d40229bb1eb234b35cd6f2a9a8f4da2d
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#
|
1
|
+
# amazon web services - cloudinit and route53 bootstrap
|
2
2
|
|
3
3
|
## Install
|
4
4
|
|
@@ -8,12 +8,6 @@ via rubygems:
|
|
8
8
|
gem install aws-carb
|
9
9
|
```
|
10
10
|
|
11
|
-
using bundler:
|
12
|
-
|
13
|
-
```
|
14
|
-
bundler install
|
15
|
-
```
|
16
|
-
|
17
11
|
## Configuration
|
18
12
|
|
19
13
|
At minimum, Carb needs to know your aws-ec2 credentials. The simplest way to allow this is to edit ~/.carb/config/config.yaml. See config/config.yaml.example for an example config.
|
@@ -41,8 +35,8 @@ mkdir -p ~/.carb/{config,templates}
|
|
41
35
|
|
42
36
|
sudo updatedb
|
43
37
|
|
44
|
-
cp `locate gems/aws-carb-0.0.3/configs/config.yaml.example` ~/.carb/config/config.yaml
|
45
|
-
cp `locate gems/aws-carb-0.0.3/
|
38
|
+
cp `locate gems/aws-carb-0.0.3/examples/configs/config.yaml.example` ~/.carb/config/config.yaml
|
39
|
+
cp `locate gems/aws-carb-0.0.3/examples/templates/basic.cloud-config.erb` ~/.carb/templates/
|
46
40
|
|
47
41
|
# edit config.yaml - remember to specify an ssh key because without one your ec2 instance will be inaccessible! (copy your ssh key from id_rsa.pub as a string - not a file path)
|
48
42
|
vim ~/.carb/config/config.yaml
|
@@ -59,11 +53,43 @@ carb -v create --user-data-template ~/.carb/templates/basic.cloud-config.erb --c
|
|
59
53
|
# list all the ec2 options:
|
60
54
|
carb help create
|
61
55
|
|
62
|
-
|
63
|
-
|
56
|
+
```
|
57
|
+
|
58
|
+
## Understanding block-device-mappings
|
59
|
+
|
60
|
+
### Description
|
64
61
|
|
62
|
+
When specifying block-device mappings, each mapping must be a valid hash and must be contained in an array.
|
65
63
|
|
64
|
+
Once the machine has booted the block device(s) will be available through their virtual block device, e.g:
|
66
65
|
|
67
66
|
```
|
67
|
+
# /dev/xv<disk><partition>
|
68
|
+
/dev/sdc1 = /dev/xvc1
|
69
|
+
/dev/sdf0 = /dev/xvf0
|
70
|
+
...
|
71
|
+
```
|
72
|
+
|
73
|
+
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html
|
74
|
+
|
75
|
+
### Examples
|
68
76
|
|
77
|
+
A typical block device mapping:
|
78
|
+
|
79
|
+
```
|
80
|
+
[{ 'device_name' => '/dev/sdf1', 'ebs' => { 'volume_size' => 500 } }]
|
81
|
+
```
|
82
|
+
|
83
|
+
Multiple block device mappings:
|
84
|
+
```
|
85
|
+
[
|
86
|
+
{ 'device_name' => '/dev/sdf1', 'ebs' => { 'volume_size' => 500 } },
|
87
|
+
{ 'device_name' => '/dev/sdf2', 'ebs' => { 'volume_size' => 500 } }
|
88
|
+
]
|
89
|
+
```
|
90
|
+
|
91
|
+
Typical command line usage:
|
92
|
+
```
|
93
|
+
carb -c ~/.carb/config/config.yaml -v create --user-data-template ~/.carb/templates/basic.cloud-config.erb --block-device-mappings "[{ 'device_name' => '/dev/sdf1', 'ebs' => { 'volume_size' => 500 } }]"
|
94
|
+
```
|
69
95
|
|
data/aws-carb.gemspec
CHANGED
data/bin/carb
CHANGED
@@ -3,12 +3,5 @@
|
|
3
3
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '../lib'))
|
4
4
|
|
5
5
|
require 'aws-carb'
|
6
|
-
require 'aws-carb/helpers'
|
7
|
-
require 'aws-carb/cli_argument_parser'
|
8
|
-
require 'aws-carb/config'
|
9
|
-
require 'aws-carb/user_data'
|
10
|
-
require 'aws-carb/services/route53'
|
11
|
-
require 'aws-carb/services/ec2'
|
12
|
-
require 'aws-carb/monkey_patches'
|
13
6
|
|
14
7
|
AWSCarb.run
|
File without changes
|
File without changes
|
data/lib/aws-carb.rb
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
+
# require first to instantiate logger before anything else
|
4
|
+
require 'log4r'
|
5
|
+
require 'aws-carb/log4r'
|
6
|
+
|
3
7
|
require 'aws-sdk'
|
4
8
|
require 'yaml'
|
5
9
|
require 'erubis'
|
@@ -18,8 +22,18 @@ require 'singleton'
|
|
18
22
|
require 'andand'
|
19
23
|
require 'colorize'
|
20
24
|
|
25
|
+
require 'aws-carb/user_data'
|
26
|
+
require 'aws-carb/monkey_patches'
|
27
|
+
require 'aws-carb/config'
|
28
|
+
require 'aws-carb/version'
|
29
|
+
require 'aws-carb/cli_argument_parser'
|
30
|
+
require 'aws-carb/helpers'
|
31
|
+
require 'aws-carb/services/route53'
|
32
|
+
require 'aws-carb/services/ec2'
|
33
|
+
|
21
34
|
include ActiveSupport
|
22
35
|
|
36
|
+
|
23
37
|
# module is broken up into:
|
24
38
|
#
|
25
39
|
# AWSCarb.* - main methods
|
@@ -30,6 +44,7 @@ include ActiveSupport
|
|
30
44
|
# AWSCarb::Services::Route53 - create dns records in route53
|
31
45
|
#
|
32
46
|
|
47
|
+
# stuff to override colouring of strings if not a terminal
|
33
48
|
if ! $stdout.tty?
|
34
49
|
String.class_eval do
|
35
50
|
def colorize(args)
|
@@ -80,7 +95,11 @@ module AWSCarb
|
|
80
95
|
# then merge user_data template with raw user_data (if provided) -
|
81
96
|
# end up single user_data ready to pass into ec2 instance..
|
82
97
|
@user_data = UserData.instance
|
83
|
-
|
98
|
+
|
99
|
+
combined_user_data = @user_data.create(@config)
|
100
|
+
|
101
|
+
@config.config[:ec2][:user_data] = combined_user_data
|
102
|
+
|
84
103
|
@user_data.display if @config[:user_data_template][:file] and ($GLOBAL_VERBOSE or @config[:show_parsed_template])
|
85
104
|
|
86
105
|
#
|
@@ -108,27 +127,70 @@ module AWSCarb
|
|
108
127
|
show_instance_details
|
109
128
|
end
|
110
129
|
|
130
|
+
|
111
131
|
def self.show_instance_details
|
112
|
-
|
113
|
-
|
132
|
+
|
133
|
+
instance_attributes = []
|
134
|
+
instance_data = {}
|
135
|
+
|
136
|
+
ShellSpinner "# collecting instance data", false do
|
137
|
+
instance_attributes << @ec2.instance.class.describe_call_attributes.keys
|
138
|
+
instance_attributes << @ec2.instance.class.reservation_attributes.keys
|
139
|
+
instance_attributes << @ec2.instance.class.mutable_describe_attributes.keys
|
140
|
+
|
141
|
+
instance_attributes.flatten!
|
142
|
+
|
143
|
+
begin
|
144
|
+
instance_attributes.each do |attribute|
|
145
|
+
|
146
|
+
# FIXME: You may only describe the sourceDestCheck attribute for VPC instances
|
147
|
+
next if attribute == :source_dest_check
|
148
|
+
|
149
|
+
value = @ec2.instance.send(attribute)
|
150
|
+
|
151
|
+
next unless value
|
152
|
+
next if attribute == :user_data
|
153
|
+
|
154
|
+
if value.class == AWS::Core::Data::List
|
155
|
+
instance_data[attribute] = value.to_a
|
156
|
+
else
|
157
|
+
instance_data[attribute] = value
|
158
|
+
end
|
159
|
+
end
|
160
|
+
rescue => e
|
161
|
+
puts e
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
puts
|
166
|
+
puts "# instance details:"
|
167
|
+
puts instance_data.to_yaml
|
168
|
+
puts
|
169
|
+
|
170
|
+
summary = <<-HEREDOC.strip_heredoc
|
171
|
+
# instance summary:
|
114
172
|
id: #{@ec2.instance.id}
|
115
|
-
public ip: #{@ec2.instance.public_ip_address}
|
116
|
-
public aws fqdn: #{@ec2.instance.public_dns_name}
|
117
|
-
private ip: #{@ec2.instance.private_ip_address}
|
118
|
-
private aws fqdn: #{@ec2.instance.private_dns_name}
|
119
173
|
HEREDOC
|
120
174
|
|
175
|
+
summary += "public ip: #{@ec2.instance.public_ip_address}\n" if @ec2.instance.public_ip_address
|
176
|
+
summary += "private ip: #{@ec2.instance.private_ip_address}\n"
|
177
|
+
summary += "public aws fqdn: #{@ec2.instance.public_dns_name}\n" if @ec2.instance.public_dns_name
|
178
|
+
summary += "private aws fqdn: #{@ec2.instance.private_dns_name}\n"
|
179
|
+
|
121
180
|
unless @config[:route53][:new_dns_records].nil?
|
122
|
-
|
123
|
-
|
124
|
-
|
181
|
+
# tests exist since if a machine is part of a vpc it may not have a public fqdn..
|
182
|
+
summary += "public fqdn: #{@config[:route53][:new_dns_records][:public][:alias]}\n" if @config[:route53][:new_dns_records][:public][:target]
|
183
|
+
summary += "private fqdn: #{@config[:route53][:new_dns_records][:private][:alias]}\n" if @config[:route53][:new_dns_records][:private][:target]
|
184
|
+
end
|
185
|
+
|
186
|
+
if @ec2.instance.dns_name
|
187
|
+
summary += <<-HEREDOC.strip_heredoc
|
188
|
+
|
189
|
+
# connect:
|
190
|
+
ssh #{@ec2.instance.dns_name} -l ubuntu
|
125
191
|
HEREDOC
|
126
192
|
end
|
127
193
|
|
128
|
-
puts
|
129
|
-
|
130
|
-
# connect:
|
131
|
-
ssh #{@ec2.instance.dns_name} -l ubuntu
|
132
|
-
HEREDOC
|
194
|
+
puts summary
|
133
195
|
end
|
134
196
|
end
|
@@ -221,13 +221,22 @@ module AWSCarb
|
|
221
221
|
|
222
222
|
block_device_help = "\n\n#{indent}Specifies how block devices are exposed to the instance. Each mapping\n#{indent}is made up of a virtualName and a deviceName.\n" + block_device_help.join.downcase
|
223
223
|
|
224
|
-
option.on "--block-device-mappings=
|
224
|
+
option.on "--block-device-mappings=ARRAY", block_device_help do |mappings_data|
|
225
225
|
begin
|
226
|
-
|
227
|
-
|
228
|
-
|
226
|
+
|
227
|
+
mappings = eval(mappings_data)
|
228
|
+
|
229
|
+
raise "parsed value isn't an Array!" unless mappings.class == Array
|
230
|
+
|
231
|
+
mappings.map! do |mapping|
|
232
|
+
raise "mapping data isn't a hash!" unless mapping.class == Hash
|
233
|
+
ActiveSupport::HashWithIndifferentAccess.new(mapping)
|
234
|
+
end
|
235
|
+
|
236
|
+
cli_arguments.subcommand.ec2.block_device_mappings = mappings
|
229
237
|
rescue => e
|
230
|
-
puts "# could not parse argument for --block-device-mappings,
|
238
|
+
puts "# could not parse argument for --block-device-mappings, are your mappings"
|
239
|
+
puts "# valid hashes contained in an array and are the hash values properly quoted?"
|
231
240
|
die e
|
232
241
|
end
|
233
242
|
end
|
@@ -264,13 +273,22 @@ module AWSCarb
|
|
264
273
|
|
265
274
|
option.separator ""
|
266
275
|
|
267
|
-
option.on "--security-group-ids
|
276
|
+
option.on "--security-group-ids=<ID>,<ID>,..", Array, "\n\n#{indent}security_group_ids accepts a single ID or an array of\n#{indent}security group IDs.".downcase do |group_ids|
|
268
277
|
cli_arguments.subcommand.ec2.security_group_ids = group_ids
|
269
278
|
end
|
270
279
|
|
271
280
|
option.separator ""
|
272
281
|
|
273
|
-
option.on "--disable-api-termination=BOOLEAN", "\n\n#{indent}instance termination via the instance API.".downcase do |
|
282
|
+
option.on "--disable-api-termination=BOOLEAN", "\n\n#{indent}instance termination via the instance API.".downcase do |api_termination_data|
|
283
|
+
|
284
|
+
api_termination = case api_termination_data
|
285
|
+
when "true"
|
286
|
+
true
|
287
|
+
when "false"
|
288
|
+
false
|
289
|
+
else raise ArgumentError, "unknown parameter for --disable-api-termination: #{api_termination_data}"
|
290
|
+
end
|
291
|
+
|
274
292
|
cli_arguments.subcommand.ec2.disable_api_termination = api_termination
|
275
293
|
end
|
276
294
|
|
@@ -288,12 +306,18 @@ module AWSCarb
|
|
288
306
|
|
289
307
|
option.separator ""
|
290
308
|
|
291
|
-
option.on "--
|
309
|
+
option.on "--private-ip-address=STRING", "\n\n#{indent}If you're using VPC, you can optionally use this option to assign the\n#{indent}instance a specific available IP address from the subnet (e.g., '10.0.0.25').\n#{indent}This option is not valid for instances launched outside a VPC (i.e.\n#{indent}those launched without the :subnet option).".downcase do |ip|
|
292
310
|
cli_arguments.subcommand.ec2.private_ip_address = ip
|
293
311
|
end
|
294
312
|
|
295
313
|
option.separator ""
|
296
314
|
|
315
|
+
option.on "--associate-public-ip-address=STRING", "\n\n#{indent}This option isn't documented but appears to exist in the code. For use when creating instances in a VPC.".downcase do |ip|
|
316
|
+
cli_arguments.subcommand.ec2.associate_public_ip_address = ip
|
317
|
+
end
|
318
|
+
|
319
|
+
option.separator ""
|
320
|
+
|
297
321
|
option.on "--dedicated-tenancy=BOOLEAN", "\n\n#{indent}Instances with dedicated tenancy will not share physical hardware with\n#{indent}instances outside their VPC. NOTE: Dedicated tenancy incurs an \n#{indent}additional service charge. This option is not valid for\n#{indent}instances launched outside a VPC (e.g.those launched without the :subnet option).".downcase do |tenancy|
|
298
322
|
cli_arguments.subcommand.ec2.dedicated_tenancy = tenancy
|
299
323
|
end
|
data/lib/aws-carb/config.rb
CHANGED
@@ -4,7 +4,7 @@ module AWSCarb
|
|
4
4
|
class Config
|
5
5
|
include Singleton
|
6
6
|
|
7
|
-
|
7
|
+
attr_accessor :config
|
8
8
|
|
9
9
|
def create(cli_arguments)
|
10
10
|
|
@@ -108,7 +108,7 @@ module AWSCarb
|
|
108
108
|
@config[:route53][:hostname] = find_with_context(:hostname, :user_data_template_variables) if find_with_context(:hostname, :user_data_template_variables)
|
109
109
|
@config[:route53][:domain] = find_with_context(:domain, :user_data_template_variables) if find_with_context(:domain, :user_data_template_variables)
|
110
110
|
@config[:route53][:hostname] = find_with_context(:hostname, :route53) if find_with_context(:hostname, :route53)
|
111
|
-
@config[:route53][:domain] = find_with_context(:domain,
|
111
|
+
@config[:route53][:domain] = find_with_context(:domain, :route53) if find_with_context(:domain, :route53)
|
112
112
|
|
113
113
|
help = <<-HEREDOC.strip_heredoc
|
114
114
|
#
|
@@ -125,26 +125,43 @@ module AWSCarb
|
|
125
125
|
hostname = @config[:route53][:hostname]
|
126
126
|
|
127
127
|
if domain.nil? and hostname.nil?
|
128
|
-
debug
|
129
|
-
|
130
|
-
|
128
|
+
debug <<-HEREDOC.strip_heredoc
|
129
|
+
# WARNING: hostname and domain not found"
|
130
|
+
#{help}
|
131
|
+
|
132
|
+
HEREDOC
|
133
|
+
|
131
134
|
elsif domain and hostname.nil?
|
132
|
-
debug
|
133
|
-
|
134
|
-
|
135
|
+
debug <<-HEREDOC.strip_heredoc
|
136
|
+
# WARNING: hostname not found
|
137
|
+
#{help}
|
138
|
+
|
139
|
+
HEREDOC
|
140
|
+
|
135
141
|
elsif domain.nil? and hostname
|
136
|
-
debug
|
137
|
-
|
138
|
-
|
142
|
+
debug <<-HEREDOC.strip_heredoc
|
143
|
+
# WARNING: domain not found
|
144
|
+
#{help}
|
145
|
+
|
146
|
+
HEREDOC
|
147
|
+
|
139
148
|
else
|
140
|
-
debug
|
141
|
-
|
142
|
-
|
143
|
-
|
149
|
+
debug <<-HEREDOC.strip_heredoc
|
150
|
+
# found hostname and domain:
|
151
|
+
hostname: #{hostname}
|
152
|
+
domain: #{domain}
|
153
|
+
|
154
|
+
HEREDOC
|
144
155
|
|
145
156
|
@config[:route53][:new_dns_records] = {
|
146
|
-
:public => {
|
147
|
-
|
157
|
+
:public => {
|
158
|
+
:alias => "#{hostname}.#{domain}.",
|
159
|
+
:target => nil
|
160
|
+
},
|
161
|
+
:private => {
|
162
|
+
:alias => "#{hostname}-private.#{domain}.",
|
163
|
+
:target => nil
|
164
|
+
}
|
148
165
|
}
|
149
166
|
end
|
150
167
|
end
|
@@ -152,7 +169,6 @@ module AWSCarb
|
|
152
169
|
puts
|
153
170
|
end
|
154
171
|
|
155
|
-
|
156
172
|
def display
|
157
173
|
puts "# config:"
|
158
174
|
ap @config
|
@@ -0,0 +1,25 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
logger = Log4r::Logger.new('carb')
|
4
|
+
logger.outputters << Log4r::Outputter.stdout
|
5
|
+
logger.outputters << Log4r::FileOutputter.new('carb', :filename => 'carb.log')
|
6
|
+
|
7
|
+
def debug(message)
|
8
|
+
logger.debug(message)
|
9
|
+
end
|
10
|
+
|
11
|
+
def info(message)
|
12
|
+
logger.info(message)
|
13
|
+
end
|
14
|
+
|
15
|
+
def warn(message)
|
16
|
+
logger.warn(message)
|
17
|
+
end
|
18
|
+
|
19
|
+
def error(message)
|
20
|
+
logger.error(message)
|
21
|
+
end
|
22
|
+
|
23
|
+
def fatal(message)
|
24
|
+
logger.fatal(message)
|
25
|
+
end
|
@@ -75,7 +75,19 @@ module AWSCarb
|
|
75
75
|
|
76
76
|
raise "error: '#{record_scope}' record already exists: #{record[:alias]}" if new_record.exists?
|
77
77
|
|
78
|
-
|
78
|
+
# this could be blank if we're adding to a vpc and the instance has no external IP
|
79
|
+
next if record[:target].nil?
|
80
|
+
|
81
|
+
new_record = {
|
82
|
+
:name => record[:alias],
|
83
|
+
:type => 'CNAME',
|
84
|
+
:options => {
|
85
|
+
:ttl => @config[:route53][:ttl],
|
86
|
+
:resource_records => [{ :value => record[:target] }]
|
87
|
+
}
|
88
|
+
}
|
89
|
+
|
90
|
+
record_sets.create(new_record[:name], new_record[:type], new_record[:options])
|
79
91
|
end
|
80
92
|
end
|
81
93
|
|
data/lib/aws-carb/user_data.rb
CHANGED
@@ -10,12 +10,14 @@ module AWSCarb
|
|
10
10
|
def create(config)
|
11
11
|
user_data_template_resolved = resolve_template(config)
|
12
12
|
@combined_user_data = combine_user_data(config, user_data_template_resolved)
|
13
|
-
@
|
14
|
-
@resolved_template = nil
|
13
|
+
return @combined_user_data
|
15
14
|
end
|
16
15
|
|
17
16
|
def resolve_template(config)
|
18
17
|
|
18
|
+
user_data_template = nil
|
19
|
+
resolved_template = nil
|
20
|
+
|
19
21
|
# FIXME: blank templates / empty templates / no template should work..
|
20
22
|
|
21
23
|
return nil unless config[:ec2] and config[:user_data_template][:file]
|
@@ -26,7 +28,7 @@ module AWSCarb
|
|
26
28
|
|
27
29
|
raise ArgumentError, "no such file: #{template_file}" unless File.exist?(template_file)
|
28
30
|
|
29
|
-
|
31
|
+
user_data_template = File.read(template_file)
|
30
32
|
rescue => e
|
31
33
|
puts "# unable to open template file:"
|
32
34
|
die e
|
@@ -37,7 +39,7 @@ module AWSCarb
|
|
37
39
|
|
38
40
|
ShellSpinner "# parsing template" do
|
39
41
|
begin
|
40
|
-
|
42
|
+
resolved_template = Erubis::Eruby.new(user_data_template).result(config[:user_data_template_variables])
|
41
43
|
rescue => e
|
42
44
|
puts "# failed to resolve variables in user_data_template:"
|
43
45
|
die e
|
@@ -46,7 +48,7 @@ module AWSCarb
|
|
46
48
|
|
47
49
|
puts
|
48
50
|
|
49
|
-
return
|
51
|
+
return resolved_template
|
50
52
|
end
|
51
53
|
|
52
54
|
def combine_user_data(config, user_data_template_resolved)
|
data/lib/aws-carb/version.rb
CHANGED
metadata
CHANGED
@@ -1,153 +1,167 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aws-carb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rob Wilson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-02-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.5'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.5'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 10.0.0
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 10.0.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: activesupport
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: 4.0.0
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 4.0.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: andand
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: 1.3.0
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 1.3.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: awesome_print
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: 1.2.0
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: 1.2.0
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: aws-sdk
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: 1.33.0
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: 1.33.0
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: colorize
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: 0.6.0
|
104
104
|
type: :runtime
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- -
|
108
|
+
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: 0.6.0
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: erubis
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- -
|
115
|
+
- - ">="
|
116
116
|
- !ruby/object:Gem::Version
|
117
117
|
version: 2.7.0
|
118
118
|
type: :runtime
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- -
|
122
|
+
- - ">="
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: 2.7.0
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: shell-spinner
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- -
|
129
|
+
- - ">="
|
130
130
|
- !ruby/object:Gem::Version
|
131
131
|
version: 1.0.0
|
132
132
|
type: :runtime
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
|
-
- -
|
136
|
+
- - ">="
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: 1.0.0
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: subcommand
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
|
-
- -
|
143
|
+
- - ">="
|
144
144
|
- !ruby/object:Gem::Version
|
145
145
|
version: 1.0.0
|
146
146
|
type: :runtime
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
|
-
- -
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: 1.0.0
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: log4r
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: 1.0.0
|
160
|
+
type: :runtime
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
151
165
|
- !ruby/object:Gem::Version
|
152
166
|
version: 1.0.0
|
153
167
|
description: a tool for provisioning ec2 instances with a templated cloudinit configuration,
|
@@ -160,23 +174,24 @@ executables:
|
|
160
174
|
extensions: []
|
161
175
|
extra_rdoc_files: []
|
162
176
|
files:
|
163
|
-
- .gitignore
|
177
|
+
- ".gitignore"
|
164
178
|
- Gemfile
|
165
179
|
- README.md
|
166
180
|
- Rakefile
|
167
181
|
- aws-carb.gemspec
|
168
182
|
- bin/carb
|
169
|
-
- configs/config.yaml.example
|
183
|
+
- examples/configs/config.yaml.example
|
184
|
+
- examples/templates/basic.cloud-config.erb
|
170
185
|
- lib/aws-carb.rb
|
171
186
|
- lib/aws-carb/cli_argument_parser.rb
|
172
187
|
- lib/aws-carb/config.rb
|
173
188
|
- lib/aws-carb/helpers.rb
|
189
|
+
- lib/aws-carb/log4r.rb
|
174
190
|
- lib/aws-carb/monkey_patches.rb
|
175
191
|
- lib/aws-carb/services/ec2.rb
|
176
192
|
- lib/aws-carb/services/route53.rb
|
177
193
|
- lib/aws-carb/user_data.rb
|
178
194
|
- lib/aws-carb/version.rb
|
179
|
-
- templates/basic.cloud-config.erb
|
180
195
|
homepage: http://github.com/roobert/aws-carb
|
181
196
|
licenses:
|
182
197
|
- MIT
|
@@ -187,17 +202,17 @@ require_paths:
|
|
187
202
|
- lib
|
188
203
|
required_ruby_version: !ruby/object:Gem::Requirement
|
189
204
|
requirements:
|
190
|
-
- -
|
205
|
+
- - ">="
|
191
206
|
- !ruby/object:Gem::Version
|
192
207
|
version: '0'
|
193
208
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
194
209
|
requirements:
|
195
|
-
- -
|
210
|
+
- - ">="
|
196
211
|
- !ruby/object:Gem::Version
|
197
212
|
version: '0'
|
198
213
|
requirements: []
|
199
214
|
rubyforge_project:
|
200
|
-
rubygems_version: 2.0
|
215
|
+
rubygems_version: 2.2.0
|
201
216
|
signing_key:
|
202
217
|
specification_version: 4
|
203
218
|
summary: aws - cloudinit and route53 bootstrap
|