awspec 1.11.1 → 1.12.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/doc/_resource_types/ec2.md +50 -0
- data/doc/_resource_types/emr.md +21 -0
- data/doc/_resource_types/sns_topic.md +102 -0
- data/doc/contributing.md +13 -4
- data/doc/resource_types.md +146 -1
- data/lib/awspec/generator/doc/type/emr.rb +19 -0
- data/lib/awspec/generator/doc/type/sns_topic.rb +18 -0
- data/lib/awspec/generator/spec/cloudwatch_logs.rb +1 -1
- data/lib/awspec/generator/spec/ec2.rb +4 -0
- data/lib/awspec/helper/finder.rb +7 -1
- data/lib/awspec/helper/finder/cloudwatch_logs.rb +4 -0
- data/lib/awspec/helper/finder/ec2.rb +7 -0
- data/lib/awspec/helper/finder/emr.rb +9 -0
- data/lib/awspec/helper/finder/iam.rb +6 -6
- data/lib/awspec/helper/finder/lambda.rb +2 -2
- data/lib/awspec/helper/finder/sns_topic.rb +47 -0
- data/lib/awspec/helper/type.rb +2 -2
- data/lib/awspec/matcher.rb +4 -0
- data/lib/awspec/matcher/have_subscription_attributes.rb +16 -0
- data/lib/awspec/matcher/include_subscribed.rb +5 -0
- data/lib/awspec/stub/dynamodb_table.rb +2 -2
- data/lib/awspec/stub/ec2.rb +8 -0
- data/lib/awspec/stub/emr.rb +65 -0
- data/lib/awspec/stub/sns_topic.rb +29 -0
- data/lib/awspec/type/ec2.rb +5 -0
- data/lib/awspec/type/emr.rb +40 -0
- data/lib/awspec/type/sns_topic.rb +47 -0
- data/lib/awspec/version.rb +1 -1
- metadata +15 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 5be81c89f451b385efcbd7d18de2324d4484045b
|
4
|
+
data.tar.gz: 68e0de83941e97259ec93fa70d67056b4ce4474d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 73b78a236ae3f1822544afccb7a808ede0f41d4aeb245dbf55feb0c837e4aaac6e337e6eebb3325ffda5ddc2fb46bbfa0f80ce3a6bf885e1dc6ad45ce6c589ab
|
7
|
+
data.tar.gz: 101db4cfdbaba74ea7a125a5154cf231b118b81bf4875d2733359afbe777855eb32e54601e8812892a0cd3e38d11ea785181b726597fd0e10235da377fd93b63
|
data/doc/_resource_types/ec2.md
CHANGED
@@ -39,6 +39,16 @@ describe ec2('my-ec2-classic') do
|
|
39
39
|
end
|
40
40
|
```
|
41
41
|
|
42
|
+
### have_credit_specification
|
43
|
+
|
44
|
+
The credit option for CPU usage of T2 or T3 instance.
|
45
|
+
|
46
|
+
```ruby
|
47
|
+
describe ec2('my-ec2') do
|
48
|
+
it { should have_credit_specification('unlimited') }
|
49
|
+
end
|
50
|
+
```
|
51
|
+
|
42
52
|
### have_ebs
|
43
53
|
|
44
54
|
```ruby
|
@@ -151,3 +161,43 @@ describe ec2('my-ec2') do
|
|
151
161
|
its('resource.vpc.id') { should eq 'vpc-ab123cde' }
|
152
162
|
end
|
153
163
|
```
|
164
|
+
|
165
|
+
#### Awspec::DuplicatedResourceTypeError exception
|
166
|
+
|
167
|
+
EC2 resources might have the same tag value and if you try to search for a
|
168
|
+
specific instance using that tag/tag value you might found multiples results
|
169
|
+
and receive a `Awspec::DuplicatedResourceTypeError` exception as result.
|
170
|
+
|
171
|
+
To avoid such situations, you will want to use EC2 instances ID's and then use
|
172
|
+
those ID's to test whatever you need.
|
173
|
+
|
174
|
+
There are several different ways to provide such ID's, like using [Terraform output](https://www.terraform.io/docs/configuration/outputs.html) or even the
|
175
|
+
AWS SDK directly:
|
176
|
+
|
177
|
+
```ruby
|
178
|
+
require 'awspec'
|
179
|
+
require 'aws-sdk-ec2'
|
180
|
+
|
181
|
+
tag_name = 'tag:Name'
|
182
|
+
tag_value = 'foobar'
|
183
|
+
servers = {}
|
184
|
+
ec2 = Aws::EC2::Resource.new
|
185
|
+
ec2.instances({filters: [{name: "#{tag_name}",
|
186
|
+
values: ["#{tag_value}"]}]}).each do |i|
|
187
|
+
servers.store(i.id, i.subnet_id)
|
188
|
+
end
|
189
|
+
|
190
|
+
if servers.size == 0
|
191
|
+
raise "Could not find any EC2 instance with #{tag_name} = #{tag_value}!"
|
192
|
+
end
|
193
|
+
|
194
|
+
servers.each_pair do |instance_id, subnet_id|
|
195
|
+
describe ec2(instance_id) do
|
196
|
+
it { should exist }
|
197
|
+
it { should be_running }
|
198
|
+
its(:image_id) { should eq 'ami-12345foobar' }
|
199
|
+
its(:instance_type) { should eq 't2.micro' }
|
200
|
+
it { should belong_to_subnet(subnet_id) }
|
201
|
+
end
|
202
|
+
end
|
203
|
+
```
|
@@ -0,0 +1,21 @@
|
|
1
|
+
### exist
|
2
|
+
|
3
|
+
```ruby
|
4
|
+
describe emr('my-emr') do
|
5
|
+
it { should exist }
|
6
|
+
end
|
7
|
+
```
|
8
|
+
### be_healthy
|
9
|
+
|
10
|
+
```ruby
|
11
|
+
describe emr('my-emr') do
|
12
|
+
it { should be_healthy }
|
13
|
+
end
|
14
|
+
```
|
15
|
+
### be_running, be_waiting, be_starting, be_bootstrapping
|
16
|
+
|
17
|
+
```ruby
|
18
|
+
describe emr('my-emr') do
|
19
|
+
it { should be_running }
|
20
|
+
end
|
21
|
+
```
|
@@ -0,0 +1,102 @@
|
|
1
|
+
### Common arguments
|
2
|
+
|
3
|
+
`topic_arn` is a string of the ARN of the SNS Topic.
|
4
|
+
|
5
|
+
`subscribed` is a string of the SNS Topic subscription ARN.
|
6
|
+
|
7
|
+
### exist
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
describe sns_topic(topic_arn) do
|
11
|
+
it { should exist }
|
12
|
+
end
|
13
|
+
```
|
14
|
+
|
15
|
+
### name
|
16
|
+
|
17
|
+
```ruby
|
18
|
+
describe sns_topic(topic_arn) do
|
19
|
+
its(:name) { should eq 'foobar' }
|
20
|
+
end
|
21
|
+
```
|
22
|
+
|
23
|
+
### confirmed_subscriptions
|
24
|
+
|
25
|
+
```ruby
|
26
|
+
describe sns_topic(topic_arn) do
|
27
|
+
its(:confirmed_subscriptions) { should eq 1 }
|
28
|
+
end
|
29
|
+
```
|
30
|
+
|
31
|
+
### pending_subscriptions
|
32
|
+
|
33
|
+
```ruby
|
34
|
+
describe sns_topic(topic_arn) do
|
35
|
+
its(:pending_subscriptions) { should eq 0 }
|
36
|
+
end
|
37
|
+
```
|
38
|
+
|
39
|
+
### topic_arn
|
40
|
+
|
41
|
+
```ruby
|
42
|
+
describe sns_topic(topic_arn) do
|
43
|
+
its(:topic_arn) { should eq topic_arn }
|
44
|
+
end
|
45
|
+
```
|
46
|
+
|
47
|
+
### display_name
|
48
|
+
|
49
|
+
```ruby
|
50
|
+
describe sns_topic(topic_arn) do
|
51
|
+
its(:display_name) { should eq 'ShortName' }
|
52
|
+
end
|
53
|
+
```
|
54
|
+
|
55
|
+
### deleted_subscriptions
|
56
|
+
|
57
|
+
```ruby
|
58
|
+
describe sns_topic(topic_arn) do
|
59
|
+
its(:deleted_subscriptions) { should eq 0 }
|
60
|
+
end
|
61
|
+
```
|
62
|
+
|
63
|
+
### include_subscribed
|
64
|
+
|
65
|
+
```ruby
|
66
|
+
describe sns_topic(topic_arn) do
|
67
|
+
it { should include_subscribed(subscribed) }
|
68
|
+
end
|
69
|
+
```
|
70
|
+
|
71
|
+
### have_subscription_attributes
|
72
|
+
|
73
|
+
```ruby
|
74
|
+
describe sns_topic(topic_arn) do
|
75
|
+
let(:expected_attribs) do
|
76
|
+
{ protocol: 'lambda',
|
77
|
+
owner: '123456789',
|
78
|
+
subscription_arn: subscribed, # this is required
|
79
|
+
endpoint: 'arn:aws:lambda:us-east-1:123456789:function:foobar' }
|
80
|
+
end
|
81
|
+
|
82
|
+
describe '#subscribed' do
|
83
|
+
it do
|
84
|
+
should have_subscription_attributes(expected_attribs)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
```
|
89
|
+
|
90
|
+
Where `:expected_attribs` is a hash with keys as properties that are part of a SNS Topic subscription:
|
91
|
+
|
92
|
+
* subscription_arn
|
93
|
+
* owner
|
94
|
+
* protocol
|
95
|
+
* endpoint
|
96
|
+
* topic_arn
|
97
|
+
|
98
|
+
You can use any combinations of key/values that will be used by `have_subscription_attributes`, but the `subscription_arn` is required and if it is missing, an exception will be generated.
|
99
|
+
|
100
|
+
### advanced
|
101
|
+
|
102
|
+
You may want to validate the subscriptions too. For that, you probably will want to use the methods `subscriptions` (that will return a list of the subscriptions ARN as symbols) and `has_subscription?` (that expects a SNS Topic subscription as parameter and will return `true` of `false` if it exists as a subscription) of the class `Awspec::Type::SnsTopic` to build the fixture in order to use the matcher `have_subscription_attributes`.
|
data/doc/contributing.md
CHANGED
@@ -5,10 +5,19 @@
|
|
5
5
|
1. Create your feature branch (`git checkout -b add-type-redshift`)
|
6
6
|
2. Generate template files (`bundle exec bin/toolbox template redshift`)
|
7
7
|
3. Fill files with code.
|
8
|
-
4.
|
9
|
-
5.
|
10
|
-
6.
|
11
|
-
7.
|
8
|
+
4. `bundle update` to update gems.
|
9
|
+
5. Generate [doc/resource_types.md](doc/resource_types.md) (`bundle exec bin/toolbox docgen > doc/resource_types.md`)
|
10
|
+
6. Run test (`bundle exec rake spec`)
|
11
|
+
7. Push to the branch (`git push origin add-type-redshift`)
|
12
|
+
8. Create a new Pull Request
|
13
|
+
|
14
|
+
### Troubleshooting
|
15
|
+
|
16
|
+
#### CI Failed 'Awspec::Generator::Doc::Type generate_doc output should be the same as doc/resource_types.md'
|
17
|
+
|
18
|
+
Maybe, your `aws-sdk-ruby` is not latest. Please exec `bundle update` and `bundle exec bin/toolbox docgen > doc/resource_types.md`.
|
19
|
+
|
20
|
+
( `aws-sdk-ruby` is often updated. )
|
12
21
|
|
13
22
|
## Add new account attribute type (ex. CloudFormation::Client#describe_account_attributes )
|
14
23
|
|
data/doc/resource_types.md
CHANGED
@@ -35,6 +35,7 @@
|
|
35
35
|
| [elasticsearch](#elasticsearch)
|
36
36
|
| [elastictranscoder_pipeline](#elastictranscoder_pipeline)
|
37
37
|
| [elb](#elb)
|
38
|
+
| [emr](#emr)
|
38
39
|
| [firehose](#firehose)
|
39
40
|
| [iam_group](#iam_group)
|
40
41
|
| [iam_policy](#iam_policy)
|
@@ -59,6 +60,7 @@
|
|
59
60
|
| [s3_bucket](#s3_bucket)
|
60
61
|
| [security_group](#security_group)
|
61
62
|
| [ses_identity](#ses_identity)
|
63
|
+
| [sns_topic](#sns_topic)
|
62
64
|
| [sqs](#sqs)
|
63
65
|
| [ssm_parameter](#ssm_parameter)
|
64
66
|
| [subnet](#subnet)
|
@@ -884,6 +886,17 @@ end
|
|
884
886
|
```
|
885
887
|
|
886
888
|
|
889
|
+
### have_credit_specification
|
890
|
+
|
891
|
+
The credit option for CPU usage of T2 or T3 instance.
|
892
|
+
|
893
|
+
```ruby
|
894
|
+
describe ec2('my-ec2') do
|
895
|
+
it { should have_credit_specification('unlimited') }
|
896
|
+
end
|
897
|
+
```
|
898
|
+
|
899
|
+
|
887
900
|
### have_ebs
|
888
901
|
|
889
902
|
```ruby
|
@@ -1009,6 +1022,46 @@ describe ec2('my-ec2') do
|
|
1009
1022
|
end
|
1010
1023
|
```
|
1011
1024
|
|
1025
|
+
#### Awspec::DuplicatedResourceTypeError exception
|
1026
|
+
|
1027
|
+
EC2 resources might have the same tag value and if you try to search for a
|
1028
|
+
specific instance using that tag/tag value you might found multiples results
|
1029
|
+
and receive a `Awspec::DuplicatedResourceTypeError` exception as result.
|
1030
|
+
|
1031
|
+
To avoid such situations, you will want to use EC2 instances ID's and then use
|
1032
|
+
those ID's to test whatever you need.
|
1033
|
+
|
1034
|
+
There are several different ways to provide such ID's, like using [Terraform output](https://www.terraform.io/docs/configuration/outputs.html) or even the
|
1035
|
+
AWS SDK directly:
|
1036
|
+
|
1037
|
+
```ruby
|
1038
|
+
require 'awspec'
|
1039
|
+
require 'aws-sdk-ec2'
|
1040
|
+
|
1041
|
+
tag_name = 'tag:Name'
|
1042
|
+
tag_value = 'foobar'
|
1043
|
+
servers = {}
|
1044
|
+
ec2 = Aws::EC2::Resource.new
|
1045
|
+
ec2.instances({filters: [{name: "#{tag_name}",
|
1046
|
+
values: ["#{tag_value}"]}]}).each do |i|
|
1047
|
+
servers.store(i.id, i.subnet_id)
|
1048
|
+
end
|
1049
|
+
|
1050
|
+
if servers.size == 0
|
1051
|
+
raise "Could not find any EC2 instance with #{tag_name} = #{tag_value}!"
|
1052
|
+
end
|
1053
|
+
|
1054
|
+
servers.each_pair do |instance_id, subnet_id|
|
1055
|
+
describe ec2(instance_id) do
|
1056
|
+
it { should exist }
|
1057
|
+
it { should be_running }
|
1058
|
+
its(:image_id) { should eq 'ami-12345foobar' }
|
1059
|
+
its(:instance_type) { should eq 't2.micro' }
|
1060
|
+
it { should belong_to_subnet(subnet_id) }
|
1061
|
+
end
|
1062
|
+
end
|
1063
|
+
```
|
1064
|
+
|
1012
1065
|
## <a name="ecr_repository">ecr_repository</a>
|
1013
1066
|
|
1014
1067
|
EcrRepository resource type.
|
@@ -1423,6 +1476,39 @@ end
|
|
1423
1476
|
|
1424
1477
|
|
1425
1478
|
### 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(:backend_server_descriptions), its(:availability_zones), its(:subnets), its(:vpc_id), its(:security_groups), its(:created_time), its(:scheme)
|
1479
|
+
## <a name="emr">emr</a>
|
1480
|
+
|
1481
|
+
Emr resource type.
|
1482
|
+
|
1483
|
+
### exist
|
1484
|
+
|
1485
|
+
```ruby
|
1486
|
+
describe emr('my-emr') do
|
1487
|
+
it { should exist }
|
1488
|
+
end
|
1489
|
+
```
|
1490
|
+
|
1491
|
+
### be_healthy
|
1492
|
+
|
1493
|
+
```ruby
|
1494
|
+
describe emr('my-emr') do
|
1495
|
+
it { should be_healthy }
|
1496
|
+
end
|
1497
|
+
```
|
1498
|
+
|
1499
|
+
### be_ok
|
1500
|
+
|
1501
|
+
### be_ready
|
1502
|
+
|
1503
|
+
### be_running, be_waiting, be_starting, be_bootstrapping
|
1504
|
+
|
1505
|
+
```ruby
|
1506
|
+
describe emr('my-emr') do
|
1507
|
+
it { should be_running }
|
1508
|
+
end
|
1509
|
+
```
|
1510
|
+
|
1511
|
+
### its(:id), its(:name), its(:instance_collection_type), its(:log_uri), its(:requested_ami_version), its(:running_ami_version), its(:release_label), its(:auto_terminate), its(:termination_protected), its(:visible_to_all_users), its(:service_role), its(:normalized_instance_hours), its(:master_public_dns_name), its(:configurations), its(:security_configuration), its(:auto_scaling_role), its(:scale_down_behavior), its(:custom_ami_id), its(:ebs_root_volume_size), its(:repo_upgrade_on_boot)
|
1426
1512
|
## <a name="firehose">firehose</a>
|
1427
1513
|
|
1428
1514
|
Firehose resource type.
|
@@ -2337,7 +2423,7 @@ end
|
|
2337
2423
|
```
|
2338
2424
|
|
2339
2425
|
|
2340
|
-
### 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(:db_security_groups), 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(:read_replica_db_instance_identifiers), its(:read_replica_db_cluster_identifiers), its(:license_model), its(:iops), its(:character_set_name), its(:secondary_availability_zone), its(:publicly_accessible), its(:status_infos), 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(:domain_memberships), its(:copy_tags_to_snapshot), its(:monitoring_interval), its(:enhanced_monitoring_resource_arn), its(:monitoring_role_arn), its(:promotion_tier), its(:db_instance_arn), its(:timezone), its(:iam_database_authentication_enabled), its(:performance_insights_enabled), its(:performance_insights_kms_key_id), its(:performance_insights_retention_period), its(:enabled_cloudwatch_logs_exports), its(:processor_features), its(:deletion_protection)
|
2426
|
+
### 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(:db_security_groups), 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(:read_replica_db_instance_identifiers), its(:read_replica_db_cluster_identifiers), its(:license_model), its(:iops), its(:character_set_name), its(:secondary_availability_zone), its(:publicly_accessible), its(:status_infos), 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(:domain_memberships), its(:copy_tags_to_snapshot), its(:monitoring_interval), its(:enhanced_monitoring_resource_arn), its(:monitoring_role_arn), its(:promotion_tier), its(:db_instance_arn), its(:timezone), its(:iam_database_authentication_enabled), its(:performance_insights_enabled), its(:performance_insights_kms_key_id), its(:performance_insights_retention_period), its(:enabled_cloudwatch_logs_exports), its(:processor_features), its(:deletion_protection), its(:listener_endpoint)
|
2341
2427
|
### :unlock: Advanced use
|
2342
2428
|
|
2343
2429
|
`rds` can use `Aws::RDS::DBInstance` resource (see http://docs.aws.amazon.com/sdkforruby/api/Aws/RDS/DBInstance.html).
|
@@ -2741,6 +2827,65 @@ end
|
|
2741
2827
|
```
|
2742
2828
|
|
2743
2829
|
### 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)
|
2830
|
+
## <a name="sns_topic">sns_topic</a>
|
2831
|
+
|
2832
|
+
SnsTopic resource type.
|
2833
|
+
|
2834
|
+
### exist
|
2835
|
+
|
2836
|
+
```ruby
|
2837
|
+
describe sns_topic(topic_arn) do
|
2838
|
+
it { should exist }
|
2839
|
+
end
|
2840
|
+
```
|
2841
|
+
|
2842
|
+
|
2843
|
+
### have_subscription
|
2844
|
+
|
2845
|
+
### have_subscription_attributes
|
2846
|
+
|
2847
|
+
```ruby
|
2848
|
+
describe sns_topic(topic_arn) do
|
2849
|
+
let(:expected_attribs) do
|
2850
|
+
{ protocol: 'lambda',
|
2851
|
+
owner: '123456789',
|
2852
|
+
subscription_arn: subscribed, # this is required
|
2853
|
+
endpoint: 'arn:aws:lambda:us-east-1:123456789:function:foobar' }
|
2854
|
+
end
|
2855
|
+
|
2856
|
+
describe '#subscribed' do
|
2857
|
+
it do
|
2858
|
+
should have_subscription_attributes(expected_attribs)
|
2859
|
+
end
|
2860
|
+
end
|
2861
|
+
end
|
2862
|
+
```
|
2863
|
+
|
2864
|
+
Where `:expected_attribs` is a hash with keys as properties that are part of a SNS Topic subscription:
|
2865
|
+
|
2866
|
+
* subscription_arn
|
2867
|
+
* owner
|
2868
|
+
* protocol
|
2869
|
+
* endpoint
|
2870
|
+
* topic_arn
|
2871
|
+
|
2872
|
+
You can use any combinations of key/values that will be used by `have_subscription_attributes`, but the `subscription_arn` is required and if it is missing, an exception will be generated.
|
2873
|
+
|
2874
|
+
|
2875
|
+
### include_subscribed
|
2876
|
+
|
2877
|
+
```ruby
|
2878
|
+
describe sns_topic(topic_arn) do
|
2879
|
+
it { should include_subscribed(subscribed) }
|
2880
|
+
end
|
2881
|
+
```
|
2882
|
+
|
2883
|
+
|
2884
|
+
### its(:policy), its(:owner), its(:pending_subscriptions), its(:topic_arn), its(:effective_delivery_policy), its(:display_name), its(:confirmed_subscriptions), its(:deleted_subscriptions), its(:name)
|
2885
|
+
### :unlock: Advanced use
|
2886
|
+
|
2887
|
+
You may want to validate the subscriptions too. For that, you probably will want to use the methods `subscriptions` (that will return a list of the subscriptions ARN as symbols) and `has_subscription?` (that expects a SNS Topic subscription as parameter and will return `true` of `false` if it exists as a subscription) of the class `Awspec::Type::SnsTopic` to build the fixture in order to use the matcher `have_subscription_attributes`.
|
2888
|
+
|
2744
2889
|
## <a name="sqs">sqs</a>
|
2745
2890
|
|
2746
2891
|
SQS resource type.
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Awspec::Generator
|
2
|
+
module Doc
|
3
|
+
module Type
|
4
|
+
class Emr < Base
|
5
|
+
def initialize
|
6
|
+
super
|
7
|
+
@type_name = 'Emr'
|
8
|
+
@type = Awspec::Type::Emr.new('my-emr')
|
9
|
+
@ret = @type.resource_via_client
|
10
|
+
@matchers = [
|
11
|
+
Awspec::Type::Emr::STATES.map { |state| 'be_' + state.downcase }.join(', ')
|
12
|
+
]
|
13
|
+
@ignore_matchers = Awspec::Type::Emr::STATES.map { |state| 'be_' + state.downcase }
|
14
|
+
@describes = []
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Awspec::Generator
|
2
|
+
module Doc
|
3
|
+
module Type
|
4
|
+
class SnsTopic < Base
|
5
|
+
def initialize
|
6
|
+
super
|
7
|
+
@type_name = 'SnsTopic'
|
8
|
+
@type = Awspec::Type::SnsTopic.new('my-sns')
|
9
|
+
@ret = @type.resource_via_client
|
10
|
+
@matchers = %w(include_subscribed have_subscription_attributes)
|
11
|
+
@ignore_matchers = []
|
12
|
+
@describes = %w(policy owner pending_subscriptions topic_arn effective_delivery_policy display_name
|
13
|
+
confirmed_subscriptions deleted_subscriptions name)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -15,7 +15,7 @@ module Awspec::Generator
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def generate_log_stream_spec(log_group)
|
18
|
-
log_stream =
|
18
|
+
log_stream = last_cloudwatch_logs_stream_by_log_group_name(log_group)
|
19
19
|
"it { should have_log_stream('#{log_stream.log_stream_name}') }" unless log_stream.nil?
|
20
20
|
end
|
21
21
|
|
@@ -19,6 +19,7 @@ module Awspec::Generator
|
|
19
19
|
eips = select_eip_by_instance_id(instance_id)
|
20
20
|
volumes = select_ebs_by_instance_id(instance_id)
|
21
21
|
network_interfaces = select_network_interface_by_instance_id(instance_id)
|
22
|
+
credit_specification = find_ec2_credit_specifications(instance_id)
|
22
23
|
content = ERB.new(ec2_spec_template, nil, '-').result(binding).gsub(/^\n/, '')
|
23
24
|
end
|
24
25
|
specs.join("\n")
|
@@ -69,6 +70,9 @@ describe ec2('<%= instance_id %>') do
|
|
69
70
|
<% network_interfaces.each do |interface| %>
|
70
71
|
it { should have_network_interface('<%= interface.network_interface_id %>') }
|
71
72
|
<% end %>
|
73
|
+
<%- if credit_specification.cpu_credits -%>
|
74
|
+
it { should have_credit_specification('<%= credit_specification.cpu_credits %>') }
|
75
|
+
<%- end -%>
|
72
76
|
end
|
73
77
|
EOF
|
74
78
|
template
|
data/lib/awspec/helper/finder.rb
CHANGED
@@ -40,6 +40,8 @@ require 'awspec/helper/finder/apigateway'
|
|
40
40
|
require 'awspec/helper/finder/kinesis'
|
41
41
|
require 'awspec/helper/finder/batch'
|
42
42
|
require 'awspec/helper/finder/eks'
|
43
|
+
require 'awspec/helper/finder/sns_topic'
|
44
|
+
require 'awspec/helper/finder/emr'
|
43
45
|
|
44
46
|
require 'awspec/helper/finder/account_attributes'
|
45
47
|
|
@@ -89,6 +91,8 @@ module Awspec::Helper
|
|
89
91
|
include Awspec::Helper::Finder::Kinesis
|
90
92
|
include Awspec::Helper::Finder::Batch
|
91
93
|
include Awspec::Helper::Finder::Eks
|
94
|
+
include Awspec::Helper::Finder::SNSTopic
|
95
|
+
include Awspec::Helper::Finder::Emr
|
92
96
|
|
93
97
|
CLIENTS = {
|
94
98
|
ec2_client: Aws::EC2::Client,
|
@@ -126,7 +130,9 @@ module Awspec::Helper
|
|
126
130
|
apigateway_client: Aws::APIGateway::Client,
|
127
131
|
kinesis_client: Aws::Kinesis::Client,
|
128
132
|
batch_client: Aws::Batch::Client,
|
129
|
-
eks_client: Aws::EKS::Client
|
133
|
+
eks_client: Aws::EKS::Client,
|
134
|
+
sns_client: Aws::SNS::Client,
|
135
|
+
emr_client: Aws::EMR::Client
|
130
136
|
}
|
131
137
|
|
132
138
|
CLIENT_OPTIONS = {
|
@@ -9,6 +9,10 @@ module Awspec::Helper
|
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
|
+
def last_cloudwatch_logs_stream_by_log_group_name(id)
|
13
|
+
cloudwatch_logs_client.describe_log_streams({ log_group_name: id }).log_streams.last
|
14
|
+
end
|
15
|
+
|
12
16
|
def find_cloudwatch_logs_stream_by_log_group_name(id, stream_name)
|
13
17
|
req = {
|
14
18
|
log_group_name: id,
|
@@ -28,6 +28,13 @@ module Awspec::Helper
|
|
28
28
|
})
|
29
29
|
end
|
30
30
|
|
31
|
+
def find_ec2_credit_specifications(id)
|
32
|
+
res = ec2_client.describe_instance_credit_specifications({
|
33
|
+
instance_ids: [id]
|
34
|
+
})
|
35
|
+
res.instance_credit_specifications.first if res.instance_credit_specifications.count == 1
|
36
|
+
end
|
37
|
+
|
31
38
|
def find_ec2_status(id)
|
32
39
|
res = ec2_client.describe_instance_status({
|
33
40
|
instance_ids: [id]
|
@@ -89,20 +89,20 @@ module Awspec::Helper
|
|
89
89
|
end
|
90
90
|
|
91
91
|
def select_all_iam_users
|
92
|
-
iam_client.list_users.map do |
|
93
|
-
|
92
|
+
iam_client.list_users.map do |response|
|
93
|
+
response.users
|
94
94
|
end.flatten
|
95
95
|
end
|
96
96
|
|
97
97
|
def select_all_iam_groups
|
98
|
-
iam_client.list_groups.map do |
|
99
|
-
|
98
|
+
iam_client.list_groups.map do |response|
|
99
|
+
response.groups
|
100
100
|
end.flatten
|
101
101
|
end
|
102
102
|
|
103
103
|
def select_all_iam_roles
|
104
|
-
iam_client.list_roles.map do |
|
105
|
-
|
104
|
+
iam_client.list_roles.map do |response|
|
105
|
+
response.roles
|
106
106
|
end.flatten
|
107
107
|
end
|
108
108
|
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Awspec::Helper
|
2
|
+
module Finder
|
3
|
+
module SNSTopic
|
4
|
+
class SnsTopic
|
5
|
+
# to make testing results easier to the eyes instead of using Rspec
|
6
|
+
# include matcher for hashes
|
7
|
+
attr_reader :policy, :owner, :pending_subscriptions, :topic_arn, :effective_delivery_policy,
|
8
|
+
:display_name, :confirmed_subscriptions, :deleted_subscriptions, :name
|
9
|
+
|
10
|
+
def initialize(attribs)
|
11
|
+
@policy = attribs['Policy']
|
12
|
+
@owner = attribs['Owner']
|
13
|
+
@pending_subscriptions = attribs['SubscriptionsPending'].to_i
|
14
|
+
@topic_arn = attribs['TopicArn']
|
15
|
+
@effective_delivery_policy = attribs['EffectiveDeliveryPolicy']
|
16
|
+
@display_name = attribs['DisplayName']
|
17
|
+
@confirmed_subscriptions = attribs['SubscriptionsConfirmed'].to_i
|
18
|
+
@deleted_subscriptions = attribs['SubscriptionsDeleted'].to_i
|
19
|
+
@name = attribs['TopicArn'].split(':')[-1]
|
20
|
+
end
|
21
|
+
|
22
|
+
def to_s
|
23
|
+
output = ["SnsTopic: #{self.name}"]
|
24
|
+
self.instance_variables.each do |attrib|
|
25
|
+
tmp = attrib.to_s.sub('@', '')
|
26
|
+
output << " #{tmp} = #{self.send(tmp)}"
|
27
|
+
end
|
28
|
+
output.join("\n")
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def find_sns_topic(topic_arn)
|
33
|
+
response = sns_client.get_topic_attributes({ topic_arn: topic_arn })
|
34
|
+
SnsTopic.new(response.attributes)
|
35
|
+
end
|
36
|
+
|
37
|
+
def find_sns_topic_subs(topic_arn)
|
38
|
+
response = sns_client.list_subscriptions_by_topic({ topic_arn: topic_arn })
|
39
|
+
subscriptions = {}
|
40
|
+
response.subscriptions.each do |subscribed|
|
41
|
+
subscriptions[subscribed['subscription_arn'].to_sym] = subscribed
|
42
|
+
end
|
43
|
+
subscriptions
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
data/lib/awspec/helper/type.rb
CHANGED
@@ -12,13 +12,13 @@ module Awspec
|
|
12
12
|
batch_compute_environment batch_job_definition batch_job_queue cloudtrail
|
13
13
|
cloudwatch_alarm cloudwatch_event directconnect_virtual_interface
|
14
14
|
ebs ec2 ecr_repository ecs_cluster ecs_container_instance ecs_service ecs_task_definition
|
15
|
-
efs eks elasticache elasticache_cache_parameter_group elasticsearch elb firehose iam_group
|
15
|
+
efs eks elasticache elasticache_cache_parameter_group elasticsearch elb emr firehose iam_group
|
16
16
|
iam_policy iam_role iam_user kinesis kms lambda launch_configuration nat_gateway
|
17
17
|
network_acl network_interface nlb nlb_listener nlb_target_group
|
18
18
|
rds rds_db_cluster_parameter_group rds_db_parameter_group route53_hosted_zone
|
19
19
|
route_table s3_bucket security_group ses_identity subnet vpc cloudfront_distribution
|
20
20
|
elastictranscoder_pipeline waf_web_acl customer_gateway vpn_gateway vpn_connection internet_gateway acm
|
21
|
-
cloudwatch_logs dynamodb_table eip sqs ssm_parameter cloudformation_stack codebuild
|
21
|
+
cloudwatch_logs dynamodb_table eip sqs ssm_parameter cloudformation_stack codebuild sns_topic
|
22
22
|
)
|
23
23
|
|
24
24
|
ACCOUNT_ATTRIBUTES = %w(
|
data/lib/awspec/matcher.rb
CHANGED
@@ -70,3 +70,7 @@ require 'awspec/matcher/belong_to_nlb'
|
|
70
70
|
# VPC
|
71
71
|
require 'awspec/matcher/be_connected_to_vpc'
|
72
72
|
require 'awspec/matcher/have_vpc_peering_connection'
|
73
|
+
|
74
|
+
# SNSTopic
|
75
|
+
require 'awspec/matcher/include_subscribed'
|
76
|
+
require 'awspec/matcher/have_subscription_attributes'
|
@@ -0,0 +1,16 @@
|
|
1
|
+
RSpec::Matchers.define :have_subscription_attributes do |expected_attribs|
|
2
|
+
match do |sns_topic|
|
3
|
+
unless expected_attribs.key?(:subscription_arn)
|
4
|
+
raise '"subscription_arn" is the only required attribute to validate'
|
5
|
+
end
|
6
|
+
subscribed = sns_topic.subscribed(expected_attribs[:subscription_arn])
|
7
|
+
temp = subscribed.to_h
|
8
|
+
to_remove = temp.keys - expected_attribs.keys
|
9
|
+
to_remove.each { |key| temp.delete(key) }
|
10
|
+
temp == expected_attribs
|
11
|
+
end
|
12
|
+
|
13
|
+
failure_message do |sns_topic|
|
14
|
+
"expected SNS topic #{sns_topic.name} to have a subscription with the following attributes: #{expected_attribs}"
|
15
|
+
end
|
16
|
+
end
|
@@ -10,11 +10,11 @@ Aws.config[:dynamodb] = {
|
|
10
10
|
},
|
11
11
|
attribute_definitions: [
|
12
12
|
{
|
13
|
-
attribute_name: 'my-dynamodb-table-
|
13
|
+
attribute_name: 'my-dynamodb-table-attribute1',
|
14
14
|
attribute_type: 'S'
|
15
15
|
},
|
16
16
|
{
|
17
|
-
attribute_name: 'my-dynamodb-table-
|
17
|
+
attribute_name: 'my-dynamodb-table-attribute2',
|
18
18
|
attribute_type: 'N'
|
19
19
|
}
|
20
20
|
],
|
data/lib/awspec/stub/ec2.rb
CHANGED
@@ -222,6 +222,14 @@ Aws.config[:ec2] = {
|
|
222
222
|
interface_type: nil
|
223
223
|
}
|
224
224
|
]
|
225
|
+
},
|
226
|
+
describe_instance_credit_specifications: {
|
227
|
+
instance_credit_specifications: [
|
228
|
+
{
|
229
|
+
instance_id: 'i-ec12345a',
|
230
|
+
cpu_credits: 'unlimited'
|
231
|
+
}
|
232
|
+
]
|
225
233
|
}
|
226
234
|
}
|
227
235
|
}
|
@@ -0,0 +1,65 @@
|
|
1
|
+
Aws.config[:emr] = {
|
2
|
+
stub_responses: {
|
3
|
+
describe_cluster: {
|
4
|
+
cluster: {
|
5
|
+
name: 'my cluster',
|
6
|
+
log_uri: 's3n://aws-logs-232939870606-us-east-1/elasticmapreduce/',
|
7
|
+
applications: [
|
8
|
+
{
|
9
|
+
name: 'Spark',
|
10
|
+
version: '2.3.1',
|
11
|
+
args: [],
|
12
|
+
additional_info: {}
|
13
|
+
},
|
14
|
+
{
|
15
|
+
name: 'Hadoop',
|
16
|
+
version: '10.0.1',
|
17
|
+
args: [],
|
18
|
+
additional_info: {}
|
19
|
+
}
|
20
|
+
],
|
21
|
+
tags: [{ key: 'Name', value: 'My Cluster' }],
|
22
|
+
status: {
|
23
|
+
state: 'RUNNING',
|
24
|
+
state_change_reason: {
|
25
|
+
code: '',
|
26
|
+
message: ''
|
27
|
+
},
|
28
|
+
timeline: {
|
29
|
+
creation_date_time: Time.parse('2018-10-29 22:41:38 -0400'),
|
30
|
+
ready_date_time: Time.parse('2018-10-29 22:41:38 -0400'),
|
31
|
+
end_date_time: nil
|
32
|
+
}
|
33
|
+
},
|
34
|
+
auto_scaling_role: 'EMR_AutoScaling_DefaultRole',
|
35
|
+
scale_down_behavior: 'TERMINATE_AT_TASK_COMPLETION',
|
36
|
+
ebs_root_volume_size: 30,
|
37
|
+
instance_collection_type: 'INSTANCE_FLEET',
|
38
|
+
security_configuration: 'sg-1828281-madeup',
|
39
|
+
master_public_dns_name: 'ec2-54-167-31-38.compute-1.amazonaws.com',
|
40
|
+
service_role: 'EMR_EC2_DefaultRole',
|
41
|
+
visible_to_all_users: false,
|
42
|
+
kerberos_attributes: {
|
43
|
+
realm: 'EXAMPLE.COM',
|
44
|
+
kdc_admin_password: 'password',
|
45
|
+
cross_realm_trust_principal_password: 'emr-password',
|
46
|
+
ad_domain_join_user: 'johny',
|
47
|
+
ad_domain_join_password: 'begood'
|
48
|
+
},
|
49
|
+
ec2_instance_attributes: {
|
50
|
+
ec2_key_name: 'my-key',
|
51
|
+
ec2_subnet_id: 'sb-0bfc9360',
|
52
|
+
requested_ec2_subnet_ids: [],
|
53
|
+
ec2_availability_zone: 'us-east-1a',
|
54
|
+
requested_ec2_availability_zones: [],
|
55
|
+
emr_managed_master_security_group: 'sg-0bfc9360',
|
56
|
+
emr_managed_slave_security_group: 'sg-0bfc9360',
|
57
|
+
service_access_security_group: 'sg-0bfc9360',
|
58
|
+
iam_instance_profile: 'EMR_EC2_DefaultRole',
|
59
|
+
additional_master_security_groups: [],
|
60
|
+
additional_slave_security_groups: []
|
61
|
+
}
|
62
|
+
}
|
63
|
+
}
|
64
|
+
}
|
65
|
+
}
|
@@ -0,0 +1,29 @@
|
|
1
|
+
Aws.config[:sns] = {
|
2
|
+
stub_responses: {
|
3
|
+
get_topic_attributes: {
|
4
|
+
attributes: {
|
5
|
+
# rubocop:disable LineLength
|
6
|
+
'Policy' => '{\"Version\":\"2008-10-17\",\"Id\":\"__default_policy_ID\",\"Statement\":[{\"Sid\":\"__default_statement_ID\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"*\"},\"Action\":[\"SNS:GetTopicAttributes\",\"SNS:SetTopicAttributes\",\"SNS:AddPermission\",\"SNS:RemovePermission\",\"SNS:DeleteTopic\",\"SNS:Subscribe\",\"SNS:ListSubscriptionsByTopic\",\"SNS:Publish\",\"SNS:Receive\"],\"Resource\":\"arn:aws:sns:us-east-1:123456789:foobar-lambda-sample\",\"Condition\":{\"StringEquals\":{\"AWS:SourceOwner\":\"123456789\"}}}]}',
|
7
|
+
'Owner' => '123456789',
|
8
|
+
'SubscriptionsPending' => '0',
|
9
|
+
'TopicArn' => 'arn:aws:sns:us-east-1:123456789:foobar',
|
10
|
+
'EffectiveDeliveryPolicy' => '{\"http\":{\"defaultHealthyRetryPolicy\":{\"minDelayTarget\":20,\"maxDelayTarget\":20,\"numRetries\":3,\"numMaxDelayRetries\":0,\"numNoDelayRetries\":0,\"numMinDelayRetries\":0,\"backoffFunction\":\"linear\"},\"disableSubscriptionOverrides\":false}}',
|
11
|
+
'SubscriptionsConfirmed' => '1',
|
12
|
+
'DisplayName' => 'Useless',
|
13
|
+
'SubscriptionsDeleted' => '0'
|
14
|
+
}
|
15
|
+
},
|
16
|
+
list_subscriptions_by_topic: {
|
17
|
+
subscriptions: [
|
18
|
+
{
|
19
|
+
subscription_arn: 'arn:aws:sns:us-east-1:123456789:Foobar:3dbf4999-b3e2-4345-bd11-c34c9784ecca',
|
20
|
+
owner: '123456789',
|
21
|
+
protocol: 'lambda',
|
22
|
+
endpoint: 'arn:aws:lambda:us-east-1:123456789:function:foobar',
|
23
|
+
topic_arn: 'arn:aws:sns:us-east-1:123456789:foobar'
|
24
|
+
}
|
25
|
+
],
|
26
|
+
next_token: nil
|
27
|
+
}
|
28
|
+
}
|
29
|
+
}
|
data/lib/awspec/type/ec2.rb
CHANGED
@@ -0,0 +1,40 @@
|
|
1
|
+
module Awspec::Type
|
2
|
+
class Emr < ResourceBase
|
3
|
+
attr_reader :id
|
4
|
+
|
5
|
+
def initialize(id)
|
6
|
+
super
|
7
|
+
@id = id
|
8
|
+
end
|
9
|
+
|
10
|
+
def resource_via_client
|
11
|
+
@resource_via_client ||= find_emr_cluster(@id)
|
12
|
+
end
|
13
|
+
|
14
|
+
STARTING_STATES = %w(STARTING BOOTSTRAPPING)
|
15
|
+
READY_STATES = %w(RUNNING WAITING)
|
16
|
+
STATES = (READY_STATES + STARTING_STATES)
|
17
|
+
|
18
|
+
STATES.each do |state|
|
19
|
+
define_method state.downcase + '?' do
|
20
|
+
resource_via_client.status.state == state
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def applications
|
25
|
+
resource_via_client.applications.map { |a| { name: a.name, version: a.version } }
|
26
|
+
end
|
27
|
+
|
28
|
+
def tags
|
29
|
+
resource_via_client.tags.map { |t| { t.key.to_sym => t.value } }
|
30
|
+
end
|
31
|
+
|
32
|
+
def ok?
|
33
|
+
READY_STATES.include?(resource_via_client.status.state)
|
34
|
+
end
|
35
|
+
|
36
|
+
alias_method :healthy?, :ok?
|
37
|
+
alias_method :ready?, :ok?
|
38
|
+
alias_method :bootstrapping?, :starting?
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Awspec::Type
|
2
|
+
class SnsTopic < ResourceBase
|
3
|
+
def initialize(topic_arn)
|
4
|
+
super
|
5
|
+
@topic_arn = topic_arn
|
6
|
+
# lazy instantiation
|
7
|
+
@subscriptions = nil
|
8
|
+
end
|
9
|
+
|
10
|
+
def subscriptions
|
11
|
+
@subscriptions.keys
|
12
|
+
end
|
13
|
+
|
14
|
+
def resource_via_client
|
15
|
+
@resource_via_client ||= find_sns_topic(@topic_arn)
|
16
|
+
end
|
17
|
+
|
18
|
+
def id
|
19
|
+
# A SNS Topic doesn't have an ID...
|
20
|
+
@id ||= resource_via_client.topic_arn if resource_via_client
|
21
|
+
end
|
22
|
+
|
23
|
+
def has_subscription?(subscribed_arn)
|
24
|
+
fetch_subscriptions
|
25
|
+
@subscriptions.key?(subscribed_arn.to_sym)
|
26
|
+
end
|
27
|
+
|
28
|
+
def subscribed(subscribed_arn)
|
29
|
+
subs_key = subscribed_arn.to_sym
|
30
|
+
fetch_subscriptions
|
31
|
+
raise "'#{subscribed_arn}' is not a valid subscription ARN" unless @subscriptions.key?(subs_key)
|
32
|
+
@subscriptions[subs_key]
|
33
|
+
end
|
34
|
+
|
35
|
+
def method_missing(method_name)
|
36
|
+
# delegates the method invocation to Awspec::Helper::Finder::SnsTopic::SnsTopic class
|
37
|
+
@resource_via_client.send method_name
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def fetch_subscriptions
|
43
|
+
@subscriptions = find_sns_topic_subs(@topic_arn) if @subscriptions.nil?
|
44
|
+
@subscriptions
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
data/lib/awspec/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: awspec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.12.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- k1LoW
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-11-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk
|
@@ -248,6 +248,7 @@ files:
|
|
248
248
|
- doc/_resource_types/elasticsearch.md
|
249
249
|
- doc/_resource_types/elastictranscoder_pipeline.md
|
250
250
|
- doc/_resource_types/elb.md
|
251
|
+
- doc/_resource_types/emr.md
|
251
252
|
- doc/_resource_types/firehose.md
|
252
253
|
- doc/_resource_types/iam_group.md
|
253
254
|
- doc/_resource_types/iam_policy.md
|
@@ -275,6 +276,7 @@ files:
|
|
275
276
|
- doc/_resource_types/security_group.md
|
276
277
|
- doc/_resource_types/ses_identity.md
|
277
278
|
- doc/_resource_types/ses_send_quota.md
|
279
|
+
- doc/_resource_types/sns_topic.md
|
278
280
|
- doc/_resource_types/sqs.md
|
279
281
|
- doc/_resource_types/ssm_parameter.md
|
280
282
|
- doc/_resource_types/subnet.md
|
@@ -336,6 +338,7 @@ files:
|
|
336
338
|
- lib/awspec/generator/doc/type/elasticsearch.rb
|
337
339
|
- lib/awspec/generator/doc/type/elastictranscoder_pipeline.rb
|
338
340
|
- lib/awspec/generator/doc/type/elb.rb
|
341
|
+
- lib/awspec/generator/doc/type/emr.rb
|
339
342
|
- lib/awspec/generator/doc/type/firehose.rb
|
340
343
|
- lib/awspec/generator/doc/type/iam_group.rb
|
341
344
|
- lib/awspec/generator/doc/type/iam_policy.rb
|
@@ -363,6 +366,7 @@ files:
|
|
363
366
|
- lib/awspec/generator/doc/type/security_group.rb
|
364
367
|
- lib/awspec/generator/doc/type/ses_identity.rb
|
365
368
|
- lib/awspec/generator/doc/type/ses_send_quota.rb
|
369
|
+
- lib/awspec/generator/doc/type/sns_topic.rb
|
366
370
|
- lib/awspec/generator/doc/type/sqs.rb
|
367
371
|
- lib/awspec/generator/doc/type/ssm_parameter.rb
|
368
372
|
- lib/awspec/generator/doc/type/subnet.rb
|
@@ -434,6 +438,7 @@ files:
|
|
434
438
|
- lib/awspec/helper/finder/elasticsearch.rb
|
435
439
|
- lib/awspec/helper/finder/elastictranscoder.rb
|
436
440
|
- lib/awspec/helper/finder/elb.rb
|
441
|
+
- lib/awspec/helper/finder/emr.rb
|
437
442
|
- lib/awspec/helper/finder/firehose.rb
|
438
443
|
- lib/awspec/helper/finder/iam.rb
|
439
444
|
- lib/awspec/helper/finder/kinesis.rb
|
@@ -445,6 +450,7 @@ files:
|
|
445
450
|
- lib/awspec/helper/finder/s3.rb
|
446
451
|
- lib/awspec/helper/finder/security_group.rb
|
447
452
|
- lib/awspec/helper/finder/ses.rb
|
453
|
+
- lib/awspec/helper/finder/sns_topic.rb
|
448
454
|
- lib/awspec/helper/finder/sqs.rb
|
449
455
|
- lib/awspec/helper/finder/ssm_parameter.rb
|
450
456
|
- lib/awspec/helper/finder/subnet.rb
|
@@ -482,9 +488,11 @@ files:
|
|
482
488
|
- lib/awspec/matcher/have_record_set.rb
|
483
489
|
- lib/awspec/matcher/have_route.rb
|
484
490
|
- lib/awspec/matcher/have_rule.rb
|
491
|
+
- lib/awspec/matcher/have_subscription_attributes.rb
|
485
492
|
- lib/awspec/matcher/have_subscription_filter.rb
|
486
493
|
- lib/awspec/matcher/have_tag.rb
|
487
494
|
- lib/awspec/matcher/have_vpc_peering_connection.rb
|
495
|
+
- lib/awspec/matcher/include_subscribed.rb
|
488
496
|
- lib/awspec/resource_reader.rb
|
489
497
|
- lib/awspec/setup.rb
|
490
498
|
- lib/awspec/shared_context.rb
|
@@ -528,6 +536,7 @@ files:
|
|
528
536
|
- lib/awspec/stub/elasticsearch.rb
|
529
537
|
- lib/awspec/stub/elastictranscoder_pipeline.rb
|
530
538
|
- lib/awspec/stub/elb.rb
|
539
|
+
- lib/awspec/stub/emr.rb
|
531
540
|
- lib/awspec/stub/firehose.rb
|
532
541
|
- lib/awspec/stub/iam_group.rb
|
533
542
|
- lib/awspec/stub/iam_policy.rb
|
@@ -552,6 +561,7 @@ files:
|
|
552
561
|
- lib/awspec/stub/s3_bucket.rb
|
553
562
|
- lib/awspec/stub/security_group.rb
|
554
563
|
- lib/awspec/stub/ses_identity.rb
|
564
|
+
- lib/awspec/stub/sns_topic.rb
|
555
565
|
- lib/awspec/stub/sqs.rb
|
556
566
|
- lib/awspec/stub/ssm_parameter.rb
|
557
567
|
- lib/awspec/stub/subnet.rb
|
@@ -600,6 +610,7 @@ files:
|
|
600
610
|
- lib/awspec/type/elasticsearch.rb
|
601
611
|
- lib/awspec/type/elastictranscoder_pipeline.rb
|
602
612
|
- lib/awspec/type/elb.rb
|
613
|
+
- lib/awspec/type/emr.rb
|
603
614
|
- lib/awspec/type/firehose.rb
|
604
615
|
- lib/awspec/type/iam_group.rb
|
605
616
|
- lib/awspec/type/iam_policy.rb
|
@@ -628,6 +639,7 @@ files:
|
|
628
639
|
- lib/awspec/type/security_group.rb
|
629
640
|
- lib/awspec/type/ses_identity.rb
|
630
641
|
- lib/awspec/type/ses_send_quota.rb
|
642
|
+
- lib/awspec/type/sns_topic.rb
|
631
643
|
- lib/awspec/type/sqs.rb
|
632
644
|
- lib/awspec/type/ssm_parameter.rb
|
633
645
|
- lib/awspec/type/subnet.rb
|
@@ -656,7 +668,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
656
668
|
version: '0'
|
657
669
|
requirements: []
|
658
670
|
rubyforge_project:
|
659
|
-
rubygems_version: 2.
|
671
|
+
rubygems_version: 2.6.14
|
660
672
|
signing_key:
|
661
673
|
specification_version: 4
|
662
674
|
summary: RSpec tests for your AWS resources.
|