awspec 0.28.0 → 0.28.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +1 -1
- data/doc/resource_types.md +504 -505
- data/lib/awspec/generator.rb +2 -3
- data/lib/awspec/helper/type.rb +7 -6
- data/lib/awspec/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 20ed13efcb8640c392acddfac6a0a5549a864327
|
4
|
+
data.tar.gz: 73089cd4e5a596637343845a2ca7b0e9c29ac278
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cf67c07ceb07b99fa0f7b084603928df154f1a10fde662db419002651b7f4ba537ee306334f6d9e288d27f8c21455a8f557979e2451b325fddd0a6d57d5f3a0e
|
7
|
+
data.tar.gz: 3fcc0f0602fa94a8e1a8765e4b5c410913af8468817a5f5b7a6b741c496502b12e506629536ebe9dd5b518e4c7d41fb10de08613e2d8c1e49351555d4beca83a
|
data/Rakefile
CHANGED
data/doc/resource_types.md
CHANGED
@@ -1,1030 +1,1067 @@
|
|
1
1
|
# Resource Types
|
2
2
|
|
3
|
-
[
|
4
|
-
| [
|
5
|
-
| [
|
6
|
-
| [security_group](#security_group)
|
7
|
-
| [vpc](#vpc)
|
8
|
-
| [s3_bucket](#s3_bucket)
|
9
|
-
| [route53_hosted_zone](#route53_hosted_zone)
|
10
|
-
| [autoscaling_group](#autoscaling_group)
|
11
|
-
| [subnet](#subnet)
|
12
|
-
| [route_table](#route_table)
|
3
|
+
[autoscaling_group](#autoscaling_group)
|
4
|
+
| [cloudwatch_alarm](#cloudwatch_alarm)
|
5
|
+
| [directconnect_virtual_interface](#directconnect_virtual_interface)
|
13
6
|
| [ebs](#ebs)
|
7
|
+
| [ec2](#ec2)
|
8
|
+
| [elasticache](#elasticache)
|
9
|
+
| [elasticache_cache_parameter_group](#elasticache_cache_parameter_group)
|
14
10
|
| [elb](#elb)
|
15
|
-
| [lambda](#lambda)
|
16
|
-
| [iam_user](#iam_user)
|
17
11
|
| [iam_group](#iam_group)
|
18
|
-
| [iam_role](#iam_role)
|
19
12
|
| [iam_policy](#iam_policy)
|
20
|
-
| [
|
21
|
-
| [
|
22
|
-
| [
|
23
|
-
| [ses_identity](#ses_identity)
|
24
|
-
| [network_acl](#network_acl)
|
25
|
-
| [directconnect_virtual_interface](#directconnect_virtual_interface)
|
13
|
+
| [iam_role](#iam_role)
|
14
|
+
| [iam_user](#iam_user)
|
15
|
+
| [lambda](#lambda)
|
26
16
|
| [nat_gateway](#nat_gateway)
|
17
|
+
| [network_acl](#network_acl)
|
18
|
+
| [rds](#rds)
|
19
|
+
| [rds_db_parameter_group](#rds_db_parameter_group)
|
20
|
+
| [route53_hosted_zone](#route53_hosted_zone)
|
21
|
+
| [route_table](#route_table)
|
22
|
+
| [s3_bucket](#s3_bucket)
|
23
|
+
| [security_group](#security_group)
|
24
|
+
| [ses_identity](#ses_identity)
|
25
|
+
| [subnet](#subnet)
|
26
|
+
| [vpc](#vpc)
|
27
27
|
|
28
|
-
## <a name="
|
28
|
+
## <a name="autoscaling_group">autoscaling_group</a>
|
29
29
|
|
30
|
-
|
30
|
+
AutoscalingGroup resource type.
|
31
31
|
|
32
32
|
### exist
|
33
33
|
|
34
34
|
```ruby
|
35
|
-
describe
|
35
|
+
describe autoscaling_group('my-auto-scaling-group') do
|
36
36
|
it { should exist }
|
37
37
|
end
|
38
38
|
```
|
39
39
|
|
40
40
|
|
41
|
-
###
|
41
|
+
### have_ec2
|
42
42
|
|
43
43
|
```ruby
|
44
|
-
describe
|
45
|
-
it { should
|
44
|
+
describe autoscaling_group('my-auto-scaling-group') do
|
45
|
+
it { should have_ec2('my-ec2') }
|
46
46
|
end
|
47
47
|
```
|
48
48
|
|
49
49
|
|
50
|
-
###
|
50
|
+
### have_elb
|
51
51
|
|
52
52
|
```ruby
|
53
|
-
describe
|
54
|
-
it { should
|
53
|
+
describe autoscaling_group('my-auto-scaling-group') do
|
54
|
+
it { should have_elb('my-elb') }
|
55
55
|
end
|
56
56
|
```
|
57
57
|
|
58
|
+
### its(:auto_scaling_group_name), its(:auto_scaling_group_arn), its(:launch_configuration_name), its(:min_size), its(:max_size), its(:desired_capacity), its(:default_cooldown), its(:health_check_type), its(:health_check_grace_period), its(:created_time), its(:placement_group), its(:vpc_zone_identifier), its(:status), its(:new_instances_protected_from_scale_in)
|
59
|
+
## <a name="cloudwatch_alarm">cloudwatch_alarm</a>
|
58
60
|
|
59
|
-
|
61
|
+
CloudwatchAlarm resource type.
|
62
|
+
|
63
|
+
### exist
|
60
64
|
|
61
65
|
```ruby
|
62
|
-
describe
|
63
|
-
it { should
|
64
|
-
it { should have_ebs('my-volume') }
|
66
|
+
describe cloudwatch_alarm('my-cloudwatch-alarm') do
|
67
|
+
it { should exist }
|
65
68
|
end
|
66
69
|
```
|
67
70
|
|
68
71
|
|
69
|
-
###
|
72
|
+
### have_alarm_action
|
70
73
|
|
71
74
|
```ruby
|
72
|
-
describe
|
73
|
-
it { should
|
75
|
+
describe cloudwatch_alarm('my-cloudwatch-alarm') do
|
76
|
+
it { should have_alarm_action('arn:aws:sns:ap-northeast-1:1234567890:sns_alert') }
|
74
77
|
end
|
75
78
|
```
|
76
79
|
|
77
80
|
|
78
|
-
###
|
81
|
+
### have_insufficient_data_action
|
79
82
|
|
80
83
|
```ruby
|
81
|
-
describe
|
82
|
-
it { should
|
83
|
-
it { should have_security_group('sg-1a2b3cd4') }
|
84
|
+
describe cloudwatch_alarm('my-cloudwatch-alarm') do
|
85
|
+
it { should have_insufficient_data_action('arn:aws:sns:ap-northeast-1:1234567890:sns_alert') }
|
84
86
|
end
|
85
87
|
```
|
86
88
|
|
87
89
|
|
88
|
-
###
|
90
|
+
### have_ok_action
|
89
91
|
|
90
92
|
```ruby
|
91
|
-
describe
|
92
|
-
it { should
|
93
|
-
it { should belong_to_subnet('my-subnet') }
|
93
|
+
describe cloudwatch_alarm('my-cloudwatch-alarm') do
|
94
|
+
it { should have_ok_action('arn:aws:sns:ap-northeast-1:1234567890:sns_alert') }
|
94
95
|
end
|
95
96
|
```
|
96
97
|
|
97
98
|
|
98
|
-
###
|
99
|
+
### belong_to_metric
|
99
100
|
|
100
101
|
```ruby
|
101
|
-
describe
|
102
|
-
it { should
|
103
|
-
it { should belong_to_vpc('my-vpc') }
|
102
|
+
describe cloudwatch_alarm('my-cloudwatch-alarm') do
|
103
|
+
it { should belong_to_metric('NumberOfProcesses').namespace('my-cloudwatch-namespace') }
|
104
104
|
end
|
105
105
|
```
|
106
106
|
|
107
|
+
### its(:alarm_name), its(:alarm_arn), its(:alarm_description), its(:alarm_configuration_updated_timestamp), its(:actions_enabled), its(:state_value), its(:state_reason), its(:state_reason_data), its(:state_updated_timestamp), its(:metric_name), its(:namespace), its(:statistic), its(:period), its(:unit), its(:evaluation_periods), its(:threshold), its(:comparison_operator)
|
108
|
+
## <a name="directconnect_virtual_interface">directconnect_virtual_interface</a>
|
107
109
|
|
108
|
-
|
109
|
-
### :unlock: Advanced use
|
110
|
-
|
111
|
-
`ec2` can use `Aws::EC2::Instance` resource (see http://docs.aws.amazon.com/sdkforruby/api/Aws/EC2/Instance.html).
|
110
|
+
DirectconnectVirtualInterface resource type.
|
112
111
|
|
113
112
|
```ruby
|
114
|
-
describe
|
115
|
-
|
113
|
+
describe directconnect_virtual_interface('my-directconnect-virtual-interface') do
|
114
|
+
it { should exist }
|
115
|
+
it { should be_available }
|
116
|
+
its(:connection_id) { should eq 'dxcon-abcd5fgh' }
|
117
|
+
its(:virtual_interface_id) { should eq 'dxvif-aabbccdd' }
|
118
|
+
its(:amazon_address) { should eq '170.252.252.1/30' }
|
119
|
+
its(:customer_address) { should eq '123.456.789.2/30' }
|
120
|
+
its(:virtual_gateway_id) { should eq 'vgw-d234e5f6' }
|
116
121
|
end
|
117
122
|
```
|
118
123
|
|
119
|
-
|
124
|
+
|
125
|
+
### exist
|
120
126
|
|
121
127
|
```ruby
|
122
|
-
describe
|
123
|
-
|
128
|
+
describe directconnect_virtual_interface('my-directconnect-virtual-interface') do
|
129
|
+
it { should exist }
|
124
130
|
end
|
125
131
|
```
|
126
132
|
|
127
|
-
## <a name="rds">rds</a>
|
128
|
-
|
129
|
-
RDS resource type.
|
130
133
|
|
131
|
-
###
|
134
|
+
### be_confirming, be_verifying, be_pending, be_available, be_deleting, be_deleted, be_rejected
|
132
135
|
|
133
136
|
```ruby
|
134
|
-
describe
|
137
|
+
describe directconnect_virtual_interface('my-directconnect-virtual-interface') do
|
135
138
|
it { should exist }
|
139
|
+
it { should be_available }
|
136
140
|
end
|
137
141
|
```
|
138
142
|
|
143
|
+
### its(:owner_account), its(:virtual_interface_id), its(:location), its(:connection_id), its(:virtual_interface_type), its(:virtual_interface_name), its(:vlan), its(:asn), its(:auth_key), its(:amazon_address), its(:customer_address), its(:virtual_interface_state), its(:customer_router_config), its(:virtual_gateway_id)
|
144
|
+
## <a name="ebs">ebs</a>
|
145
|
+
|
146
|
+
EBS resource type.
|
139
147
|
|
140
|
-
###
|
148
|
+
### exist
|
141
149
|
|
142
150
|
```ruby
|
143
|
-
describe
|
144
|
-
it { should
|
151
|
+
describe ebs('my-volume') do
|
152
|
+
it { should exist }
|
145
153
|
end
|
146
154
|
```
|
147
155
|
|
148
156
|
|
149
|
-
###
|
157
|
+
### be_attached_to
|
150
158
|
|
151
159
|
```ruby
|
152
|
-
describe
|
153
|
-
it { should
|
160
|
+
describe ebs('my-volume') do
|
161
|
+
it { should be_attached_to('my-ec2') }
|
154
162
|
end
|
155
163
|
```
|
156
164
|
|
157
165
|
|
158
|
-
###
|
166
|
+
### be_creating, be_available, be_in_use, be_deleting, be_deleted, be_error
|
159
167
|
|
160
168
|
```ruby
|
161
|
-
describe
|
162
|
-
it { should
|
169
|
+
describe ebs('my-volume') do
|
170
|
+
it { should be_in_use }
|
163
171
|
end
|
164
172
|
```
|
165
173
|
|
166
174
|
|
167
|
-
###
|
175
|
+
### its(:volume_id), its(:size), its(:snapshot_id), its(:availability_zone), its(:state), its(:create_time), its(:volume_type), its(:iops), its(:encrypted), its(:kms_key_id)
|
176
|
+
### :unlock: Advanced use
|
177
|
+
|
178
|
+
`ebs` can use `Aws::EC2::Volume` resource (see http://docs.aws.amazon.com/sdkforruby/api/Aws/EC2/Volume.html).
|
168
179
|
|
169
180
|
```ruby
|
170
|
-
describe
|
171
|
-
|
172
|
-
it { should have_security_group('my-db-sg') }
|
181
|
+
describe ebs('my-volume') do
|
182
|
+
its('attachments.first.instance_id') { should eq 'i-ec12345a' }
|
173
183
|
end
|
174
184
|
```
|
175
185
|
|
176
|
-
|
177
|
-
### belong_to_db_subnet_group
|
186
|
+
or
|
178
187
|
|
179
188
|
```ruby
|
180
|
-
describe
|
181
|
-
|
189
|
+
describe ebs('my-volume') do
|
190
|
+
its('resource.attachments.first.instance_id') { should eq 'i-ec12345a' }
|
182
191
|
end
|
183
192
|
```
|
184
193
|
|
194
|
+
## <a name="ec2">ec2</a>
|
185
195
|
|
186
|
-
|
196
|
+
EC2 resource type.
|
197
|
+
|
198
|
+
### exist
|
187
199
|
|
188
200
|
```ruby
|
189
|
-
describe
|
190
|
-
it { should
|
191
|
-
it { should belong_to_subnet('db-subnet-a') }
|
201
|
+
describe ec2('my-ec2') do
|
202
|
+
it { should exist }
|
192
203
|
end
|
193
204
|
```
|
194
205
|
|
195
206
|
|
196
|
-
###
|
207
|
+
### be_disabled_api_termination
|
197
208
|
|
198
209
|
```ruby
|
199
|
-
describe
|
200
|
-
it { should
|
201
|
-
it { should belong_to_vpc('my-vpc') }
|
210
|
+
describe ec2('my-ec2') do
|
211
|
+
it { should be_disabled_api_termination }
|
202
212
|
end
|
203
213
|
```
|
204
214
|
|
205
215
|
|
206
|
-
###
|
207
|
-
### :unlock: Advanced use
|
208
|
-
|
209
|
-
`rds` can use `Aws::RDS::DBInstance` resource (see http://docs.aws.amazon.com/sdkforruby/api/Aws/RDS/DBInstance.html).
|
216
|
+
### be_pending, be_running, be_shutting_down, be_terminated, be_stopping, be_stopped
|
210
217
|
|
211
218
|
```ruby
|
212
|
-
describe
|
213
|
-
|
219
|
+
describe ec2('my-ec2') do
|
220
|
+
it { should be_running }
|
214
221
|
end
|
215
222
|
```
|
216
223
|
|
217
|
-
|
224
|
+
|
225
|
+
### have_ebs
|
218
226
|
|
219
227
|
```ruby
|
220
|
-
describe
|
221
|
-
|
228
|
+
describe ec2('my-ec2') do
|
229
|
+
it { should have_ebs('vol-123a123b') }
|
230
|
+
it { should have_ebs('my-volume') }
|
222
231
|
end
|
223
232
|
```
|
224
233
|
|
225
|
-
## <a name="rds_db_parameter_group">rds_db_parameter_group</a>
|
226
234
|
|
227
|
-
|
235
|
+
### have_eip
|
228
236
|
|
229
237
|
```ruby
|
230
|
-
describe
|
231
|
-
|
232
|
-
its(:innodb_buffer_pool_size) { '{DBInstanceClassMemory*3/4}' }
|
238
|
+
describe ec2('my-ec2') do
|
239
|
+
it { should have_eip('123.0.456.789') }
|
233
240
|
end
|
234
241
|
```
|
235
242
|
|
236
|
-
|
243
|
+
|
244
|
+
### have_security_group
|
237
245
|
|
238
246
|
```ruby
|
239
|
-
describe
|
240
|
-
it { should
|
247
|
+
describe ec2('my-ec2') do
|
248
|
+
it { should have_security_group('my-security-group-name') }
|
249
|
+
it { should have_security_group('sg-1a2b3cd4') }
|
241
250
|
end
|
242
251
|
```
|
243
252
|
|
244
253
|
|
245
|
-
|
246
|
-
|
247
|
-
SecurityGroup resource type.
|
248
|
-
|
249
|
-
### exist
|
254
|
+
### belong_to_subnet
|
250
255
|
|
251
256
|
```ruby
|
252
|
-
describe
|
253
|
-
it { should
|
257
|
+
describe ec2('my-ec2') do
|
258
|
+
it { should belong_to_subnet('subnet-1234a567') }
|
259
|
+
it { should belong_to_subnet('my-subnet') }
|
254
260
|
end
|
255
261
|
```
|
256
262
|
|
257
263
|
|
258
|
-
###
|
264
|
+
### belong_to_vpc
|
259
265
|
|
260
266
|
```ruby
|
261
|
-
describe
|
262
|
-
|
263
|
-
|
264
|
-
its(:inbound) { should be_opened(80).protocol('tcp').for('203.0.113.1/32') }
|
265
|
-
its(:inbound) { should be_opened(22).protocol('tcp').for('sg-5a6b7cd8') }
|
267
|
+
describe ec2('my-ec2') do
|
268
|
+
it { should belong_to_vpc('vpc-ab123cde') }
|
269
|
+
it { should belong_to_vpc('my-vpc') }
|
266
270
|
end
|
267
271
|
```
|
268
272
|
|
269
273
|
|
270
|
-
### its(:
|
274
|
+
### its(:instance_id), its(:image_id), its(:private_dns_name), its(:public_dns_name), its(:state_transition_reason), its(:key_name), its(:ami_launch_index), its(:instance_type), its(:launch_time), its(:placement), its(:kernel_id), its(:ramdisk_id), its(:platform), its(:monitoring), its(:subnet_id), its(:vpc_id), its(:private_ip_address), its(:public_ip_address), its(:state_reason), its(:architecture), its(:root_device_type), its(:root_device_name), its(:virtualization_type), its(:instance_lifecycle), its(:spot_instance_request_id), its(:client_token), its(:source_dest_check), its(:hypervisor), its(:iam_instance_profile), its(:ebs_optimized), its(:sriov_net_support)
|
271
275
|
### :unlock: Advanced use
|
272
276
|
|
273
|
-
`
|
277
|
+
`ec2` can use `Aws::EC2::Instance` resource (see http://docs.aws.amazon.com/sdkforruby/api/Aws/EC2/Instance.html).
|
274
278
|
|
275
279
|
```ruby
|
276
|
-
describe
|
277
|
-
its('
|
280
|
+
describe ec2('my-ec2') do
|
281
|
+
its('vpc.id') { should eq 'vpc-ab123cde' }
|
278
282
|
end
|
279
283
|
```
|
280
284
|
|
281
285
|
or
|
282
286
|
|
283
287
|
```ruby
|
284
|
-
describe
|
285
|
-
its('resource.
|
288
|
+
describe ec2('my-ec2') do
|
289
|
+
its('resource.vpc.id') { should eq 'vpc-ab123cde' }
|
286
290
|
end
|
287
291
|
```
|
288
292
|
|
289
|
-
## <a name="
|
293
|
+
## <a name="elasticache">elasticache</a>
|
290
294
|
|
291
|
-
|
295
|
+
Elasticache resource type.
|
292
296
|
|
293
297
|
### exist
|
294
298
|
|
295
299
|
```ruby
|
296
|
-
describe
|
300
|
+
describe elasticache('my-rep-group-001') do
|
297
301
|
it { should exist }
|
298
302
|
end
|
299
303
|
```
|
300
304
|
|
301
305
|
|
302
|
-
### be_available,
|
306
|
+
### be_available, be_creating, be_deleted, be_deleting, be_incompatible_network, be_modifying, be_rebooting_cache_cluster_nodes, be_restore_failed, be_snapshotting
|
303
307
|
|
304
308
|
```ruby
|
305
|
-
describe
|
309
|
+
describe elasticache('my-rep-group-001') do
|
306
310
|
it { should be_available }
|
307
311
|
end
|
308
312
|
```
|
309
313
|
|
310
314
|
|
311
|
-
###
|
315
|
+
### have_cache_parameter_group
|
312
316
|
|
313
317
|
```ruby
|
314
|
-
describe
|
315
|
-
it { should
|
316
|
-
it { should have_network_acl('my-network-acl') }
|
318
|
+
describe elasticache('my-rep-group-001') do
|
319
|
+
it { should have_cache_parameter_group('my-cache-parameter-group') }
|
317
320
|
end
|
318
321
|
```
|
319
322
|
|
320
323
|
|
321
|
-
###
|
324
|
+
### belong_to_cache_subnet_group
|
322
325
|
|
323
326
|
```ruby
|
324
|
-
describe
|
325
|
-
it { should
|
326
|
-
it { should have_network_acl('my-network-acl') }
|
327
|
+
describe elasticache('my-rep-group-001') do
|
328
|
+
it { should belong_to_cache_subnet_group('my-cache-subnet-group') }
|
327
329
|
end
|
328
330
|
```
|
329
331
|
|
330
332
|
|
331
|
-
###
|
332
|
-
### :unlock: Advanced use
|
333
|
-
|
334
|
-
`vpc` can use `Aws::EC2::Vpc` resource (see http://docs.aws.amazon.com/sdkforruby/api/Aws/EC2/Vpc.html).
|
333
|
+
### belong_to_replication_group
|
335
334
|
|
336
335
|
```ruby
|
337
|
-
describe
|
338
|
-
|
336
|
+
describe elasticache('my-rep-group-001') do
|
337
|
+
it { should belong_to_replication_group('my-rep-group') }
|
339
338
|
end
|
340
339
|
```
|
341
340
|
|
342
|
-
|
341
|
+
|
342
|
+
### belong_to_vpc
|
343
343
|
|
344
344
|
```ruby
|
345
|
-
describe
|
346
|
-
|
345
|
+
describe elasticache('my-rep-group-001') do
|
346
|
+
it { should belong_to_vpc('my-vpc') }
|
347
347
|
end
|
348
348
|
```
|
349
349
|
|
350
|
-
|
350
|
+
### its(:cache_cluster_id), its(:configuration_endpoint), its(:client_download_landing_page), its(:cache_node_type), its(:engine), its(:engine_version), its(:cache_cluster_status), its(:num_cache_nodes), its(:preferred_availability_zone), its(:cache_cluster_create_time), its(:preferred_maintenance_window), its(:notification_configuration), its(:cache_subnet_group_name), its(:auto_minor_version_upgrade), its(:replication_group_id), its(:snapshot_retention_limit), its(:snapshot_window)
|
351
|
+
## <a name="elasticache_cache_parameter_group">elasticache_cache_parameter_group</a>
|
352
|
+
|
353
|
+
ElasticacheCacheParameterGroup resource type.
|
354
|
+
|
355
|
+
```ruby
|
356
|
+
describe elasticache_cache_parameter_group('my-cache-parameter-group') do
|
357
|
+
it { should exist }
|
358
|
+
its(:activerehashing) { should eq 'yes' }
|
359
|
+
its(:client_output_buffer_limit_pubsub_hard_limit) { should eq '33554432' }
|
360
|
+
end
|
361
|
+
```
|
351
362
|
|
352
|
-
S3Bucket resource type.
|
353
363
|
|
354
364
|
### exist
|
355
365
|
|
356
366
|
```ruby
|
357
|
-
describe
|
367
|
+
describe elasticache_cache_parameter_group('my-cache-parameter-group') do
|
358
368
|
it { should exist }
|
359
369
|
end
|
360
370
|
```
|
361
371
|
|
362
372
|
|
363
|
-
|
373
|
+
## <a name="elb">elb</a>
|
374
|
+
|
375
|
+
ELB resource type.
|
376
|
+
|
377
|
+
### exist
|
364
378
|
|
365
379
|
```ruby
|
366
|
-
describe
|
367
|
-
|
368
|
-
its(:acl_grants_count) { should eq 3 }
|
369
|
-
it { should have_acl_grant(grantee: 'my-bucket-owner', permission: 'FULL_CONTROL') }
|
370
|
-
it { should have_acl_grant(grantee: 'http://acs.amazonaws.com/groups/s3/LogDelivery', permission: 'WRITE') }
|
371
|
-
it { should have_acl_grant(grantee: '68f4bb06b094152df53893bfba57760e', permission: 'READ') }
|
380
|
+
describe elb('my-elb') do
|
381
|
+
it { should exist }
|
372
382
|
end
|
373
383
|
```
|
374
384
|
|
375
385
|
|
376
|
-
###
|
386
|
+
### have_ec2
|
377
387
|
|
378
388
|
```ruby
|
379
|
-
describe
|
380
|
-
it
|
381
|
-
should have_cors_rule(
|
382
|
-
allowed_methods: ['GET'],
|
383
|
-
allowed_origins: ['*']
|
384
|
-
)
|
385
|
-
end
|
386
|
-
it do
|
387
|
-
should have_cors_rule(
|
388
|
-
allowed_headers: ['*'],
|
389
|
-
allowed_methods: ['GET'],
|
390
|
-
allowed_origins: ['https://example.org', 'https://example.com'],
|
391
|
-
expose_headers: ['X-Custom-Header'],
|
392
|
-
max_age_seconds: 3600
|
393
|
-
)
|
394
|
-
end
|
389
|
+
describe elb('my-elb') do
|
390
|
+
it { should have_ec2('my-ec2') }
|
395
391
|
end
|
396
392
|
```
|
397
393
|
|
398
394
|
|
399
|
-
###
|
395
|
+
### have_listener
|
396
|
+
|
397
|
+
http://docs.aws.amazon.com/en_us/ElasticLoadBalancing/latest/DeveloperGuide/elb-listener-config.html
|
400
398
|
|
401
399
|
```ruby
|
402
|
-
describe
|
403
|
-
it { should
|
400
|
+
describe elb('my-elb') do
|
401
|
+
it { should have_listener(protocol: 'HTTPS', port: 443, instance_protocol: 'HTTP', instance_port: 80) }
|
404
402
|
end
|
405
403
|
```
|
406
404
|
|
407
405
|
|
408
|
-
###
|
406
|
+
### have_security_group
|
409
407
|
|
410
408
|
```ruby
|
411
|
-
describe
|
412
|
-
|
413
|
-
{
|
414
|
-
"Version": "2012-10-17",
|
415
|
-
"Statement": [
|
416
|
-
{
|
417
|
-
"Sid": "AllowPublicRead",
|
418
|
-
"Effect": "Allow",
|
419
|
-
"Principal": "*",
|
420
|
-
"Action": "s3:GetObject",
|
421
|
-
"Resource": "arn:aws:s3:::my-bucket/*"
|
422
|
-
}
|
423
|
-
]
|
424
|
-
}
|
425
|
-
POLICY
|
426
|
-
end
|
409
|
+
describe elb('my-elb') do
|
410
|
+
it { should have_security_group('my-lb-security-group-tag-name') }
|
427
411
|
end
|
428
412
|
```
|
429
413
|
|
430
414
|
|
431
|
-
###
|
432
|
-
### :unlock: Advanced use
|
433
|
-
|
434
|
-
`s3_bucket` can use `Aws::S3::Bucket` resource (see http://docs.aws.amazon.com/sdkforruby/api/Aws/S3/Bucket.html).
|
415
|
+
### have_subnet
|
435
416
|
|
436
417
|
```ruby
|
437
|
-
describe
|
438
|
-
|
418
|
+
describe elb('my-elb') do
|
419
|
+
it { should have_subnet('my-subnet') }
|
439
420
|
end
|
440
421
|
```
|
441
422
|
|
442
|
-
|
423
|
+
|
424
|
+
### belong_to_vpc
|
443
425
|
|
444
426
|
```ruby
|
445
|
-
describe
|
446
|
-
|
427
|
+
describe elb('my-elb') do
|
428
|
+
it { should belong_to_vpc('my-vpc') }
|
447
429
|
end
|
448
430
|
```
|
449
431
|
|
450
|
-
|
432
|
+
### its(:health_check_target), its(:health_check_interval), its(:health_check_timeout), its(:health_check_unhealthy_threshold), its(:health_check_healthy_threshold), its(:load_balancer_name), its(:dns_name), its(:canonical_hosted_zone_name), its(:canonical_hosted_zone_name_id), its(:vpc_id), its(:created_time), its(:scheme)
|
433
|
+
## <a name="iam_group">iam_group</a>
|
451
434
|
|
452
|
-
|
435
|
+
IamGroup resource type.
|
453
436
|
|
454
437
|
### exist
|
455
438
|
|
456
439
|
```ruby
|
457
|
-
describe
|
440
|
+
describe iam_group('my-iam-group') do
|
458
441
|
it { should exist }
|
459
442
|
end
|
460
443
|
```
|
461
444
|
|
462
445
|
|
463
|
-
###
|
446
|
+
### be_allowed_action
|
464
447
|
|
465
448
|
```ruby
|
466
|
-
describe
|
467
|
-
|
468
|
-
it { should
|
469
|
-
it { should have_record_set('*.example.com.').cname('example.com') }
|
470
|
-
it { should have_record_set('example.com.').mx('10 mail.example.com') }
|
471
|
-
it { should have_record_set('mail.example.com.').a('123.456.7.890').ttl(3600) }
|
472
|
-
ns = 'ns-123.awsdns-45.net.
|
473
|
-
ns-6789.awsdns-01.org.
|
474
|
-
ns-2345.awsdns-67.co.uk.
|
475
|
-
ns-890.awsdns-12.com.'
|
476
|
-
it { should have_record_set('example.com.').ns(ns) }
|
477
|
-
it { should have_record_set('s3.example.com.').alias('s3-website-us-east-1.amazonaws.com.', 'Z2ABCDEFGHIJKL') }
|
449
|
+
describe iam_group('my-iam-group') do
|
450
|
+
it { should be_allowed_action('ec2:DescribeInstances') }
|
451
|
+
it { should be_allowed_action('s3:Put*').resource_arn('arn:aws:s3:::my-bucket-name/*') }
|
478
452
|
end
|
479
453
|
```
|
480
454
|
|
481
|
-
### its(:id), its(:name), its(:caller_reference), its(:config), its(:resource_record_set_count)
|
482
|
-
## <a name="autoscaling_group">autoscaling_group</a>
|
483
455
|
|
484
|
-
|
485
|
-
|
486
|
-
### exist
|
456
|
+
### have_iam_policy
|
487
457
|
|
488
458
|
```ruby
|
489
|
-
describe
|
490
|
-
it { should
|
459
|
+
describe iam_group('my-iam-group') do
|
460
|
+
it { should have_iam_policy('ReadOnlyAccess') }
|
491
461
|
end
|
492
462
|
```
|
493
463
|
|
494
464
|
|
495
|
-
###
|
465
|
+
### have_iam_user
|
496
466
|
|
497
467
|
```ruby
|
498
|
-
describe
|
499
|
-
it { should
|
468
|
+
describe iam_group('my-iam-group') do
|
469
|
+
it { should have_iam_user('my-iam-user') }
|
500
470
|
end
|
501
471
|
```
|
502
472
|
|
473
|
+
### its(:path), its(:group_name), its(:group_id), its(:arn), its(:create_date)
|
474
|
+
## <a name="iam_policy">iam_policy</a>
|
475
|
+
|
476
|
+
IamPolicy resource type.
|
503
477
|
|
504
|
-
###
|
478
|
+
### exist
|
505
479
|
|
506
480
|
```ruby
|
507
|
-
describe
|
508
|
-
it { should
|
481
|
+
describe iam_policy('my-iam-policy') do
|
482
|
+
it { should exist }
|
509
483
|
end
|
510
484
|
```
|
511
485
|
|
512
|
-
### its(:auto_scaling_group_name), its(:auto_scaling_group_arn), its(:launch_configuration_name), its(:min_size), its(:max_size), its(:desired_capacity), its(:default_cooldown), its(:health_check_type), its(:health_check_grace_period), its(:created_time), its(:placement_group), its(:vpc_zone_identifier), its(:status), its(:new_instances_protected_from_scale_in)
|
513
|
-
## <a name="subnet">subnet</a>
|
514
|
-
|
515
|
-
Subnet resource type.
|
516
486
|
|
517
|
-
###
|
487
|
+
### be_attachable
|
518
488
|
|
519
489
|
```ruby
|
520
|
-
describe
|
521
|
-
it { should
|
490
|
+
describe iam_policy('my-iam-policy') do
|
491
|
+
it { should be_attachable }
|
522
492
|
end
|
523
493
|
```
|
524
494
|
|
525
495
|
|
526
|
-
###
|
496
|
+
### be_attached_to_group
|
527
497
|
|
528
498
|
```ruby
|
529
|
-
describe
|
530
|
-
it { should
|
499
|
+
describe iam_policy('my-iam-policy') do
|
500
|
+
it { should be_attached_to_group('my-iam-group') }
|
531
501
|
end
|
532
502
|
```
|
533
503
|
|
534
504
|
|
535
|
-
###
|
536
|
-
### :unlock: Advanced use
|
537
|
-
|
538
|
-
`subnet` can use `Aws::EC2::Subnet` resource (see http://docs.aws.amazon.com/sdkforruby/api/Aws/EC2/Subnet.html).
|
505
|
+
### be_attached_to_role
|
539
506
|
|
540
507
|
```ruby
|
541
|
-
describe
|
542
|
-
|
508
|
+
describe iam_policy('my-iam-policy') do
|
509
|
+
it { should be_attached_to_role('HelloIAmGodRole') }
|
543
510
|
end
|
544
511
|
```
|
545
512
|
|
546
|
-
|
513
|
+
|
514
|
+
### be_attached_to_user
|
547
515
|
|
548
516
|
```ruby
|
549
|
-
describe
|
550
|
-
|
517
|
+
describe iam_policy('my-iam-policy') do
|
518
|
+
it { should be_attached_to_policy('my-iam-policy') }
|
551
519
|
end
|
552
520
|
```
|
553
521
|
|
554
|
-
|
522
|
+
### its(:policy_name), its(:policy_id), its(:arn), its(:path), its(:default_version_id), its(:attachment_count), its(:is_attachable), its(:description), its(:create_date), its(:update_date)
|
523
|
+
## <a name="iam_role">iam_role</a>
|
555
524
|
|
556
|
-
|
525
|
+
IamRole resource type.
|
557
526
|
|
558
527
|
### exist
|
559
528
|
|
560
529
|
```ruby
|
561
|
-
describe
|
530
|
+
describe iam_role('my-iam-role') do
|
562
531
|
it { should exist }
|
563
532
|
end
|
564
533
|
```
|
565
534
|
|
566
535
|
|
567
|
-
###
|
536
|
+
### be_allowed_action
|
568
537
|
|
569
538
|
```ruby
|
570
|
-
describe
|
571
|
-
it { should
|
572
|
-
it { should
|
573
|
-
it { should have_route('192.168.1.0/24').target(instance: 'my-ec2') }
|
574
|
-
it { should have_route('192.168.2.0/24').target(vpc_peering_connection: 'my-pcx') }
|
575
|
-
it { should have_route('192.168.3.0/24').target(nat: 'nat-7ff7777f') }
|
539
|
+
describe iam_role('my-iam-role') do
|
540
|
+
it { should be_allowed_action('ec2:DescribeInstances') }
|
541
|
+
it { should be_allowed_action('s3:Put*').resource_arn('arn:aws:s3:::my-bucket-name/*') }
|
576
542
|
end
|
577
543
|
```
|
578
544
|
|
579
545
|
|
580
|
-
###
|
546
|
+
### have_iam_policy
|
581
547
|
|
582
548
|
```ruby
|
583
|
-
describe
|
584
|
-
it { should
|
549
|
+
describe iam_role('my-iam-role') do
|
550
|
+
it { should have_iam_policy('ReadOnlyAccess') }
|
585
551
|
end
|
586
552
|
```
|
587
553
|
|
554
|
+
### its(:path), its(:role_name), its(:role_id), its(:arn), its(:create_date), its(:assume_role_policy_document)
|
555
|
+
## <a name="iam_user">iam_user</a>
|
588
556
|
|
589
|
-
|
590
|
-
### :unlock: Advanced use
|
557
|
+
IamUser resource type.
|
591
558
|
|
592
|
-
|
559
|
+
### exist
|
593
560
|
|
594
561
|
```ruby
|
595
|
-
describe
|
596
|
-
|
562
|
+
describe iam_user('my-iam-user') do
|
563
|
+
it { should exist }
|
597
564
|
end
|
598
565
|
```
|
599
566
|
|
600
|
-
|
567
|
+
|
568
|
+
### be_allowed_action
|
601
569
|
|
602
570
|
```ruby
|
603
|
-
describe
|
604
|
-
|
571
|
+
describe iam_user('my-iam-user') do
|
572
|
+
it { should be_allowed_action('ec2:DescribeInstances') }
|
573
|
+
it { should be_allowed_action('s3:Put*').resource_arn('arn:aws:s3:::my-bucket-name/*') }
|
605
574
|
end
|
606
575
|
```
|
607
576
|
|
608
|
-
## <a name="ebs">ebs</a>
|
609
577
|
|
610
|
-
|
578
|
+
### have_iam_policy
|
579
|
+
|
580
|
+
```ruby
|
581
|
+
describe iam_user('my-iam-user') do
|
582
|
+
it { should have_iam_policy('ReadOnlyAccess') }
|
583
|
+
end
|
584
|
+
```
|
585
|
+
|
586
|
+
|
587
|
+
### belong_to_iam_group
|
588
|
+
|
589
|
+
```ruby
|
590
|
+
describe iam_user('my-iam-user') do
|
591
|
+
it { should belong_to_iam_group('my-iam-group') }
|
592
|
+
end
|
593
|
+
```
|
594
|
+
|
595
|
+
### its(:path), its(:user_name), its(:user_id), its(:arn), its(:create_date), its(:password_last_used)
|
596
|
+
## <a name="lambda">lambda</a>
|
597
|
+
|
598
|
+
Lambda resource type.
|
611
599
|
|
612
600
|
### exist
|
613
601
|
|
614
602
|
```ruby
|
615
|
-
describe
|
603
|
+
describe lambda('my-lambda-function-name') do
|
616
604
|
it { should exist }
|
617
605
|
end
|
618
606
|
```
|
619
607
|
|
620
608
|
|
621
|
-
###
|
609
|
+
### have_event_source
|
610
|
+
|
611
|
+
This matcher does not support Amazon S3 event sources. ( [See SDK doc](http://docs.aws.amazon.com/sdkforruby/api/Aws/Lambda/Client.html#list_event_source_mappings-instance_method) )
|
612
|
+
|
613
|
+
### its(:function_name), its(:function_arn), its(:runtime), its(:role), its(:handler), its(:code_size), its(:description), its(:timeout), its(:memory_size), its(:last_modified), its(:code_sha_256), its(:version)
|
614
|
+
## <a name="nat_gateway">nat_gateway</a>
|
615
|
+
|
616
|
+
NatGateway resource type.
|
617
|
+
|
618
|
+
### exist
|
622
619
|
|
623
620
|
```ruby
|
624
|
-
describe
|
625
|
-
it { should
|
621
|
+
describe nat_gateway('nat-7ff7777f') do
|
622
|
+
it { should exist }
|
626
623
|
end
|
627
624
|
```
|
628
625
|
|
629
626
|
|
630
|
-
###
|
627
|
+
### be_pending, be_failed, be_available, be_deleting, be_deleted
|
631
628
|
|
632
629
|
```ruby
|
633
|
-
describe
|
634
|
-
it { should
|
630
|
+
describe nat_gateway('nat-7ff7777f') do
|
631
|
+
it { should be_available }
|
635
632
|
end
|
636
633
|
```
|
637
634
|
|
638
635
|
|
639
|
-
###
|
640
|
-
### :unlock: Advanced use
|
641
|
-
|
642
|
-
`ebs` can use `Aws::EC2::Volume` resource (see http://docs.aws.amazon.com/sdkforruby/api/Aws/EC2/Volume.html).
|
636
|
+
### have_eip
|
643
637
|
|
644
638
|
```ruby
|
645
|
-
describe
|
646
|
-
|
639
|
+
describe nat_gateway('nat-7ff7777f') do
|
640
|
+
it { should have_eip('123.0.456.789') }
|
647
641
|
end
|
648
642
|
```
|
649
643
|
|
650
|
-
|
644
|
+
|
645
|
+
### belong_to_vpc
|
651
646
|
|
652
647
|
```ruby
|
653
|
-
describe
|
654
|
-
|
648
|
+
describe nat_gateway('nat-7ff7777f') do
|
649
|
+
it { should belong_to_vpc('my-vpc') }
|
655
650
|
end
|
656
651
|
```
|
657
652
|
|
658
|
-
|
653
|
+
### its(:vpc_id), its(:subnet_id), its(:nat_gateway_id), its(:create_time), its(:delete_time), its(:state), its(:failure_code), its(:failure_message)
|
654
|
+
## <a name="network_acl">network_acl</a>
|
659
655
|
|
660
|
-
|
656
|
+
NetworkAcl resource type.
|
661
657
|
|
662
658
|
### exist
|
663
659
|
|
664
660
|
```ruby
|
665
|
-
describe
|
661
|
+
describe network_acl('my-network-acl') do
|
666
662
|
it { should exist }
|
667
663
|
end
|
668
664
|
```
|
669
665
|
|
670
666
|
|
671
|
-
###
|
667
|
+
### have_subnet
|
672
668
|
|
673
669
|
```ruby
|
674
|
-
describe
|
675
|
-
it { should
|
670
|
+
describe network_acl('my-network-acl') do
|
671
|
+
it { should have_subnet('my-subnet') }
|
676
672
|
end
|
677
673
|
```
|
678
674
|
|
679
675
|
|
680
|
-
###
|
681
|
-
|
682
|
-
http://docs.aws.amazon.com/en_us/ElasticLoadBalancing/latest/DeveloperGuide/elb-listener-config.html
|
676
|
+
### belong_to_vpc
|
683
677
|
|
684
678
|
```ruby
|
685
|
-
describe
|
686
|
-
it { should
|
679
|
+
describe network_acl('my-network-acl') do
|
680
|
+
it { should belong_to_vpc('my-vpc') }
|
687
681
|
end
|
688
682
|
```
|
689
683
|
|
690
684
|
|
691
|
-
###
|
685
|
+
### its(:inbound), its(:outbound), its(:inbound_entries_count), its(:outbound_entries_count)
|
692
686
|
|
693
687
|
```ruby
|
694
|
-
describe
|
695
|
-
|
688
|
+
describe network_acl('my-network-acl') do
|
689
|
+
its(:inbound) { should be_allowed(80).protocol('tcp').source('123.0.456.789/32') }
|
690
|
+
its(:inbound) { should be_denied.rule_number('*').source('0.0.0.0/0') }
|
691
|
+
its(:outbound) { should be_allowed.protocol('ALL').source('0.0.0.0/0') }
|
692
|
+
its(:inbound_entries_count) { should eq 3 }
|
693
|
+
its(:outbound_entries_count) { should eq 2 }
|
696
694
|
end
|
697
695
|
```
|
698
696
|
|
699
697
|
|
700
|
-
###
|
698
|
+
### its(:inbound_entries_count), its(:outbound_entries_count), its(:network_acl_id), its(:vpc_id), its(:is_default)
|
699
|
+
### :unlock: Advanced use
|
700
|
+
|
701
|
+
`network_acl` can use `Aws::EC2::NetworkAcl` resource (see http://docs.aws.amazon.com/sdkforruby/api/Aws/EC2/NetworkAcl.html).
|
701
702
|
|
702
703
|
```ruby
|
703
|
-
describe
|
704
|
-
|
704
|
+
describe network_acl('my-network-acl') do
|
705
|
+
its('vpc.id') { should eq 'vpc-ab123cde' }
|
705
706
|
end
|
706
707
|
```
|
707
708
|
|
708
|
-
|
709
|
-
### belong_to_vpc
|
709
|
+
or
|
710
710
|
|
711
711
|
```ruby
|
712
|
-
describe
|
713
|
-
|
712
|
+
describe network_acl('my-network-acl') do
|
713
|
+
its('resource.vpc.id') { should eq 'vpc-ab123cde' }
|
714
714
|
end
|
715
715
|
```
|
716
716
|
|
717
|
-
|
718
|
-
## <a name="lambda">lambda</a>
|
717
|
+
## <a name="rds">rds</a>
|
719
718
|
|
720
|
-
|
719
|
+
RDS resource type.
|
721
720
|
|
722
721
|
### exist
|
723
722
|
|
724
723
|
```ruby
|
725
|
-
describe
|
724
|
+
describe rds('my-rds') do
|
726
725
|
it { should exist }
|
727
726
|
end
|
728
727
|
```
|
729
728
|
|
730
729
|
|
731
|
-
###
|
732
|
-
|
733
|
-
This matcher does not support Amazon S3 event sources. ( [See SDK doc](http://docs.aws.amazon.com/sdkforruby/api/Aws/Lambda/Client.html#list_event_source_mappings-instance_method) )
|
730
|
+
### be_available, be_backing_up, be_creating, be_deleting, be_failed, be_inaccessible_encryption_credentials, be_incompatible_credentials, be_incompatible_network, be_incompatible_option_group, be_incompatible_parameters, be_incompatible_restore, be_maintenance, be_modifying, be_rebooting, be_renaming, be_resetting_master_credentials, be_restore_error, be_storage_full, be_upgrading
|
734
731
|
|
735
|
-
|
736
|
-
|
732
|
+
```ruby
|
733
|
+
describe rds('my-rds') do
|
734
|
+
it { should be_available }
|
735
|
+
end
|
736
|
+
```
|
737
737
|
|
738
|
-
IamUser resource type.
|
739
738
|
|
740
|
-
###
|
739
|
+
### have_db_parameter_group
|
741
740
|
|
742
741
|
```ruby
|
743
|
-
describe
|
744
|
-
it { should
|
742
|
+
describe rds('my-rds') do
|
743
|
+
it { should belong_to_db_subnet_group('my-db-subnet-group') }
|
745
744
|
end
|
746
745
|
```
|
747
746
|
|
748
747
|
|
749
|
-
###
|
748
|
+
### have_option_group
|
750
749
|
|
751
750
|
```ruby
|
752
|
-
describe
|
753
|
-
it { should
|
754
|
-
it { should be_allowed_action('s3:Put*').resource_arn('arn:aws:s3:::my-bucket-name/*') }
|
751
|
+
describe rds('my-rds') do
|
752
|
+
it { should have_option_group('default:mysql-5-6') }
|
755
753
|
end
|
756
754
|
```
|
757
755
|
|
758
756
|
|
759
|
-
###
|
757
|
+
### have_security_group
|
760
758
|
|
761
759
|
```ruby
|
762
|
-
describe
|
763
|
-
it { should
|
760
|
+
describe rds('my-rds') do
|
761
|
+
it { should have_security_group('sg-5a6b7cd8') }
|
762
|
+
it { should have_security_group('my-db-sg') }
|
764
763
|
end
|
765
764
|
```
|
766
765
|
|
767
766
|
|
768
|
-
###
|
767
|
+
### belong_to_db_subnet_group
|
769
768
|
|
770
769
|
```ruby
|
771
|
-
describe
|
772
|
-
it { should
|
770
|
+
describe rds('my-rds') do
|
771
|
+
it { should belong_to_db_subnet_group('my-db-subnet-group') }
|
773
772
|
end
|
774
773
|
```
|
775
774
|
|
776
|
-
### its(:path), its(:user_name), its(:user_id), its(:arn), its(:create_date), its(:password_last_used)
|
777
|
-
## <a name="iam_group">iam_group</a>
|
778
|
-
|
779
|
-
IamGroup resource type.
|
780
775
|
|
781
|
-
###
|
776
|
+
### belong_to_subnet
|
782
777
|
|
783
778
|
```ruby
|
784
|
-
describe
|
785
|
-
it { should
|
779
|
+
describe rds('my-rds') do
|
780
|
+
it { should belong_to_subnet('subnet-8901b123') }
|
781
|
+
it { should belong_to_subnet('db-subnet-a') }
|
786
782
|
end
|
787
783
|
```
|
788
784
|
|
789
785
|
|
790
|
-
###
|
786
|
+
### belong_to_vpc
|
791
787
|
|
792
788
|
```ruby
|
793
|
-
describe
|
794
|
-
it { should
|
795
|
-
it { should
|
789
|
+
describe rds('my-rds') do
|
790
|
+
it { should belong_to_vpc('vpc-ab123cde') }
|
791
|
+
it { should belong_to_vpc('my-vpc') }
|
796
792
|
end
|
797
793
|
```
|
798
794
|
|
799
795
|
|
800
|
-
###
|
796
|
+
### its(:vpc_id), its(:db_instance_identifier), its(:db_instance_class), its(:engine), its(:db_instance_status), its(:master_username), its(:db_name), its(:endpoint), its(:allocated_storage), its(:instance_create_time), its(:preferred_backup_window), its(:backup_retention_period), its(:availability_zone), its(:preferred_maintenance_window), its(:pending_modified_values), its(:latest_restorable_time), its(:multi_az), its(:engine_version), its(:auto_minor_version_upgrade), its(:read_replica_source_db_instance_identifier), its(:license_model), its(:iops), its(:character_set_name), its(:secondary_availability_zone), its(:publicly_accessible), its(:storage_type), its(:tde_credential_arn), its(:db_instance_port), its(:db_cluster_identifier), its(:storage_encrypted), its(:kms_key_id), its(:dbi_resource_id), its(:ca_certificate_identifier), its(:copy_tags_to_snapshot), its(:monitoring_interval), its(:enhanced_monitoring_resource_arn), its(:monitoring_role_arn)
|
797
|
+
### :unlock: Advanced use
|
798
|
+
|
799
|
+
`rds` can use `Aws::RDS::DBInstance` resource (see http://docs.aws.amazon.com/sdkforruby/api/Aws/RDS/DBInstance.html).
|
801
800
|
|
802
801
|
```ruby
|
803
|
-
describe
|
804
|
-
|
802
|
+
describe rds('my-rds') do
|
803
|
+
its('db_subnet_group.db_subnet_group_name') { should eq 'my-db-subnet-group' }
|
805
804
|
end
|
806
805
|
```
|
807
806
|
|
808
|
-
|
809
|
-
### have_iam_user
|
807
|
+
or
|
810
808
|
|
811
809
|
```ruby
|
812
|
-
describe
|
813
|
-
|
810
|
+
describe rds('my-rds') do
|
811
|
+
its('resource.db_subnet_group.db_subnet_group_name') { should eq 'my-db-subnet-group' }
|
814
812
|
end
|
815
813
|
```
|
816
814
|
|
817
|
-
|
818
|
-
## <a name="iam_role">iam_role</a>
|
815
|
+
## <a name="rds_db_parameter_group">rds_db_parameter_group</a>
|
819
816
|
|
820
|
-
|
817
|
+
RdsDbParameterGroup resource type.
|
818
|
+
|
819
|
+
```ruby
|
820
|
+
describe rds_db_parameter_group('my-rds-db-parameter-group') do
|
821
|
+
its(:basedir) { should eq '/rdsdbbin/mysql' }
|
822
|
+
its(:innodb_buffer_pool_size) { '{DBInstanceClassMemory*3/4}' }
|
823
|
+
end
|
824
|
+
```
|
821
825
|
|
822
826
|
### exist
|
823
827
|
|
824
828
|
```ruby
|
825
|
-
describe
|
829
|
+
describe rds_db_parameter_group('my-rds-db-parameter-group') do
|
826
830
|
it { should exist }
|
827
831
|
end
|
828
832
|
```
|
829
833
|
|
830
834
|
|
831
|
-
|
835
|
+
## <a name="route53_hosted_zone">route53_hosted_zone</a>
|
836
|
+
|
837
|
+
Route53HostedZone resource type.
|
838
|
+
|
839
|
+
### exist
|
832
840
|
|
833
841
|
```ruby
|
834
|
-
describe
|
835
|
-
it { should
|
836
|
-
it { should be_allowed_action('s3:Put*').resource_arn('arn:aws:s3:::my-bucket-name/*') }
|
842
|
+
describe route53_hosted_zone('example.com.') do
|
843
|
+
it { should exist }
|
837
844
|
end
|
838
845
|
```
|
839
846
|
|
840
847
|
|
841
|
-
###
|
848
|
+
### have_record_set
|
842
849
|
|
843
850
|
```ruby
|
844
|
-
describe
|
845
|
-
|
851
|
+
describe route53_hosted_zone('example.com.') do
|
852
|
+
its(:resource_record_set_count) { should eq 6 }
|
853
|
+
it { should have_record_set('example.com.').a('123.456.7.890') }
|
854
|
+
it { should have_record_set('*.example.com.').cname('example.com') }
|
855
|
+
it { should have_record_set('example.com.').mx('10 mail.example.com') }
|
856
|
+
it { should have_record_set('mail.example.com.').a('123.456.7.890').ttl(3600) }
|
857
|
+
ns = 'ns-123.awsdns-45.net.
|
858
|
+
ns-6789.awsdns-01.org.
|
859
|
+
ns-2345.awsdns-67.co.uk.
|
860
|
+
ns-890.awsdns-12.com.'
|
861
|
+
it { should have_record_set('example.com.').ns(ns) }
|
862
|
+
it { should have_record_set('s3.example.com.').alias('s3-website-us-east-1.amazonaws.com.', 'Z2ABCDEFGHIJKL') }
|
846
863
|
end
|
847
864
|
```
|
848
865
|
|
849
|
-
### its(:
|
850
|
-
## <a name="
|
866
|
+
### its(:id), its(:name), its(:caller_reference), its(:config), its(:resource_record_set_count)
|
867
|
+
## <a name="route_table">route_table</a>
|
851
868
|
|
852
|
-
|
869
|
+
RouteTable resource type.
|
853
870
|
|
854
871
|
### exist
|
855
872
|
|
856
873
|
```ruby
|
857
|
-
describe
|
874
|
+
describe route_table('my-route-table') do
|
858
875
|
it { should exist }
|
859
876
|
end
|
860
877
|
```
|
861
878
|
|
862
879
|
|
863
|
-
###
|
880
|
+
### have_route
|
864
881
|
|
865
882
|
```ruby
|
866
|
-
describe
|
867
|
-
it { should
|
883
|
+
describe route_table('my-route-table') do
|
884
|
+
it { should have_route('10.0.0.0/16').target(gateway: 'local') }
|
885
|
+
it { should have_route('0.0.0.0/0').target(gateway: 'igw-1ab2345c') }
|
886
|
+
it { should have_route('192.168.1.0/24').target(instance: 'my-ec2') }
|
887
|
+
it { should have_route('192.168.2.0/24').target(vpc_peering_connection: 'my-pcx') }
|
888
|
+
it { should have_route('192.168.3.0/24').target(nat: 'nat-7ff7777f') }
|
868
889
|
end
|
869
890
|
```
|
870
891
|
|
871
892
|
|
872
|
-
###
|
893
|
+
### have_subnet
|
873
894
|
|
874
895
|
```ruby
|
875
|
-
describe
|
876
|
-
it { should
|
896
|
+
describe route_table('my-route-table') do
|
897
|
+
it { should have_subnet('my-subnet') }
|
877
898
|
end
|
878
899
|
```
|
879
900
|
|
880
901
|
|
881
|
-
###
|
902
|
+
### its(:route_table_id), its(:vpc_id)
|
903
|
+
### :unlock: Advanced use
|
904
|
+
|
905
|
+
`route_table` can use `Aws::EC2::RouteTable` resource (see http://docs.aws.amazon.com/sdkforruby/api/Aws/EC2/RouteTable.html).
|
882
906
|
|
883
907
|
```ruby
|
884
|
-
describe
|
885
|
-
|
908
|
+
describe route_table('my-route-table') do
|
909
|
+
its('vpc.id') { should eq 'vpc-ab123cde' }
|
886
910
|
end
|
887
911
|
```
|
888
912
|
|
889
|
-
|
890
|
-
### be_attached_to_user
|
913
|
+
or
|
891
914
|
|
892
915
|
```ruby
|
893
|
-
describe
|
894
|
-
|
916
|
+
describe s3_bucket('my-bucket') do
|
917
|
+
its('resource.vpc.id') { should eq 'vpc-ab123cde' }
|
895
918
|
end
|
896
919
|
```
|
897
920
|
|
898
|
-
|
899
|
-
## <a name="elasticache">elasticache</a>
|
921
|
+
## <a name="s3_bucket">s3_bucket</a>
|
900
922
|
|
901
|
-
|
923
|
+
S3Bucket resource type.
|
902
924
|
|
903
925
|
### exist
|
904
926
|
|
905
927
|
```ruby
|
906
|
-
describe
|
928
|
+
describe s3_bucket('my-bucket') do
|
907
929
|
it { should exist }
|
908
930
|
end
|
909
931
|
```
|
910
932
|
|
911
933
|
|
912
|
-
###
|
934
|
+
### have_acl_grant
|
913
935
|
|
914
936
|
```ruby
|
915
|
-
describe
|
916
|
-
|
937
|
+
describe s3_bucket('my-bucket') do
|
938
|
+
its(:acl_owner) { should eq 'my-bucket-owner' }
|
939
|
+
its(:acl_grants_count) { should eq 3 }
|
940
|
+
it { should have_acl_grant(grantee: 'my-bucket-owner', permission: 'FULL_CONTROL') }
|
941
|
+
it { should have_acl_grant(grantee: 'http://acs.amazonaws.com/groups/s3/LogDelivery', permission: 'WRITE') }
|
942
|
+
it { should have_acl_grant(grantee: '68f4bb06b094152df53893bfba57760e', permission: 'READ') }
|
917
943
|
end
|
918
944
|
```
|
919
945
|
|
920
946
|
|
921
|
-
###
|
947
|
+
### have_cors_rule
|
922
948
|
|
923
949
|
```ruby
|
924
|
-
describe
|
925
|
-
it
|
950
|
+
describe s3_bucket('my-bucket') do
|
951
|
+
it do
|
952
|
+
should have_cors_rule(
|
953
|
+
allowed_methods: ['GET'],
|
954
|
+
allowed_origins: ['*']
|
955
|
+
)
|
956
|
+
end
|
957
|
+
it do
|
958
|
+
should have_cors_rule(
|
959
|
+
allowed_headers: ['*'],
|
960
|
+
allowed_methods: ['GET'],
|
961
|
+
allowed_origins: ['https://example.org', 'https://example.com'],
|
962
|
+
expose_headers: ['X-Custom-Header'],
|
963
|
+
max_age_seconds: 3600
|
964
|
+
)
|
965
|
+
end
|
926
966
|
end
|
927
967
|
```
|
928
968
|
|
929
969
|
|
930
|
-
###
|
970
|
+
### have_object
|
931
971
|
|
932
972
|
```ruby
|
933
|
-
describe
|
934
|
-
it { should
|
973
|
+
describe s3_bucket('my-bucket') do
|
974
|
+
it { should have_object('path/to/object') }
|
935
975
|
end
|
936
976
|
```
|
937
977
|
|
938
978
|
|
939
|
-
###
|
979
|
+
### have_policy
|
940
980
|
|
941
981
|
```ruby
|
942
|
-
describe
|
943
|
-
|
982
|
+
describe s3_bucket('my-bucket') do
|
983
|
+
should have_policy <<-POLICY
|
984
|
+
{
|
985
|
+
"Version": "2012-10-17",
|
986
|
+
"Statement": [
|
987
|
+
{
|
988
|
+
"Sid": "AllowPublicRead",
|
989
|
+
"Effect": "Allow",
|
990
|
+
"Principal": "*",
|
991
|
+
"Action": "s3:GetObject",
|
992
|
+
"Resource": "arn:aws:s3:::my-bucket/*"
|
993
|
+
}
|
994
|
+
]
|
995
|
+
}
|
996
|
+
POLICY
|
997
|
+
end
|
944
998
|
end
|
945
999
|
```
|
946
1000
|
|
947
1001
|
|
948
|
-
###
|
949
|
-
|
950
|
-
```ruby
|
951
|
-
describe elasticache('my-rep-group-001') do
|
952
|
-
it { should belong_to_vpc('my-vpc') }
|
953
|
-
end
|
954
|
-
```
|
955
|
-
|
956
|
-
### its(:cache_cluster_id), its(:configuration_endpoint), its(:client_download_landing_page), its(:cache_node_type), its(:engine), its(:engine_version), its(:cache_cluster_status), its(:num_cache_nodes), its(:preferred_availability_zone), its(:cache_cluster_create_time), its(:preferred_maintenance_window), its(:notification_configuration), its(:cache_subnet_group_name), its(:auto_minor_version_upgrade), its(:replication_group_id), its(:snapshot_retention_limit), its(:snapshot_window)
|
957
|
-
## <a name="elasticache_cache_parameter_group">elasticache_cache_parameter_group</a>
|
1002
|
+
### its(:acl_grants_count), its(:acl_owner), its(:cors_rules_count), its(:name), its(:creation_date)
|
1003
|
+
### :unlock: Advanced use
|
958
1004
|
|
959
|
-
|
1005
|
+
`s3_bucket` can use `Aws::S3::Bucket` resource (see http://docs.aws.amazon.com/sdkforruby/api/Aws/S3/Bucket.html).
|
960
1006
|
|
961
1007
|
```ruby
|
962
|
-
describe
|
963
|
-
|
964
|
-
its(:activerehashing) { should eq 'yes' }
|
965
|
-
its(:client_output_buffer_limit_pubsub_hard_limit) { should eq '33554432' }
|
1008
|
+
describe s3_bucket('my-bucket') do
|
1009
|
+
its('acl.owner.display_name') { should eq 'my-bucket-owner' }
|
966
1010
|
end
|
967
1011
|
```
|
968
1012
|
|
969
|
-
|
970
|
-
### exist
|
1013
|
+
or
|
971
1014
|
|
972
1015
|
```ruby
|
973
|
-
describe
|
974
|
-
|
1016
|
+
describe s3_bucket('my-bucket') do
|
1017
|
+
its('resource.acl.owner.display_name') { should eq 'my-bucket-owner' }
|
975
1018
|
end
|
976
1019
|
```
|
977
1020
|
|
1021
|
+
## <a name="security_group">security_group</a>
|
978
1022
|
|
979
|
-
|
980
|
-
|
981
|
-
CloudwatchAlarm resource type.
|
1023
|
+
SecurityGroup resource type.
|
982
1024
|
|
983
1025
|
### exist
|
984
1026
|
|
985
1027
|
```ruby
|
986
|
-
describe
|
1028
|
+
describe security_group('my-security-group-name') do
|
987
1029
|
it { should exist }
|
988
1030
|
end
|
989
1031
|
```
|
990
1032
|
|
991
1033
|
|
992
|
-
###
|
1034
|
+
### its(:inbound), its(:outbound)
|
993
1035
|
|
994
1036
|
```ruby
|
995
|
-
describe
|
996
|
-
|
1037
|
+
describe security_group('my-security-group-name') do
|
1038
|
+
its(:outbound) { should be_opened }
|
1039
|
+
its(:inbound) { should be_opened(80) }
|
1040
|
+
its(:inbound) { should be_opened(80).protocol('tcp').for('203.0.113.1/32') }
|
1041
|
+
its(:inbound) { should be_opened(22).protocol('tcp').for('sg-5a6b7cd8') }
|
997
1042
|
end
|
998
1043
|
```
|
999
1044
|
|
1000
1045
|
|
1001
|
-
###
|
1002
|
-
|
1003
|
-
```ruby
|
1004
|
-
describe cloudwatch_alarm('my-cloudwatch-alarm') do
|
1005
|
-
it { should have_insufficient_data_action('arn:aws:sns:ap-northeast-1:1234567890:sns_alert') }
|
1006
|
-
end
|
1007
|
-
```
|
1008
|
-
|
1046
|
+
### its(:inbound_rule_count), its(:outbound_rule_count), its(:inbound_permissions_count), its(:outbound_permissions_count), its(:owner_id), its(:group_name), its(:group_id), its(:description), its(:vpc_id)
|
1047
|
+
### :unlock: Advanced use
|
1009
1048
|
|
1010
|
-
|
1049
|
+
`security_group` can use `Aws::EC2::SecurityGroup` resource (see http://docs.aws.amazon.com/sdkforruby/api/Aws/EC2/SecurityGroup.html).
|
1011
1050
|
|
1012
1051
|
```ruby
|
1013
|
-
describe
|
1014
|
-
|
1052
|
+
describe security_group('my-security-group-name') do
|
1053
|
+
its('group_name') { should eq 'my-security-group-name' }
|
1015
1054
|
end
|
1016
1055
|
```
|
1017
1056
|
|
1018
|
-
|
1019
|
-
### belong_to_metric
|
1057
|
+
or
|
1020
1058
|
|
1021
1059
|
```ruby
|
1022
|
-
describe
|
1023
|
-
|
1060
|
+
describe security_group('my-security-group-name') do
|
1061
|
+
its('resource.group_name') { should eq 'my-security-group-name' }
|
1024
1062
|
end
|
1025
1063
|
```
|
1026
1064
|
|
1027
|
-
### its(:alarm_name), its(:alarm_arn), its(:alarm_description), its(:alarm_configuration_updated_timestamp), its(:actions_enabled), its(:state_value), its(:state_reason), its(:state_reason_data), its(:state_updated_timestamp), its(:metric_name), its(:namespace), its(:statistic), its(:period), its(:unit), its(:evaluation_periods), its(:threshold), its(:comparison_operator)
|
1028
1065
|
## <a name="ses_identity">ses_identity</a>
|
1029
1066
|
|
1030
1067
|
SesIdentity resource type.
|
@@ -1050,57 +1087,35 @@ end
|
|
1050
1087
|
```
|
1051
1088
|
|
1052
1089
|
### its(:dkim_enabled), its(:dkim_verification_status), its(:bounce_topic), its(:complaint_topic), its(:delivery_topic), its(:forwarding_enabled), its(:verification_status), its(:verification_token)
|
1053
|
-
## <a name="
|
1090
|
+
## <a name="subnet">subnet</a>
|
1054
1091
|
|
1055
|
-
|
1092
|
+
Subnet resource type.
|
1056
1093
|
|
1057
1094
|
### exist
|
1058
1095
|
|
1059
1096
|
```ruby
|
1060
|
-
describe
|
1097
|
+
describe subnet('my-subnet') do
|
1061
1098
|
it { should exist }
|
1062
1099
|
end
|
1063
1100
|
```
|
1064
1101
|
|
1065
1102
|
|
1066
|
-
###
|
1067
|
-
|
1068
|
-
```ruby
|
1069
|
-
describe network_acl('my-network-acl') do
|
1070
|
-
it { should have_subnet('my-subnet') }
|
1071
|
-
end
|
1072
|
-
```
|
1073
|
-
|
1074
|
-
|
1075
|
-
### belong_to_vpc
|
1076
|
-
|
1077
|
-
```ruby
|
1078
|
-
describe network_acl('my-network-acl') do
|
1079
|
-
it { should belong_to_vpc('my-vpc') }
|
1080
|
-
end
|
1081
|
-
```
|
1082
|
-
|
1083
|
-
|
1084
|
-
### its(:inbound), its(:outbound), its(:inbound_entries_count), its(:outbound_entries_count)
|
1103
|
+
### be_available, be_pending
|
1085
1104
|
|
1086
1105
|
```ruby
|
1087
|
-
describe
|
1088
|
-
|
1089
|
-
its(:inbound) { should be_denied.rule_number('*').source('0.0.0.0/0') }
|
1090
|
-
its(:outbound) { should be_allowed.protocol('ALL').source('0.0.0.0/0') }
|
1091
|
-
its(:inbound_entries_count) { should eq 3 }
|
1092
|
-
its(:outbound_entries_count) { should eq 2 }
|
1106
|
+
describe subnet('my-subnet') do
|
1107
|
+
it { should be_available }
|
1093
1108
|
end
|
1094
1109
|
```
|
1095
1110
|
|
1096
1111
|
|
1097
|
-
### its(:
|
1112
|
+
### its(:subnet_id), its(:state), its(:vpc_id), its(:cidr_block), its(:available_ip_address_count), its(:availability_zone), its(:default_for_az), its(:map_public_ip_on_launch)
|
1098
1113
|
### :unlock: Advanced use
|
1099
1114
|
|
1100
|
-
`
|
1115
|
+
`subnet` can use `Aws::EC2::Subnet` resource (see http://docs.aws.amazon.com/sdkforruby/api/Aws/EC2/Subnet.html).
|
1101
1116
|
|
1102
1117
|
```ruby
|
1103
|
-
describe
|
1118
|
+
describe subnet('my-subnet') do
|
1104
1119
|
its('vpc.id') { should eq 'vpc-ab123cde' }
|
1105
1120
|
end
|
1106
1121
|
```
|
@@ -1108,84 +1123,68 @@ end
|
|
1108
1123
|
or
|
1109
1124
|
|
1110
1125
|
```ruby
|
1111
|
-
describe
|
1126
|
+
describe subnet('my-subnet') do
|
1112
1127
|
its('resource.vpc.id') { should eq 'vpc-ab123cde' }
|
1113
1128
|
end
|
1114
1129
|
```
|
1115
1130
|
|
1116
|
-
## <a name="
|
1117
|
-
|
1118
|
-
DirectconnectVirtualInterface resource type.
|
1119
|
-
|
1120
|
-
```ruby
|
1121
|
-
describe directconnect_virtual_interface('my-directconnect-virtual-interface') do
|
1122
|
-
it { should exist }
|
1123
|
-
it { should be_available }
|
1124
|
-
its(:connection_id) { should eq 'dxcon-abcd5fgh' }
|
1125
|
-
its(:virtual_interface_id) { should eq 'dxvif-aabbccdd' }
|
1126
|
-
its(:amazon_address) { should eq '170.252.252.1/30' }
|
1127
|
-
its(:customer_address) { should eq '123.456.789.2/30' }
|
1128
|
-
its(:virtual_gateway_id) { should eq 'vgw-d234e5f6' }
|
1129
|
-
end
|
1130
|
-
```
|
1131
|
+
## <a name="vpc">vpc</a>
|
1131
1132
|
|
1133
|
+
VPC resource type.
|
1132
1134
|
|
1133
1135
|
### exist
|
1134
1136
|
|
1135
1137
|
```ruby
|
1136
|
-
describe
|
1138
|
+
describe vpc('my-vpc') do
|
1137
1139
|
it { should exist }
|
1138
1140
|
end
|
1139
1141
|
```
|
1140
1142
|
|
1141
1143
|
|
1142
|
-
###
|
1144
|
+
### be_available, be_pending
|
1143
1145
|
|
1144
1146
|
```ruby
|
1145
|
-
describe
|
1146
|
-
it { should exist }
|
1147
|
+
describe vpc('vpc-ab123cde') do
|
1147
1148
|
it { should be_available }
|
1148
1149
|
end
|
1149
1150
|
```
|
1150
1151
|
|
1151
|
-
### its(:owner_account), its(:virtual_interface_id), its(:location), its(:connection_id), its(:virtual_interface_type), its(:virtual_interface_name), its(:vlan), its(:asn), its(:auth_key), its(:amazon_address), its(:customer_address), its(:virtual_interface_state), its(:customer_router_config), its(:virtual_gateway_id)
|
1152
|
-
## <a name="nat_gateway">nat_gateway</a>
|
1153
|
-
|
1154
|
-
NatGateway resource type.
|
1155
1152
|
|
1156
|
-
###
|
1153
|
+
### have_network_acl
|
1157
1154
|
|
1158
1155
|
```ruby
|
1159
|
-
describe
|
1160
|
-
it { should
|
1156
|
+
describe vpc('vpc-ab123cde') do
|
1157
|
+
it { should have_network_acl('acl-1abc2d3e') }
|
1158
|
+
it { should have_network_acl('my-network-acl') }
|
1161
1159
|
end
|
1162
1160
|
```
|
1163
1161
|
|
1164
1162
|
|
1165
|
-
###
|
1163
|
+
### have_route_table
|
1166
1164
|
|
1167
1165
|
```ruby
|
1168
|
-
describe
|
1169
|
-
it { should
|
1166
|
+
describe vpc('vpc-ab123cde') do
|
1167
|
+
it { should have_network_acl('acl-1abc2d3e') }
|
1168
|
+
it { should have_network_acl('my-network-acl') }
|
1170
1169
|
end
|
1171
1170
|
```
|
1172
1171
|
|
1173
1172
|
|
1174
|
-
###
|
1173
|
+
### its(:vpc_id), its(:state), its(:cidr_block), its(:dhcp_options_id), its(:instance_tenancy), its(:is_default)
|
1174
|
+
### :unlock: Advanced use
|
1175
|
+
|
1176
|
+
`vpc` can use `Aws::EC2::Vpc` resource (see http://docs.aws.amazon.com/sdkforruby/api/Aws/EC2/Vpc.html).
|
1175
1177
|
|
1176
1178
|
```ruby
|
1177
|
-
describe
|
1178
|
-
|
1179
|
+
describe vpc('my-vpc') do
|
1180
|
+
its('route_tables.first.route_table_id') { should eq 'rtb-a12bcd34' }
|
1179
1181
|
end
|
1180
1182
|
```
|
1181
1183
|
|
1182
|
-
|
1183
|
-
### belong_to_vpc
|
1184
|
+
or
|
1184
1185
|
|
1185
1186
|
```ruby
|
1186
|
-
describe
|
1187
|
-
|
1187
|
+
describe vpc('my-vpc') do
|
1188
|
+
its('resource.route_tables.first.route_table_id') { should eq 'rtb-a12bcd34' }
|
1188
1189
|
end
|
1189
1190
|
```
|
1190
|
-
|
1191
|
-
### its(:vpc_id), its(:subnet_id), its(:nat_gateway_id), its(:create_time), its(:delete_time), its(:state), its(:failure_code), its(:failure_message)
|