chef-provisioning-aws 2.2.2 → 3.0.0.pre.rc1

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 (87) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/chef-provisioning-aws.gemspec +0 -1
  4. data/lib/chef/provider/aws_auto_scaling_group.rb +9 -6
  5. data/lib/chef/provider/aws_dhcp_options.rb +21 -11
  6. data/lib/chef/provider/aws_ebs_volume.rb +26 -24
  7. data/lib/chef/provider/aws_eip_address.rb +11 -12
  8. data/lib/chef/provider/aws_image.rb +1 -1
  9. data/lib/chef/provider/aws_internet_gateway.rb +18 -10
  10. data/lib/chef/provider/aws_key_pair.rb +6 -6
  11. data/lib/chef/provider/aws_launch_configuration.rb +7 -9
  12. data/lib/chef/provider/aws_nat_gateway.rb +2 -2
  13. data/lib/chef/provider/aws_network_acl.rb +11 -8
  14. data/lib/chef/provider/aws_network_interface.rb +34 -29
  15. data/lib/chef/provider/aws_rds_parameter_group.rb +1 -1
  16. data/lib/chef/provider/aws_rds_subnet_group.rb +1 -1
  17. data/lib/chef/provider/aws_route_table.rb +7 -7
  18. data/lib/chef/provider/aws_s3_bucket.rb +24 -12
  19. data/lib/chef/provider/aws_security_group.rb +202 -25
  20. data/lib/chef/provider/aws_server_certificate.rb +3 -4
  21. data/lib/chef/provider/aws_sns_topic.rb +4 -3
  22. data/lib/chef/provider/aws_sqs_queue.rb +7 -3
  23. data/lib/chef/provider/aws_subnet.rb +45 -21
  24. data/lib/chef/provider/aws_vpc.rb +59 -30
  25. data/lib/chef/provisioning/aws_driver/aws_provider.rb +12 -3
  26. data/lib/chef/provisioning/aws_driver/aws_resource.rb +2 -2
  27. data/lib/chef/provisioning/aws_driver/aws_resource_with_entry.rb +1 -1
  28. data/lib/chef/provisioning/aws_driver/aws_tagger.rb +2 -2
  29. data/lib/chef/provisioning/aws_driver/credentials.rb +1 -1
  30. data/lib/chef/provisioning/aws_driver/credentials2.rb +5 -1
  31. data/lib/chef/provisioning/aws_driver/driver.rb +124 -34
  32. data/lib/chef/provisioning/aws_driver/tagging_strategy/rds.rb +4 -4
  33. data/lib/chef/provisioning/aws_driver/tagging_strategy/s3.rb +1 -1
  34. data/lib/chef/provisioning/aws_driver/version.rb +1 -1
  35. data/lib/chef/resource/aws_auto_scaling_group.rb +2 -2
  36. data/lib/chef/resource/aws_cache_cluster.rb +4 -4
  37. data/lib/chef/resource/aws_cache_replication_group.rb +3 -3
  38. data/lib/chef/resource/aws_cache_subnet_group.rb +4 -4
  39. data/lib/chef/resource/aws_cloudsearch_domain.rb +1 -1
  40. data/lib/chef/resource/aws_cloudwatch_alarm.rb +1 -1
  41. data/lib/chef/resource/aws_dhcp_options.rb +10 -3
  42. data/lib/chef/resource/aws_ebs_volume.rb +10 -4
  43. data/lib/chef/resource/aws_eip_address.rb +4 -4
  44. data/lib/chef/resource/aws_elasticsearch_domain.rb +1 -1
  45. data/lib/chef/resource/aws_iam_role.rb +1 -1
  46. data/lib/chef/resource/aws_internet_gateway.rb +11 -4
  47. data/lib/chef/resource/aws_key_pair.rb +4 -3
  48. data/lib/chef/resource/aws_launch_configuration.rb +5 -4
  49. data/lib/chef/resource/aws_load_balancer.rb +14 -3
  50. data/lib/chef/resource/aws_nat_gateway.rb +2 -2
  51. data/lib/chef/resource/aws_network_acl.rb +10 -10
  52. data/lib/chef/resource/aws_network_interface.rb +12 -6
  53. data/lib/chef/resource/aws_rds_parameter_group.rb +6 -6
  54. data/lib/chef/resource/aws_rds_subnet_group.rb +4 -5
  55. data/lib/chef/resource/aws_route53_record_set.rb +1 -1
  56. data/lib/chef/resource/aws_route_table.rb +1 -1
  57. data/lib/chef/resource/aws_s3_bucket.rb +3 -2
  58. data/lib/chef/resource/aws_security_group.rb +6 -6
  59. data/lib/chef/resource/aws_server_certificate.rb +4 -5
  60. data/lib/chef/resource/aws_sns_topic.rb +4 -4
  61. data/lib/chef/resource/aws_sqs_queue.rb +3 -3
  62. data/lib/chef/resource/aws_subnet.rb +5 -5
  63. data/lib/chef/resource/aws_vpc.rb +12 -6
  64. data/lib/chef/resource/aws_vpc_peering_connection.rb +2 -2
  65. data/spec/aws_support.rb +12 -9
  66. data/spec/aws_support/deep_matcher/match_values_failure_messages.rb +15 -5
  67. data/spec/integration/aws_dhcp_options_spec.rb +7 -7
  68. data/spec/integration/aws_ebs_volume_spec.rb +1 -1
  69. data/spec/integration/aws_internet_gateway_spec.rb +19 -18
  70. data/spec/integration/aws_key_pair_spec.rb +1 -1
  71. data/spec/integration/aws_nat_gateway_spec.rb +3 -6
  72. data/spec/integration/aws_network_acl_spec.rb +19 -11
  73. data/spec/integration/aws_network_interface_spec.rb +26 -20
  74. data/spec/integration/aws_rds_instance_spec.rb +6 -7
  75. data/spec/integration/aws_rds_subnet_group_spec.rb +6 -6
  76. data/spec/integration/aws_route53_hosted_zone_spec.rb +1 -1
  77. data/spec/integration/aws_s3_bucket_spec.rb +1 -2
  78. data/spec/integration/aws_security_group_spec.rb +272 -198
  79. data/spec/integration/aws_server_certificate_spec.rb +60 -78
  80. data/spec/integration/aws_subnet_spec.rb +8 -4
  81. data/spec/integration/aws_vpc_spec.rb +29 -23
  82. data/spec/integration/machine_spec.rb +1 -1
  83. data/spec/unit/chef/provisioning/aws_driver/credentials_spec.rb +13 -0
  84. data/spec/unit/chef/provisioning/aws_driver/driver_spec.rb +1 -1
  85. data/spec/unit/chef/provisioning/aws_driver/route53_spec.rb +1 -1
  86. metadata +5 -20
  87. data/spec/persistence_file.txt +0 -220
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b8493fa5ba480a6d3f285a70ed8b11d36576332c
4
- data.tar.gz: da96881084a9ea489e95e4c5b337635a0f7a1091
3
+ metadata.gz: be58e21bd868bb850a868eb9e28d8cddbd845c7a
4
+ data.tar.gz: a700bfd36411280a8b69193c646ff9d413abe911
5
5
  SHA512:
