chef-provisioning-aws 1.4.1 → 1.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 (58) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +8 -0
  3. data/README.md +26 -39
  4. data/Rakefile +13 -5
  5. data/lib/chef/provider/aws_iam_instance_profile.rb +60 -0
  6. data/lib/chef/provider/aws_iam_role.rb +98 -0
  7. data/lib/chef/provider/aws_image.rb +1 -1
  8. data/lib/chef/provider/aws_internet_gateway.rb +75 -0
  9. data/lib/chef/provider/aws_route_table.rb +3 -2
  10. data/lib/chef/provider/aws_s3_bucket.rb +4 -1
  11. data/lib/chef/provider/aws_security_group.rb +1 -1
  12. data/lib/chef/provider/aws_vpc.rb +50 -45
  13. data/lib/chef/provisioning/aws_driver.rb +22 -1
  14. data/lib/chef/provisioning/aws_driver/aws_provider.rb +13 -5
  15. data/lib/chef/provisioning/aws_driver/aws_resource.rb +173 -165
  16. data/lib/chef/provisioning/aws_driver/credentials.rb +12 -0
  17. data/lib/chef/provisioning/aws_driver/driver.rb +82 -37
  18. data/lib/chef/provisioning/aws_driver/super_lwrp.rb +56 -43
  19. data/lib/chef/provisioning/aws_driver/version.rb +1 -1
  20. data/lib/chef/resource/aws_dhcp_options.rb +1 -1
  21. data/lib/chef/resource/aws_ebs_volume.rb +1 -1
  22. data/lib/chef/resource/aws_eip_address.rb +1 -1
  23. data/lib/chef/resource/aws_iam_instance_profile.rb +33 -0
  24. data/lib/chef/resource/aws_iam_role.rb +55 -0
  25. data/lib/chef/resource/aws_image.rb +1 -1
  26. data/lib/chef/resource/aws_instance.rb +1 -1
  27. data/lib/chef/resource/aws_internet_gateway.rb +36 -6
  28. data/lib/chef/resource/aws_load_balancer.rb +1 -1
  29. data/lib/chef/resource/aws_network_acl.rb +1 -1
  30. data/lib/chef/resource/aws_network_interface.rb +1 -1
  31. data/lib/chef/resource/aws_route53_hosted_zone.rb +261 -0
  32. data/lib/chef/resource/aws_route53_record_set.rb +162 -0
  33. data/lib/chef/resource/aws_route_table.rb +1 -1
  34. data/lib/chef/resource/aws_security_group.rb +1 -1
  35. data/lib/chef/resource/aws_sns_topic.rb +1 -1
  36. data/lib/chef/resource/aws_subnet.rb +1 -1
  37. data/lib/chef/resource/aws_vpc.rb +1 -1
  38. data/lib/chef/resource/aws_vpc_peering_connection.rb +1 -1
  39. data/spec/aws_support.rb +11 -13
  40. data/spec/aws_support/matchers/create_an_aws_object.rb +7 -1
  41. data/spec/aws_support/matchers/have_aws_object_tags.rb +1 -1
  42. data/spec/aws_support/matchers/match_an_aws_object.rb +7 -1
  43. data/spec/aws_support/matchers/update_an_aws_object.rb +8 -2
  44. data/spec/integration/aws_eip_address_spec.rb +74 -0
  45. data/spec/integration/aws_iam_instance_profile_spec.rb +159 -0
  46. data/spec/integration/aws_iam_role_spec.rb +177 -0
  47. data/spec/integration/aws_internet_gateway_spec.rb +161 -0
  48. data/spec/integration/aws_network_interface_spec.rb +3 -4
  49. data/spec/integration/aws_route53_hosted_zone_spec.rb +522 -0
  50. data/spec/integration/aws_route_table_spec.rb +52 -4
  51. data/spec/integration/aws_s3_bucket_spec.rb +1 -1
  52. data/spec/integration/load_balancer_spec.rb +303 -8
  53. data/spec/integration/machine_batch_spec.rb +1 -0
  54. data/spec/integration/machine_image_spec.rb +32 -17
  55. data/spec/integration/machine_spec.rb +11 -29
  56. data/spec/unit/chef/provisioning/aws_driver/driver_spec.rb +0 -1
  57. data/spec/unit/chef/provisioning/aws_driver/route53_spec.rb +105 -0
  58. metadata +48 -6
