awspec 1.24.1 → 1.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|