chef-provisioning-aws 1.3.1 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (94) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +70 -69
  3. data/Rakefile +22 -2
  4. data/lib/chef/provider/aws_auto_scaling_group.rb +3 -2
  5. data/lib/chef/provider/aws_cache_cluster.rb +3 -2
  6. data/lib/chef/provider/aws_cache_replication_group.rb +5 -4
  7. data/lib/chef/provider/aws_cache_subnet_group.rb +5 -4
  8. data/lib/chef/provider/aws_cloudsearch_domain.rb +163 -0
  9. data/lib/chef/provider/aws_dhcp_options.rb +9 -6
  10. data/lib/chef/provider/aws_ebs_volume.rb +7 -3
  11. data/lib/chef/provider/aws_eip_address.rb +8 -7
  12. data/lib/chef/provider/aws_image.rb +8 -3
  13. data/lib/chef/provider/aws_instance.rb +14 -2
  14. data/lib/chef/provider/aws_key_pair.rb +2 -1
  15. data/lib/chef/provider/aws_launch_configuration.rb +4 -2
  16. data/lib/chef/provider/aws_load_balancer.rb +18 -0
  17. data/lib/chef/provider/aws_network_acl.rb +6 -2
  18. data/lib/chef/provider/aws_network_interface.rb +11 -24
  19. data/lib/chef/provider/aws_rds_instance.rb +66 -0
  20. data/lib/chef/provider/aws_rds_subnet_group.rb +89 -0
  21. data/lib/chef/provider/aws_route_table.rb +42 -23
  22. data/lib/chef/provider/aws_s3_bucket.rb +32 -8
  23. data/lib/chef/provider/aws_security_group.rb +11 -4
  24. data/lib/chef/provider/aws_server_certificate.rb +23 -0
  25. data/lib/chef/provider/aws_sns_topic.rb +4 -3
  26. data/lib/chef/provider/aws_sqs_queue.rb +3 -2
  27. data/lib/chef/provider/aws_subnet.rb +10 -7
  28. data/lib/chef/provider/aws_vpc.rb +54 -21
  29. data/lib/chef/provider/aws_vpc_peering_connection.rb +88 -0
  30. data/lib/chef/provisioning/aws_driver.rb +8 -0
  31. data/lib/chef/provisioning/aws_driver/aws_provider.rb +45 -76
  32. data/lib/chef/provisioning/aws_driver/aws_rds_resource.rb +11 -0
  33. data/lib/chef/provisioning/aws_driver/aws_resource.rb +14 -2
  34. data/lib/chef/provisioning/aws_driver/aws_resource_with_entry.rb +2 -8
  35. data/lib/chef/provisioning/aws_driver/aws_taggable.rb +18 -0
  36. data/lib/chef/provisioning/aws_driver/aws_tagger.rb +61 -0
  37. data/lib/chef/provisioning/aws_driver/credentials2.rb +51 -0
  38. data/lib/chef/provisioning/aws_driver/driver.rb +214 -162
  39. data/lib/chef/provisioning/aws_driver/tagging_strategy/ec2.rb +64 -0
  40. data/lib/chef/provisioning/aws_driver/tagging_strategy/elb.rb +39 -0
  41. data/lib/chef/provisioning/aws_driver/tagging_strategy/rds.rb +92 -0
  42. data/lib/chef/provisioning/aws_driver/tagging_strategy/s3.rb +41 -0
  43. data/lib/chef/provisioning/aws_driver/version.rb +1 -1
  44. data/lib/chef/resource/aws_cache_cluster.rb +1 -2
  45. data/lib/chef/resource/aws_cloudsearch_domain.rb +46 -0
  46. data/lib/chef/resource/aws_dhcp_options.rb +2 -0
  47. data/lib/chef/resource/aws_ebs_volume.rb +3 -1
  48. data/lib/chef/resource/aws_eip_address.rb +0 -3
  49. data/lib/chef/resource/aws_image.rb +3 -0
  50. data/lib/chef/resource/aws_instance.rb +7 -2
  51. data/lib/chef/resource/aws_internet_gateway.rb +2 -0
  52. data/lib/chef/resource/aws_load_balancer.rb +3 -0
  53. data/lib/chef/resource/aws_network_acl.rb +2 -0
  54. data/lib/chef/resource/aws_network_interface.rb +3 -1
  55. data/lib/chef/resource/aws_rds_instance.rb +42 -0
  56. data/lib/chef/resource/aws_rds_subnet_group.rb +29 -0
  57. data/lib/chef/resource/aws_route_table.rb +7 -5
  58. data/lib/chef/resource/aws_s3_bucket.rb +3 -0
  59. data/lib/chef/resource/aws_security_group.rb +2 -7
  60. data/lib/chef/resource/aws_server_certificate.rb +21 -0
  61. data/lib/chef/resource/aws_subnet.rb +2 -0
  62. data/lib/chef/resource/aws_vpc.rb +4 -1
  63. data/lib/chef/resource/aws_vpc_peering_connection.rb +73 -0
  64. data/spec/acceptance/aws_ebs_volume/nodes/ettores-mbp.lan.json +3 -0
  65. data/spec/aws_support.rb +25 -8
  66. data/spec/aws_support/aws_resource_run_wrapper.rb +5 -1
  67. data/spec/aws_support/deep_matcher/match_values_failure_messages.rb +19 -0
  68. data/spec/aws_support/matchers/create_an_aws_object.rb +1 -1
  69. data/spec/aws_support/matchers/destroy_an_aws_object.rb +1 -1
  70. data/spec/aws_support/matchers/have_aws_object_tags.rb +9 -15
  71. data/spec/aws_support/matchers/match_an_aws_object.rb +1 -1
  72. data/spec/aws_support/matchers/update_an_aws_object.rb +1 -1
  73. data/spec/integration/aws_cloudsearch_domain_spec.rb +31 -0
  74. data/spec/integration/aws_dhcp_options_spec.rb +73 -0
  75. data/spec/integration/aws_ebs_volume_spec.rb +97 -0
  76. data/spec/integration/aws_network_acl_spec.rb +51 -0
  77. data/spec/integration/aws_network_interface_spec.rb +89 -0
  78. data/spec/integration/aws_rds_instance_spec.rb +150 -0
  79. data/spec/integration/aws_rds_subnet_group_spec.rb +105 -0
  80. data/spec/integration/aws_route_table_spec.rb +94 -7
  81. data/spec/integration/aws_s3_bucket_spec.rb +88 -0
  82. data/spec/integration/aws_security_group_spec.rb +47 -0
  83. data/spec/integration/aws_server_certificate_spec.rb +24 -0
  84. data/spec/integration/aws_subnet_spec.rb +51 -2
  85. data/spec/integration/aws_vpc_peering_connection_spec.rb +99 -0
  86. data/spec/integration/aws_vpc_spec.rb +73 -0
  87. data/spec/integration/load_balancer_spec.rb +101 -0
  88. data/spec/integration/machine_image_spec.rb +61 -6
  89. data/spec/integration/machine_spec.rb +26 -0
  90. data/spec/spec_helper.rb +3 -0
  91. data/spec/unit/{aws_driver → chef/provisioning/aws_driver}/credentials_spec.rb +0 -0
  92. data/spec/unit/chef/provisioning/aws_driver/driver_spec.rb +88 -0
  93. metadata +63 -20
  94. data/spec/integration/aws_tagged_items_spec.rb +0 -166