6
- metadata.gz: a6564d4a495ceb70502964e0ebe9a85236bf34395a02e579e2bacb09016f5615ed6a0ae1ce650309dbabe133c284af94c00841828eb440063ae8bc6b3853e090
7
- data.tar.gz: a69529c284fbd20aa5f34b7ac84d0bb1d8383999309b7c45adf503d5208c89042521b0b0f82061f543c73d7ca13d3e0da70cb346737522f732bb67fd8834d0c6
6
+ metadata.gz: 3020304e7089b18d519ea75b9fc537174af9b553733d12d1a572bca11433184851da1e7aa1eda5f5ec2f9e0e4c786a80a1238ee7fd9ea7ab0dab9df0ce5e3be4
7
+ data.tar.gz: a10dac39f023c3fc0bc6ddc5ec7d9c53bc89206d140f44815e86e5853df4f4da8cd819e2a550cd5b0dafe298e851727335505b71bad7d61171c828842f1312ce
data/README.md CHANGED
@@ -305,7 +305,7 @@ The `AWSProvider` class will automatically try to call `converge_tags` when runn
305
305
  def aws_tagger
306
306
  @aws_tagger ||= begin
307
307
  rds_strategy = Chef::Provisioning::AWSDriver::TaggingStrategy::RDS.new(
308
- new_resource.driver.rds.client,
308
+ new_resource.driver.rds,
309
309
  construct_arn(new_resource),
310
310
  new_resource.aws_tags
311
311
  )
@@ -17,7 +17,6 @@ Gem::Specification.new do |s|
17
17
 
18
18
  s.add_dependency 'chef-provisioning', '>= 1.0', '< 3.0'
19
19
 
20
- s.add_dependency 'aws-sdk-v1', '>= 1.59.0'
21
20
  s.add_dependency 'aws-sdk', ['>= 2.2.18', '< 3.0']
22
21
  s.add_dependency 'retryable', '~> 2.0', '>= 2.0.1'
23
22
  s.add_dependency 'ubuntu_ami', '~> 0.4', '>= 0.4.1'
@@ -14,16 +14,18 @@ class Chef::Provider::AwsAutoScalingGroup < Chef::Provisioning::AWSDriver::AWSPr
14
14
  options = desired_options.dup
15
15
  options[:min_size] ||= 1
