chef-provisioning-aws 0.1.3 → 0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: eda6856be96232e40cce33671b0ed5b92ea9b693
4
- data.tar.gz: 58a87deccbffab115c4799f7244030e1d60021d8
3
+ metadata.gz: d4f9c82b6a8923c933077a7055cc31c083291527
4
+ data.tar.gz: 886d034e57402dacb17d143c1e18e9bb94129a99
5
5
  SHA512:
6
- metadata.gz: d9b18ddd408a632dd03005160807a3fd398f9326009df0dfe27b270860a0beeba6173bca3c39feec22b990ead226075e1507fa35b89689a4d98078341658952b
7
- data.tar.gz: ef03d0848060e8bc2097eba525cc33f61d22fcc5ee544205f3ba09af55b75ea8597dc654c41f8d471a216a89900edef409a95b606a20d066a3e2e44b7f8b7a64
6
+ metadata.gz: 21596d7e34ff111450d05400eb681844bf8321a1721d409020c5ab7227591f333ff9eb9799b8f4b98526a888a75b5ba066e66026226787c0546477aa7873d65f
7
+ data.tar.gz: d32aa0894bb97de809bc3bea3ba855c1820cb2aca2208e3a1276b1c00d83ce90ad689cc05b4be90706b3f49c2788e015834c455e7c8ad2bd5d85d8a73deea0b9
@@ -7,23 +7,22 @@ class Chef::Provider::AwsS3Bucket < Chef::Provider::AwsProvider
7
7
  converge_by "Creating new S3 bucket #{fqn}" do
8
8
  bucket = s3.buckets.create(fqn)
9
9
  bucket.tags['Name'] = new_resource.name
10
- if new_resource.enable_website_hosting
11
- bucket.website_configuration = AWS::S3::WebsiteConfiguration.new(
12
- new_resource.website_options)
13
- end
14
10
  end
15
- elsif requires_modification?
16
- converge_by "Modifying S3 Bucket #{fqn}" do
17
- if existing_bucket.website_configuration == nil && new_resource.enable_website_hosting ||
18
- existing_bucket.website_configuration != nil && new_resource.enable_website_hosting
11
+ end
12
+
13
+ if modifies_website_configuration?
14
+ if new_resource.enable_website_hosting
15
+ converge_by "Setting website configuration for bucket #{fqn}" do
19
16
  existing_bucket.website_configuration = AWS::S3::WebsiteConfiguration.new(
20
17
  new_resource.website_options)
21
- else
22
- existing_bucket.remove_website_configuration
18
+ end
19
+ else
20
+ converge_by "Disabling website configuration for bucket #{fqn}" do
21
+ existing_bucket.website_configuration = nil
23
22
  end
24
23
  end
25
24
  end
26
-
25
+ new_resource.endpoint "#{fqn}.s3-website-#{s3_website_endpoint_region}.amazonaws.com"
27
26
  new_resource.save
28
27
  end
29
28
 
@@ -37,31 +36,42 @@ class Chef::Provider::AwsS3Bucket < Chef::Provider::AwsProvider
37
36
  new_resource.delete
38
37
  end
39
38
 
40
-
41
39
  def existing_bucket
42
40
  Chef::Log.debug("Checking for S3 bucket #{fqn}")
43
41
  @existing_bucket ||= s3.buckets[fqn] if s3.buckets[fqn].exists?
44
42
  end
45
43
 
46
- def requires_modification?
47
- if existing_bucket.website_configuration == nil
48
- new_resource.enable_website_hosting
49
- else
50
- !new_resource.enable_website_hosting ||
51
- !compare_website_configuration
52
- end
53
- end
54
-
55
- def compare_website_configuration
44
+ def modifies_website_configuration?
56
45
  # This is incomplete, routing rules have many optional values, so its
57
46
  # possible aws will put in default values for those which won't be in
58
47
  # the requested config.
59
48
  new_web_config = new_resource.website_options
60
- current_web_config = existing_bucket.website_configuration.to_hash
49
+ current_web_config = current_website_configuration
50
+
51
+ !!existing_bucket.website_configuration != new_resource.enable_website_hosting ||
52
+ (current_web_config[:index_document] != new_web_config.fetch(:index_document, {}) ||
53
+ current_web_config[:error_document] != new_web_config.fetch(:error_document, {}) ||
54
+ current_web_config[:routing_rules] != new_web_config.fetch(:routing_rules, []))
55
+ end
61
56
 