@@ -0,0 +1,64 @@
1
+ require 'chef/provisioning/aws_driver/aws_tagger'
2
+
3
+ module Chef::Provisioning::AWSDriver::TaggingStrategy
4
+ module EC2ConvergeTags
5
+ def aws_tagger
6
+ @aws_tagger ||= begin
7
+ ec2_strategy = Chef::Provisioning::AWSDriver::TaggingStrategy::EC2.new(
8
+ new_resource.driver.ec2_client,
9
+ new_resource.aws_object_id,
10
+ new_resource.aws_tags
11
+ )
12
+ Chef::Provisioning::AWSDriver::AWSTagger.new(ec2_strategy, action_handler)
13
+ end
14
+ end
15
+ def converge_tags
16
+ aws_tagger.converge_tags
17
+ end
18
+ end
19
+ end
20
+
21
+ module Chef::Provisioning::AWSDriver::TaggingStrategy
22
+ class EC2
23
+
24
+ attr_reader :ec2_client, :aws_object_id, :desired_tags
25
+
26
+ def initialize(ec2_client, aws_object_id, desired_tags)
27
+ @ec2_client = ec2_client
28
+ @aws_object_id = aws_object_id
29
+ @desired_tags = desired_tags
30
+ end
31
+
32
+ def current_tags
33
+ # http://docs.aws.amazon.com/sdkforruby/api/Aws/EC2/Client.html#describe_tags-instance_method
34
+ resp = ec2_client.describe_tags({
35
+ filters: [
36
+ {
37
+ name: "resource-id",
38
+ values: [aws_object_id]
39
+ }
40
+ ]
41
+ })
42
+ Hash[resp.tags.map {|t| [t.key, t.value]}]
43
+ end
44
+
45
+ def set_tags(tags)
46
+ # http://docs.aws.amazon.com/sdkforruby/api/Aws/EC2/Client.html#create_tags-instance_method
47
+ # "The value parameter is required, but if you don't want the tag to have a value, specify
48
+ # the parameter with no value, and we set the value to an empty string."
49
+ ec2_client.create_tags({
50
+ resources: [aws_object_id],
51
+ tags: tags.map {|k,v| {key: k, value: v} }
52
+ })
53
+ end
54
+
55
+ def delete_tags(tag_keys)
56
+ # http://docs.aws.amazon.com/sdkforruby/api/Aws/EC2/Client.html#delete_tags-instance_method
57
+ ec2_client.delete_tags({
58
+ resources: [aws_object_id],
59
+ tags: tag_keys.map {|k| {key: k} }
60
+ })
61
+ end
62
+
63
+ end
64
+ end
@@ -0,0 +1,39 @@
1
+ require 'chef/provisioning/aws_driver/aws_tagger'
2
+
3
+ module Chef::Provisioning::AWSDriver::TaggingStrategy
4
+ class ELB
5
+
6
+ attr_reader :elb_client, :access_point_name, :desired_tags
7
+
8
+ def initialize(elb_client, access_point_name, desired_tags)
9
+ @elb_client = elb_client
10
+ @access_point_name = access_point_name
11
+ @desired_tags = desired_tags
12
+ end
13
+
14
+ def current_tags
15
+ # http://docs.aws.amazon.com/sdkforruby/api/Aws/ElasticLoadBalancing/Client.html#describe_tags-instance_method
16
+ resp = elb_client.describe_tags({
17
+ load_balancer_names: [access_point_name]
18
+ })
19
+ Hash[resp.tag_descriptions[0].tags.map {|t| [t.key, t.value]}]
20
+ end
21
+
22
+ def set_tags(tags)
23
+ # http://docs.aws.amazon.com/sdkforruby/api/Aws/ElasticLoadBalancing/Client.html#add_tags-instance_method
24
+ elb_client.add_tags({
25
+ load_balancer_names: [access_point_name],
26
+ tags: tags.map {|k,v| {key: k, value: v} }
27
+ })
28
+ end
29
+
30
+ def delete_tags(tag_keys)
31
+ # http://docs.aws.amazon.com/sdkforruby/api/Aws/ElasticLoadBalancing/Client.html#remove_tags-instance_method
32
+ elb_client.remove_tags({
33
+ load_balancer_names: [access_point_name],
34
+ tags: tag_keys.map {|k| {key: k} }
35
+ })
36
+ end
37
+
38
+ end
39
+ end
@@ -0,0 +1,92 @@
1
+ require 'chef/provisioning/aws_driver/aws_tagger'
2
+
3
+ ####################
4
+ # NOTE FROM http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Tagging.html
5
+ # "Note that tags are cached for authorization purposes. Because of this, additions
6
+ # and updates to tags on Amazon RDS resources may take several minutes before they
7
+ # are available."
8
+ ####################
9
+
10
+ module Chef::Provisioning::AWSDriver::TaggingStrategy
11
+ module RDSConvergeTags
12
+ def aws_tagger
13
+ @aws_tagger ||= begin
14
+ rds_strategy = Chef::Provisioning::AWSDriver::TaggingStrategy::RDS.new(
15
+ new_resource.driver.rds.client,
16
+ construct_arn(new_resource),
17
+ new_resource.aws_tags
18
+ )
19
+ Chef::Provisioning::AWSDriver::AWSTagger.new(rds_strategy, action_handler)
20
+ end
21
+ end
22
+ def converge_tags
23
+ aws_tagger.converge_tags
24
+ end
25
+
26
+ # http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Tagging.html#USER_Tagging.ARN
27
+ def construct_arn(new_resource)
28
+ @arn ||= begin
29
+ region = new_resource.driver.aws_config.region
30
+ name = new_resource.name
31
+ rds_type = new_resource.rds_tagging_type
32
+ # Taken from example on https://forums.aws.amazon.com/thread.jspa?threadID=108012
33
+ account_id = begin
34
+ u = new_resource.driver.iam.client.get_user
35
+ # We've got an AWS account root credential or an IAM admin with access rights
36
+ u[:user][:arn].match('^arn:aws:iam::([0-9]{12}):.*$')[1]
37
+ rescue AWS::IAM::Errors::AccessDenied => e
38
+ # We've got an AWS IAM Credential
39
+ e.to_s.match('^User: arn:aws:iam::([0-9]{12}):.*$')[1]
40
+ end
41
+ # arn:aws:rds:<region>:<account number>:<resourcetype>:<name>
42
+ "arn:aws:rds:#{region}:#{account_id}:#{rds_type}:#{name}"
43
+ end
44
+ end
45
+ end
46
+ end
47
+
48
+ module Chef::Provisioning::AWSDriver::TaggingStrategy
49
+ class RDS
50
+
51
+ attr_reader :rds_client, :rds_object_arn, :desired_tags
52
+
53
+ def initialize(rds_client, rds_object_arn, desired_tags)
54
+ @rds_client = rds_client
55
+ @rds_object_arn = rds_object_arn
56
+ @desired_tags = desired_tags
57
+ end
58
+
59
+ def current_tags
60
+ # http://docs.aws.amazon.com/sdkforruby/api/Aws/RDS/Client.html#list_tags_for_resource-instance_method
61
+ resp = rds_client.list_tags_for_resource({
62
+ resource_name: rds_object_arn
63
+ })
64
+ Hash[resp.tag_list.map {|t| [t.key, t.value]}]
65
+ end
66
+
67
+ def set_tags(tags)
68
+ # http://docs.aws.amazon.com/sdkforruby/api/Aws/RDS/Client.html#add_tags_to_resource-instance_method
69
+ # Unlike EC2, RDS tags can have a nil value
70
+ tags = tags.map {|k,v|
71
+ if v.nil?
72
+ {key: k}
73
+ else
74
+ {key: k, value: v}
75
+ end
76
+ }
77
+ rds_client.add_tags_to_resource({
78
+ resource_name: rds_object_arn,
79
+ tags: tags
80
+ })
81
+ end
82
+
83
+ def delete_tags(tag_keys)
84
+ # http://docs.aws.amazon.com/sdkforruby/api/Aws/RDS/Client.html#remove_tags_from_resource-instance_method
85
+ rds_client.remove_tags_from_resource({
86
+ resource_name: rds_object_arn,
87
+ tag_keys: tag_keys
88
+ })
89
+ end
90
+
91
+ end
92
+ end
@@ -0,0 +1,41 @@
1
+ require 'chef/provisioning/aws_driver/aws_tagger'
2
+ module Chef::Provisioning::AWSDriver::TaggingStrategy
3
+ class S3
4
+
5
+ attr_reader :s3_client, :bucket_name, :desired_tags
6
+
7
+ def initialize(s3_client, bucket_name, desired_tags)
8
+ @s3_client = s3_client
9
+ @bucket_name = bucket_name
10
+ @desired_tags = desired_tags
11
+ end
12
+
13
+ def current_tags
14
+ # http://docs.aws.amazon.com/sdkforruby/api/Aws/S3/Client.html#get_bucket_tagging-instance_method
15
+ resp = s3_client.get_bucket_tagging({
16
+ bucket: bucket_name
17
+ })
18
+ Hash[resp.tag_set.map {|t| [t.key, t.value]}]
19
+ rescue Aws::S3::Errors::NoSuchTagSet => e
20
+ # Instead of returning nil or empty, AWS raises an error :)
21
+ {}
22
+ end
23
+
24
+ def set_tags(tags)
25
+ # http://docs.aws.amazon.com/sdkforruby/api/Aws/S3/Client.html#put_bucket_tagging-instance_method
26
+ s3_client.put_bucket_tagging({
27
+ bucket: bucket_name,
28
+ tagging: {
29
+ tag_set: tags.map {|k,v| {key: k, value: v} }
30
+ }
31
+ })
32
+ end
33
+
34
+ def delete_tags(tag_keys)
35
+ # S3 doesn't have a client action for deleting individual tags, just ALL tags. But the
36
+ # put_bucket_tagging method will set the tags to what is provided so we don't need to
37
+ # worry about this
38
+ end
39
+
40
+ end
41
+ end
@@ -1,7 +1,7 @@
1
1
  class Chef
