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

Sign up to get free protection for your applications and to get access to all the features.
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