62
- current_web_config[:index_document] == new_web_config.fetch(:index_document, {}) &&
63
- current_web_config[:error_document] == new_web_config.fetch(:error_document, {}) &&
64
- current_web_config[:routing_rules] == new_web_config.fetch(:routing_rules, [])
57
+ def current_website_configuration
58
+ if existing_bucket.website_configuration
59
+ existing_bucket.website_configuration.to_hash
60
+ else
61
+ {}
62
+ end
63
+ end
64
+
65
+ def s3_website_endpoint_region
66
+ # ¯\_(ツ)_/¯
67
+ case existing_bucket.location_constraint
68
+ when nil, 'US'
69
+ 'us-east-1'
70
+ when 'EU'
71
+ 'eu-west-1'
72
+ else
73
+ existing_bucket.location_constraint
74
+ end
65
75
  end
66
76
 
67
77
  # Fully qualified bucket name (i.e resource_region unless otherwise specified)
@@ -0,0 +1,52 @@
1
+ require 'chef/provider/aws_provider'
2
+ require 'date'
3
+
4
+ class Chef::Provider::AwsSubnet < Chef::Provider::AwsProvider
5
+
6
+ action :create do
7
+ fail "Can't create a Subnet without a CIDR block" if new_resource.cidr_block.nil?
8
+
9
+ if existing_subnet == nil
10
+ converge_by "Creating new Subnet #{fqn} in VPC #{new_resource.vpc} in #{new_resource.region_name}" do
11
+ opts = { :vpc => vpc_id }
12
+ opts[:availability_zone] = new_resource.availability_zone if new_resource.availability_zone
13
+ subnet = ec2.subnets.create(new_resource.cidr_block, opts)
14
+ subnet.tags['Name'] = new_resource.name
15
+ subnet.tags['VPC'] = new_resource.vpc
16
+ new_resource.subnet_id subnet.id
17
+ new_resource.save
18
+ end
19
+ end
20
+ end
21
+
22
+ action :delete do
23
+ if existing_subnet
24
+ converge_by "Deleting subnet #{fqn} in VPC #{new_resource.vpc} in #{new_resource.region_name}" do
25
+ existing_subnet.delete
26
+ end
27
+ end
28
+
29
+ new_resource.delete
30
+ end
31
+
32
+ def vpc_id
33
+ @vpc_id ||= begin
34
+ ec2.vpcs.with_tag('Name', new_resource.vpc).first
35
+ rescue
36
+ nil
37
+ end
38
+ end
39
+
40
+ def existing_subnet
41
+ @subnet_id ||= begin
42
+ ec2.subnets.with_tag('Name', new_resource.name).first
43
+ rescue
44
+ nil
45
+ end
46
+ end
47
+
48
+ def id
49
+ new_resource.subnet_id
50
+ end
51
+
52
+ end
@@ -15,7 +15,8 @@ require 'chef/provisioning/aws_driver/credentials'
15
15
 
16
16
  require 'yaml'
17
17
  require 'aws-sdk-v1'
18
-
18
+ # loads the entire aws-sdk
19
+ AWS.eager_autoload!
19
20
 
20
21
  class Chef
21
22
  module Provisioning
@@ -28,7 +29,7 @@ module AWSDriver
28
29
  attr_reader :region
29
30
 
30
31
  # URL scheme:
31
- # aws:account_id:region
32
+ # aws:profilename:region
32
33
  # TODO: migration path from fog:AWS - parse that URL
33
34
  # canonical URL calls realpath on <path>
34
35
  def self.from_url(driver_url, config)
@@ -37,17 +38,21 @@ module AWSDriver
37
38
 
38
39
  def initialize(driver_url, config)
39
40
  super
40
- credentials = aws_credentials.default
41
- @region = credentials[:region]
41
+
42
+ _, profile_name, region = driver_url.split(':')
43
+ profile_name = nil if profile_name && profile_name.empty?
44
+ region = nil if region && region.empty?
45
+
46
+ credentials = profile_name ? aws_credentials[profile_name] : aws_credentials.default
47
+ @region = region || credentials[:region]
42
48
  # TODO: fix credentials here
43
49
  AWS.config(:access_key_id => credentials[:aws_access_key_id],
44
50
  :secret_access_key => credentials[:aws_secret_access_key],
45
- :region => credentials[:region])
51
+ :region => @region)
46
52
  end