16
16
  options[:max_size] ||= 1
17
+ options[:auto_scaling_group_name] = new_resource.name
18
+ options[:launch_configuration_name] = new_resource.launch_configuration if new_resource.launch_configuration
19
+ options[:load_balancer_names] = new_resource.load_balancers if new_resource.load_balancers
17
20
 
18
- aws_obj = new_resource.driver.auto_scaling.groups.create(
19
- new_resource.name, options)
21
+ aws_obj = new_resource.driver.auto_scaling_resource.create_group(options)
20
22
 
21
23
  new_resource.scaling_policies.each do |policy_name, policy|
22
- aws_obj.scaling_policies.put(policy_name.to_s, policy)
24
+ aws_obj.put_scaling_policy(policy_name: policy_name, adjustment_type: policy[:adjustment_type], scaling_adjustment: policy[:scaling_adjustment])
23
25
  end
24
26
 
25
27
  new_resource.notification_configurations.each do |config|
26
- aws_obj.notification_configurations.create(config)
28
+ aws_obj.client.put_notification_configuration(auto_scaling_group_name: aws_obj.name, topic_arn: config[:topic], notification_types: config[:types])
27
29
  end
28
30
 
29
31
  aws_obj
@@ -36,14 +38,15 @@ class Chef::Provider::AwsAutoScalingGroup < Chef::Provisioning::AWSDriver::AWSPr
36
38
 
37
39
  def destroy_aws_object(group)
38
40
  converge_by "delete Auto Scaling group #{new_resource.name} in #{region}" do
39
- group.delete!
41
+ group.delete(force_delete: true)
42
+ group.wait_until_not_exists
40
43
  end
41
44
  end
42
45
 
43
46
  def desired_options
44
47
  @desired_options ||= begin
45
48
  options = new_resource.options.dup
46
- %w(launch_configuration min_size max_size availability_zones desired_capacity load_balancers).each do |var|
49
+ %w( min_size max_size availability_zones desired_capacity ).each do |var|
47
50
  var = var.to_sym
48
51
  value = new_resource.public_send(var)
49
52
  options[var] = value if value
@@ -14,18 +14,24 @@ class Chef::Provider::AwsDhcpOptions < Chef::Provisioning::AWSDriver::AWSProvide
14
14
  end
15
15
 
16
16
  converge_by "create DHCP options #{new_resource.name} in #{region}" do
17
- dhcp_options = new_resource.driver.ec2.dhcp_options.create(options)
18
- retry_with_backoff(AWS::EC2::Errors::InvalidDhcpOptionsID::NotFound) do
19
- dhcp_options.tags['Name'] = new_resource.name
20
- end
21
- dhcp_options
17
+ create_dhcp_options options
18
+ end
19
+ end
20
+
21
+ def create_dhcp_options options
22
+ options = options.map{|k,v| {key: k.to_s.gsub('_', '-'), values: Array(v).map(&:to_s)}}
23
+ ec2_resource = ::Aws::EC2::Resource.new(new_resource.driver.ec2)
24
+ dhcp_options = ec2_resource.create_dhcp_options({dhcp_configurations: options})
25
+ retry_with_backoff(::Aws::EC2::Errors::InvalidDhcpOptionIDNotFound) do
26
+ dhcp_options.create_tags({tags: [{key: "Name", value: new_resource.name}]})
22
27
  end
28
+ dhcp_options
23
29
  end
24
30
 
25
31
  def update_aws_object(dhcp_options)
26
32
  # Verify unmodifiable attributes of existing dhcp_options
27
- config = dhcp_options.configuration
28
- differing_options = desired_options.select { |name, value| config[name] != value }
33
+ config = dhcp_options.data.to_h[:dhcp_configurations].map{|a|{a[:key].gsub('-', '_').to_sym => a[:values].map{|k|k[:value]} }}.reduce Hash.new, :merge
34
+ differing_options = desired_options.select { |name, value| config[name] != Array(value).map(&:to_s) }
29
35
  if !differing_options.empty?
30
36
  old_dhcp_options = dhcp_options
31
37
  # Report what we are trying to change ...
@@ -36,14 +42,18 @@ class Chef::Provider::AwsDhcpOptions < Chef::Provisioning::AWSDriver::AWSProvide
36
42
 
37
43
  # create new dhcp_options
38
44
  if action_handler.should_perform_actions
39
- dhcp_options = AWS.ec2(config: dhcp_options.config).dhcp_options.create(config.merge(desired_options))
45
+ dhcp_options = create_dhcp_options(config.merge(desired_options))
40
46
  end
41
47
  action_handler.report_progress "create DHCP options #{dhcp_options.id} with new attributes in #{region}"
42
48
 
43
49
  # attach dhcp_options to existing vpcs
