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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bd2cd4b7289a6861cc343a3382780771b2cd7dc6
4
- data.tar.gz: 61ff1613b76116aa943ea2822b25ea1e282c6506
3
+ metadata.gz: 38ba75a70a86a1bc54c0ab553cef41fc6e3ba2e7
4
+ data.tar.gz: 2dbd06f1265d67589d71805a4af19b05a48b2519
5
5
  SHA512:
6
- metadata.gz: 6e0159c846fe863319ed6ed11b538a93f07fead1d848d295844626a08f474b229913e6bd98c2f06143cb9920574ca44646ee71082256b6ea6a54186cb3150393
7
- data.tar.gz: 99ba599477db0b953555ee6a73063593bbc6a2386eaead54cf011f55e53453b5ffd123ed67e6b4956ba56cf28dc6bdbb69bf45d95a1f6c287222805217a7f26b
6
+ metadata.gz: c9ee66d7bea76d8a1f2a472c07312db3b35743967a5f69711e4ba6d05963ebf09004eac45644dd956e99ea81cfeb846a0a98c06ebc0ef72e98844f906db0ec23
7
+ data.tar.gz: 15f5d1d128a77a087145ccae1bceeef8dd9edf0b1ddfbc968e5e64c851c94cbf6b7cac876ad9cfe6ffaff1131bc01664d40229bb1eb234b35cd6f2a9a8f4da2d
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # aws-carb: amazon web services - cloudinit and route53 bootstrap
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/template/basic.cloud-config.erb` ~/.carb/templates/
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
- # example with block-device-mappings..
63
- carb -v create --user-data-template ~/.carb/templates/basic.cloud-config.erb --common-variables "{ 'hostname' => 'asdasdasasdasdsaaa' }" --block-device-mappings "{ 'device_name' => '/dev/sdc', 'ebs' => { 'volume_size' => '100G' } }"
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
 
@@ -29,4 +29,5 @@ Gem::Specification.new do |spec|
29
29
  spec.add_dependency "erubis", ">= 2.7.0"
30
30
  spec.add_dependency "shell-spinner", ">= 1.0.0"
31
31
  spec.add_dependency "subcommand", ">= 1.0.0"
32
+ spec.add_dependency "log4r", ">= 1.0.0"
32
33
  end
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
@@ -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
- @user_data.create(@config)
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
- puts <<-HEREDOC.strip_heredoc
113
- # instance details:
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
- puts <<-HEREDOC.strip_heredoc
123
- public fqdn: #{@config[:route53][:new_dns_records][:public][:alias]}
124
- private fqdn: #{@config[:route53][:new_dns_records][:private][:alias]}
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 <<-HEREDOC.strip_heredoc
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=HASH", block_device_help do |mapping|
224
+ option.on "--block-device-mappings=ARRAY", block_device_help do |mappings_data|
225
225
  begin
226
- data = eval(mapping)
227
- raise "parsed value isn't a hash!" unless data.class == Hash
228
- cli_arguments.subcommand.ec2.block_device_mappings = ActiveSupport::HashWithIndifferentAccess.new(data)
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, is it a valid hash and are the values properly quoted?"
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=ARRAY", Array, "\n\n#{indent}security_group_ids accepts a single ID or an array of\n#{indent}security group IDs.".downcase do |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 |api_termination|
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 "--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|
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
@@ -4,7 +4,7 @@ module AWSCarb
4
4
  class Config
5
5
  include Singleton
6
6
 
7
- attr_reader :config
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, :route53) if find_with_context(:domain, :route53)
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 "# WARNING: hostname and domain not found"
129
- debug help
130
- debug
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 "# WARNING: hostname not found"
133
- debug help
134
- debug
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 "# WARNING: domain not found"
137
- debug help
138
- debug
142
+ debug <<-HEREDOC.strip_heredoc
143
+ # WARNING: domain not found
144
+ #{help}
145
+
146
+ HEREDOC
147
+
139
148
  else
140
- debug "# found hostname and domain:"
141
- debug "hostname: #{hostname}"
142
- debug "domain: #{domain}"
143
- debug
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 => { :alias => "#{hostname}.#{domain}.", :target => nil },
147
- :private => { :alias => "#{hostname}-private.#{domain}.", :target => nil }
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
@@ -63,6 +63,7 @@ module AWSCarb
63
63
  :private_ip_address,
64
64
  :dedicated_tenancy,
65
65
  :ebs_optimized,
66
+ :associate_public_ip_address,
66
67
  ]
67
68
 
68
69
  ec2_config = {}
@@ -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
- record_sets.create(record[:alias], 'CNAME', :ttl => @config[:route53][:ttl], :resource_records => [{:value => record[:target]}])
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
 
@@ -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
- @user_data_template = nil
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
- @user_data_template = File.read(template_file)
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
- @resolved_template = Erubis::Eruby.new(@user_data_template).result(config[:user_data_template_variables])
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 @resolved_template
51
+ return resolved_template
50
52
  end
51
53
 
52
54
  def combine_user_data(config, user_data_template_resolved)
@@ -1,3 +1,3 @@
1
1
  module AWSCarb
2
- VERSION = "0.0.7"
2
+ VERSION = "0.0.9"
3
3
  end
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.7
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-01-31 00:00:00.000000000 Z
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.2
215
+ rubygems_version: 2.2.0
201
216
  signing_key:
202
217
  specification_version: 4
203
218
  summary: aws - cloudinit and route53 bootstrap