awspec 1.2.0 → 1.3.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/doc/_resource_types/nlb.md +41 -0
- data/doc/_resource_types/nlb_listener.md +29 -0
- data/doc/_resource_types/nlb_target_group.md +35 -0
- data/doc/resource_types.md +139 -3
- data/lib/awspec/command/generate.rb +13 -1
- data/lib/awspec/generator.rb +3 -0
- data/lib/awspec/generator/doc/type/nlb.rb +20 -0
- data/lib/awspec/generator/doc/type/nlb_listener.rb +18 -0
- data/lib/awspec/generator/doc/type/nlb_target_group.rb +17 -0
- data/lib/awspec/generator/spec/nlb.rb +38 -0
- data/lib/awspec/generator/spec/rds_db_cluster_parameter_group.rb +23 -0
- data/lib/awspec/generator/spec/rds_db_parameter_group.rb +23 -0
- data/lib/awspec/helper/finder.rb +2 -0
- data/lib/awspec/helper/finder/autoscaling.rb +7 -0
- data/lib/awspec/helper/finder/nlb.rb +57 -0
- data/lib/awspec/helper/finder/rds.rb +28 -0
- data/lib/awspec/helper/type.rb +5 -3
- data/lib/awspec/matcher.rb +3 -0
- data/lib/awspec/matcher/belong_to_nlb.rb +8 -0
- data/lib/awspec/matcher/have_rule.rb +2 -1
- data/lib/awspec/stub/nlb.rb +119 -0
- data/lib/awspec/stub/nlb_listener.rb +131 -0
- data/lib/awspec/stub/nlb_target_group.rb +187 -0
- data/lib/awspec/type/autoscaling_group.rb +8 -0
- data/lib/awspec/type/nlb.rb +35 -0
- data/lib/awspec/type/nlb_listener.rb +36 -0
- data/lib/awspec/type/nlb_target_group.rb +22 -0
- data/lib/awspec/type/rds_db_cluster_parameter_group.rb +1 -14
- data/lib/awspec/type/rds_db_parameter_group.rb +1 -14
- data/lib/awspec/version.rb +1 -1
- metadata +20 -3
@@ -0,0 +1,23 @@
|
|
1
|
+
module Awspec::Generator
|
2
|
+
module Spec
|
3
|
+
class RdsDbParameterGroup
|
4
|
+
include Awspec::Helper::Finder
|
5
|
+
def generate_by_paramater_group(paramater_group)
|
6
|
+
@paramater_group = paramater_group
|
7
|
+
res = select_all_rds_db_parameters(@paramater_group)
|
8
|
+
ERB.new(db_paramater_group_template, nil, '-').result(binding).gsub(/^\n/, '')
|
9
|
+
end
|
10
|
+
|
11
|
+
def db_paramater_group_template
|
12
|
+
template = <<-'EOF'
|
13
|
+
describe rds_db_parameter_group('<%= @paramater_group %>') do
|
14
|
+
<% res.each do |key, value| %>
|
15
|
+
its('<%= key %>') { should eq '<%= value %>' }
|
16
|
+
<% end %>
|
17
|
+
end
|
18
|
+
EOF
|
19
|
+
template
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/awspec/helper/finder.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'aws-sdk'
|
2
|
+
require 'awspec/helper/finder/nlb'
|
2
3
|
require 'awspec/helper/finder/alb'
|
3
4
|
require 'awspec/helper/finder/vpc'
|
4
5
|
require 'awspec/helper/finder/subnet'
|
@@ -39,6 +40,7 @@ require 'awspec/helper/client_wrap'
|
|
39
40
|
|
40
41
|
module Awspec::Helper
|
41
42
|
module Finder
|
43
|
+
include Awspec::Helper::Finder::Nlb
|
42
44
|
include Awspec::Helper::Finder::Alb
|
43
45
|
include Awspec::Helper::Finder::Vpc
|
44
46
|
include Awspec::Helper::Finder::Subnet
|
@@ -22,6 +22,13 @@ module Awspec::Helper
|
|
22
22
|
res.load_balancer_target_groups
|
23
23
|
end
|
24
24
|
|
25
|
+
def select_lb_target_group_by_autoscaling_group_name(name)
|
26
|
+
res = autoscaling_client.describe_load_balancer_target_groups({
|
27
|
+
auto_scaling_group_name: name
|
28
|
+
})
|
29
|
+
res.load_balancer_target_groups
|
30
|
+
end
|
31
|
+
|
25
32
|
def find_block_device_mapping(id, device_id)
|
26
33
|
ret = find_launch_configuration(id).block_device_mappings.select do |device|
|
27
34
|
next true if device.device_name == device_id
|
@@ -0,0 +1,57 @@
|
|
1
|
+
module Awspec::Helper
|
2
|
+
module Finder
|
3
|
+
module Nlb
|
4
|
+
def find_nlb(id)
|
5
|
+
res = elbv2_client.describe_load_balancers({ names: [id] })
|
6
|
+
res.load_balancers.select do |lb|
|
7
|
+
lb.type == 'network'
|
8
|
+
end.single_resource(id)
|
9
|
+
rescue
|
10
|
+
return nil
|
11
|
+
end
|
12
|
+
|
13
|
+
def select_nlb_by_vpc_id(vpc_id)
|
14
|
+
res = elbv2_client.describe_load_balancers
|
15
|
+
res.load_balancers.select do |lb|
|
16
|
+
lb.vpc_id == vpc_id && lb.type == 'network'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def find_nlb_listener(arn)
|
21
|
+
res = elbv2_client.describe_listeners({ listener_arns: [arn] })
|
22
|
+
res.listeners.single_resource(arn)
|
23
|
+
rescue
|
24
|
+
return nil
|
25
|
+
end
|
26
|
+
|
27
|
+
def find_nlb_target_group(id)
|
28
|
+
res = elbv2_client.describe_target_groups({ names: [id] })
|
29
|
+
httpx_res = res.target_groups.select do |tg|
|
30
|
+
%w(HTTP HTTPS).include?(tg.protocol)
|
31
|
+
end
|
32
|
+
if !httpx_res || httpx_res.empty?
|
33
|
+
raise "ERROR: Found no HTTP nor HTTPS -protocol target group named '#{id}'."
|
34
|
+
end
|
35
|
+
httpx_res.single_resource(id)
|
36
|
+
rescue
|
37
|
+
# Prefer the HTTP/HTTPS protocol target group, but survive without it:
|
38
|
+
begin
|
39
|
+
res.target_groups.single_resource(id)
|
40
|
+
rescue
|
41
|
+
return nil
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def select_rule_by_nlb_listener_id(id)
|
46
|
+
selected = []
|
47
|
+
next_marker = nil
|
48
|
+
loop do
|
49
|
+
res = elbv2_client.describe_rules(marker: next_marker, listener_arn: id)
|
50
|
+
selected += res.rules unless res.nil?
|
51
|
+
(res.nil? && next_marker = res.next_marker) || break
|
52
|
+
end
|
53
|
+
selected
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -20,6 +20,34 @@ module Awspec::Helper
|
|
20
20
|
db_instance.db_subnet_group.vpc_id == vpc_id
|
21
21
|
end
|
22
22
|
end
|
23
|
+
|
24
|
+
def select_all_rds_db_parameters(paramater_group)
|
25
|
+
parameters = {}
|
26
|
+
res = rds_client.describe_db_parameters({
|
27
|
+
db_parameter_group_name: paramater_group
|
28
|
+
})
|
29
|
+
loop do
|
30
|
+
res.parameters.each do |param|
|
31
|
+
parameters[param.parameter_name] = param.parameter_value
|
32
|
+
end
|
33
|
+
(res.next_page? && res = res.next_page) || break
|
34
|
+
end
|
35
|
+
parameters
|
36
|
+
end
|
37
|
+
|
38
|
+
def select_all_rds_db_cluster_parameters(paramater_group)
|
39
|
+
parameters = {}
|
40
|
+
res = rds_client.describe_db_cluster_parameters({
|
41
|
+
db_cluster_parameter_group_name: paramater_group
|
42
|
+
})
|
43
|
+
loop do
|
44
|
+
res.parameters.each do |param|
|
45
|
+
parameters[param.parameter_name] = param.parameter_value
|
46
|
+
end
|
47
|
+
(res.respond_to?(:next_page?) && res.next_page? && res = res.next_page) || break
|
48
|
+
end
|
49
|
+
parameters
|
50
|
+
end
|
23
51
|
end
|
24
52
|
end
|
25
53
|
end
|
data/lib/awspec/helper/type.rb
CHANGED
@@ -8,14 +8,16 @@ module Awspec
|
|
8
8
|
require 'awspec/type/account_attribute'
|
9
9
|
|
10
10
|
TYPES = %w(
|
11
|
-
alb ami autoscaling_group cloudtrail
|
11
|
+
alb alb_listener alb_target_group ami autoscaling_group cloudtrail
|
12
|
+
cloudwatch_alarm cloudwatch_event directconnect_virtual_interface
|
12
13
|
ebs ec2 ecr_repository ecs_cluster ecs_container_instance ecs_service ecs_task_definition
|
13
14
|
efs elasticache elasticache_cache_parameter_group elasticsearch elb iam_group
|
14
15
|
iam_policy iam_role iam_user kms lambda launch_configuration nat_gateway
|
15
|
-
network_acl network_interface
|
16
|
+
network_acl network_interface nlb nlb_listener nlb_target_group
|
17
|
+
rds rds_db_cluster_parameter_group rds_db_parameter_group route53_hosted_zone
|
16
18
|
route_table s3_bucket security_group ses_identity subnet vpc cloudfront_distribution
|
17
19
|
elastictranscoder_pipeline waf_web_acl customer_gateway vpn_gateway vpn_connection internet_gateway acm
|
18
|
-
cloudwatch_logs dynamodb_table eip sqs
|
20
|
+
cloudwatch_logs dynamodb_table eip sqs cloudformation_stack
|
19
21
|
)
|
20
22
|
|
21
23
|
ACCOUNT_ATTRIBUTES = %w(
|
data/lib/awspec/matcher.rb
CHANGED
@@ -61,6 +61,9 @@ require 'awspec/matcher/belong_to_domain'
|
|
61
61
|
# Alb Target Group
|
62
62
|
require 'awspec/matcher/belong_to_alb'
|
63
63
|
|
64
|
+
# Nlb Target Group
|
65
|
+
require 'awspec/matcher/belong_to_nlb'
|
66
|
+
|
64
67
|
# VPC
|
65
68
|
require 'awspec/matcher/be_connected_to_vpc'
|
66
69
|
require 'awspec/matcher/have_vpc_peering_connection'
|
@@ -1,7 +1,8 @@
|
|
1
1
|
RSpec::Matchers.define :have_rule do |rule_id|
|
2
2
|
match do |type|
|
3
3
|
return type.has_rule?(rule_id, @priority, @action) if type.instance_of?(Awspec::Type::WafWebAcl)
|
4
|
-
type.has_rule?(rule_id, @priority, @conditions, @actions) if type.instance_of?(Awspec::Type::AlbListener)
|
4
|
+
return type.has_rule?(rule_id, @priority, @conditions, @actions) if type.instance_of?(Awspec::Type::AlbListener)
|
5
|
+
type.has_rule?(rule_id, @priority, @conditions, @actions) if type.instance_of?(Awspec::Type::NlbListener)
|
5
6
|
end
|
6
7
|
|
7
8
|
chain :priority do |priority|
|
@@ -0,0 +1,119 @@
|
|
1
|
+
# rubocop:disable Metrics/LineLength
|
2
|
+
Aws.config[:elasticloadbalancingv2] = {
|
3
|
+
stub_responses: {
|
4
|
+
describe_load_balancers: {
|
5
|
+
load_balancers: [
|
6
|
+
{
|
7
|
+
load_balancer_arn:
|
8
|
+
'arn:aws:elasticloadbalancing:ap-northeast-1:1234567890:loadbalancer/app/my-nlb/1aa1bb1cc1ddee11',
|
9
|
+
dns_name:
|
10
|
+
'internal-my-nlb-1551266724.ap-northeast-1.elb.amazonaws.com',
|
11
|
+
canonical_hosted_zone_id: 'A12BCDEDCBA34BC',
|
12
|
+
created_time: Time.new(2017, 4, 4, 9, 00, 00, '+00:00'),
|
13
|
+
load_balancer_name: 'my-nlb',
|
14
|
+
# scheme: 'internal',
|
15
|
+
scheme: 'internet-facing',
|
16
|
+
vpc_id: 'vpc-ab123cde',
|
17
|
+
state:
|
18
|
+
{
|
19
|
+
code: 'active',
|
20
|
+
reason: nil
|
21
|
+
},
|
22
|
+
type: 'network',
|
23
|
+
availability_zones:
|
24
|
+
[
|
25
|
+
{
|
26
|
+
zone_name: 'ap-northeast-1a',
|
27
|
+
subnet_id: 'subnet-1234a567'
|
28
|
+
},
|
29
|
+
{
|
30
|
+
zone_name: 'ap-northeast-1c',
|
31
|
+
subnet_id: 'subnet-abcd7890'
|
32
|
+
}
|
33
|
+
],
|
34
|
+
ip_address_type: 'ipv4'
|
35
|
+
},
|
36
|
+
{
|
37
|
+
load_balancer_arn:
|
38
|
+
'arn:aws:elasticloadbalancing:ap-northeast-1:1234567890:loadbalancer/net/my-alb/2aa2bb2cc2ddee22',
|
39
|
+
dns_name:
|
40
|
+
'my-alb-2aa2bb2cc2ddee22.elb.ap-northeast-1.amazonaws.com',
|
41
|
+
canonical_hosted_zone_id: 'N12BCDEDCBN34BC',
|
42
|
+
created_time: Time.new(2017, 4, 4, 9, 00, 00, '+00:00'),
|
43
|
+
load_balancer_name: 'my-alb',
|
44
|
+
scheme: 'internal',
|
45
|
+
vpc_id: 'vpc-ab123cde',
|
46
|
+
state:
|
47
|
+
{
|
48
|
+
code: 'active',
|
49
|
+
reason: nil
|
50
|
+
},
|
51
|
+
type: 'application',
|
52
|
+
availability_zones:
|
53
|
+
[
|
54
|
+
{
|
55
|
+
zone_name: 'ap-northeast-1a',
|
56
|
+
subnet_id: 'subnet-7890ne12'
|
57
|
+
},
|
58
|
+
{
|
59
|
+
zone_name: 'ap-northeast-1c',
|
60
|
+
subnet_id: 'subnet-nnnd1234'
|
61
|
+
}
|
62
|
+
],
|
63
|
+
ip_address_type: 'ipv4'
|
64
|
+
}
|
65
|
+
],
|
66
|
+
next_marker: nil
|
67
|
+
},
|
68
|
+
describe_listeners: {
|
69
|
+
listeners: [
|
70
|
+
{
|
71
|
+
default_actions: [
|
72
|
+
{
|
73
|
+
target_group_arn: 'arn:aws:elasticloadbalancing:ap-northeast-1:1234567890:targetgroup/my-targets/73e2d6bc24d8a067',
|
74
|
+
type: 'forward'
|
75
|
+
}
|
76
|
+
],
|
77
|
+
listener_arn: 'arn:aws:elasticloadbalancing:ap-northeast-1:1234567890:listener/app/my-nlb/1aa1bb1cc1ddee11/f2f7dc8efc522ab2',
|
78
|
+
load_balancer_arn: 'arn:aws:elasticloadbalancing:ap-northeast-1:1234567890:loadbalancer/app/my-nlb/1aa1bb1cc1ddee11',
|
79
|
+
port: 80,
|
80
|
+
protocol: 'HTTP'
|
81
|
+
}
|
82
|
+
]
|
83
|
+
}
|
84
|
+
}
|
85
|
+
}
|
86
|
+
|
87
|
+
Aws.config[:ec2] = {
|
88
|
+
stub_responses: {
|
89
|
+
describe_subnets: {
|
90
|
+
subnets: [
|
91
|
+
{
|
92
|
+
state: 'available',
|
93
|
+
vpc_id: 'vpc-ab123cde',
|
94
|
+
subnet_id: 'subnet-1234a567',
|
95
|
+
cidr_block: '10.0.1.0/24',
|
96
|
+
tags: [
|
97
|
+
{
|
98
|
+
key: 'Name',
|
99
|
+
value: 'my-subnet'
|
100
|
+
}
|
101
|
+
]
|
102
|
+
}
|
103
|
+
]
|
104
|
+
},
|
105
|
+
describe_vpcs: {
|
106
|
+
vpcs: [
|
107
|
+
{
|
108
|
+
vpc_id: 'vpc-ab123cde',
|
109
|
+
tags: [
|
110
|
+
{
|
111
|
+
key: 'Name',
|
112
|
+
value: 'my-vpc'
|
113
|
+
}
|
114
|
+
]
|
115
|
+
}
|
116
|
+
]
|
117
|
+
}
|
118
|
+
}
|
119
|
+
}
|
@@ -0,0 +1,131 @@
|
|
1
|
+
# rubocop:disable Metrics/LineLength
|
2
|
+
Aws.config[:elasticloadbalancingv2] = {
|
3
|
+
stub_responses: {
|
4
|
+
describe_load_balancers: {
|
5
|
+
load_balancers: [
|
6
|
+
{
|
7
|
+
load_balancer_arn:
|
8
|
+
'arn:aws:elasticloadbalancing:ap-northeast-1:1234567890:loadbalancer/app/my-nlb/1aa1bb1cc1ddee11',
|
9
|
+
dns_name:
|
10
|
+
'internal-my-nlb-1551266724.ap-northeast-1.elb.amazonaws.com',
|
11
|
+
canonical_hosted_zone_id: 'A12BCDEDCBA34BC',
|
12
|
+
created_time: Time.new(2017, 4, 4, 9, 00, 00, '+00:00'),
|
13
|
+
load_balancer_name: 'my-nlb',
|
14
|
+
# scheme: 'internal',
|
15
|
+
scheme: 'internet-facing',
|
16
|
+
vpc_id: 'vpc-ab123cde',
|
17
|
+
state:
|
18
|
+
{
|
19
|
+
code: 'active',
|
20
|
+
reason: nil
|
21
|
+
},
|
22
|
+
type: 'network',
|
23
|
+
availability_zones:
|
24
|
+
[
|
25
|
+
{
|
26
|
+
zone_name: 'ap-northeast-1a',
|
27
|
+
subnet_id: 'subnet-1234a567'
|
28
|
+
},
|
29
|
+
{
|
30
|
+
zone_name: 'ap-northeast-1c',
|
31
|
+
subnet_id: 'subnet-abcd7890'
|
32
|
+
}
|
33
|
+
],
|
34
|
+
ip_address_type: 'ipv4'
|
35
|
+
}
|
36
|
+
],
|
37
|
+
next_marker: nil
|
38
|
+
},
|
39
|
+
describe_listeners: {
|
40
|
+
listeners: [
|
41
|
+
{
|
42
|
+
default_actions: [
|
43
|
+
{
|
44
|
+
target_group_arn: 'arn:aws:elasticloadbalancing:ap-northeast-1:1234567890:targetgroup/my-targets/73e2d6bc24d8a067',
|
45
|
+
type: 'forward'
|
46
|
+
}
|
47
|
+
],
|
48
|
+
listener_arn: 'arn:aws:elasticloadbalancing:ap-northeast-1:1234567890:listener/app/my-nlb/1aa1bb1cc1ddee11/f2f7dc8efc522ab2',
|
49
|
+
load_balancer_arn: 'arn:aws:elasticloadbalancing:ap-northeast-1:1234567890:loadbalancer/app/my-nlb/1aa1bb1cc1ddee11',
|
50
|
+
port: 80,
|
51
|
+
protocol: 'HTTP'
|
52
|
+
}
|
53
|
+
]
|
54
|
+
},
|
55
|
+
describe_target_groups: {
|
56
|
+
target_groups: [
|
57
|
+
{
|
58
|
+
health_check_interval_seconds: 30,
|
59
|
+
health_check_path: '/',
|
60
|
+
health_check_port: 'traffic-port',
|
61
|
+
health_check_protocol: 'HTTP',
|
62
|
+
health_check_timeout_seconds: 5,
|
63
|
+
healthy_threshold_count: 5,
|
64
|
+
load_balancer_arns: [
|
65
|
+
'arn:aws:elasticloadbalancing:ap-northeast-1:1234567890:loadbalancer/app/my-nlb/1aa1bb1cc1ddee11'
|
66
|
+
],
|
67
|
+
matcher: {
|
68
|
+
http_code: '200'
|
69
|
+
},
|
70
|
+
port: 80,
|
71
|
+
protocol: 'HTTP',
|
72
|
+
target_group_arn: 'arn:aws:elasticloadbalancing:ap-northeast-1:1234567890:targetgroup/my-nlb-target-group/73e2d6bc24d8a067',
|
73
|
+
target_group_name: 'my-nlb-target-group',
|
74
|
+
unhealthy_threshold_count: 2,
|
75
|
+
vpc_id: 'vpc-ab123cde'
|
76
|
+
}
|
77
|
+
]
|
78
|
+
},
|
79
|
+
describe_rules: {
|
80
|
+
rules: [
|
81
|
+
{
|
82
|
+
actions: [
|
83
|
+
{
|
84
|
+
target_group_arn: 'arn:aws:elasticloadbalancing:ap-northeast-1:1234567890:targetgroup/my-nlb-target-group/73e2d6bc24d8a067',
|
85
|
+
type: 'forward'
|
86
|
+
}
|
87
|
+
],
|
88
|
+
conditions: [
|
89
|
+
],
|
90
|
+
is_default: true,
|
91
|
+
priority: 'default',
|
92
|
+
rule_arn: 'arn:aws:elasticloadbalancing:ap-northeast-1:1234567890:listener-rule/app/my-nlb/1aa1bb1cc1ddee11/f2f7dc8efc522ab2/defaaaaaaaultbbbb'
|
93
|
+
}
|
94
|
+
]
|
95
|
+
}
|
96
|
+
}
|
97
|
+
}
|
98
|
+
|
99
|
+
Aws.config[:ec2] = {
|
100
|
+
stub_responses: {
|
101
|
+
describe_subnets: {
|
102
|
+
subnets: [
|
103
|
+
{
|
104
|
+
state: 'available',
|
105
|
+
vpc_id: 'vpc-ab123cde',
|
106
|
+
subnet_id: 'subnet-1234a567',
|
107
|
+
cidr_block: '10.0.1.0/24',
|
108
|
+
tags: [
|
109
|
+
{
|
110
|
+
key: 'Name',
|
111
|
+
value: 'my-subnet'
|
112
|
+
}
|
113
|
+
]
|
114
|
+
}
|
115
|
+
]
|
116
|
+
},
|
117
|
+
describe_vpcs: {
|
118
|
+
vpcs: [
|
119
|
+
{
|
120
|
+
vpc_id: 'vpc-ab123cde',
|
121
|
+
tags: [
|
122
|
+
{
|
123
|
+
key: 'Name',
|
124
|
+
value: 'my-vpc'
|
125
|
+
}
|
126
|
+
]
|
127
|
+
}
|
128
|
+
]
|
129
|
+
}
|
130
|
+
}
|
131
|
+
}
|