47
53
 
48
54
  def self.canonicalize_url(driver_url, config)
49
- url = driver_url.split(":")[0]
50
- [ "aws:#{url}", config ]
55
+ [ driver_url, config ]
51
56
  end
52
57
 
53
58
 
@@ -200,12 +205,61 @@ module AWSDriver
200
205
 
201
206
  # Image methods
202
207
  def allocate_image(action_handler, image_spec, image_options, machine_spec)
208
+ actual_image = image_for(image_spec)
209
+ if actual_image.nil? || !actual_image.exists? || actual_image.state == :failed
210
+ action_handler.perform_action "Create image #{image_spec.name} from machine #{machine_spec.name} with options #{image_options.inspect}" do
211
+ image_options[:name] ||= image_spec.name
212
+ image_options[:instance_id] ||= machine_spec.location['instance_id']
213
+ image_options[:description] ||= "Image #{image_spec.name} created from machine #{machine_spec.name}"
214
+ Chef::Log.debug "AWS Image options: #{image_options.inspect}"
215
+ image = ec2.images.create(image_options)
216
+ image_spec.location = {
217
+ 'driver_url' => driver_url,
218
+ 'driver_version' => Chef::Provisioning::AWSDriver::VERSION,
219
+ 'image_id' => image.id,
220
+ 'allocated_at' => Time.now.to_i
221
+ }
222
+ image_spec.machine_options ||= {}
223
+ image_spec.machine_options.merge!({
224
+ :bootstrap_options => {
225
+ :image_id => image.id
226
+ }
227
+ })
228
+ end
229
+ end
203
230
  end
204
231
 
205
232
  def ready_image(action_handler, image_spec, image_options)
233
+ actual_image = image_for(image_spec)
234
+ if actual_image.nil? || !actual_image.exists?
235
+ raise 'Cannot ready an image that does not exist'
236
+ else
237
+ if actual_image.state != :available
238
+ action_handler.report_progress 'Waiting for image to be ready ...'
239
+ wait_until_ready_image(action_handler, image_spec, actual_image)
240
+ else
241
+ action_handler.report_progress "Image #{image_spec.name} is ready!"
242
+ end
243
+ end
206
244
  end
207
245
 
208
246
  def destroy_image(action_handler, image_spec, image_options)
247
+ actual_image = image_for(image_spec)
248
+ snapshots = snapshots_for(image_spec)
249
+ if actual_image.nil? || !actual_image.exists?
250
+ Chef::Log.warn "Image #{image_spec.name} doesn't exist"
251
+ else
252
+ action_handler.perform_action "De-registering image #{image_spec.name}" do
253
+ actual_image.deregister
254
+ end
255
+ unless snapshots.any?
256
+ action_handler.perform_action "Deleting image #{image_spec.name} snapshots" do
257
+ snapshots.each do |snap|
258
+ snap.delete
259
+ end
260
+ end
261
+ end
262
+ end
209
263
  end
210
264
 
211
265
  # Machine methods
@@ -213,7 +267,7 @@ module AWSDriver
213
267
  actual_instance = instance_for(machine_spec)
214
268
  if actual_instance == nil || !actual_instance.exists? || actual_instance.status == :terminated
215
269
  image_id = machine_options[:image_id] || default_ami_for_region(@region)
216
- bootstrap_options = machine_options[:bootstrap_options] || {}
270
+ bootstrap_options = (machine_options[:bootstrap_options] || {}).to_h.dup
217
271
  bootstrap_options[:image_id] = image_id
218
272
  if !bootstrap_options[:key_name]
219
273
  Chef::Log.debug('No key specified, generating a default one...')
@@ -224,6 +278,8 @@ module AWSDriver
224
278
  action_handler.perform_action "Create #{machine_spec.name} with AMI #{image_id} in #{@region}" do
225
279
  Chef::Log.debug "Creating instance with bootstrap options #{bootstrap_options}"
226
280
  instance = ec2.instances.create(bootstrap_options)
281
+ # Make sure the instance is ready to be tagged
282
+ sleep 5 while instance.status == :pending
227
283
  # TODO add other tags identifying user / node url (same as fog)
228
284
  instance.tags['Name'] = machine_spec.name
229
285
  machine_spec.location = {
@@ -234,10 +290,23 @@ module AWSDriver
234
290
  'image_id' => machine_options[:image_id],
235
291
  'instance_id' => instance.id
236
292
  }