44
- old_dhcp_options.vpcs.each do |vpc|
45
- action_handler.perform_action "attach DHCP options #{dhcp_options.id} to vpc #{vpc.id}" do
46
- vpc.dhcp_options = dhcp_options
50
+ ec2_resource = ::Aws::EC2::Resource.new(new_resource.driver.ec2)
51
+ ec2_resource.vpcs.each do |vpc|
52
+ if vpc.dhcp_options_id == old_dhcp_options.id
53
+ dhcp_options.associate_with_vpc({
54
+ dry_run: false,
55
+ vpc_id: vpc.id, # required
56
+ })
47
57
  end
48
58
  end
49
59
 
@@ -39,9 +39,9 @@ class Chef::Provider::AwsEbsVolume < Chef::Provisioning::AWSDriver::AWSProvider
39
39
  def create_aws_object
40
40
  volume = nil
41
41
  converge_by "create #{new_resource} in #{region}" do
42
- volume = new_resource.driver.ec2.volumes.create(initial_options)
43
- retry_with_backoff(AWS::EC2::Errors::InvalidVolumeID::NotFound) do
44
- volume.tags['Name'] = new_resource.name
42
+ volume = new_resource.driver.ec2_resource.create_volume(initial_options)
43
+ retry_with_backoff(::Aws::EC2::Errors::InvalidVolumeNotFound) do
44
+ new_resource.driver.ec2_resource.create_tags(resources: [volume.volume_id],tags: [{key: "Name", value: new_resource.name}])
45
45
  end
46
46
  volume
47
47
  end
@@ -54,8 +54,8 @@ class Chef::Provider::AwsEbsVolume < Chef::Provisioning::AWSDriver::AWSProvider
54
54
 
55
55
  def update_aws_object(volume)
56
56
  if initial_options.has_key?(:availability_zone)
57
- if availability_zone != volume.availability_zone_name
58
- raise "#{new_resource}.availability_zone is #{availability_zone}, but actual volume has availability_zone_name set to #{volume.availability_zone_name}. Cannot be modified!"
57
+ if availability_zone != volume.availability_zone
58
+ raise "#{new_resource}.availability_zone is #{availability_zone}, but actual volume has availability_zone_name set to #{volume.availability_zone}. Cannot be modified!"
59
59
  end
60
60
  end
61
61
  if initial_options.has_key?(:size)
@@ -63,9 +63,9 @@ class Chef::Provider::AwsEbsVolume < Chef::Provisioning::AWSDriver::AWSProvider
63
63
  raise "#{new_resource}.size is #{new_resource.size}, but actual volume has size set to #{volume.size}. Cannot be modified!"
64
64
  end
65
65
  end
66
- if initial_options.has_key?(:snapshot)
67
- if initial_options[:snapshot] != volume.snapshot.id
68
- raise "#{new_resource}.snapshot is #{new_resource.snapshot}, but actual volume has snapshot set to #{volume.snapshot.id}. Cannot be modified!"
66
+ if initial_options.has_key?(:snapshot_id)
67
+ if initial_options[:snapshot_id] != volume.snapshot_id
68
+ raise "#{new_resource}.snapshot is #{new_resource.snapshot}, but actual volume has snapshot set to #{volume.snapshot_id}. Cannot be modified!"
69
69
  end
70
70
  end
71
71
  if initial_options.has_key?(:iops)
@@ -74,7 +74,7 @@ class Chef::Provider::AwsEbsVolume < Chef::Provisioning::AWSDriver::AWSProvider
74
74
  end
75
75
  end
76
76
  if initial_options.has_key?(:volume_type)
77
- if initial_options[:volume_type] != volume.type
77
+ if initial_options[:volume_type] != volume.volume_type
78
78
  raise "#{new_resource}.volume_type is #{new_resource.volume_type}, but actual volume has type set to #{volume.type}. Cannot be modified!"
79
79
  end
80
80
  end
@@ -86,7 +86,7 @@ class Chef::Provider::AwsEbsVolume < Chef::Provisioning::AWSDriver::AWSProvider
86
86
  end
87
87
 
88
88
  def destroy_aws_object(volume)
89
- detach(volume) if volume.status == :in_use
89
+ detach(volume) if volume.state == "in-use"
90
90
  delete(volume)
91
91
  end
92
92
 
@@ -119,20 +119,20 @@ class Chef::Provider::AwsEbsVolume < Chef::Provisioning::AWSDriver::AWSProvider
119
119
  end
120
120
 
121
121
  def update_attachment(volume)
122
- status = volume.status
122
+ status = new_resource.driver.ec2_resource.volume(volume.id).state
123
123
  #
124
124
  # If we were told to attach the volume to a machine, do so
125
125
  #