2
2
  module Provisioning
3
3
  module AWSDriver
4
- VERSION = '1.3.1'
4
+ VERSION = '1.4.0'
5
5
  end
6
6
  end
7
7
  end
@@ -13,7 +13,6 @@ class Chef::Resource::AwsCacheCluster < Chef::Provisioning::AWSDriver::AWSResour
13
13
  # straight through to AWS, with the exception of security_groups, which
14
14
  # may contain a reference to a Chef aws_security_group resource.
15
15
 
16
-
17
16
  # Cluster Name
18
17
  #
19
18
  # @param :cluster_name [String] unique name for a cluster
@@ -54,7 +53,7 @@ class Chef::Resource::AwsCacheCluster < Chef::Provisioning::AWSDriver::AWSResour
54
53
 
55
54
  # Engine Version
56
55
  #
57
- # @param :engine_version [String] The version number of the cache engine to be used for this cache cluster.
56
+ # @param :engine_version [String] The version number of the cache engine to be used for this cache cluster.
58
57
  attribute :engine_version, kind_of: String, required: true
59
58
 
60
59
  # Subnet Group Name
@@ -0,0 +1,46 @@
1
+ require 'chef/provisioning/aws_driver/aws_resource'
2
+
3
+ module AWS
4
+ class CloudSearch
5
+ class Domain
6
+ # The version of the AWS sdk we are using doesn't have a model
7
+ # object for CloudSearch Domains. This empty class is here to
8
+ # make the reset of chef-provisioning happy.
9
+ end
10
+ end
11
+ end
12
+
13
+ class Chef::Resource::AwsCloudsearchDomain < Chef::Provisioning::AWSDriver::AWSResource
14
+ aws_sdk_type ::AWS::CloudSearch::Domain
15
+ attribute :name, kind_of: String, name_attribute: true
16
+ attribute :cloudsearch_api_version, equal_to: ["20130101", "20110201"], default: "20130101"
17
+
18
+ # Availability Options
19
+ attribute :multi_az, kind_of: [TrueClass, FalseClass], default: false
20
+
21
+ # Scaling Parameters
22
+ attribute :instance_type, equal_to: ["search.m1.small", "search.m3.medium",
23
+ "search.m3.large", "search.m3.xlarge",
24
+ "search.m3.2xlarge"]
25
+ attribute :partition_count, kind_of: Integer
26
+ attribute :replication_count, kind_of: Integer
27
+
28
+ # Service Access Policies
29
+ # TODO(ssd): We need to decide how we want to model access policies
30
+ # For now we just allow the user to shove the policy in via a string.
31
+ attribute :access_policies, kind_of: String
32
+
33
+
34
+ # Indexing Options
35
+ # TODO(ssd): Like Access Polcies, we should decide
36
+ # whether we want a DSL for defining index fields, or just allow the
37
+ # user to pass in an array properly formated hash.
38
+ attribute :index_fields, kind_of: Array
39
+
40
+ # None of the cloudsearch objects actually have instance-specific
41
+ # objects in the version of the AWS API we are using. This will
42
+ # return a hash with some relevant information about the domain.
43
+ def aws_object
44
+ driver.cloudsearch.describe_domains(domain_names: [name])[:domain_status_list].find {|d| !d[:deleted] }
45
+ end
46
+ end
@@ -11,6 +11,8 @@ require 'chef/provisioning/aws_driver/aws_resource_with_entry'
11
11
  # - http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_DHCP_Options.html