293
+ machine_spec.location['key_name'] = bootstrap_options[:key_name] if bootstrap_options[:key_name]
294
+ %w(is_windows ssh_username sudo use_private_ip_for_ssh ssh_gateway).each do |key|
295
+ machine_spec.location[key] = machine_options[key.to_sym] if machine_options[key.to_sym]
296
+ end
237
297
  end
238
298
  end
239
299
  end
240
300
 
301
+ def allocate_machines(action_handler, specs_and_options, parallelizer)
302
+ #Chef::Log.warn("#{specs_and_options}")
303
+ create_servers(action_handler, specs_and_options, parallelizer) do |machine_spec, server|
304
+ #Chef::Log.warn("#{machine_spec}")
305
+ yield machine_spec
306
+ end
307
+ specs_and_options.keys
308
+ end
309
+
241
310
  def ready_machine(action_handler, machine_spec, machine_options)
242
311
  instance = instance_for(machine_spec)
243
312
 
@@ -246,18 +315,27 @@ module AWSDriver
246
315
  end
247
316
 
248
317
  if instance.status != :running
249
- wait_until(action_handler, machine_spec, instance) { instance.status != :stopping }
318
+ wait_until_machine(action_handler, machine_spec, instance) { instance.status != :stopping }
250
319
  if instance.status == :stopped
251
320
  action_handler.perform_action "Start #{machine_spec.name} (#{machine_spec.location['instance_id']}) in #{@region} ..." do
252
321
  instance.start
253
322
  end
254
323
  end
255
- wait_until_ready(action_handler, machine_spec, instance)
324
+ wait_until_ready_machine(action_handler, machine_spec, instance)
256
325
  wait_for_transport(action_handler, machine_spec, machine_options)
257
326
  end
258
327
 
259
328
  machine_for(machine_spec, machine_options, instance)
329
+ end
330
+
331
+ def connect_to_machine(name, chef_server = nil)
332
+ if name.is_a?(MachineSpec)
333
+ machine_spec = name
334
+ else
335
+ machine_spec = Chef::Provisioning::ChefMachineSpec.get(name, chef_server)
336
+ end
260
337
 
338
+ machine_for(machine_spec, machine_spec.location)
261
339
  end
262
340
 
263
341
  def destroy_machine(action_handler, machine_spec, machine_options)
@@ -332,8 +410,37 @@ module AWSDriver
332
410
  def instance_for(machine_spec)
333
411
  if machine_spec.location && machine_spec.location['instance_id']
334
412
  ec2.instances[machine_spec.location['instance_id']]
335
- else
336
- nil
413
+ end
414
+ end
415
+
416
+ def instances_for(machine_specs)
417
+ result = {}
418
+ machine_specs.each do |machine_spec|
419
+ if machine_spec.location && machine_spec.location['instance_id']
420
+ if machine_spec.location['driver_url'] != driver_url
421
+ raise "Switching a machine's driver from #{machine_spec.location['driver_url']} to #{driver_url} is not currently supported! Use machine :destroy and then re-create the machine on the new driver."
422
+ end
423
+ #returns nil if not found
424
+ result[machine_spec] = ec2.instances[machine_spec.location['instance_id']]
425
+ end
426
+ end
427
+ result
428
+ end
429
+
430
+ def image_for(image_spec)
431
+ if image_spec.location && image_spec.location['image_id']
432
+ ec2.images[image_spec.location['image_id']]
433
+ end
434
+ end
435
+
436
+ def snapshots_for(image_spec)
437
+ if image_spec.location && image_spec.location['image_id']
438
+ actual_image = image_for(image_spec)
439
+ snapshots = []
440
+ actual_image.block_device_mappings.each do |dev, opts|
441
+ snapshots << ec2.snapshots[opts[:snapshot_id]]
442
+ end
443
+ snapshots
337
444
  end
338
445
  end
339
446
 
@@ -457,28 +564,49 @@ module AWSDriver
457
564
 
458
565
  def convergence_strategy_for(machine_spec, machine_options)
459
566
  # Tell Ohai that this is an EC2 instance so that it runs the EC2 plugin
460
- machine_options[:convergence_options] ||= {}
461
- machine_options[:convergence_options][:ohai_hints] = { 'ec2' => ''}
567
+ convergence_options = Cheffish::MergedConfig.new(
568
+ machine_options[:convergence_options] || {},
569
+ ohai_hints: { 'ec2' => '' })
462
570
 
