awspec 1.24.2 → 1.25.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +69 -0
- data/.github/workflows/doc.yml +29 -0
- data/.rubocop.yml +47 -2
- data/Gemfile +2 -0
- data/README.md +1 -3
- data/Rakefile +0 -1
- data/awspec.gemspec +3 -5
- data/doc/_resource_types/cloudwatch_logs.md +9 -0
- data/doc/_resource_types/eks_nodegroup.md +53 -0
- data/doc/resource_types.md +63 -10
- data/lib/awspec/command/generate.rb +1 -1
- data/lib/awspec/generator/spec/cloudwatch_logs.rb +5 -1
- data/lib/awspec/generator/spec/elasticache.rb +43 -0
- data/lib/awspec/generator.rb +1 -0
- data/lib/awspec/helper/finder/ec2.rb +41 -17
- data/lib/awspec/helper/finder/ecs.rb +1 -1
- data/lib/awspec/helper/finder/subnet.rb +123 -20
- data/lib/awspec/matcher/belong_to_subnets.rb +14 -0
- data/lib/awspec/matcher/have_metric_filter.rb +9 -0
- data/lib/awspec/matcher.rb +4 -0
- data/lib/awspec/setup.rb +1 -1
- data/lib/awspec/stub/cloudwatch_logs.rb +2 -1
- data/lib/awspec/stub/eks_nodegroup.rb +61 -1
- data/lib/awspec/stub/elasticsearch.rb +0 -1
- data/lib/awspec/stub/rds_db_parameter_group.rb +8 -0
- data/lib/awspec/stub/sns_topic.rb +15 -8
- data/lib/awspec/stub/sns_topic_error.rb +13 -0
- data/lib/awspec/type/cloudwatch_logs.rb +8 -3
- data/lib/awspec/type/eks_nodegroup.rb +105 -0
- data/lib/awspec/type/rds_db_parameter_group.rb +54 -0
- data/lib/awspec/type/s3_bucket.rb +1 -1
- data/lib/awspec/version.rb +1 -1
- metadata +24 -20
- data/.tachikoma.yml +0 -1
- data/.travis.yml +0 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 859f812366b731851141a0f2fb663d7861e537fbff4c349a2cf63468944eb142
|
4
|
+
data.tar.gz: fc866492dce252ec352f1228adb45ceb27a9538f14052c903b054669774ad609
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4c7680dfed99c2e4e85521f894a01cbc84c8fdbbbe27bb1b470b16e14e072bbe19974184c68d9c7f269178f325c8945c3f485947563d354346aad6d42b5c54c9
|
7
|
+
data.tar.gz: 6c72be4d376fac4247265ae8372f7466316f529277eeb39e3d25d30a02aaef356b1928fe492d2b1e0f7ee2866b281a1fb8ba81d640031d702fda10368b239c5f
|
@@ -0,0 +1,69 @@
|
|
1
|
+
name: CI
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [ master ]
|
6
|
+
pull_request:
|
7
|
+
|
8
|
+
jobs:
|
9
|
+
lint:
|
10
|
+
name: Lint
|
11
|
+
runs-on: ubuntu-latest
|
12
|
+
|
13
|
+
steps:
|
14
|
+
- name: Checkout
|
15
|
+
uses: actions/checkout@v2
|
16
|
+
|
17
|
+
- name: Set up Ruby
|
18
|
+
uses: ruby/setup-ruby@v1
|
19
|
+
with:
|
20
|
+
ruby-version: 2.7
|
21
|
+
bundler-cache: true
|
22
|
+
|
23
|
+
- name: Run rubocop
|
24
|
+
uses: reviewdog/action-rubocop@v1
|
25
|
+
with:
|
26
|
+
rubocop_version: 0.57.2
|
27
|
+
rubocop_extensions: rubocop:0.57.2
|
28
|
+
github_token: ${{ secrets.GITHUB_TOKEN }}
|
29
|
+
reporter: github-pr-review
|
30
|
+
fail_on_error: true
|
31
|
+
|
32
|
+
test:
|
33
|
+
name: Test
|
34
|
+
needs: [ lint ]
|
35
|
+
strategy:
|
36
|
+
fail-fast: false
|
37
|
+
matrix:
|
38
|
+
ruby-version:
|
39
|
+
- '2.1'
|
40
|
+
- '2.2'
|
41
|
+
- '2.3'
|
42
|
+
- '2.4'
|
43
|
+
- '2.5'
|
44
|
+
- '2.6'
|
45
|
+
- '2.7'
|
46
|
+
# - '3.0'
|
47
|
+
runs-on: ubuntu-latest
|
48
|
+
env:
|
49
|
+
DISABLE_AWS_CLIENT_CHECK: true
|
50
|
+
|
51
|
+
steps:
|
52
|
+
- name: Checkout
|
53
|
+
uses: actions/checkout@v2
|
54
|
+
|
55
|
+
- name: Set up Ruby
|
56
|
+
uses: ruby/setup-ruby@v1
|
57
|
+
with:
|
58
|
+
ruby-version: ${{ matrix.ruby-version }}
|
59
|
+
bundler-cache: true
|
60
|
+
|
61
|
+
- name: Install xml lib
|
62
|
+
run: gem install ox
|
63
|
+
if: matrix.ruby-version == '3.0'
|
64
|
+
|
65
|
+
- name: Generate document
|
66
|
+
run: bundle exec bin/toolbox docgen > doc/resource_types.md
|
67
|
+
|
68
|
+
- name: Run tests
|
69
|
+
run: bundle exec rake spec
|
@@ -0,0 +1,29 @@
|
|
1
|
+
name: Doc
|
2
|
+
|
3
|
+
on:
|
4
|
+
schedule:
|
5
|
+
- cron: '0 0 * * 0'
|
6
|
+
|
7
|
+
jobs:
|
8
|
+
doc:
|
9
|
+
name: Document
|
10
|
+
runs-on: ubuntu-latest
|
11
|
+
env:
|
12
|
+
DISABLE_AWS_CLIENT_CHECK: true
|
13
|
+
steps:
|
14
|
+
- name: Checkout
|
15
|
+
uses: actions/checkout@v2
|
16
|
+
|
17
|
+
- name: Set up Ruby
|
18
|
+
uses: ruby/setup-ruby@v1
|
19
|
+
with:
|
20
|
+
ruby-version: '2.7'
|
21
|
+
bundler-cache: true
|
22
|
+
|
23
|
+
- name: Generate document
|
24
|
+
run: bundle exec bin/toolbox docgen > doc/resource_types.md
|
25
|
+
|
26
|
+
- uses: EndBug/add-and-commit@v7
|
27
|
+
with:
|
28
|
+
default_author: github_actions
|
29
|
+
add: 'doc/resource_types.md'
|
data/.rubocop.yml
CHANGED
@@ -10,12 +10,24 @@ Layout/MultilineOperationIndentation:
|
|
10
10
|
Layout/MultilineMethodCallBraceLayout:
|
11
11
|
Enabled: false
|
12
12
|
|
13
|
+
Layout/ClosingHeredocIndentation:
|
14
|
+
Enabled: false
|
15
|
+
|
16
|
+
Layout/SpaceInsideArrayLiteralBrackets:
|
17
|
+
Enabled: false
|
18
|
+
|
13
19
|
Lint/HandleExceptions:
|
14
20
|
Enabled: false
|
15
21
|
|
16
22
|
Lint/UselessAssignment:
|
17
23
|
Enabled: false
|
18
24
|
|
25
|
+
Lint/DuplicateMethods:
|
26
|
+
Enabled: false
|
27
|
+
|
28
|
+
Lint/MissingCopEnableDirective:
|
29
|
+
Enabled: false
|
30
|
+
|
19
31
|
Metrics/AbcSize:
|
20
32
|
Max: 50
|
21
33
|
|
@@ -41,7 +53,13 @@ Metrics/ModuleLength:
|
|
41
53
|
Metrics/PerceivedComplexity:
|
42
54
|
Max: 15
|
43
55
|
|
44
|
-
|
56
|
+
Naming/UncommunicativeMethodParamName:
|
57
|
+
Enabled: false
|
58
|
+
|
59
|
+
Naming/PredicateName:
|
60
|
+
Enabled: false
|
61
|
+
|
62
|
+
Naming/HeredocDelimiterNaming:
|
45
63
|
Enabled: false
|
46
64
|
|
47
65
|
Performance/StringReplacement:
|
@@ -65,7 +83,10 @@ Style/ClassAndModuleChildren:
|
|
65
83
|
Style/Documentation:
|
66
84
|
Enabled: false
|
67
85
|
|
68
|
-
Style/
|
86
|
+
Style/MethodMissingSuper:
|
87
|
+
Enabled: false
|
88
|
+
|
89
|
+
Style/MissingRespondToMissing:
|
69
90
|
Enabled: false
|
70
91
|
|
71
92
|
Style/MutableConstant:
|
@@ -91,3 +112,27 @@ Style/SymbolProc:
|
|
91
112
|
|
92
113
|
Style/YodaCondition:
|
93
114
|
Enabled: false
|
115
|
+
|
116
|
+
Style/RescueStandardError:
|
117
|
+
Enabled: false
|
118
|
+
|
119
|
+
Style/RedundantReturn:
|
120
|
+
Enabled: false
|
121
|
+
|
122
|
+
Style/ConditionalAssignment:
|
123
|
+
Enabled: false
|
124
|
+
|
125
|
+
Style/EvalWithLocation:
|
126
|
+
Enabled: false
|
127
|
+
|
128
|
+
Style/MixinUsage:
|
129
|
+
Exclude:
|
130
|
+
- 'lib/awspec/helper.rb'
|
131
|
+
|
132
|
+
Style/StderrPuts:
|
133
|
+
Exclude:
|
134
|
+
- 'lib/awspec/generator/template.rb'
|
135
|
+
- 'lib/awspec/setup.rb'
|
136
|
+
|
137
|
+
Style/IfUnlessModifier:
|
138
|
+
Enabled: false
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,11 +1,9 @@
|
|
1
|
-
# awspec [](https://rubygems.org/gems/awspec) [](https://rubygems.org/gems/awspec) [](https://github.com/k1LoW/awspec/actions)
|
2
2
|
|
3
3
|