12
12
  #
13
13
  class Chef::Resource::AwsDhcpOptions < Chef::Provisioning::AWSDriver::AWSResourceWithEntry
14
+ include Chef::Provisioning::AWSDriver::AWSTaggable
15
+
14
16
  aws_sdk_type AWS::EC2::DHCPOptions
15
17
 
16
18
  #
@@ -2,11 +2,13 @@ require 'chef/provisioning/aws_driver/aws_resource_with_entry'
2
2
  require 'chef/resource/aws_instance'
3
3
 
4
4
  class Chef::Resource::AwsEbsVolume < Chef::Provisioning::AWSDriver::AWSResourceWithEntry
5
+ include Chef::Provisioning::AWSDriver::AWSTaggable
6
+
5
7
  aws_sdk_type AWS::EC2::Volume, backcompat_data_bag_name: 'ebs_volumes'
6
8
 
7
9
  attribute :name, kind_of: String, name_attribute: true
8
10
 
9
- attribute :machine, kind_of: [ String, FalseClass, AwsInstance, AWS::EC2::Instance ]
11
+ attribute :machine, kind_of: [ String, FalseClass, AwsInstance, AWS::EC2::Instance, ::Aws::EC2::Instance ]
10
12
 
11
13
  attribute :availability_zone, kind_of: String, default: 'a'