463
571
  # Defaults
464
572
  if !machine_spec.location
465
- return Chef::Provisioning::ConvergenceStrategy::NoConverge.new(machine_options[:convergence_options], config)
573
+ return Chef::Provisioning::ConvergenceStrategy::NoConverge.new(convergence_options, config)
466
574
  end
467
575
 
468
576
  if machine_spec.location['is_windows']
469
- Chef::Provisioning::ConvergenceStrategy::InstallMsi.new(machine_options[:convergence_options], config)
577
+ Chef::Provisioning::ConvergenceStrategy::InstallMsi.new(convergence_options, config)
470
578
  elsif machine_options[:cached_installer] == true
471
- Chef::Provisioning::ConvergenceStrategy::InstallCached.new(machine_options[:convergence_options], config)
579
+ Chef::Provisioning::ConvergenceStrategy::InstallCached.new(convergence_options, config)
472
580
  else
473
- Chef::Provisioning::ConvergenceStrategy::InstallSh.new(machine_options[:convergence_options], config)
581
+ Chef::Provisioning::ConvergenceStrategy::InstallSh.new(convergence_options, config)
582
+ end
583
+ end
584
+
585
+ def wait_until_ready_image(action_handler, image_spec, image=nil)
586
+ wait_until_image(action_handler, image_spec, image) { image.state == :available }
587
+ end
588
+
589
+ def wait_until_image(action_handler, image_spec, image=nil, &block)
590
+ image ||= image_for(image_spec)
591
+ time_elapsed = 0
592
+ sleep_time = 10
593
+ max_wait_time = 120
594
+ if !yield(image)
595
+ action_handler.report_progress "waiting for #{image_spec.name} (#{image.id} on #{driver_url}) to be ready ..."
596
+ while time_elapsed < 120 && !yield(image)
597
+ action_handler.report_progress "been waiting #{time_elapsed}/#{max_wait_time} -- sleeping #{sleep_time} seconds for #{image_spec.name} (#{image.id} on #{driver_url}) to be ready ..."
598
+ sleep(sleep_time)
599
+ time_elapsed += sleep_time
600
+ end
601
+ action_handler.report_progress "Image #{image_spec.name} is now ready"
474
602
  end
475
603
  end
476
604
 
477
- def wait_until_ready(action_handler, machine_spec, instance=nil)
478
- wait_until(action_handler, machine_spec, instance) { instance.status == :running }
605
+ def wait_until_ready_machine(action_handler, machine_spec, instance=nil)
606
+ wait_until_machine(action_handler, machine_spec, instance) { instance.status == :running }
479
607
  end
480
608
 
481
- def wait_until(action_handler, machine_spec, instance=nil, &block)
609
+ def wait_until_machine(action_handler, machine_spec, instance=nil, &block)
482
610
  instance ||= instance_for(machine_spec)
483
611
  time_elapsed = 0
484
612
  sleep_time = 10
@@ -540,12 +668,86 @@ module AWSDriver
540
668
  end
541
669
 
542
670
  # Only warn the first time
543
- default_warning = 'Using default key, which is not shared between machines! It is recommended to create an AWS key pair with the fog_key_pair resource, and set :bootstrap_options => { :key_name => <key name> }'
671
+ default_warning = 'Using default key, which is not shared between machines! It is recommended to create an AWS key pair with the aws_key_pair resource, and set :bootstrap_options => { :key_name => <key name> }'
544
672
  Chef::Log.warn(default_warning) if updated
545
673
 
546
674
  default_key_name
547
675
  end
548
676
 