126
- if expected_instance.is_a?(AWS::EC2::Instance) || expected_instance.is_a?(::Aws::EC2::Instance)
126
+ if expected_instance.is_a?(::Aws::EC2::Instance) || expected_instance.is_a?(::Aws::EC2::Instance)
127
127
  case status
128
- when :in_use
128
+ when "in-use"
129
129
  # We don't want to attempt to reattach to the same instance and device
130
130
  attachment = current_attachment(volume)
131
- if attachment.instance.id != expected_instance.id || attachment.device != new_resource.device
131
+ if attachment.instance_id != expected_instance.id || attachment.device != new_resource.device
132
132
  detach(volume)
133
133
  attach(volume)
134
134
  end
135
- when :available
135
+ when "available"
136
136
  attach(volume)
137
137
  when nil
138
138
  raise VolumeNotFoundError.new(new_resource)
@@ -147,7 +147,7 @@ class Chef::Provider::AwsEbsVolume < Chef::Provisioning::AWSDriver::AWSProvider
147
147
  case status
148
148
  when nil
149
149
  Chef::Log.warn VolumeNotFoundError.new(new_resource)
150
- when :in_use
150
+ when "in-use"
151
151
  detach(volume)
152
152
  end
153
153
  end
@@ -155,23 +155,24 @@ class Chef::Provider::AwsEbsVolume < Chef::Provisioning::AWSDriver::AWSProvider
155
155
  end
156
156
 
157
157
  def wait_for_volume_status(volume, expected_status)
158
- initial_status = volume.status
159
158
  log_callback = proc {
160
159
  Chef::Log.info("waiting for #{new_resource} status to change to #{expected_status}...")
161
160
  }
162
161
 
163
- Retryable.retryable(:tries => 30, :sleep => 2, :on => VolumeStatusTimeoutError, :ensure => log_callback) do
164
- raise VolumeStatusTimeoutError.new(new_resource, initial_status, expected_status) if volume.status != expected_status
162
+ Retryable.retryable(:tries => 120, :sleep => 2, :on => VolumeStatusTimeoutError, :ensure => log_callback) do
163
+ status = new_resource.driver.ec2_resource.volume(volume.id).state
164
+ expected_status = "in-use" if expected_status.to_s.eql?("in_use")
165
+ raise VolumeStatusTimeoutError.new(new_resource, status, expected_status) if status != expected_status.to_s
165
166
  end
166
167
  end
167
168
 
168
169
  def detach(volume)
169
170
  attachment = current_attachment(volume)
170
- instance = attachment.instance
171
+ instance = attachment.instance_id
171
172
  device = attachment.device
172
173
 
173
- converge_by "detach #{new_resource} from #{new_resource.machine} (#{instance.instance_id})" do
174
- volume.detach_from(instance, device)
174
+ converge_by "detach #{new_resource} from #{new_resource.machine} (#{instance})" do
175
+ volume.detach_from_instance(instance_id: instance, device: device)
175
176
  end
176
177
 
177
178
  converge_by "wait for #{new_resource} to detach" do
@@ -182,7 +183,7 @@ class Chef::Provider::AwsEbsVolume < Chef::Provisioning::AWSDriver::AWSProvider
182
183
 
183
184
  def attach(volume)
184
185
  converge_by "attach #{new_resource} to #{new_resource.machine} (#{expected_instance.instance_id}) to device #{new_resource.device}" do
185
- volume.attach_to(expected_instance, new_resource.device)
186
+ volume.attach_to_instance(instance_id: expected_instance.id, device: new_resource.device)
186
187
  end
187
188
 
188
189
  converge_by "wait for #{new_resource} to attach" do
@@ -206,7 +207,8 @@ class Chef::Provider::AwsEbsVolume < Chef::Provisioning::AWSDriver::AWSProvider
206
207
  }
207
208
 
208
209
  Retryable.retryable(:tries => 30, :sleep => 2, :on => VolumeStatusTimeoutError, :ensure => log_callback) do
209
- raise VolumeStatusTimeoutError.new(new_resource, 'exists', 'deleted') if volume.exists?
210
+ result = new_resource.driver.ec2_resource.volume(volume.id) if volume.id
211
+ raise VolumeStatusTimeoutError.new(new_resource, "exists", "deleted") if new_resource.exists?(result)
210
212
  end
211
213
  volume
212
214
  end
@@ -20,32 +20,32 @@ class Chef::Provider::AwsEipAddress < Chef::Provisioning::AWSDriver::AWSProvider
20
20
  converge_by "create Elastic IP address in #{region}" do
21
21
  associate_to_vpc = new_resource.associate_to_vpc
22
22
  if associate_to_vpc.nil?
23
- if desired_instance.is_a?(AWS::EC2::Instance) || desired_instance.is_a?(::Aws::EC2::Instance)
23
+ if desired_instance.is_a?(::Aws::EC2::Instance) || desired_instance.is_a?(::Aws::EC2::Instance)
24
24
  associate_to_vpc = !!desired_instance.vpc_id