12
14
  attribute :size, kind_of: Integer, default: 8
@@ -6,9 +6,6 @@ class Chef::Resource::AwsEipAddress < Chef::Provisioning::AWSDriver::AWSResource
6
6
 
7
7
  attribute :name, kind_of: String, name_attribute: true
8
8
 
9
- # guh - every other AWSResourceWithEntry accepts tags EXCEPT this one
10
- undef_method(:aws_tags)
11
-
12
9
  # TODO network interface
13
10
  attribute :machine, kind_of: [String, FalseClass]
14
11
  attribute :associate_to_vpc, kind_of: [TrueClass, FalseClass]
@@ -1,6 +1,9 @@
1
1
  require 'chef/provisioning/aws_driver/aws_resource_with_entry'
2
+ require 'chef/provisioning/aws_driver/aws_taggable'
2
3
 
3
4
  class Chef::Resource::AwsImage < Chef::Provisioning::AWSDriver::AWSResourceWithEntry
5
+ include Chef::Provisioning::AWSDriver::AWSTaggable
6
+
4
7
  aws_sdk_type AWS::EC2::Image,
5
8
  managed_entry_type: :machine_image,
6
9
  managed_entry_id_name: 'image_id'
@@ -1,7 +1,12 @@
1
1
  require 'chef/provisioning/aws_driver/aws_resource_with_entry'