677
+ def create_servers(action_handler, specs_and_options, parallelizer, &block)
678
+ specs_and_servers = instances_for(specs_and_options.keys)
679
+
680
+ by_bootstrap_options = {}
681
+ specs_and_options.each do |machine_spec, machine_options|
682
+ actual_instance = specs_and_servers[machine_spec]
683
+ if actual_instance
684
+ if actual_instance.status == :terminated
685
+ Chef::Log.warn "Machine #{machine_spec.name} (#{actual_instance.id}) is terminated. Recreating ..."
686
+ else
687
+ yield machine_spec, actual_instance if block_given?
688
+ next
689
+ end
690
+ elsif machine_spec.location
691
+ Chef::Log.warn "Machine #{machine_spec.name} (#{machine_spec.location['instance_id']} on #{driver_url}) no longer exists. Recreating ..."
692
+ end
693
+
694
+ bootstrap_options = machine_options[:bootstrap_options] || {}
695
+ by_bootstrap_options[bootstrap_options] ||= []
696
+ by_bootstrap_options[bootstrap_options] << machine_spec
697
+ end
698
+
699
+ # Create the servers in parallel
700
+ parallelizer.parallelize(by_bootstrap_options) do |bootstrap_options, machine_specs|
701
+ machine_description = if machine_specs.size == 1
702
+ "machine #{machine_specs.first.name}"
703
+ else
704
+ "machines #{machine_specs.map { |s| s.name }.join(", ")}"
705
+ end
706
+ description = [ "creating #{machine_description} on #{driver_url}" ]
707
+ bootstrap_options.each_pair { |key,value| description << " #{key}: #{value.inspect}" }
708
+ action_handler.report_progress description
709
+ if action_handler.should_perform_actions
710
+ # Actually create the servers
711
+ create_many_instances(machine_specs.size, bootstrap_options, parallelizer) do |instance|
712
+
713
+ # Assign each one to a machine spec
714
+ machine_spec = machine_specs.pop
715
+ machine_options = specs_and_options[machine_spec]
716
+ machine_spec.location = {
717
+ 'driver_url' => driver_url,
718
+ 'driver_version' => Chef::Provisioning::AWSDriver::VERSION,
719
+ 'allocated_at' => Time.now.utc.to_s,
720
+ 'host_node' => action_handler.host_node,
721
+ 'image_id' => bootstrap_options[:image_id],
722
+ 'instance_id' => instance.id
723
+ }
724
+ instance.tags['Name'] = machine_spec.name
725
+ machine_spec.location['key_name'] = bootstrap_options[:key_name] if bootstrap_options[:key_name]
726
+ %w(is_windows ssh_username sudo use_private_ip_for_ssh ssh_gateway).each do |key|
727
+ machine_spec.location[key] = machine_options[key.to_sym] if machine_options[key.to_sym]
728
+ end
729
+ action_handler.performed_action "machine #{machine_spec.name} created as #{instance.id} on #{driver_url}"
730
+
731
+ yield machine_spec, instance if block_given?
732
+ end
733
+
734
+ if machine_specs.size > 0
735
+ raise "Not all machines were created by create_servers"
736
+ end
737
+ end
738
+ end.to_a
739
+ end
740
+
741
+ def create_many_instances(num_servers, bootstrap_options, parallelizer)
742
+ parallelizer.parallelize(1.upto(num_servers)) do |i|
743
+ clean_bootstrap_options = Marshal.load(Marshal.dump(bootstrap_options))
744
+ instance = ec2.instances.create(clean_bootstrap_options)
745
+
746
+ yield instance if block_given?
747
+ instance
748
+ end.to_a
749
+ end
750
+
549
751
  end
550
752
  end
551
753
  end
@@ -1,4 +1,4 @@
1
- resources = %w(sqs_queue sns_topic ebs_volume s3_bucket auto_scaling_group launch_config vpc security_group eip_address)
1
+ resources = %w(sqs_queue sns_topic ebs_volume s3_bucket auto_scaling_group launch_config vpc security_group eip_address subnet)
2
2
 
3
3
  resources.each do |r|
4
4
  Chef::Log.debug "AWS driver loading resource: #{r}"
@@ -1,7 +1,7 @@
1
1
  class Chef
2
2
  module Provisioning
3
3
  module AWSDriver
4
- VERSION = '0.1.3'
4
+ VERSION = '0.2'
5
5
  end
6
6
  end
7
7
  end
@@ -13,6 +13,8 @@ class Chef::Resource::AwsS3Bucket < Chef::Resource::AwsResource
13
13
  attribute :enable_website_hosting, :kind_of => [TrueClass, FalseClass], :default => false
14
14
  attribute :website_options, :kind_of => Hash
15
15
 
16
+ stored_attribute :endpoint
17
+
16
18
  def initialize(*args)
17
19
  super
18
20
  end