@@ -5,10 +5,8 @@ describe Chef::Resource::AwsRouteTable do
5
5
 
6
6
  when_the_chef_12_server "exists", organization: 'foo', server_scope: :context do
7
7
  with_aws "with a VPC with an internet gateway" do
8
- aws_vpc "test_vpc" do
9
- cidr_block '10.0.0.0/24'
10
- internet_gateway true
11
- end
8
+ purge_all
9
+ setup_public_vpc
12
10
 
13
11
  it "aws_route_table 'test_route_table' with no parameters except VPC creates a route table" do
14
12
  expect_recipe {
@@ -84,6 +82,56 @@ describe Chef::Resource::AwsRouteTable do
84
82
  ).and be_idempotent
85
83
  end
86
84
 
85
+ context "with an existing routing table" do
86
+ aws_route_table 'test_route_table' do
87
+ vpc 'test_vpc'
88
+ routes '0.0.0.0/0' => :internet_gateway
89
+ end
90
+
91
+ it "updates an existing routing table" do
92
+ expect_recipe {
93
+ aws_route_table 'test_route_table' do
94
+ vpc 'test_vpc'
95
+ routes '0.0.0.0/0' => :internet_gateway,
96
+ '10.1.0.0/24' => :internet_gateway
97
+ end
98
+ }.to update_an_aws_route_table('test_route_table',
99
+ routes: [
100
+ { destination_cidr_block: '10.1.0.0/24', gateway_id: test_vpc.aws_object.internet_gateway.id, state: "active" },
101
+ { destination_cidr_block: '10.0.0.0/24', gateway_id: 'local', state: "active" },
102
+ { destination_cidr_block: '0.0.0.0/0', gateway_id: test_vpc.aws_object.internet_gateway.id, state: "active" },
103
+ ]
104
+ ).and be_idempotent
105
+ end
106
+ end
107
+
108
+ context "with machines", :super_slow do
109
+ machine 'test_machine' do
110
+ machine_options bootstrap_options: {
111
+ subnet_id: 'test_public_subnet',
112
+ key_name: 'test_key_pair'
113
+ }
114
+ action :ready # The box has to be online for AWS to accept it as routable
115
+ end
116
+
117
+ it "can route to a machine", :super_slow do
118
+ expect_recipe {
119
+ aws_route_table 'test_route_table' do
120
+ vpc 'test_vpc'
121
+ routes '0.0.0.0/0' => :internet_gateway,
122
+ '10.1.0.0/16' => 'test_machine'
123
+ end
124
+
125
+ }.to create_an_aws_route_table('test_route_table',
126
+ routes: [
127
+ { destination_cidr_block: '10.0.0.0/16', gateway_id: 'local', state: "active" },
128
+ { destination_cidr_block: '10.1.0.0/16', instance_id: test_machine.aws_object.id, state: "active" },
129
+ { destination_cidr_block: '0.0.0.0/0', gateway_id: test_vpc.aws_object.internet_gateway.id, state: "active" },
130
+ ]
131
+ ).and be_idempotent
132
+ end
133
+ end
134
+
87
135
  context "with existing tags" do
88
136
  aws_route_table 'test_route_table' do
89
137
  vpc 'test_vpc'
@@ -3,7 +3,7 @@ require 'securerandom'
3
3
 
4
4
  def mk_bucket_name
5
5
  bucket_postfix = SecureRandom.hex(8)
6
- "chef_provisioning_test_bucket_#{bucket_postfix}"
6
+ "chef.provisioning.test.#{bucket_postfix}"
7
7
  end
8
8
 
9
9
  describe Chef::Resource::AwsS3Bucket do
@@ -1,4 +1,5 @@
1
1
  require 'spec_helper'
2
+ require 'securerandom'
2
3
 