2
+ require 'chef/provisioning/aws_driver/aws_taggable'
2
3
 
3
4
  class Chef::Resource::AwsInstance < Chef::Provisioning::AWSDriver::AWSResourceWithEntry
4
- aws_sdk_type AWS::EC2::Instance,
5
+ include Chef::Provisioning::AWSDriver::AWSTaggable
6
+
7
+ # The require needs to be inside this class otherwise it gets loaded before the rest of the SDK
8
+ # and starts causing issues - AWS expects to load all this stuff itself
9
+ aws_sdk_type ::Aws::EC2::Instance,
5
10
  managed_entry_type: :machine,
6
11
  managed_entry_id_name: 'instance_id'
7
12
 
@@ -13,7 +18,7 @@ class Chef::Resource::AwsInstance < Chef::Provisioning::AWSDriver::AWSResourceWi
13
18
 
14
19
  def aws_object
15
20
  driver, id = get_driver_and_id
16
- result = driver.ec2.instances[id] if id
21
+ result = driver.ec2_resource.instance(id) if id
17
22
  result && result.exists? ? result : nil
18
23
  end
19
24
  end
@@ -1,6 +1,8 @@
1
1
  require 'chef/provisioning/aws_driver/aws_resource'
2
2
 
3
3
  class Chef::Resource::AwsInternetGateway < Chef::Provisioning::AWSDriver::AWSResource
4
+ include Chef::Provisioning::AWSDriver::AWSTaggable
5
+
4
6
  aws_sdk_type AWS::EC2::InternetGateway, load_provider: false, id: :id
