chef-provisioning-aws 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +2 -0
  3. data/lib/chef/provider/aws_auto_scaling_group.rb +30 -41
  4. data/lib/chef/provider/aws_dhcp_options.rb +70 -0
  5. data/lib/chef/provider/aws_ebs_volume.rb +182 -34
  6. data/lib/chef/provider/aws_eip_address.rb +63 -60
  7. data/lib/chef/provider/aws_key_pair.rb +18 -27
  8. data/lib/chef/provider/aws_launch_configuration.rb +50 -0
  9. data/lib/chef/provider/aws_route_table.rb +122 -0
  10. data/lib/chef/provider/aws_s3_bucket.rb +42 -49
  11. data/lib/chef/provider/aws_security_group.rb +252 -59
  12. data/lib/chef/provider/aws_sns_topic.rb +10 -26
  13. data/lib/chef/provider/aws_sqs_queue.rb +16 -38
  14. data/lib/chef/provider/aws_subnet.rb +85 -32
  15. data/lib/chef/provider/aws_vpc.rb +163 -23
  16. data/lib/chef/provisioning/aws_driver.rb +18 -1
  17. data/lib/chef/provisioning/aws_driver/aws_provider.rb +206 -0
  18. data/lib/chef/provisioning/aws_driver/aws_resource.rb +186 -0
  19. data/lib/chef/provisioning/aws_driver/aws_resource_with_entry.rb +114 -0
  20. data/lib/chef/provisioning/aws_driver/driver.rb +317 -255
  21. data/lib/chef/provisioning/aws_driver/resources.rb +8 -5
  22. data/lib/chef/provisioning/aws_driver/super_lwrp.rb +45 -0
  23. data/lib/chef/provisioning/aws_driver/version.rb +1 -1
  24. data/lib/chef/resource/aws_auto_scaling_group.rb +15 -13
  25. data/lib/chef/resource/aws_dhcp_options.rb +57 -0
  26. data/lib/chef/resource/aws_ebs_volume.rb +20 -22
  27. data/lib/chef/resource/aws_eip_address.rb +50 -25
  28. data/lib/chef/resource/aws_image.rb +20 -0
  29. data/lib/chef/resource/aws_instance.rb +20 -0
  30. data/lib/chef/resource/aws_internet_gateway.rb +16 -0
  31. data/lib/chef/resource/aws_key_pair.rb +6 -10
  32. data/lib/chef/resource/aws_launch_configuration.rb +15 -0
  33. data/lib/chef/resource/aws_load_balancer.rb +16 -0
  34. data/lib/chef/resource/aws_network_interface.rb +16 -0
  35. data/lib/chef/resource/aws_route_table.rb +76 -0
  36. data/lib/chef/resource/aws_s3_bucket.rb +8 -18
  37. data/lib/chef/resource/aws_security_group.rb +49 -19
  38. data/lib/chef/resource/aws_sns_topic.rb +14 -15
  39. data/lib/chef/resource/aws_sqs_queue.rb +16 -14
  40. data/lib/chef/resource/aws_subnet.rb +87 -17
  41. data/lib/chef/resource/aws_vpc.rb +137 -15
  42. data/spec/integration/aws_security_group_spec.rb +55 -0
  43. data/spec/spec_helper.rb +8 -2
  44. data/spec/support/aws_support.rb +211 -0
  45. metadata +33 -10
  46. data/lib/chef/provider/aws_launch_config.rb +0 -43
  47. data/lib/chef/provider/aws_provider.rb +0 -22
  48. data/lib/chef/provisioning/aws_driver/aws_profile.rb +0 -73
  49. data/lib/chef/resource/aws_launch_config.rb +0 -14
  50. data/lib/chef/resource/aws_resource.rb +0 -10
  51. data/spec/chef_zero_rspec_helper.rb +0 -8
  52. data/spec/unit/provider/aws_subnet_spec.rb +0 -67
  53. data/spec/unit/resource/aws_subnet_spec.rb +0 -23