3
4
  describe Chef::Resource::LoadBalancer do
4
5
  extend AWSSupport
@@ -9,16 +10,39 @@ describe Chef::Resource::LoadBalancer do
9
10
  purge_all
10
11
  setup_public_vpc
11
12
 
13
+ bucket_name = "chef.provisioning.test.#{SecureRandom.hex(8)}"
14
+ aws_s3_bucket bucket_name do
15
+ options acl: "public-read-write"
16
+ recursive_delete true
17
+ end
18
+
19
+ cert_string = "-----BEGIN CERTIFICATE-----\nMIIDejCCAmICCQCpupMy/LKfLTANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJV\nUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHU2VhdHRsZTENMAsGA1UE\nChMEQ2hlZjEMMAoGA1UECxMDRGV2MQ4wDAYDVQQDEwVUeWxlcjEcMBoGCSqGSIb3\nDQEJARYNdHlsZXJAY2hlZi5pbzAeFw0xNTA4MDQwMDI1NDFaFw0xNjA4MDMwMDI1\nNDFaMH8xCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH\nEwdTZWF0dGxlMQ0wCwYDVQQKEwRDaGVmMQwwCgYDVQQLEwNEZXYxDjAMBgNVBAMT\nBVR5bGVyMRwwGgYJKoZIhvcNAQkBFg10eWxlckBjaGVmLmlvMIIBIjANBgkqhkiG\n9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz4gFxNSzwwwYrYTTOCNVQL/agpIXmQKKtkE7\n+Up+waOdSR2iZvgc4fowAqQQ5dtVtur6LEA2LDlLILE+7MhlBxPc3V99lhi5p/Pv\neGCPI7k9sYT0iPJwiqvW+/nCo93QoNpUUDgb6WpT/RENFESn99nTE5NjxNx560aq\nSxAPHTogJEz3wC8c6mQQoANOuXzNb41wvOCUI7Tku76AQ9uECFUjtYpXpx8komaY\nAPtwzr87LGdSysE75roagews2MzAJgGG16oUBsJzT45MlIyQorN3AjoZ3fze6kop\nOhAWeYUM61rwTq7JtLXtBG/9yJzTd/eWU8c4cSK8zePx48X9TQIDAQABMA0GCSqG\nSIb3DQEBBQUAA4IBAQBXJQSpDkjxyljnSWjBur4XikLlFuEpdAdu0MILM3GnS3rT\ntoCVPG2U1d+KkhYG0Y9TBxHpK+3lDGYNyFYJN0STzL4cFzMgQlmZKFhVi/YJWKYO\nj9baIB3dy2k8b2XdDe3WxyycQpHjHhFPqpOTMGNV/1PwJNZGQEjc/svr8EalxvZB\neMb3Kk94K7yohvhT+Ze//rr4ArlM1zvEv3QMwSuyJBA2gtH7FgFKWohZnubW+3uc\n9W/Ux/3O1+BKDWp6zyqn/b2SSF51Jt3tSCF+hIMKYeJnJojY/AF9tQ+DtE8EKYRD\n/qzXX2MQLbhm1AzLt4PN63r96ADYlHhOJGNa9ocS\n-----END CERTIFICATE-----"
20
+ private_key_string = "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEAz4gFxNSzwwwYrYTTOCNVQL/agpIXmQKKtkE7+Up+waOdSR2i\nZvgc4fowAqQQ5dtVtur6LEA2LDlLILE+7MhlBxPc3V99lhi5p/PveGCPI7k9sYT0\niPJwiqvW+/nCo93QoNpUUDgb6WpT/RENFESn99nTE5NjxNx560aqSxAPHTogJEz3\nwC8c6mQQoANOuXzNb41wvOCUI7Tku76AQ9uECFUjtYpXpx8komaYAPtwzr87LGdS\nysE75roagews2MzAJgGG16oUBsJzT45MlIyQorN3AjoZ3fze6kopOhAWeYUM61rw\nTq7JtLXtBG/9yJzTd/eWU8c4cSK8zePx48X9TQIDAQABAoIBAA8teoaHq9Hy+4cN\nNMlhRCXlIhz0hEdLeUuU/8benOCaj7E+OpdfQ/V+763xw86buOwUyVEdLRkU45qz\ne8+jZEgdOsTx6+RjUIio/XWHUlChhpKKD7xIRtTNdn6dKJAFc/GfphTr1Za/kP7s\nFVHLJ6Gny5kd6WkHWt9LHr84oHJZoSjR6YDYdSTL+NtVTwqsKj4EfNY8JAPJI/xI\n9A9t57pvXzwdiya/vXPGytgwkHC/HHWp2sgFvKtJUzuGH0ETDlys9mvXoVQeZ0d9\njhzwIwWAoyvTY9FsUBTCD0aO8r2ylsDVIo2b2cEAZ0Z77OGMUt4sock88sDIICnO\nZVjhV50CgYEA8hKTHpI5ENFvYrTckrc+PnPw7B7xHCCB84ut/CiwzawYRjUx/mtm\nCYYR1xAXdEFrBC21i4Ri8LAIrAQiFGydg2oh4ZQcnEMGKZ0F2VXlsidVNN2tW/50\n8kEaPHPVeP6Trt2kPtpQnhDcuQXbPmOgPBIY2j6nu/Go25e8eICkfhsCgYEA23iy\n8Og1SWZlV5b3ZFyolZiZ9kp0cwyXUGWxUZyw33gBmK6BFkscflI1vfNutxnTDjNl\nALLRoAeIApvXTMFOMUPJsDk90pO7rdlfLznU27lKPyCDkvDGmjCvGGDXrnvi+cc3\ngB3ERfrLJCMoMk9lyg7/KEzzsIjvtTRO79atCLcCgYAGT/+wI2YDj0KVU1wRI2An\nJsTYk3H8Jsjcvf66faEmq98yLX7xQIG3q9xZPF0wNeiBgmOikMA3wI9pVO5ClBaD\nb8gUZtVcKc9GVIbrhPbpb2ckasdzh64rBxGVE/w0HIdjXvpCfVTu2ke3N3ThKp3q\nExq8zjd3ijS6DTnn9orTkwKBgQCxVwpgl4HXWaIx8I7ezfB7UN+3n9oQzO/HyyRI\n6fAR4oqHsRolxXO0rwE2B+pCkd907hqDQfsY8Hz6fqquHtTsAfaLKvXFnhJdG/RJ\n2NUi5soT0FYA+gXAue4CKN6e4wQ5CLzUDTl3wns7LB1i6b06VHvhOK0AzOXE6guO\nyUzwaQKBgDCrGz6IrxEUWl6C14xNNRZBvYTY9oCQpUnup1gMxATJZm4KelKvtKz2\nU1MXpc1i395e+E+tjNAQg0JcBmwkHOMl8c/oAESWPxi11ezalGtUXjIgjBkqqNUE\n/uFqRpNFGwI09JolIqhBTgPWFq6MuuPDJ9IIGJZDQoGEBKmu0k2r\n-----END RSA PRIVATE KEY-----"
21
+
22
+ aws_server_certificate "load_balancer_cert" do
23
+ certificate_body cert_string
24
+ private_key private_key_string
25
+ end
26
+
12
27
  it "creates a load_balancer with the maximum attributes" do
