awspec 1.24.1 → 1.25.0
Sign up to get free protection for your applications and to get access to all the features.
- 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 +2 -4
- 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 +62 -9
- 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 -16
- data/lib/awspec/helper/finder/ecs.rb +1 -1
- data/lib/awspec/helper/finder/subnet.rb +118 -20
- data/lib/awspec/helper/finder.rb +6 -0
- data/lib/awspec/helper/states.rb +16 -0
- 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/ec2_non_existing.rb +7 -0
- 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/ec2.rb +21 -16
- 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 +26 -20
- data/.tachikoma.yml +0 -1
- data/.travis.yml +0 -23
@@ -13,6 +13,14 @@ Aws.config[:rds] = {
|
|
13
13
|
{
|
14
14
|
parameter_name: 'max_allowed_packet',
|
15
15
|
parameter_value: '16777216'
|
16
|
+
},
|
17
|
+
{
|
18
|
+
parameter_name: 'rds.logical_replication',
|
19
|
+
parameter_value: '1'
|
20
|
+
},
|
21
|
+
{
|
22
|
+
parameter_name: 'rds.accepted_password_auth_method',
|
23
|
+
parameter_value: 'md5+scram'
|
16
24
|
}
|
17
25
|
]
|
18
26
|
}
|
@@ -1,26 +1,33 @@
|
|
1
|
+
OWNER = '123456789'
|
2
|
+
REGION = 'us-east-1'
|
3
|
+
TOPIC_ARN = "arn:aws:sns:#{REGION}:#{OWNER}:foobar"
|
4
|
+
DISPLAY_NAME = 'Useless'
|
5
|
+
SUBSCRIBED = "arn:aws:sns:#{REGION}:#{OWNER}:Foobar:3dbf4999-b3e2-4345-bd11-c34c9784ecca"
|
6
|
+
ENDPOINT = "arn:aws:lambda:#{REGION}:#{OWNER}:function:foobar"
|
7
|
+
|
1
8
|
Aws.config[:sns] = {
|
2
9
|
stub_responses: {
|
3
10
|
get_topic_attributes: {
|
4
11
|
attributes: {
|
5
12
|
# rubocop:disable LineLength
|
6
|
-
'Policy' =>
|
7
|
-
'Owner' =>
|
13
|
+
'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:#{REGION}:#{OWNER}:foobar-lambda-sample\",\"Condition\":{\"StringEquals\":{\"AWS:SourceOwner\":\"#{OWNER}\"}}}]}",
|
14
|
+
'Owner' => OWNER,
|
8
15
|
'SubscriptionsPending' => '0',
|
9
|
-
'TopicArn' =>
|
16
|
+
'TopicArn' => TOPIC_ARN,
|
10
17
|
'EffectiveDeliveryPolicy' => '{\"http\":{\"defaultHealthyRetryPolicy\":{\"minDelayTarget\":20,\"maxDelayTarget\":20,\"numRetries\":3,\"numMaxDelayRetries\":0,\"numNoDelayRetries\":0,\"numMinDelayRetries\":0,\"backoffFunction\":\"linear\"},\"disableSubscriptionOverrides\":false}}',
|
11
18
|
'SubscriptionsConfirmed' => '1',
|
12
|
-
'DisplayName' =>
|
19
|
+
'DisplayName' => DISPLAY_NAME,
|
13
20
|
'SubscriptionsDeleted' => '0'
|
14
21
|
}
|
15
22
|
},
|
16
23
|
list_subscriptions_by_topic: {
|
17
24
|
subscriptions: [
|
18
25
|
{
|
19
|
-
subscription_arn:
|
20
|
-
owner:
|
26
|
+
subscription_arn: SUBSCRIBED,
|
27
|
+
owner: OWNER,
|
21
28
|
protocol: 'lambda',
|
22
|
-
endpoint:
|
23
|
-
topic_arn:
|
29
|
+
endpoint: ENDPOINT,
|
30
|
+
topic_arn: TOPIC_ARN
|
24
31
|
}
|
25
32
|
],
|
26
33
|
next_token: nil
|
@@ -0,0 +1,13 @@
|
|
1
|
+
OWNER = '123456789'
|
2
|
+
REGION = 'us-east-1'
|
3
|
+
TOPIC_ARN = "arn:aws:sns:#{REGION}:#{OWNER}:invalid"
|
4
|
+
TOPIC_SUBS_ARN = "arn:aws:sns:us-east-1:#{OWNER}:Foobar:3dbf4999-b3e2-4345-bd11-c34c9784ecca"
|
5
|
+
|
6
|
+
Aws.config[:sns] = {
|
7
|
+
stub_responses: {
|
8
|
+
get_topic_attributes: Aws::SNS::Errors::NotFound.new(
|
9
|
+
TOPIC_ARN, 'no such topic'),
|
10
|
+
list_subscriptions_by_topic: Aws::SNS::Errors::NotFound.new(
|
11
|
+
TOPIC_SUBS_ARN, 'no such topic')
|
12
|
+
}
|
13
|
+
}
|
@@ -13,9 +13,14 @@ module Awspec::Type
|
|
13
13
|
return true if ret == stream_name
|
14
14
|
end
|
15
15
|
|
16
|
-
def has_metric_filter?(filter_name)
|
17
|
-
ret = find_cloudwatch_logs_metric_fileter_by_log_group_name(@id, filter_name)
|
18
|
-
|
16
|
+
def has_metric_filter?(filter_name, pattern = nil)
|
17
|
+
ret = find_cloudwatch_logs_metric_fileter_by_log_group_name(@id, filter_name)
|
18
|
+
if pattern.nil?
|
19
|
+
return true if ret.filter_name == filter_name
|
20
|
+
else
|
21
|
+
return false unless ret.filter_pattern == pattern
|
22
|
+
end
|
23
|
+
return true if ret.filter_name == filter_name
|
19
24
|
end
|
20
25
|
|
21
26
|
def has_subscription_filter?(filter_name, pattern = nil)
|
data/lib/awspec/type/ec2.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'awspec/helper/states'
|
2
|
+
|
1
3
|
module Awspec::Type
|
2
4
|
class Ec2 < ResourceBase
|
3
5
|
aws_resource Aws::EC2::Instance
|
@@ -8,6 +10,16 @@ module Awspec::Type
|
|
8
10
|
@display_name = name
|
9
11
|
end
|
10
12
|
|
13
|
+
# required by Awspec::Generator::Doc::Type
|
14
|
+
STATES = Awspec::Helper::States::EC2_STATES
|
15
|
+
|
16
|
+
Awspec::Helper::States.ec2_states_checks.each do |method_name, state|
|
17
|
+
define_method method_name do
|
18
|
+
check_existence
|
19
|
+
resource_via_client.state.name == state
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
11
23
|
def resource_via_client
|
12
24
|
@resource_via_client ||= find_ec2(@display_name)
|
13
25
|
end
|
@@ -17,20 +29,10 @@ module Awspec::Type
|
|
17
29
|
end
|
18
30
|
|
19
31
|
def security_group_count
|
32
|
+
check_existence
|
20
33
|
resource_via_client.security_groups.count
|
21
34
|
end
|
22
35
|
|
23
|
-
STATES = %w(
|
24
|
-
pending running shutting-down
|
25
|
-
terminated stopping stopped
|
26
|
-
)
|
27
|
-
|
28
|
-
STATES.each do |state|
|
29
|
-
define_method state.tr('-', '_') + '?' do
|
30
|
-
resource_via_client.state.name == state
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
36
|
def disabled_api_termination?
|
35
37
|
ret = find_ec2_attribute(id, 'disableApiTermination')
|
36
38
|
ret.disable_api_termination.value
|
@@ -48,7 +50,6 @@ module Awspec::Type
|
|
48
50
|
|
49
51
|
def has_security_groups?(sg_ids)
|
50
52
|
return true if match_group_ids?(sg_ids) || match_group_names?(sg_ids)
|
51
|
-
|
52
53
|
group_ids = resource_security_groups.map { |sg| sg.group_id }
|
53
54
|
tags = select_security_group_by_group_id(group_ids).map { |sg| sg.tags }.flatten
|
54
55
|
group_names = tags.select { |tag| tag.key == 'Name' }.map { |tag| tag.value }
|
@@ -56,6 +57,7 @@ module Awspec::Type
|
|
56
57
|
end
|
57
58
|
|
58
59
|
def has_security_group?(sg_id)
|
60
|
+
check_existence
|
59
61
|
sgs = resource_via_client.security_groups
|
60
62
|
ret = sgs.find do |sg|
|
61
63
|
sg.group_id == sg_id || sg.group_name == sg_id
|
@@ -69,12 +71,14 @@ module Awspec::Type
|
|
69
71
|
end
|
70
72
|
|
71
73
|
def has_iam_instance_profile?(iam_instance_profile_name)
|
74
|
+
check_existence
|
72
75
|
iam = resource_via_client.iam_instance_profile
|
73
76
|
ret = iam.arn.split('/').last == iam_instance_profile_name
|
74
77
|
return true if ret
|
75
78
|
end
|
76
79
|
|
77
80
|
def has_ebs?(volume_id)
|
81
|
+
check_existence
|
78
82
|
blocks = resource_via_client.block_device_mappings
|
79
83
|
ret = blocks.find do |block|
|
80
84
|
next false unless block.ebs
|
@@ -89,8 +93,9 @@ module Awspec::Type
|
|
89
93
|
|
90
94
|
def has_network_interface?(network_interface_id, device_index = nil)
|
91
95
|
res = find_network_interface(network_interface_id)
|
96
|
+
check_existence
|
92
97
|
interfaces = resource_via_client.network_interfaces
|
93
|
-
interfaces.find do |interface|
|
98
|
+
ret = interfaces.find do |interface|
|
94
99
|
next false if device_index && interface.attachment.device_index != device_index
|
95
100
|
interface.network_interface_id == res.network_interface_id
|
96
101
|
end
|
@@ -98,7 +103,7 @@ module Awspec::Type
|
|
98
103
|
|
99
104
|
def has_event?(event_code)
|
100
105
|
status = find_ec2_status(id)
|
101
|
-
status.events.find do |event|
|
106
|
+
ret = status.events.find do |event|
|
102
107
|
event.code == event_code
|
103
108
|
end
|
104
109
|
end
|
@@ -133,8 +138,7 @@ module Awspec::Type
|
|
133
138
|
end
|
134
139
|
|
135
140
|
def has_credit_specification?(cpu_credits)
|
136
|
-
|
137
|
-
ret.cpu_credits == cpu_credits
|
141
|
+
find_ec2_credit_specifications(id).cpu_credits == cpu_credits
|
138
142
|
end
|
139
143
|
|
140
144
|
private
|
@@ -148,6 +152,7 @@ module Awspec::Type
|
|
148
152
|
end
|
149
153
|
|
150
154
|
def resource_security_groups
|
155
|
+
check_existence
|
151
156
|
resource_via_client.security_groups
|
152
157
|
end
|
153
158
|
end
|
@@ -1,10 +1,47 @@
|
|
1
|
+
require 'set'
|
2
|
+
|
1
3
|
module Awspec::Type
|
4
|
+
class EksNodeEC2
|
5
|
+
attr_reader :state, :subnet_id, :sec_groups
|
6
|
+
|
7
|
+
def initialize(id, state, subnet_id, sec_groups)
|
8
|
+
@id = id
|
9
|
+
@state = state
|
10
|
+
@subnet_id = subnet_id
|
11
|
+
@sec_groups = sec_groups
|
12
|
+
end
|
13
|
+
|
14
|
+
def to_s
|
15
|
+
"ID: #{@id}, State: #{@state}, Subnet ID: #{@subnet_id}, Security Groups: #{@sec_groups}"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
class EksNodeSecGroup
|
20
|
+
attr_reader :name, :id
|
21
|
+
|
22
|
+
def initialize(id, name)
|
23
|
+
@id = id
|
24
|
+
@name = name
|
25
|
+
end
|
26
|
+
|
27
|
+
def to_s
|
28
|
+
"ID: #{@id}, Name: #{@name}"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
2
32
|
class EksNodegroup < ResourceBase
|
33
|
+
# the tags below are standard for EKS node groups instances
|
34
|
+
EKS_CLUSTER_TAG = 'tag:eks:cluster-name'
|
35
|
+
EKS_NODEGROUP_TAG = 'tag:eks:nodegroup-name'
|
36
|
+
|
3
37
|
attr_accessor :cluster
|
4
38
|
|
5
39
|
def initialize(group_name)
|
6
40
|
super
|
7
41
|
@group_name = group_name
|
42
|
+
@ec2_instances = []
|
43
|
+
@sec_groups = Set.new
|
44
|
+
@sec_groups_ids = Set.new
|
8
45
|
end
|
9
46
|
|
10
47
|
def resource_via_client
|
@@ -19,6 +56,39 @@ module Awspec::Type
|
|
19
56
|
@cluster || 'default'
|
20
57
|
end
|
21
58
|
|
59
|
+
def subnets
|
60
|
+
ec2_instances = find_nodes
|
61
|
+
Set.new(ec2_instances.map { |ec2| ec2.subnet_id })
|
62
|
+
end
|
63
|
+
|
64
|
+
def has_security_group?(sec_group)
|
65
|
+
if @sec_groups.empty? || @sec_groups_ids.empty?
|
66
|
+
ec2_instances = find_nodes
|
67
|
+
|
68
|
+
ec2_instances.each do |ec2|
|
69
|
+
ec2.sec_groups.each do |sg|
|
70
|
+
@sec_groups.add(sg.name)
|
71
|
+
@sec_groups_ids.add(sg.id)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
@sec_groups.member?(sec_group) || @sec_groups_ids.member?(sec_group)
|
77
|
+
end
|
78
|
+
|
79
|
+
def ready?
|
80
|
+
min_expected = resource_via_client.scaling_config.min_size
|
81
|
+
ec2_instances = find_nodes
|
82
|
+
running_counter = 0
|
83
|
+
|
84
|
+
ec2_instances.each do |ec2|
|
85
|
+
running_counter += 1 if ec2.state.eql?('running')
|
86
|
+
break if running_counter == min_expected
|
87
|
+
end
|
88
|
+
|
89
|
+
running_counter >= min_expected
|
90
|
+
end
|
91
|
+
|
22
92
|
STATES = %w(ACTIVE INACTIVE)
|
23
93
|
|
24
94
|
STATES.each do |state|
|
@@ -26,5 +96,40 @@ module Awspec::Type
|
|
26
96
|
resource_via_client.status == state
|
27
97
|
end
|
28
98
|
end
|
99
|
+
|
100
|
+
private
|
101
|
+
|
102
|
+
def find_nodes
|
103
|
+
return @ec2_instances unless @ec2_instances.empty?
|
104
|
+
|
105
|
+
result = ec2_client.describe_instances(
|
106
|
+
{
|
107
|
+
filters: [
|
108
|
+
{ name: EKS_CLUSTER_TAG, values: [cluster] },
|
109
|
+
{ name: EKS_NODEGROUP_TAG, values: [@group_name] }
|
110
|
+
]
|
111
|
+
}
|
112
|
+
)
|
113
|
+
result.reservations.each do |reservation|
|
114
|
+
reservation.instances.each do |instance|
|
115
|
+
sec_groups = []
|
116
|
+
|
117
|
+
instance.security_groups.map do |sg|
|
118
|
+
sec_groups.push(EksNodeSecGroup.new(sg.group_id, sg.group_name))
|
119
|
+
end
|
120
|
+
|
121
|
+
@ec2_instances.push(
|
122
|
+
EksNodeEC2.new(
|
123
|
+
instance.instance_id,
|
124
|
+
instance.state.name,
|
125
|
+
instance.subnet_id,
|
126
|
+
sec_groups
|
127
|
+
)
|
128
|
+
)
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
@ec2_instances
|
133
|
+
end
|
29
134
|
end
|
30
135
|
end
|
@@ -1,4 +1,39 @@
|
|
1
1
|
module Awspec::Type
|
2
|
+
class InvalidRdsDbParameter < StandardError
|
3
|
+
##
|
4
|
+
# Overrides the superclass initialize method to include more information
|
5
|
+
# and default error message.
|
6
|
+
# Expected parameters:
|
7
|
+
# - parameter_name: the name of the parameter.
|
8
|
+
|
9
|
+
def initialize(parameter_name)
|
10
|
+
@param_name = parameter_name
|
11
|
+
message = "There is no such parameter \"rds.#{parameter_name}\""
|
12
|
+
super message
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class RdsDBParameters
|
17
|
+
##
|
18
|
+
# Thanks to AWS for creating parameters names like
|
19
|
+
# 'rds.accepted_password_auth_method', which would be caught as method 'rds'
|
20
|
+
# by method_missing in RdsDbParameterGroup class, this class was created
|
21
|
+
# See https://github.com/k1LoW/awspec/issues/527 for more details
|
22
|
+
def initialize(params)
|
23
|
+
@params = params
|
24
|
+
end
|
25
|
+
|
26
|
+
def to_s
|
27
|
+
return "RdsDBParameters = #{@params}"
|
28
|
+
end
|
29
|
+
|
30
|
+
def method_missing(name)
|
31
|
+
param_name = name.to_sym
|
32
|
+
return @params[param_name] if @params.include?(param_name)
|
33
|
+
raise InvalidRdsDbParameter, name
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
2
37
|
class RdsDbParameterGroup < ResourceBase
|
3
38
|
def resource_via_client
|
4
39
|
return @resource_via_client if @resource_via_client
|
@@ -11,11 +46,30 @@ module Awspec::Type
|
|
11
46
|
|
12
47
|
def method_missing(name)
|
13
48
|
param_name = name.to_s
|
49
|
+
return create_rds_params if param_name == 'rds'
|
50
|
+
|
14
51
|
if resource_via_client.include?(param_name)
|
15
52
|
resource_via_client[param_name].to_s
|
16
53
|
else
|
17
54
|
super
|
18
55
|
end
|
19
56
|
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def create_rds_params
|
61
|
+
return @rds_params if @rds_params
|
62
|
+
|
63
|
+
rds_params_keys = resource_via_client.keys.select { |key| key.to_s.start_with?('rds.') }
|
64
|
+
rds_params = {}
|
65
|
+
|
66
|
+
rds_params_keys.each do |key|
|
67
|
+
new_key = key.split('.')[-1]
|
68
|
+
rds_params[new_key.to_sym] = resource_via_client[key]
|
69
|
+
end
|
70
|
+
|
71
|
+
@rds_params = RdsDBParameters.new(rds_params)
|
72
|
+
@rds_params
|
73
|
+
end
|
20
74
|
end
|
21
75
|
end
|
data/lib/awspec/version.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: awspec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.25.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- k1LoW
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-09-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: addressable
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: aws-sdk
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -122,20 +136,6 @@ dependencies:
|
|
122
136
|
- - ">="
|
123
137
|
- !ruby/object:Gem::Version
|
124
138
|
version: '0'
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: addressable
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - ">="
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: '0'
|
132
|
-
type: :runtime
|
133
|
-
prerelease: false
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
135
|
-
requirements:
|
136
|
-
- - ">="
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: '0'
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: bundler
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -204,14 +204,14 @@ dependencies:
|
|
204
204
|
requirements:
|
205
205
|
- - "~>"
|
206
206
|
- !ruby/object:Gem::Version
|
207
|
-
version: 0.
|
207
|
+
version: 0.57.0
|
208
208
|
type: :development
|
209
209
|
prerelease: false
|
210
210
|
version_requirements: !ruby/object:Gem::Requirement
|
211
211
|
requirements:
|
212
212
|
- - "~>"
|
213
213
|
- !ruby/object:Gem::Version
|
214
|
-
version: 0.
|
214
|
+
version: 0.57.0
|
215
215
|
description: RSpec tests for your AWS resources.
|
216
216
|
email:
|
217
217
|
- k1lowxb@gmail.com
|
@@ -221,9 +221,9 @@ extensions: []
|
|
221
221
|
extra_rdoc_files: []
|
222
222
|
files:
|
223
223
|
- ".editorconfig"
|
224
|
+
- ".github/workflows/ci.yml"
|
225
|
+
- ".github/workflows/doc.yml"
|
224
226
|
- ".rubocop.yml"
|
225
|
-
- ".tachikoma.yml"
|
226
|
-
- ".travis.yml"
|
227
227
|
- Gemfile
|
228
228
|
- LICENSE.txt
|
229
229
|
- README.md
|
@@ -435,6 +435,7 @@ files:
|
|
435
435
|
- lib/awspec/generator/spec/ec2.rb
|
436
436
|
- lib/awspec/generator/spec/efs.rb
|
437
437
|
- lib/awspec/generator/spec/eip.rb
|
438
|
+
- lib/awspec/generator/spec/elasticache.rb
|
438
439
|
- lib/awspec/generator/spec/elasticsearch.rb
|
439
440
|
- lib/awspec/generator/spec/elb.rb
|
440
441
|
- lib/awspec/generator/spec/iam_group.rb
|
@@ -518,6 +519,7 @@ files:
|
|
518
519
|
- lib/awspec/helper/finder/vpc_endpoints.rb
|
519
520
|
- lib/awspec/helper/finder/waf.rb
|
520
521
|
- lib/awspec/helper/finder/wafregional.rb
|
522
|
+
- lib/awspec/helper/states.rb
|
521
523
|
- lib/awspec/helper/type.rb
|
522
524
|
- lib/awspec/matcher.rb
|
523
525
|
- lib/awspec/matcher/be_allowed.rb
|
@@ -537,6 +539,7 @@ files:
|
|
537
539
|
- lib/awspec/matcher/belong_to_nlb.rb
|
538
540
|
- lib/awspec/matcher/belong_to_replication_group.rb
|
539
541
|
- lib/awspec/matcher/belong_to_subnet.rb
|
542
|
+
- lib/awspec/matcher/belong_to_subnets.rb
|
540
543
|
- lib/awspec/matcher/belong_to_vpc.rb
|
541
544
|
- lib/awspec/matcher/have_attribute_definition.rb
|
542
545
|
- lib/awspec/matcher/have_cluster_parameter_group.rb
|
@@ -548,6 +551,7 @@ files:
|
|
548
551
|
- lib/awspec/matcher/have_inline_policy.rb
|
549
552
|
- lib/awspec/matcher/have_key_policy.rb
|
550
553
|
- lib/awspec/matcher/have_key_schema.rb
|
554
|
+
- lib/awspec/matcher/have_metric_filter.rb
|
551
555
|
- lib/awspec/matcher/have_network_interface.rb
|
552
556
|
- lib/awspec/matcher/have_option_group.rb
|
553
557
|
- lib/awspec/matcher/have_origin.rb
|
@@ -593,6 +597,7 @@ files:
|
|
593
597
|
- lib/awspec/stub/ebs.rb
|
594
598
|
- lib/awspec/stub/ec2.rb
|
595
599
|
- lib/awspec/stub/ec2_has_multi_security_groups.rb
|
600
|
+
- lib/awspec/stub/ec2_non_existing.rb
|
596
601
|
- lib/awspec/stub/ecr_repository.rb
|
597
602
|
- lib/awspec/stub/ecs.rb
|
598
603
|
- lib/awspec/stub/ecs_cluster.rb
|
@@ -640,6 +645,7 @@ files:
|
|
640
645
|
- lib/awspec/stub/security_group.rb
|
641
646
|
- lib/awspec/stub/ses_identity.rb
|
642
647
|
- lib/awspec/stub/sns_topic.rb
|
648
|
+
- lib/awspec/stub/sns_topic_error.rb
|
643
649
|
- lib/awspec/stub/sqs.rb
|
644
650
|
- lib/awspec/stub/ssm_parameter.rb
|
645
651
|
- lib/awspec/stub/subnet.rb
|