@@ -1,73 +0,0 @@
1
- class AwsProfile
2
-
3
- # Order of operations:
4
- # compute_options[:aws_access_key_id] / compute_options[:aws_secret_access_key] / compute_options[:aws_security_token] / compute_options[:region]
5
- # compute_options[:aws_profile]
6
- # ENV['AWS_ACCESS_KEY_ID'] / ENV['AWS_SECRET_ACCESS_KEY'] / ENV['AWS_SECURITY_TOKEN'] / ENV['AWS_REGION']
7
- # ENV['AWS_PROFILE']
8
- # ENV['DEFAULT_PROFILE']
9
- # 'default'
10
- def initialize(driver_options, aws_account_id)
11
- aws_credentials = get_aws_credentials(driver_options)
12
- compute_options = driver_options[:compute_options] || {}
13
-
14
- aws_profile = if compute_options[:aws_access_key_id]
15
- Chef::Log.debug('Using AWS driver access key options')
16
- {
17
- :aws_access_key_id => compute_options[:aws_access_key_id],
18
- :aws_secret_access_key => compute_options[:aws_secret_access_key],
19
- :aws_security_token => compute_options[:aws_session_token],
20
- :region => compute_options[:region]
21
- }
22
- elsif driver_options[:aws_profile]
23
- Chef::Log.debug("Using AWS profile #{driver_options[:aws_profile]}")
24
- aws_credentials[driver_options[:aws_profile]]
25
- elsif ENV['AWS_ACCESS_KEY_ID'] || ENV['AWS_ACCESS_KEY']
26
- Chef::Log.debug('Using AWS environment variable access keys')
27
- {
28
- :aws_access_key_id => ENV['AWS_ACCESS_KEY_ID'] || ENV['AWS_ACCESS_KEY'],
29
- :aws_secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'] || ENV['AWS_SECRET_KEY'],
30
- :aws_security_token => ENV['AWS_SECURITY_TOKEN'],
31
- :region => ENV['AWS_REGION']
32
- }
33
- elsif ENV['AWS_PROFILE']
34
- Chef::Log.debug("Using AWS profile #{ENV['AWS_PROFILE']} from AWS_PROFILE environment variable")
35
- aws_credentials[ENV['AWS_PROFILE']]
36
- else
37
- Chef::Log.debug('Using AWS default profile')
38
- aws_credentials.default
39
- end
40
- # Endpoint configuration
41
- if compute_options[:ec2_endpoint]
42
- aws_profile[:ec2_endpoint] = compute_options[:ec2_endpoint]
43
- elsif ENV['EC2_URL']
44
- aws_profile[:ec2_endpoint] = ENV['EC2_URL']
45
- end
46
- if compute_options[:iam_endpoint]
47
- aws_profile[:iam_endpoint] = compute_options[:iam_endpoint]
48
- elsif ENV['AWS_IAM_URL']
49
- aws_profile[:iam_endpoint] = ENV['AWS_IAM_URL']
50
- else
51
- aws_profile[:iam_endpoint] = 'https://iam.amazonaws.com/'
52
- end
53
-
54
- # Merge in account info for profile
55
- if aws_profile
56
- aws_profile = aws_profile.merge(aws_account_info_for(aws_profile))
57
- end
58
-
59
- # If no profile is found (or the profile is not the right account), search
60
- # for a profile that matches the given account ID
61
- if aws_account_id && (!aws_profile || aws_profile[:aws_account_id] != aws_account_id)
62
- aws_profile = find_aws_profile_for_account_id(aws_credentials, aws_account_id)
63
- end
64
-
65
- unless aws_profile
66
- raise 'No AWS profile specified! Are you missing something in the Chef config or ~/.aws/config?'
67
- end
68
-
69
- aws_profile.delete_if { |_, value| value.nil? }
70
- aws_profile
71
- end
72
-
73
- end
@@ -1,14 +0,0 @@
1
- require 'chef/resource/aws_resource'
2
- require 'chef/provisioning/aws_driver'
3
-
4
- class Chef::Resource::AwsLaunchConfig < Chef::Resource::AwsResource
5
- self.resource_name = 'aws_launch_config'
6
- self.databag_name = 'launch_configs'
7
-
8
- actions :create, :delete, :nothing
9
- default_action :create
10
-
11
- attribute :name, :kind_of => String, :name_attribute => true
12
- attribute :image, :kind_of => String
13
- attribute :instance_type, :kind_of => String
14
- end
@@ -1,10 +0,0 @@
1
- # Common AWS resource - contains metadata that all AWS resources will need
2
- class Chef::Resource::AwsResource < Chef::Resource::ChefDataBagResource
3
- stored_attribute :driver
4
-
5
- def initialize(*args)
6
- super
7
- @driver = run_context.chef_provisioning.current_driver
8
- end
9
-
10
- end
@@ -1,8 +0,0 @@
1
- # Cargo culted from John Keiser's
2
- # support/shared/integration/integration_helper
3
-
4
- require 'chef_zero/rspec'
5
-
6
- module ChefZeroRspecHelper
7
- include ChefZero::RSpec
8
- end
@@ -1,67 +0,0 @@
1
- require 'spec_helper'
2
- require 'chef_zero_rspec_helper'
3
- AWS.stub!
4
-
5
- describe Chef::Provider::AwsSubnet do
6
- extend ChefZeroRspecHelper
7
- let(:new_resource) {
8
- Chef::Resource::AwsSubnet.new('my_subnet', run_context)
9
- }
10
- let(:my_node) {
11
- node = Chef::Node.new
12
- node.automatic['platform'] = 'ubuntu'
13
- node.automatic['platform_version'] = '12.04'
14
- node
15
- }
16
- let(:events) { Chef::EventDispatch::Dispatcher.new }
17
- let(:run_context) {
18
- cookbook_collection = {}
19
- Chef::RunContext.new(my_node, cookbook_collection ,events)
20
- }
21
-
22
- subject(:provider) {
23
- described_class.new(new_resource, run_context)
24
- }
25
-
26
- when_the_chef_server "is empty" do
27
- describe '#action_create' do
28
- it 'requires cidr_block' do
29
- expect{ provider.action_create }
30
- .to raise_error(
31
- RuntimeError, "Can't create a Subnet without a CIDR block"
32
- )
33
- end
34
-
35
- it 'requires VPC to exist' do
36
- new_resource.cidr_block('1.2.3.4/24')
37
- new_resource.vpc('my_vpc')
38
- allow_any_instance_of(AWS::EC2::VPCCollection)
39
- .to receive(:with_tag)
40
- .and_return(nil)
41
- expect{ provider.action_create }
42
- .to raise_error(AWS::Core::OptionGrammar::FormatError)
43
- end
44
-
45
- it 'should work with a VPC object' do
46
- new_resource.cidr_block('1.2.3.4/24')
47
- allow_any_instance_of(AWS::EC2::VPCCollection)
48
- .to receive(:with_tag)
49
- .and_return( [ AWS::EC2::VPC.new('vpc-abcd1234') ] )
50
- allow_any_instance_of(AWS::EC2::SubnetCollection)
51
- .to receive(:create)
52
- .and_return(AWS::EC2::Subnet.new('subnet-feeddeed'))
53
- expect(new_resource).to receive(:save)
54
- provider.action_create
55
- end
56
-
57
- it 'should not converge if subnet already exists' do
58
- new_resource.cidr_block('1.2.3.4/24')
59
- allow_any_instance_of(AWS::EC2::SubnetCollection)
60
- .to receive(:with_tag)
61
- .and_return([AWS::EC2::Subnet.new('subnet-feeddeed')])
62
- expect(provider).to_not receive(:converge_by)
63
- provider.action_create
64
- end
65
- end
66
- end
67
- end
@@ -1,23 +0,0 @@
1
- require 'spec_helper'
2
- require 'chef_zero_rspec_helper'
3
-
4
- describe Chef::Resource::AwsSubnet do
5
- extend ChefZeroRspecHelper
6
- let(:my_node) { Chef::Node.new() }
7
- let(:events) { Chef::EventDispatch::Dispatcher.new }
8
- let(:run_context) { Chef::RunContext.new(my_node,{},events) }
9
-
10
- subject(:resource) {
11
- described_class.new('my_subnet', run_context)
12
- }
13
-
14
- when_the_chef_server "is empty" do
15
- it 'should match resource name' do
16
- expect(resource.resource_name).to eq(:aws_subnet)
17
- end
18
-
19
- it 'should match name' do
20
- expect(resource.name).to eq('my_subnet')
21
- end
22
- end
23
- end