13
28
  expect_recipe {
14
29
  load_balancer 'test-load-balancer' do
15
30
  load_balancer_options({
16
- listeners: [{
31
+ listeners: [
32
+ {
17
33
  :port => 80,
18
34
  :protocol => :http,
19
35
  :instance_port => 80,
36
+ :instance_protocol => :http
37
+ },
38
+ {
39
+ :port => 443,
40
+ :protocol => :https,
41
+ :instance_port => 81,
20
42
  :instance_protocol => :http,
21
- }],
43
+ :ssl_certificate_id => load_balancer_cert.aws_object.arn
44
+ }
45
+ ],
22
46
  subnets: ["test_public_subnet"],
23
47
  security_groups: ["test_security_group"],
24
48
  health_check: {
@@ -27,18 +51,53 @@ describe Chef::Resource::LoadBalancer do
27
51
  timeout: 5,
28
52
  unhealthy_threshold: 2,
29
53
  healthy_threshold: 2
54
+ },
55
+ scheme: "internal",
56
+ attributes: {
57
+ cross_zone_load_balancing: {
58
+ enabled: true
59
+ },
60
+ access_log: {
61
+ enabled: true,
62
+ s3_bucket_name: bucket_name,
63
+ emit_interval: 5,
64
+ s3_bucket_prefix: "AccessLogPrefix",
65
+ },
66
+ connection_draining: {
67
+ enabled: true,
68
+ timeout: 1,
69
+ },
70
+ connection_settings: {
71
+ idle_timeout: 1,
72
+ },
73
+ # Don't know what can go here
74
+ # additional_attributes: [
75
+ # {
76
+ # key: "StringVal",
77
+ # value: "StringVal",
78
+ # },
79
+ # ]
30
80
  }
31
81
  # 'only 1 of subnets or availability_zones may be specified'
32
82
  # availability_zones: [test_public_subnet.aws_object.availability_zone_name]
33
83
  })
34
84
  end
35
85
  }.to create_an_aws_load_balancer('test-load-balancer', {
36
- listeners: [{
86
+ listeners: [
87
+ {
37
88
  :port => 80,
38
89
  :protocol => :http,
39
90
  :instance_port => 80,
40
91
  :instance_protocol => :http,
41
- }],
92
+ },
93
+ {
94
+ :port => 443,
95
+ :protocol => :https,
96
+ :instance_port => 81,
97
+ :instance_protocol => :http,
98
+ :server_certificate => {arn: load_balancer_cert.aws_object.arn}
99
+ }
100
+ ],
42
101
  subnets: [test_public_subnet.aws_object],
43
102
  security_groups: [test_security_group.aws_object],
44
103
  health_check: {
@@ -47,16 +106,252 @@ describe Chef::Resource::LoadBalancer do
47
106
  timeout: 5,
48
107
  unhealthy_threshold: 2,
49
108
  healthy_threshold: 2
109
+ },
110
+ scheme: "internal"
111
+ }).and be_idempotent
112
+ expect(
113
+ driver.elb_client.describe_load_balancer_attributes(load_balancer_name: "test-load-balancer").to_h
114
+ ).to eq(load_balancer_attributes: {
115
+ cross_zone_load_balancing: {enabled: true},
116
+ access_log: {
117
+ enabled: true,
118
+ s3_bucket_name: bucket_name,
119
+ emit_interval: 5,
120
+ s3_bucket_prefix: "AccessLogPrefix",
121
+ },
122
+ connection_draining: {
123
+ enabled: true,
124
+ timeout: 1,
125
+ },
126
+ connection_settings: {
127
+ idle_timeout: 1,
50
128
  }
51
- }
52
- ).and be_idempotent
129
+ })
130
+ end
131
+
132
+ context 'with an existing load balancer' do
133
+ aws_security_group 'test_security_group2' do
134
+ vpc 'test_vpc'
135
+ inbound_rules '0.0.0.0/0' => [ 22, 80 ]
136
+ outbound_rules [ 22, 80 ] => '0.0.0.0/0'
137
+ end
138
+
139
+ azs = driver.ec2_client.describe_availability_zones.availability_zones.map {|r| r.zone_name}
140
+ aws_subnet 'test_public_subnet2' do
141
+ vpc 'test_vpc'
142
+ map_public_ip_on_launch true
143
+ cidr_block '10.0.1.0/24'
144
+ # This subnet _must_ be in a different availability_zone than the existing one
145
+ availability_zone azs.last
146
+ end
147
+
148
+ load_balancer 'test-load-balancer' do
149
+ load_balancer_options({
150
+ listeners: [{
151
+ :port => 80,
152
+ :protocol => :http,
153
+ :instance_port => 80,
154
+ :instance_protocol => :http,
155
+ }],
156
+ subnets: ["test_public_subnet"],
157
+ security_groups: ["test_security_group"],
158
+ health_check: {
159
+ target: "HTTP:80/",
160
+ interval: 10,
161
+ timeout: 5,
162
+ unhealthy_threshold: 2,
163
+ healthy_threshold: 2
164
+ },
165
+ scheme: "internal",
166
+ attributes: {
167
+ cross_zone_load_balancing: {
168
+ enabled: true
169
+ },
170
+ access_log: {
171
+ enabled: true,
172
+ s3_bucket_name: bucket_name,
173
+ emit_interval: 5,
174
+ s3_bucket_prefix: "AccessLogPrefix",
175
+ },
176
+ connection_draining: {
177
+ enabled: true,
178
+ timeout: 1,
179
+ },
180
+ connection_settings: {
181
+ idle_timeout: 1,
182
+ }
183
+ }
184
+ })
185
+ end
186
+
187
+ it 'updates all available attributes' do
188
+ expect_recipe {
189
+ load_balancer 'test-load-balancer' do
190
+ load_balancer_options({
191
+ listeners: [{
192
+ :port => 443,
193
+ :protocol => :https,
194
+ :instance_port => 8080,
195
+ :instance_protocol => :http,
196
+ :ssl_certificate_id => load_balancer_cert.aws_object.arn
197
+ }],
198
+ subnets: ["test_public_subnet2"],
199
+ security_groups: ["test_security_group2"],
200
+ health_check: {
201
+ target: "HTTP:8080/",
202
+ interval: 15,
203
+ timeout: 4,
204
+ unhealthy_threshold: 3,
205
+ healthy_threshold: 3
206
+ },
207
+ # scheme is immutable, we cannot update it
208
+ #scheme: "internet-facing",
209
+ attributes: {
210
+ cross_zone_load_balancing: {
211
+ enabled: false
212
+ },
213
+ access_log: {
214
+ enabled: true,
215
+ s3_bucket_name: bucket_name,
216
+ emit_interval: 60,
217
+ s3_bucket_prefix: "AccessLogPrefix2",
218
+ },
219
+ connection_draining: {
220
+ enabled: true,
221
+ timeout: 10,
222
+ },
223
+ connection_settings: {
224
+ idle_timeout: 10,
225
+ }
226
+ }
227
+ })
228
+ end
229
+ }.to update_an_aws_load_balancer('test-load-balancer', {
230
+ listeners: [{
231
+ :port => 443,
232
+ :protocol => :https,
233
+ :instance_port => 8080,
234
+ :instance_protocol => :http,
235
+ :server_certificate => {arn: load_balancer_cert.aws_object.arn}
236
+ }],
237
+ subnets: [test_public_subnet2.aws_object],
238
+ security_groups: [test_security_group2.aws_object],
239
+ health_check: {
240
+ target: "HTTP:8080/",
241
+ interval: 15,
242
+ timeout: 4,
243
+ unhealthy_threshold: 3,
244
+ healthy_threshold: 3
245
+ },
246
+ scheme: "internal"
247
+ }).and be_idempotent
248
+ expect(
249
+ driver.elb_client.describe_load_balancer_attributes(load_balancer_name: "test-load-balancer").to_h
250
+ ).to eq(load_balancer_attributes: {
251
+ cross_zone_load_balancing: {
252
+ enabled: false
253
+ },
254
+ access_log: {
255
+ enabled: true,
256
+ s3_bucket_name: bucket_name,
257
+ emit_interval: 60,
258
+ s3_bucket_prefix: "AccessLogPrefix2",
259
+ },
260
+ connection_draining: {
261
+ enabled: true,
262
+ timeout: 10,
263
+ },
264
+ connection_settings: {
265
+ idle_timeout: 10,
266
+ }
267
+ })
268
+ end
269
+ end
270
+
271
+ context 'when there are machines', :super_slow do
272
+ [1, 2].each do |i|
273
+ machine "test_load_balancer_machine#{i}" do
274
+ machine_options bootstrap_options: {
275
+ subnet_id: "test_public_subnet",
276
+ security_group_ids: ["test_security_group"]
277
+ }
278
+ action :allocate
279
+ end
280
+ end
281
+
282
+ it "creates a load_balancer and assigns machine1" do
283
+ expect_recipe {
284
+ load_balancer 'test-load-balancer' do
285
+ load_balancer_options({
286
+ subnets: ["test_public_subnet"],
287
+ security_groups: ["test_security_group"]
288
+ })
289
+ machines ['test_load_balancer_machine1']
290
+ end
291
+ }.to create_an_aws_load_balancer('test-load-balancer',
292
+ :instances => [{id: test_load_balancer_machine1.aws_object.id}]
293
+ ).and be_idempotent
294
+ end
295
+
296
+ it "can reference machines by name or id" do
297
+ expect_recipe {
298
+ load_balancer 'test-load-balancer' do
299
+ load_balancer_options({
300
+ subnets: ["test_public_subnet"],
301
+ security_groups: ["test_security_group"]
302
+ })
303
+ machines ['test_load_balancer_machine1', test_load_balancer_machine2.aws_object.id]
304
+ end
305
+ }.to create_an_aws_load_balancer('test-load-balancer',
306
+ :instances => [{id: test_load_balancer_machine1.aws_object.id}, {id: test_load_balancer_machine2.aws_object.id}]
307
+ ).and be_idempotent
308
+ end
309
+
310
+ context "with an existing load_balancer with machine1 attached" do
311
+ load_balancer 'test-load-balancer' do
312
+ load_balancer_options({
313
+ subnets: ["test_public_subnet"],
314
+ security_groups: ["test_security_group"]
315
+ })
316
+ machines ['test_load_balancer_machine1']
317
+ end
318
+
319
+ it "updates the attached machine to machine2" do
320
+ expect_recipe {
321
+ load_balancer 'test-load-balancer' do
322
+ load_balancer_options({
323
+ subnets: ["test_public_subnet"],
324
+ security_groups: ["test_security_group"]
325
+ })
326
+ machines ['test_load_balancer_machine2']
327
+ end
328
+ }.to match_an_aws_load_balancer('test-load-balancer',
329
+ :instances => [{id: test_load_balancer_machine2.aws_object.id}]
330
+ ).and be_idempotent
331
+ end
332
+ end
333
+ end
334
+
335
+ context 'with an existing load_balancer' do
336
+ load_balancer 'test-load-balancer' do
337
+ load_balancer_options subnets: ["test_public_subnet"]
338
+ end
339
+
340
+ it 'successfully deletes the load_balancer with the :destroy action' do
341
+ r = recipe {
342
+ load_balancer 'test-load-balancer' do
343
+ action :destroy
344
+ end
345
+ }
346
+ expect(r).to destroy_an_aws_load_balancer('test-load-balancer').and be_idempotent
347
+ end
53
348
  end
54
349
 
55
350
  it "creates load_balancer tags" do
56
351
  expect_recipe {
57
352
  load_balancer 'test-load-balancer' do
58
353
  aws_tags key1: "value"
59
- load_balancer_options :availability_zones => ['us-east-1d']
354
+ load_balancer_options subnets: ["test_public_subnet"]
60
355
  end
61
356
  }.to create_an_aws_load_balancer('test-load-balancer')
62
357
  .and have_aws_load_balancer_tags('test-load-balancer',
@@ -69,7 +364,7 @@ describe Chef::Resource::LoadBalancer do
69
364
  context "with existing tags" do
70
365
  load_balancer 'test-load-balancer' do
71
366
  aws_tags key1: "value"
72
- load_balancer_options :availability_zones => ['us-east-1d']
367
+ load_balancer_options subnets: ["test_public_subnet"]
73
368
  end
74
369
 
75
370
  it "updates aws_load_balancer tags" do
@@ -24,6 +24,7 @@ describe Chef::Resource::MachineBatch do
24
24
  action :allocate
25
25
  end
26
26
  end
27
+ action :allocate
27
28
  end
28
29
  }.to create_an_aws_instance('test_machine1',
29
30
  source_dest_check: false