25
25
  Chef::Log.debug "Since associate_to_vpc is not specified and instance #{new_resource.machine} (#{desired_instance.id}) and #{associate_to_vpc ? "is" : "is not"} in a VPC, setting associate_to_vpc to #{associate_to_vpc}."
26
26
  end
27
27
  end
28
- new_resource.driver.ec2.elastic_ips.create vpc: new_resource.associate_to_vpc
28
+ new_resource.driver.ec2.allocate_address vpc: new_resource.associate_to_vpc
29
29
  end
30
30
  end
31
31
 
32
32
  def update_aws_object(elastic_ip)
33
33
  if !new_resource.associate_to_vpc.nil?
34
- if !!new_resource.associate_to_vpc != !!elastic_ip.vpc?
35
- raise "#{new_resource.to_s}.associate_to_vpc = #{new_resource.associate_to_vpc}, but actual IP address has vpc? set to #{elastic_ip.vpc?}. Cannot be modified!"
34
+ if new_resource.associate_to_vpc != (elastic_ip.domain == "vpc")
35
+ raise "#{new_resource}.associate_to_vpc = #{new_resource.associate_to_vpc}, but actual IP address has vpc? set to #{(elastic_ip.domain == 'vpc')}. Cannot be modified!"
36
36
  end
37
37
  end
38
38
  end
39
39
 
40
40
  def destroy_aws_object(elastic_ip)
41
41
  #if it's attached to something in a vpc, disassociate first
42
- if elastic_ip.instance_id != nil && elastic_ip.domain == 'vpc'
42
+ if !elastic_ip.instance_id.nil? && elastic_ip.domain == "vpc"
43
43
  converge_by "dissociate Elastic IP address #{new_resource.name} (#{elastic_ip.public_ip}) from #{elastic_ip.instance_id}" do
44
- elastic_ip.disassociate
44
+ new_resource.driver.ec2.disassociate_address public_ip: elastic_ip.public_ip
45
45
  end
46
46
  end
47
47
  converge_by "delete Elastic IP address #{new_resource.name} (#{elastic_ip.public_ip}) in #{region}" do
48
- elastic_ip.delete
48
+ new_resource.driver.ec2.release_address allocation_id: elastic_ip.allocation_id
49
49
  end
50
50
  end
51
51
 
@@ -66,10 +66,10 @@ class Chef::Provider::AwsEipAddress < Chef::Provisioning::AWSDriver::AWSProvider
66
66
  #
67
67
  # If we were told to associate the IP to a machine, do so
68
68
  #
69
- if desired_instance.is_a?(AWS::EC2::Instance) || desired_instance.is_a?(::Aws::EC2::Instance)
69
+ if desired_instance.is_a?(::Aws::EC2::Instance) || desired_instance.is_a?(::Aws::EC2::Instance)
70
70
  if desired_instance.id != elastic_ip.instance_id
71
71
  converge_by "associate Elastic IP address #{new_resource.name} (#{elastic_ip.public_ip}) with #{new_resource.machine} (#{desired_instance.id})" do
72
- elastic_ip.associate instance: desired_instance.id
72
+ new_resource.driver.ec2.associate_address instance_id: desired_instance.id, allocation_id: elastic_ip.allocation_id
73
73
  end
74
74
  end
75
75
 
@@ -77,13 +77,12 @@ class Chef::Provider::AwsEipAddress < Chef::Provisioning::AWSDriver::AWSProvider
77
77
  # If we were told to set the association to false, disassociate it.
78
78
  #
79
79
  else
80
- if elastic_ip.associated?
80
+ if !(elastic_ip.association_id.nil?)
81
81
  converge_by "disassociate Elastic IP address #{new_resource.name} (#{elastic_ip.public_ip}) from #{elastic_ip.instance_id} in #{region}" do
82
- aws_object.disassociate
82
+ new_resource.driver.ec2.disassociate_address public_ip: elastic_ip.public_ip
83
83
  end
84
84
  end
85
85
  end
86
-
87
86
  end
88
87
 
89
88
  end
@@ -12,7 +12,7 @@ class Chef::Provider::AwsImage < Chef::Provisioning::AWSDriver::AWSProvider
12
12
  unless instance_id
13
13
  # This is an old image and doesn't have the tag added - lets try and find it from the block device mapping
14
14
  image.block_device_mappings.map do |dev, opts|
15
- snapshot = new_resource.driver.ec2.snapshots[opts[:snapshot_id]]
15
+ snapshot = new_resource.driver.ec2_resource.snapshot(opts[:snapshot_id])
16
16
  desc = snapshot.description
17
17
  m = /CreateImage\(([^\)]+)\)/.match(desc)
18
18
  if m