|
4
4
|
|
5
5
|
RSpec tests for your AWS resources.
|
6
6
|
|
7
|
-
[](https://gitter.im/k1LoW/awspec?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
8
|
-
|
9
7
|
[Resource Types](doc/resource_types.md) | [Contributing](doc/contributing.md)
|
10
8
|
|
11
9
|
## Installation
|
data/Rakefile
CHANGED
data/awspec.gemspec
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
lib = File.expand_path('../lib', __FILE__)
|
1
|
+
lib = File.expand_path('lib', __dir__)
|
4
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
3
|
require 'awspec/version'
|
6
4
|
|
@@ -21,6 +19,7 @@ Gem::Specification.new do |spec|
|
|
21
19
|
spec.require_paths = ['lib']
|
22
20
|
|
23
21
|
spec.required_ruby_version = '>= 2.1'
|
22
|
+
spec.add_runtime_dependency 'addressable'
|
24
23
|
spec.add_runtime_dependency 'aws-sdk', '~> 3'
|
25
24
|
spec.add_runtime_dependency 'awsecrets', '~> 1'
|
26
25
|
spec.add_runtime_dependency 'dry-inflector'
|
@@ -29,10 +28,9 @@ Gem::Specification.new do |spec|
|
|
29
28
|
spec.add_runtime_dependency 'rspec-its'
|
30
29
|
spec.add_runtime_dependency 'term-ansicolor'
|
31
30
|
spec.add_runtime_dependency 'thor'
|
32
|
-
spec.add_runtime_dependency 'addressable'
|
33
31
|
spec.add_development_dependency 'bundler', '>= 1.9', '< 3.0'
|
34
32
|
spec.add_development_dependency 'octorelease'
|
35
33
|
spec.add_development_dependency 'pry'
|
36
34
|
spec.add_development_dependency 'rake', '~> 12.0'
|
37
|
-
spec.add_development_dependency 'rubocop', '~> 0.
|
35
|
+
spec.add_development_dependency 'rubocop', '~> 0.57.0'
|
38
36
|
end
|
@@ -21,6 +21,15 @@ describe cloudwatch_logs('my-cloudwatch-logs-group') do
|
|
21
21
|
it { should have_metric_filter('my-cloudwatch-logs-metric-filter') }
|
22
22
|
end
|
23
23
|
```
|
24
|
+
or
|
25
|
+
```ruby
|
26
|
+
describe cloudwatch_logs('my-cloudwatch-logs-group') do
|
27
|
+
it do
|
28
|
+
should have_metric_filter('my-cloudwatch-logs-metric-filter')
|
29
|
+
.filter_pattern('[date, error]')
|
30
|
+
end
|
31
|
+
end
|
32
|
+
```
|
24
33
|
|
25
34
|
### have_subscription_filter
|
26
35
|
|
@@ -5,6 +5,25 @@ describe eks_nodegroup('my-eks-nodegroup'), cluster: 'my-cluster' do
|
|
5
5
|
it { should exist }
|
6
6
|
end
|
7
7
|
```
|
8
|
+
|
9
|
+
### have_security_group
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
describe eks_nodegroup('my-eks-nodegroup'), cluster: 'my-cluster' do
|
13
|
+
it { should have_security_group('sg-1a2b3cd4') }
|
14
|
+
end
|
15
|
+
```
|
16
|
+
|
17
|
+
### scaling_config
|
18
|
+
|
19
|
+
```ruby
|
20
|
+
describe eks_nodegroup('my-eks-nodegroup'), cluster: 'my-cluster' do
|
21
|
+
its('scaling_config.min_size') { should eq 1 }
|
22
|
+
its('scaling_config.desired_size') { should eq 2 }
|
23
|
+
its('scaling_config.max_size') { should eq 3 }
|
24
|
+
end
|
25
|
+
```
|
26
|
+
|
8
27
|
### be_active, be_creating
|
9
28
|
|
10
29
|
```ruby
|
@@ -12,3 +31,37 @@ describe eks('my-eks-nodegroup'), cluster: 'my-cluster' do
|
|
12
31
|
it { should be_active }
|
13
32
|
end
|
14
33
|
```
|
34
|
+
|
35
|
+
### be_ready
|
36
|
+
|
37
|
+
This matcher *might* not be exactly you are expecting: it is different from what
|
38
|
+
you can see when looking at the AWS console at the Node Groups configuration
|
39
|
+
and check if the nodes Status is "Ready".
|
40
|
+
|
41
|
+
What you seeing over there is
|
42
|
+
[actually the same thing](https://aws.amazon.com/premiumsupport/knowledge-center/eks-node-status-ready/)
|
43
|
+
you would if using `kubectl`.
|
44
|
+
|
45
|
+
This matcher cannot do the same because it would involve using the Kubernetes
|
46
|
+
API: the AWS Ruby SDK currently doesn't expose this information.
|
47
|
+
|
48
|
+
What you can get from `be_ready` matcher is asserting that you have **at least**
|
49
|
+
the number of EC2 instances (the nodes in your EKS Node Group) are actually
|
50
|
+
in running state. It doesn't mean everything is fine, the node (EC2 instance)
|
51
|
+
can be running but without communication with the cluster or any order issue
|
52
|
+
regarding the Kubernetes configuration.
|
53
|
+
|
54
|
+
Although it might look an incomplete assertion, definitely the Node Group
|
55
|
+
"Status" won't be "Active" if the EC2 instances associated with it are not
|
56
|
+
running.
|
57
|
+
|
58
|
+
So, using this assertion like the sample below:
|
59
|
+
|
60
|
+
```ruby
|
61
|
+
describe eks('my-eks-nodegroup'), cluster: 'my-cluster' do
|
62
|
+
it { should be_ready }
|
63
|
+
end
|
64
|
+
```
|
65
|
+
|
66
|
+
Will pass if at least the minimum expected (see `scaling_config`) number of EC2
|
67
|
+
instances are running.
|
data/doc/resource_types.md
CHANGED
@@ -678,6 +678,15 @@ describe cloudwatch_logs('my-cloudwatch-logs-group') do
|
|
678
678
|
it { should have_metric_filter('my-cloudwatch-logs-metric-filter') }
|
679
679
|
end
|
680
680
|
```
|
681
|
+
or
|
682
|
+
```ruby
|
683
|
+
describe cloudwatch_logs('my-cloudwatch-logs-group') do
|
684
|
+
it do
|
685
|
+
should have_metric_filter('my-cloudwatch-logs-metric-filter')
|
686
|
+
.filter_pattern('[date, error]')
|
687
|
+
end
|
688
|
+
end
|
689
|
+
```
|
681
690
|
|
682
691
|
|
683
692
|
### have_subscription_filter
|
@@ -836,7 +845,7 @@ describe directconnect_virtual_interface('my-directconnect-virtual-interface') d
|
|
836
845
|
end
|
837
846
|
```
|
838
847
|
|
839
|
-
### 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(:amazon_side_asn), its(:auth_key), its(:amazon_address), its(:customer_address), its(:address_family), its(:virtual_interface_state), its(:customer_router_config), its(:mtu), its(:jumbo_frame_capable), its(:virtual_gateway_id), its(:direct_connect_gateway_id), its(:route_filter_prefixes), its(:bgp_peers), its(:region), its(:aws_device_v2), its(:tags)
|
848
|
+
### 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(:amazon_side_asn), its(:auth_key), its(:amazon_address), its(:customer_address), its(:address_family), its(:virtual_interface_state), its(:customer_router_config), its(:mtu), its(:jumbo_frame_capable), its(:virtual_gateway_id), its(:direct_connect_gateway_id), its(:route_filter_prefixes), its(:bgp_peers), its(:region), its(:aws_device_v2), its(:aws_logical_device_id), its(:tags)
|
840
849
|
## <a name="dynamodb_table">dynamodb_table</a>
|
841
850
|
|
842
851
|
DynamodbTable resource type.
|
@@ -1118,7 +1127,7 @@ end
|
|
1118
1127
|
```
|
1119
1128
|
|
1120
1129
|
|
1121
|
-
### its(:ami_launch_index), its(:image_id), its(:instance_id), its(:instance_type), its(:kernel_id), its(:key_name), its(:launch_time), its(:monitoring), its(:placement), its(:platform), its(:private_dns_name), its(:private_ip_address), its(:product_codes), its(:public_dns_name), its(:public_ip_address), its(:ramdisk_id), its(:state_transition_reason), its(:subnet_id), its(:vpc_id), its(:architecture), its(:client_token), its(:ebs_optimized), its(:ena_support), its(:hypervisor), its(:instance_lifecycle), its(:elastic_gpu_associations), its(:elastic_inference_accelerator_associations), its(:outpost_arn), its(:root_device_name), its(:root_device_type), its(:source_dest_check), its(:spot_instance_request_id), its(:sriov_net_support), its(:state_reason), its(:virtualization_type), its(:cpu_options), its(:capacity_reservation_id), its(:capacity_reservation_specification), its(:hibernation_options), its(:licenses), its(:metadata_options), its(:enclave_options), its(:boot_mode)
|
1130
|
+
### its(:ami_launch_index), its(:image_id), its(:instance_id), its(:instance_type), its(:kernel_id), its(:key_name), its(:launch_time), its(:monitoring), its(:placement), its(:platform), its(:private_dns_name), its(:private_ip_address), its(:product_codes), its(:public_dns_name), its(:public_ip_address), its(:ramdisk_id), its(:state_transition_reason), its(:subnet_id), its(:vpc_id), its(:architecture), its(:client_token), its(:ebs_optimized), its(:ena_support), its(:hypervisor), its(:instance_lifecycle), its(:elastic_gpu_associations), its(:elastic_inference_accelerator_associations), its(:outpost_arn), its(:root_device_name), its(:root_device_type), its(:source_dest_check), its(:spot_instance_request_id), its(:sriov_net_support), its(:state_reason), its(:virtualization_type), its(:cpu_options), its(:capacity_reservation_id), its(:capacity_reservation_specification), its(:hibernation_options), its(:licenses), its(:metadata_options), its(:enclave_options), its(:boot_mode), its(:platform_details), its(:usage_operation), its(:usage_operation_update_time)
|
1122
1131
|
### :unlock: Advanced use
|
1123
1132
|
|
1124
1133
|
`ec2` can use `Aws::EC2::Instance` resource (see http://docs.aws.amazon.com/sdkforruby/api/Aws/EC2/Instance.html).
|
@@ -1357,7 +1366,7 @@ describe eks('my-eks') do
|
|
1357
1366
|
end
|
1358
1367
|
```
|
1359
1368
|
|
1360
|
-
### its(:name), its(:arn), its(:created_at), its(:version), its(:endpoint), its(:role_arn), its(:kubernetes_network_config), its(:logging), its(:identity), its(:status), its(:client_request_token), its(:platform_version), its(:tags), its(:encryption_config)
|
1369
|
+
### its(:name), its(:arn), its(:created_at), its(:version), its(:endpoint), its(:role_arn), its(:kubernetes_network_config), its(:logging), its(:identity), its(:status), its(:client_request_token), its(:platform_version), its(:tags), its(:encryption_config), its(:connector_config)
|
1361
1370
|
## <a name="eks_nodegroup">eks_nodegroup</a>
|
1362
1371
|
|
1363
1372
|
EksNodegroup resource type.
|
@@ -1370,9 +1379,53 @@ describe eks_nodegroup('my-eks-nodegroup'), cluster: 'my-cluster' do
|
|
1370
1379
|
end
|
1371
1380
|
```
|
1372
1381
|
|
1382
|
+
|
1373
1383
|
### be_active, be_inactive
|
1374
1384
|
|
1375
|
-
###
|
1385
|
+
### be_ready
|
1386
|
+
|
1387
|
+
This matcher *might* not be exactly you are expecting: it is different from what
|
1388
|
+
you can see when looking at the AWS console at the Node Groups configuration
|
1389
|
+
and check if the nodes Status is "Ready".
|
1390
|
+
|
1391
|
+
What you seeing over there is
|
1392
|
+
[actually the same thing](https://aws.amazon.com/premiumsupport/knowledge-center/eks-node-status-ready/)
|
1393
|
+
you would if using `kubectl`.
|
1394
|
+
|
1395
|
+
This matcher cannot do the same because it would involve using the Kubernetes
|
1396
|
+
API: the AWS Ruby SDK currently doesn't expose this information.
|
1397
|
+
|
1398
|
+
What you can get from `be_ready` matcher is asserting that you have **at least**
|
1399
|
+
the number of EC2 instances (the nodes in your EKS Node Group) are actually
|
1400
|
+
in running state. It doesn't mean everything is fine, the node (EC2 instance)
|
1401
|
+
can be running but without communication with the cluster or any order issue
|
1402
|
+
regarding the Kubernetes configuration.
|
1403
|
+
|
1404
|
+
Although it might look an incomplete assertion, definitely the Node Group
|
1405
|
+
"Status" won't be "Active" if the EC2 instances associated with it are not
|
1406
|
+
running.
|
1407
|
+
|
1408
|
+
So, using this assertion like the sample below:
|
1409
|
+
|
1410
|
+
```ruby
|
1411
|
+
describe eks('my-eks-nodegroup'), cluster: 'my-cluster' do
|
1412
|
+
it { should be_ready }
|
1413
|
+
end
|
1414
|
+
```
|
1415
|
+
|
1416
|
+
Will pass if at least the minimum expected (see `scaling_config`) number of EC2
|
1417
|
+
instances are running.
|
1418
|
+
|
1419
|
+
### have_security_group
|
1420
|
+
|
1421
|
+
```ruby
|
1422
|
+
describe eks_nodegroup('my-eks-nodegroup'), cluster: 'my-cluster' do
|
1423
|
+
it { should have_security_group('sg-1a2b3cd4') }
|
1424
|
+
end
|
1425
|
+
```
|
1426
|
+
|
1427
|
+
|
1428
|
+
### its(:nodegroup_name), its(:nodegroup_arn), its(:cluster_name), its(:version), its(:release_version), its(:created_at), its(:modified_at), its(:status), its(:capacity_type), its(:instance_types), its(:subnets), its(:remote_access), its(:ami_type), its(:node_role), its(:labels), its(:taints), its(:resources), its(:disk_size), its(:health), its(:update_config), its(:launch_template), its(:tags)
|
1376
1429
|
## <a name="elasticache">elasticache</a>
|
1377
1430
|
|
1378
1431
|
Elasticache resource type.
|
@@ -2178,7 +2231,7 @@ DOC
|
|
2178
2231
|
end
|
2179
2232
|
```
|
2180
2233
|
|
2181
|
-
### its(:aws_account_id), its(:key_id), its(:arn), its(:creation_date), its(:enabled), its(:description), its(:key_usage), its(:key_state), its(:deletion_date), its(:valid_to), its(:origin), its(:custom_key_store_id), its(:cloud_hsm_cluster_id), its(:expiration_model), its(:key_manager), its(:customer_master_key_spec), its(:encryption_algorithms), its(:signing_algorithms), its(:multi_region), its(:multi_region_configuration), its(:pending_deletion_window_in_days)
|
2234
|
+
### its(:aws_account_id), its(:key_id), its(:arn), its(:creation_date), its(:enabled), its(:description), its(:key_usage), its(:key_state), its(:deletion_date), its(:valid_to), its(:origin), its(:custom_key_store_id), its(:cloud_hsm_cluster_id), its(:expiration_model), its(:key_manager), its(:customer_master_key_spec), its(:key_spec), its(:encryption_algorithms), its(:signing_algorithms), its(:multi_region), its(:multi_region_configuration), its(:pending_deletion_window_in_days)
|
2182
2235
|
## <a name="lambda">lambda</a>
|
2183
2236
|
|
2184
2237
|
Lambda resource type.
|
@@ -2227,7 +2280,7 @@ end
|
|
2227
2280
|
|
2228
2281
|
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)).
|
2229
2282
|
|
2230
|
-
### 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), its(:vpc_config), its(:dead_letter_config), its(:kms_key_arn), its(:master_arn), its(:revision_id), its(:layers), its(:state), its(:state_reason), its(:state_reason_code), its(:last_update_status), its(:last_update_status_reason), its(:last_update_status_reason_code), its(:file_system_configs), its(:package_type), its(:image_config_response), its(:signing_profile_version_arn), its(:signing_job_arn)
|
2283
|
+
### 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), its(:vpc_config), its(:dead_letter_config), its(:kms_key_arn), its(:master_arn), its(:revision_id), its(:layers), its(:state), its(:state_reason), its(:state_reason_code), its(:last_update_status), its(:last_update_status_reason), its(:last_update_status_reason_code), its(:file_system_configs), its(:package_type), its(:image_config_response), its(:signing_profile_version_arn), its(:signing_job_arn), its(:architectures)
|
2231
2284
|
## <a name="launch_configuration">launch_configuration</a>
|
2232
2285
|
|
2233
2286
|
LaunchConfiguration resource type.
|
@@ -2373,7 +2426,7 @@ end
|
|
2373
2426
|
|
2374
2427
|
### be_updating
|
2375
2428
|
|
2376
|
-
### its(:active_operation_arn), its(:client_authentication), its(:cluster_arn), its(:cluster_name), its(:creation_time), its(:current_version), its(:enhanced_monitoring), its(:number_of_broker_nodes), its(:state), its(:zookeeper_connect_string), its(:zookeeper_connect_string_tls)
|
2429
|
+
### its(:active_operation_arn), its(:client_authentication), its(:cluster_arn), its(:cluster_name), its(:creation_time), its(:current_version), its(:enhanced_monitoring), its(:number_of_broker_nodes), its(:state), its(:state_info), its(:zookeeper_connect_string), its(:zookeeper_connect_string_tls)
|
2377
2430
|
## <a name="nat_gateway">nat_gateway</a>
|
2378
2431
|
|
2379
2432
|
NatGateway resource type.
|
@@ -2573,7 +2626,7 @@ describe network_interface('eni-12ab3cde') do
|
|
2573
2626
|
end
|
2574
2627
|
```
|
2575
2628
|
|
2576
|
-
### its(:association), its(:availability_zone), its(:description), its(:interface_type), its(:ipv_6_addresses), its(:mac_address), its(:network_interface_id), its(:outpost_arn), its(:owner_id), its(:private_dns_name), its(:private_ip_address), its(:requester_id), its(:requester_managed), its(:source_dest_check), its(:status), its(:subnet_id), its(:vpc_id)
|
2629
|
+
### its(:association), its(:availability_zone), its(:description), its(:interface_type), its(:ipv_6_addresses), its(:mac_address), its(:network_interface_id), its(:outpost_arn), its(:owner_id), its(:private_dns_name), its(:private_ip_address), its(:ipv_4_prefixes), its(:ipv_6_prefixes), its(:requester_id), its(:requester_managed), its(:source_dest_check), its(:status), its(:subnet_id), its(:vpc_id)
|
2577
2630
|
## <a name="nlb">nlb</a>
|
2578
2631
|
|
2579
2632
|
NLB resource type.
|
@@ -2801,7 +2854,7 @@ end
|
|
2801
2854
|
```
|
2802
2855
|
|
2803
2856
|
|
2804
|
-
### 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(:replica_mode), its(:license_model), its(:iops), its(:character_set_name), its(:nchar_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(:associated_roles), its(:listener_endpoint), its(:max_allocated_storage), its(:tag_list), its(:db_instance_automated_backups_replications), its(:customer_owned_ip_enabled), its(:aws_backup_recovery_point_arn), its(:activity_stream_status), its(:activity_stream_kms_key_id), its(:activity_stream_kinesis_stream_name), its(:activity_stream_mode), its(:activity_stream_engine_native_audit_fields_included)
|
2857
|
+
### its(:vpc_id), its(:db_instance_identifier), its(:db_instance_class), its(:engine), its(:db_instance_status), its(:automatic_restart_time), 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(:replica_mode), its(:license_model), its(:iops), its(:character_set_name), its(:nchar_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(:associated_roles), its(:listener_endpoint), its(:max_allocated_storage), its(:tag_list), its(:db_instance_automated_backups_replications), its(:customer_owned_ip_enabled), its(:aws_backup_recovery_point_arn), its(:activity_stream_status), its(:activity_stream_kms_key_id), its(:activity_stream_kinesis_stream_name), its(:activity_stream_mode), its(:activity_stream_engine_native_audit_fields_included)
|
2805
2858
|
### :unlock: Advanced use
|
2806
2859
|
|
2807
2860
|
`rds` can use `Aws::RDS::DBInstance` resource (see http://docs.aws.amazon.com/sdkforruby/api/Aws/RDS/DBInstance.html).
|
@@ -3515,7 +3568,7 @@ end
|
|
3515
3568
|
```
|
3516
3569
|
|
3517
3570
|
|
3518
|
-
|
3571
|
+
|
3519
3572
|
### :unlock: Advanced use
|
3520
3573
|
|
3521
3574
|
`subnet` can use `Aws::EC2::Subnet` resource (see http://docs.aws.amazon.com/sdkforruby/api/Aws/EC2/Subnet.html).
|
@@ -51,7 +51,7 @@ module Awspec
|
|
51
51
|
types_for_generate_all = %w(
|
52
52
|
cloudwatch_alarm cloudwatch_event directconnect ebs efs
|
53
53
|
elasticsearch iam_group iam_policy iam_role iam_user kms lambda
|
54
|
-
acm cloudwatch_logs eip codebuild
|
54
|
+
acm cloudwatch_logs eip codebuild elasticache
|
55
55
|
)
|
56
56
|
|
57
57
|
types_for_generate_all.each do |type|
|
@@ -23,7 +23,11 @@ module Awspec::Generator
|
|
23
23
|
metric_filters = select_all_cloudwatch_logs_metric_filter(log_group)
|
24
24
|
metric_filter_lines = []
|
25
25
|
metric_filters.each do |metric_filter|
|
26
|
-
line = "it { should have_metric_filter('#{metric_filter.filter_name}')
|
26
|
+
line = "it { should have_metric_filter('#{metric_filter.filter_name}')"
|
27
|
+
unless metric_filter.filter_pattern.empty?
|
28
|
+
line += ".filter_pattern('#{metric_filter.filter_pattern}')"
|
29
|
+
end
|
30
|
+
line += ' }'
|
27
31
|
metric_filter_lines.push(line)
|
28
32
|
end
|
29
33
|
metric_filter_lines
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Awspec::Generator
|
2
|
+
module Spec
|
3
|
+
class Elasticache
|
4
|
+
include Awspec::Helper::Finder
|
5
|
+
def generate_all
|
6
|
+
opt = {}
|
7
|
+
clusters = []
|
8
|
+
loop do
|
9
|
+
res = elasticache_client.describe_cache_clusters(opt)
|
10
|
+
clusters.push(*res.cache_clusters)
|
11
|
+
break if res.marker.nil?
|
12
|
+
opt = { marker: res.marker }
|
13
|
+
end
|
14
|
+
raise 'Not Found Cache Clusters' if clusters.empty?
|
15
|
+
ERB.new(cache_clusters_spec_template, nil, '-').result(binding).gsub(/^\n/, '')
|
16
|
+
end
|
17
|
+
|
18
|
+
def cache_clusters_spec_template
|
19
|
+
template = <<-'EOF'
|
20
|
+
<% clusters.each do |cluster| %>
|
21
|
+
describe elasticache('<%= cluster.cache_cluster_id %>') do
|
22
|
+
it { should exist }
|
23
|
+
it { should be_available }
|
24
|
+
it { should have_cache_parameter_group('<%= cluster.cache_parameter_group.cache_parameter_group_name %>') }
|
25
|
+
it { should belong_to_cache_subnet_group('<%= cluster.cache_subnet_group_name %>') }
|
26
|
+
<% unless cluster.replication_group_id.nil? %>
|
27
|
+
its(:replication_group_id) { should eq '<%= cluster.replication_group_id %>' }
|
28
|
+
<% end %>
|
29
|
+
its(:engine) { should eq '<%= cluster.engine %>' }
|
30
|
+
its(:engine_version) { should eq '<%= cluster.engine_version %>' }
|
31
|
+
its(:cache_node_type) { should eq '<%= cluster.cache_node_type %>' }
|
32
|
+
<% unless cluster.snapshot_retention_limit.nil? %>
|
33
|
+
its(:snapshot_retention_limit) { should eq <%= cluster.snapshot_retention_limit %> }
|
34
|
+
its(:snapshot_window) { should eq '<%= cluster.snapshot_window %>' }
|
35
|
+
<% end %>
|
36
|
+
end
|
37
|
+
<% end %>
|
38
|
+
EOF
|
39
|
+
template
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/lib/awspec/generator.rb
CHANGED
@@ -27,6 +27,7 @@ require 'awspec/generator/spec/cloudwatch_logs'
|
|
27
27
|
require 'awspec/generator/spec/alb'
|
28
28
|
require 'awspec/generator/spec/nlb'
|
29
29
|
require 'awspec/generator/spec/internet_gateway'
|
30
|
+
require 'awspec/generator/spec/elasticache'
|
30
31
|
require 'awspec/generator/spec/elasticsearch'
|
31
32
|
require 'awspec/generator/spec/eip'
|
32
33
|
require 'awspec/generator/spec/rds_db_parameter_group'
|
@@ -3,24 +3,48 @@ module Awspec::Helper
|
|
3
3
|
module Ec2
|
4
4
|
def find_ec2(id)
|
5
5
|
# instance_id or tag:Name
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
end
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
6
|
+
|
7
|
+
# First tries to search by using an educated guess, based on the
|
8
|
+
# references below:
|
9
|
+
# https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/resource-ids.html
|
10
|
+
# https://docs.chef.io/inspec/resources/aws_ec2_instance/
|
11
|
+
# This should be faster then just first trying ID when the parameter is
|
12
|
+
# clearly not one
|
13
|
+
|
14
|
+
# https://medium.com/@Bakku1505/ruby-start-with-end-with-vs-regular-expressions-59728be0859e
|
15
|
+
if id.start_with?('i-') && id.length == 19 && id =~ /^i-[0-9a-f]/
|
16
|
+
begin
|
17
|
+
res = ec2_client.describe_instances({
|
18
|
+
instance_ids: [id]
|
19
|
+
})
|
20
|
+
rescue Aws::EC2::Errors::InvalidInstanceIDNotFound, Aws::EC2::Errors::InvalidInstanceIDMalformed => e
|
21
|
+
res = ec2_client.describe_instances({
|
22
|
+
filters: [{ name: 'tag:Name', values: [id] }]
|
23
|
+
})
|
24
|
+
end
|
25
|
+
else
|
26
|
+
begin
|
27
|
+
res = ec2_client.describe_instances({
|
28
|
+
filters: [{ name: 'tag:Name', values: [id] }]
|
29
|
+
})
|
30
|
+
rescue Aws::EC2::Errors::InvalidInstanceIDNotFound, Aws::EC2::Errors::InvalidInstanceIDMalformed => e
|
31
|
+
res = ec2_client.describe_instances({
|
32
|
+
instance_ids: [id]
|
33
|
+
})
|
34
|
+
if res.reservations.count > 1
|
35
|
+
STDERR.puts "Warning: '#{id}' unexpectedly identified as a valid instance ID during fallback search"
|
36
|
+
end
|
37
|
+
end
|
23
38
|
end
|
39
|
+
|
40
|
+
return nil if res.reservations.count == 0
|
41
|
+
return res.reservations.first.instances.single_resource(id) if res.reservations.count == 1
|
42
|
+
raise Awspec::DuplicatedResourceTypeError, dup_ec2_instance(id) if res.reservations.count > 1
|
43
|
+
raise "Unexpected condition of having reservations = #{res.reservations.count}"
|
44
|
+
end
|
45
|
+
|
46
|
+
def dup_ec2_instance(id)
|
47
|
+
"Duplicate instances matching id or tag #{id}"
|
24
48
|
end
|
25
49
|
|
26
50
|
def find_ec2_attribute(id, attribute)
|
@@ -36,7 +36,7 @@ module Awspec::Helper
|
|
36
36
|
# deprecated method
|
37
37
|
def find_ecs_container_instances(cluster, container_instances)
|
38
38
|
res = ecs_client.describe_container_instances(cluster: cluster, container_instances: container_instances)
|
39
|
-
res.container_instances if res.container_instances
|
39
|
+
res.container_instances if res.container_instances # rubocop:disable Style/UnneededCondition
|
40
40
|
end
|
41
41
|
|
42
42
|
alias_method :list_ecs_container_instances, :select_ecs_container_instance_arn_by_cluster_name # deprecated method
|