@@ -0,0 +1,25 @@
1
+ require 'chef/resource/aws_resource'
2
+ require 'chef/provisioning/aws_driver'
3
+
4
+ class Chef::Resource::AwsSubnet < Chef::Resource::AwsResource
5
+ self.resource_name = 'aws_subnet'
6
+ self.databag_name = 'aws_subnet'
7
+
8
+ actions :create, :delete, :nothing
9
+ default_action :create
10
+
11
+ attribute :name, :kind_of => String, :name_attribute => true
12
+ attribute :cidr_block, :kind_of => String
13
+ attribute :vpc, :kind_of => String
14
+ attribute :availability_zone, :kind_of => String
15
+
16
+ stored_attribute :subnet_id
17
+
18
+ def initialize(*args)
19
+ super
20
+ end
21
+
22
+ def after_created
23
+ super
24
+ end
25
+ end
metadata CHANGED
@@ -1,97 +1,97 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chef-provisioning-aws
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: '0.2'
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Ewart
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-15 00:00:00.000000000 Z
11
+ date: 2015-01-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chef
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: 11.16.4
20
20
  type: :runtime
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: 11.16.4
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: chef-provisioning
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0.9'
34
34
  type: :runtime
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: '0.9'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: aws-sdk-v1
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '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: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
61
  version: '3.0'
62
62
  type: :development
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: '3.0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rake
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '>='
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :development
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: '0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: pry
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - '>='
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
90
  type: :development
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: '0'
97
97
  description: Provisioner for creating aws containers in Chef Provisioning.
@@ -115,6 +115,7 @@ files:
115
115
  - lib/chef/provider/aws_security_group.rb
116
116
  - lib/chef/provider/aws_sns_topic.rb
117
117
  - lib/chef/provider/aws_sqs_queue.rb
118
+ - lib/chef/provider/aws_subnet.rb
118
119
  - lib/chef/provider/aws_vpc.rb
119
120
  - lib/chef/provisioning/aws_driver.rb
120
121
  - lib/chef/provisioning/aws_driver/aws_profile.rb
@@ -123,9 +124,7 @@ files:
123
124
  - lib/chef/provisioning/aws_driver/resources.rb
124
125
  - lib/chef/provisioning/aws_driver/version.rb
125
126
  - lib/chef/provisioning/driver_init/aws.rb
126
- - lib/chef/resource/.DS_Store
127
127
  - lib/chef/resource/aws_auto_scaling_group.rb
128
- - lib/chef/resource/aws_ebs_mount.rb
129
128
  - lib/chef/resource/aws_ebs_volume.rb
130
129
  - lib/chef/resource/aws_eip_address.rb
131
130
  - lib/chef/resource/aws_key_pair.rb
@@ -135,6 +134,7 @@ files:
135
134
  - lib/chef/resource/aws_security_group.rb
136
135
  - lib/chef/resource/aws_sns_topic.rb
137
136
  - lib/chef/resource/aws_sqs_queue.rb
137
+ - lib/chef/resource/aws_subnet.rb
138
138
  - lib/chef/resource/aws_vpc.rb
139
139
  - spec/spec_helper.rb
140
140
  - spec/unit/aws_driver/credentials_spec.rb
@@ -147,12 +147,12 @@ require_paths:
147
147
  - lib
148
148
  required_ruby_version: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - '>='
150
+ - - ">="
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
153
  required_rubygems_version: !ruby/object:Gem::Requirement
154
154
  requirements:
155
- - - '>='
155
+ - - ">="
156
156
  - !ruby/object:Gem::Version
157
157
  version: '0'
158
158
  requirements: []
@@ -162,3 +162,4 @@ signing_key:
162
162
  specification_version: 4
163
163
  summary: Provisioner for creating aws containers in Chef Provisioning.
164
164
  test_files: []
165
+ has_rdoc:
Binary file
@@ -1,31 +0,0 @@
1
- require 'chef/resource/aws_resource'
2
- require 'chef_metal_aws'
3
-
4
- class Chef::Resource::AwsEbsVolume < Chef::Resource::AwsResource
5
- self.resource_name = 'aws_ebs_mount'
6
- self.databag_name = 'ebs_mounts'
7
-
8
- actions :create, :delete, :nothing
9
- default_action :create
10
-
11
- stored_attribute :instance_id
12
- stored_attribute :volume_id
13
-
14
- attribute :name, :kind_of => String, :name_attribute => true
15
- attribute :volume_name, :kind_of => String
16
-
17
- attribute :size
18
- attribute :mount_point
19
- attribute :availability_zone
20
-
21
-
22
- def initialize(*args)
23
- super
24
- end
25
-
26
- def after_created
27
- super
28
- end
29
-
30
-
31
- end