@@ -17,9 +17,10 @@ class Chef::Provider::AwsInternetGateway < Chef::Provisioning::AWSDriver::AWSPro
17
17
  desired_vpc = Chef::Resource::AwsVpc.get_aws_object(new_resource.vpc, resource: new_resource) if new_resource.vpc
18
18
 
19
19
  converge_by "create internet gateway #{new_resource.name} in region #{region}" do
20
- internet_gateway = new_resource.driver.ec2.internet_gateways.create
21
- retry_with_backoff(AWS::EC2::Errors::InvalidInternetGatewayID::NotFound) do
22
- internet_gateway.tags['Name'] = new_resource.name
20
+ ec2_resource = ::Aws::EC2::Resource.new(new_resource.driver.ec2)
21
+ internet_gateway = ec2_resource.create_internet_gateway
22
+ retry_with_backoff(::Aws::EC2::Errors::InvalidInternetGatewayIDNotFound) do
23
+ internet_gateway.create_tags({tags: [{key: "Name", value: new_resource.name}]})
23
24
  end
24
25
 
25
26
  if desired_vpc
@@ -31,11 +32,15 @@ class Chef::Provider::AwsInternetGateway < Chef::Provisioning::AWSDriver::AWSPro
31
32
  end
32
33
 
33
34
  def update_aws_object(internet_gateway)
34
- current_vpc = internet_gateway.vpc
35
+ ec2_resource = new_resource.driver.ec2.describe_internet_gateways(:internet_gateway_ids=>[internet_gateway.id])
36
+ current_vpc = ec2_resource.internet_gateways.first.attachments.first
35
37
 
36
38
  if new_resource.vpc
37
39
  desired_vpc = Chef::Resource::AwsVpc.get_aws_object(new_resource.vpc, resource: new_resource)
38
- if current_vpc != desired_vpc
40
+ current_vpc_id = current_vpc.vpc_id unless current_vpc.nil?
41
+ desired_vpc_id = desired_vpc.vpc_id unless desired_vpc.nil?
42
+ if current_vpc_id != desired_vpc_id
43
+ detach_vpc(internet_gateway)
39
44
  attach_vpc(desired_vpc, internet_gateway)
40
45
  end
41
46
  end
@@ -51,7 +56,7 @@ class Chef::Provider::AwsInternetGateway < Chef::Provisioning::AWSDriver::AWSPro
51
56
  private
52
57
 
53
58
  def attach_vpc(vpc, desired_gateway)
54
- if vpc.internet_gateway && vpc.internet_gateway != desired_gateway
59
+ if vpc.internet_gateways.first && vpc.internet_gateways.first != desired_gateway
55
60
  current_driver = self.new_resource.driver
56
61
  current_chef_server = self.new_resource.chef_server
57
62
  Cheffish.inline_resource(self, action) do
@@ -64,14 +69,17 @@ class Chef::Provider::AwsInternetGateway < Chef::Provisioning::AWSDriver::AWSPro
64
69
  end
65
70
  end
66
71
  converge_by "attach vpc #{vpc.id} to #{desired_gateway.id}" do
67
- desired_gateway.vpc = vpc
72
+ desired_gateway.attach_to_vpc(vpc_id: vpc.id)
68
73
  end
69
74
  end
70
75
 
71
76
  def detach_vpc(internet_gateway)
72
- if internet_gateway.vpc
73
- converge_by "detach vpc #{internet_gateway.vpc.id} from internet gateway #{internet_gateway.id}" do
74
- internet_gateway.detach(internet_gateway.vpc)
77
+ ec2_resource = new_resource.driver.ec2.describe_internet_gateways(:internet_gateway_ids=>[internet_gateway.id])
78
+ vpcid = ec2_resource.internet_gateways.first.attachments.first
79
+ vpc_id = vpcid.vpc_id unless vpcid.nil?
80
+ if vpc_id
81
+ converge_by "detach vpc #{vpc_id} from internet gateway #{internet_gateway.id}" do
82
+ internet_gateway.detach_from_vpc(vpc_id: vpc_id)
75
83
  end
76
84
  end
77
85
  end
@@ -1,6 +1,6 @@
1
1
  require 'chef/provider/lwrp_base'
2
2
  require 'chef/provisioning/aws_driver/aws_provider'
3
- require 'aws-sdk-v1'
3
+ require 'aws-sdk'
4
4
 
5
5
 
6
6
  class Chef::Provider::AwsKeyPair < Chef::Provisioning::AWSDriver::AWSProvider
@@ -13,7 +13,7 @@ class Chef::Provider::AwsKeyPair < Chef::Provisioning::AWSDriver::AWSProvider
13
13
  action :destroy do
14
14
  if current_resource_exists?
15
15
  converge_by "delete AWS key pair #{new_resource.name} on region #{region}" do