5
7
 
6
8
  attribute :name, kind_of: String, name_attribute: true
@@ -1,6 +1,9 @@
1
1
  require 'chef/provisioning/aws_driver/aws_resource'
2
+ require 'chef/provisioning/aws_driver/aws_taggable'
2
3
 
3
4
  class Chef::Resource::AwsLoadBalancer < Chef::Provisioning::AWSDriver::AWSResource
5
+ include Chef::Provisioning::AWSDriver::AWSTaggable
6
+
4
7
  aws_sdk_type AWS::ELB::LoadBalancer
5
8
 
6
9
  attribute :name, kind_of: String, name_attribute: true
@@ -3,6 +3,8 @@ require 'chef/resource/aws_vpc'
3
3
  require 'chef/resource/aws_subnet'
4
4
 
5
5
  class Chef::Resource::AwsNetworkAcl < Chef::Provisioning::AWSDriver::AWSResourceWithEntry
6
+ include Chef::Provisioning::AWSDriver::AWSTaggable
7
+
6
8
  aws_sdk_type AWS::EC2::NetworkACL
7
9
 
8
10
  #
@@ -3,6 +3,8 @@ require 'chef/resource/aws_subnet'
3
3
  require 'chef/resource/aws_eip_address'
4
4
 
5
5
  class Chef::Resource::AwsNetworkInterface < Chef::Provisioning::AWSDriver::AWSResourceWithEntry
6
+ include Chef::Provisioning::AWSDriver::AWSTaggable
7
+
6
8
  aws_sdk_type AWS::EC2::NetworkInterface
7
9
 
8
10
  attribute :name, kind_of: String, name_attribute: true
@@ -19,7 +21,7 @@ class Chef::Resource::AwsNetworkInterface < Chef::Provisioning::AWSDriver::AWSRe
19
21
 
20
22
  attribute :security_groups, kind_of: Array #(Array<SecurityGroup>, Array<String>)
21
23
 
22
- attribute :machine, kind_of: [ String, FalseClass, AwsInstance, AWS::EC2::Instance ]
24
+ attribute :machine, kind_of: [ String, FalseClass, AwsInstance, AWS::EC2::Instance, ::Aws::EC2::Instance ]
23
25
 
24
26
  attribute :device_index, kind_of: Integer
25
27
 
@@ -0,0 +1,42 @@
1
+ require 'chef/provisioning/aws_driver/aws_rds_resource'
2
+ require 'chef/provisioning/aws_driver/aws_taggable'
3
+
4
+ class Chef::Resource::AwsRdsInstance < Chef::Provisioning::AWSDriver::AWSRDSResource
5
+ include Chef::Provisioning::AWSDriver::AWSTaggable
6
+
7
+ aws_sdk_type AWS::RDS::DBInstance, id: :db_instance_identifier
8
+
9
+ attribute :db_instance_identifier, kind_of: String, name_attribute: true
10
+
11
+ attribute :engine, kind_of: String
12
+ attribute :engine_version, kind_of: String
13
+ attribute :db_instance_class, kind_of: String
14
+ attribute :multi_az, default: false, kind_of: [TrueClass, FalseClass]
15
+ attribute :allocated_storage, kind_of: Integer
16
+ attribute :iops, kind_of: Integer
17
+ attribute :publicly_accessible, kind_of: [TrueClass, FalseClass], default: false
18
+ attribute :master_username, kind_of: String
19
+ attribute :master_user_password, kind_of: String
20
+ attribute :db_name, kind_of: String
21
+ attribute :port, kind_of: Integer
22
+ # We cannot pass the resource or an AWS object because there is no AWS model
23
+ # and that causes lookup_options to fail
24
+ attribute :db_subnet_group_name, kind_of: String
25
+
26
+ # RDS has a ton of options, allow users to set any of them via a
27
+ # custom Hash
28
+ attribute :additional_options, kind_of: Hash, default: {}
29
+
30
+ def aws_object
31
+ res = driver.rds.instances[name]
32
+ if res.exists? && ! ['deleted', 'deleting'].include?(res.status)
33
+ res
34
+ else
35
+ nil
36
+ end
37
+ end
38
+
39
+ def rds_tagging_type
40
+ "db"
41
+ end
42
+ end