16
- driver.ec2.key_pairs[new_resource.name].delete
16
+ driver.ec2.delete_key_pair({key_name:new_resource.name})
17
17
  end
18
18
  end
19
19
  end
@@ -75,8 +75,8 @@ class Chef::Provider::AwsKeyPair < Chef::Provisioning::AWSDriver::AWSProvider
75
75
  if !new_fingerprints.any? { |f| compare_public_key f }
76
76
  if new_resource.allow_overwrite
77
77
  converge_by "update #{key_description} to match local key at #{new_resource.private_key_path}" do
78
- driver.ec2.key_pairs[new_resource.name].delete
79
- driver.ec2.key_pairs.import(new_resource.name, Cheffish::KeyFormatter.encode(desired_key, :format => :openssh))
78
+ driver.ec2.delete_key_pair({key_name:new_resource.name})
79
+ driver.ec2.import_key_pair({key_name: new_resource.name, public_key_material: Cheffish::KeyFormatter.encode(desired_key, :format => :openssh)})
80
80
  end
81
81
  else
82
82
  raise "#{key_description} with fingerprint #{@current_fingerprint} does not match local key fingerprint(s) #{new_fingerprints}, and allow_overwrite is false!"
@@ -88,7 +88,7 @@ class Chef::Provider::AwsKeyPair < Chef::Provisioning::AWSDriver::AWSProvider
88
88
 
89
89
  # Create key
90
90
  converge_by "create #{key_description} from local key at #{new_resource.private_key_path}" do
91
- driver.ec2.key_pairs.import(new_resource.name, Cheffish::KeyFormatter.encode(desired_key, :format => :openssh))
91
+ driver.ec2.import_key_pair({key_name: new_resource.name, public_key_material: Cheffish::KeyFormatter.encode(desired_key, :format => :openssh)})
92
92
  end
93
93
  end
94
94
  end
@@ -169,7 +169,7 @@ class Chef::Provider::AwsKeyPair < Chef::Provisioning::AWSDriver::AWSProvider
169
169
 
170
170
  current_key_pair = new_resource.aws_object
171
171
  if current_key_pair
172
- @current_fingerprint = current_key_pair.fingerprint
172
+ @current_fingerprint = current_key_pair.key_fingerprint
173
173
  else
174
174
  current_resource.action [:destroy]
175
175
  end
@@ -10,14 +10,12 @@ class Chef::Provider::AwsLaunchConfiguration < Chef::Provisioning::AWSDriver::AW
10
10
  image_id = Chef::Resource::AwsImage.get_aws_object_id(new_resource.image, resource: new_resource)
11
11
  instance_type = new_resource.instance_type || new_resource.driver.default_instance_type
12
12
  options = AWSResource.lookup_options(new_resource.options || options, resource: new_resource)
13
+ options[:launch_configuration_name] = new_resource.name if new_resource.name
14
+ options[:image_id] = image_id
15
+ options[:instance_type] = instance_type
13
16
 
14
17
  converge_by "create launch configuration #{new_resource.name} in #{region}" do
15
- new_resource.driver.auto_scaling.launch_configurations.create(
16
- new_resource.name,
17
- image_id,
18
- instance_type,
19
- options
20
- )
18
+ new_resource.driver.auto_scaling_client.create_launch_configuration(options)
21
19
  end
22
20
  end
23
21
 
@@ -25,7 +23,7 @@ class Chef::Provider::AwsLaunchConfiguration < Chef::Provisioning::AWSDriver::AW
25
23
  if new_resource.image
26
24
  image_id = Chef::Resource::AwsImage.get_aws_object_id(new_resource.image, resource: new_resource)
27
25
  if image_id != launch_configuration.image_id
28
- raise "#{new_resource.to_s}.image = #{new_resource.image} (#{image.id}), but actual launch configuration has image set to #{launch_configuration.image_id}. Cannot be modified!"
26
+ raise "#{new_resource.to_s}.image = #{new_resource.image}, but actual launch configuration has image set to #{launch_configuration.image_id}. Cannot be modified!"
29
27
  end
30
28
  end
31
29
  if new_resource.instance_type
@@ -41,8 +39,8 @@ class Chef::Provider::AwsLaunchConfiguration < Chef::Provisioning::AWSDriver::AW
41
39
  # TODO add a timeout here.
42
40
  # TODO is InUse really a status guaranteed to go away??
43
41
  begin
44
- launch_configuration.delete
45
- rescue AWS::AutoScaling::Errors::ResourceInUse
42
+ new_resource.driver.auto_scaling_client.delete_launch_configuration(launch_configuration_name: launch_configuration.launch_configuration_name)
43
+ rescue ::Aws::AutoScaling::Errors::ResourceInUse
46
44
  sleep 5
47
45
  retry
48
46
  end