awspec 0.20.0 → 0.20.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/README.md +2 -5
- data/lib/awspec/command/generate.rb +1 -5
- data/lib/awspec/generator.rb +1 -0
- data/lib/awspec/generator/spec/network_acl.rb +96 -0
- data/lib/awspec/type/network_acl.rb +18 -18
- data/lib/awspec/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 61c1f9349ff77a468315fe6f7666e45e4009467a
|
4
|
+
data.tar.gz: b4df26ffef56668555305cbc9b5eae41a92a0738
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 599b28d68053b6c8fc5432bacc5f11a65b205343874e2433c824f615ad43c1bfd9c71729c3dfad98ad4c3568498e242b5df5c42798aed9f61452a932ad3eb3a2
|
7
|
+
data.tar.gz: 6df2de8ba7d4d83652737b29b512a9e984fee23fbd8af0b93f6084b1307a9fef6daf4b592344ca292d3a9d3c6bf76e1f02845079a8024aee203c1c099d427e14
|
data/README.md
CHANGED
@@ -95,7 +95,7 @@ $ export AWS_PROFILE=mycreds; bundle exec rake spec
|
|
95
95
|
- Route53
|
96
96
|
- [x] Route53 Hosted Zone (`route53_hosted_zone`)
|
97
97
|
- AutoScaling
|
98
|
-
- [x]
|
98
|
+
- [x] AutoScaling Group (`autoscaling_group`)
|
99
99
|
- [x] Subnet (`subnet`)
|
100
100
|
- [x] RouteTable (`route_table`)
|
101
101
|
- [x] EBS Volume (`ebs`)
|
@@ -112,13 +112,10 @@ $ export AWS_PROFILE=mycreds; bundle exec rake spec
|
|
112
112
|
- [x] CloudWatch Alarm (`cloudwatch_alarm`)
|
113
113
|
- SES
|
114
114
|
- [x] SES Identity (`ses_identity`)
|
115
|
+
- [x] NetworkAcl (`network_acl`)
|
115
116
|
|
116
117
|
[Resource Types more infomation here](doc/resource_types.md)
|
117
118
|
|
118
|
-
### Next..?
|
119
|
-
|
120
|
-
- ...
|
121
|
-
|
122
119
|
## References
|
123
120
|
|
124
121
|
awspec is inspired by Serverspec.
|
@@ -7,7 +7,7 @@ module Awspec
|
|
7
7
|
class_option :profile
|
8
8
|
|
9
9
|
types = %w(
|
10
|
-
vpc ec2 rds security_group elb
|
10
|
+
vpc ec2 rds security_group elb network_acl
|
11
11
|
)
|
12
12
|
|
13
13
|
types.each do |type|
|
@@ -19,10 +19,6 @@ module Awspec
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
-
types_for_generate_all = %w(
|
23
|
-
iam_policy cloudwatch_alarm
|
24
|
-
)
|
25
|
-
|
26
22
|
desc 'route53_hosted_zone [example.com.]', 'Generate route53_hosted_zone spec from Domain name'
|
27
23
|
def route53_hosted_zone(hosted_zone)
|
28
24
|
Awspec::Helper::CredentialsLoader.load(options[:profile])
|
data/lib/awspec/generator.rb
CHANGED
@@ -9,6 +9,7 @@ require 'awspec/generator/spec/route53_hosted_zone'
|
|
9
9
|
require 'awspec/generator/spec/elb'
|
10
10
|
require 'awspec/generator/spec/iam_policy'
|
11
11
|
require 'awspec/generator/spec/cloudwatch_alarm'
|
12
|
+
require 'awspec/generator/spec/network_acl'
|
12
13
|
|
13
14
|
# Doc
|
14
15
|
require 'awspec/generator/doc/type'
|
@@ -0,0 +1,96 @@
|
|
1
|
+
module Awspec::Generator
|
2
|
+
module Spec
|
3
|
+
class NetworkAcl
|
4
|
+
include Awspec::Helper::Finder
|
5
|
+
def generate_by_vpc_id(vpc_id)
|
6
|
+
describes = %w(
|
7
|
+
)
|
8
|
+
vpc = find_vpc(vpc_id)
|
9
|
+
fail 'Not Found VPC' unless vpc
|
10
|
+
@vpc_id = vpc[:vpc_id]
|
11
|
+
@vpc_tag_name = vpc.tag_name
|
12
|
+
network_acls = select_network_acl_by_vpc_id(@vpc_id)
|
13
|
+
specs = network_acls.map do |acl|
|
14
|
+
linespecs = generate_linespecs(acl)
|
15
|
+
subnet_specs = generate_subnet_specs(acl)
|
16
|
+
network_acl_id = acl[:network_acl_id]
|
17
|
+
network_acl_tag_name = acl.tag_name
|
18
|
+
inbound_entries_count = acl.entries.count do |entry|
|
19
|
+
entry.egress == false
|
20
|
+
end
|
21
|
+
outbound_entries_count = acl.entries.count do |entry|
|
22
|
+
entry.egress == true
|
23
|
+
end
|
24
|
+
content = ERB.new(network_acl_spec_template, nil, '-').result(binding).gsub(/^\n/, '')
|
25
|
+
end
|
26
|
+
specs.join("\n")
|
27
|
+
end
|
28
|
+
|
29
|
+
def generate_subnet_specs(acl)
|
30
|
+
specs = []
|
31
|
+
acl.associations.each do |a|
|
32
|
+
subnet = find_subnet(a.subnet_id)
|
33
|
+
if subnet.tag_name
|
34
|
+
spec = "it { should have_subnet('" + subnet.tag_name + "') }"
|
35
|
+
else
|
36
|
+
spec = "it { should have_subnet('" + subnet.subnet_id + "') }"
|
37
|
+
end
|
38
|
+
specs.push(spec)
|
39
|
+
end
|
40
|
+
specs
|
41
|
+
end
|
42
|
+
|
43
|
+
def generate_linespecs(acl)
|
44
|
+
linespecs = []
|
45
|
+
protocols = Awspec::Type::NetworkAcl::PROTOCOLS.invert
|
46
|
+
acl.entries.each do |entry|
|
47
|
+
line = ''
|
48
|
+
inout = 'inbound'
|
49
|
+
inout = 'outbound' if entry.egress
|
50
|
+
line += 'its(:' + inout + ') { should'
|
51
|
+
actions = { allow: 'be_allowed', deny: 'be_denied' }
|
52
|
+
line += ' ' + actions[entry.rule_action.to_sym]
|
53
|
+
port_range = entry.port_range
|
54
|
+
unless port_range.nil?
|
55
|
+
if port_range.from == port_range.to
|
56
|
+
port = port_range.from.to_s
|
57
|
+
else
|
58
|
+
port = "'" + port_range.from.to_s + '-' + port_range.to.to_s + "'"
|
59
|
+
end
|
60
|
+
line += '(' + port + ')'
|
61
|
+
end
|
62
|
+
line += ".protocol('" + protocols[entry.protocol.to_i] + "')"
|
63
|
+
line += ".source('" + entry.cidr_block + "')"
|
64
|
+
rule_number = entry.rule_number.to_i
|
65
|
+
rule_number = "'*'" if rule_number == 32_767
|
66
|
+
line += '.rule_number(' + rule_number.to_s + ')'
|
67
|
+
line += ' }'
|
68
|
+
linespecs.push(line)
|
69
|
+
end
|
70
|
+
linespecs
|
71
|
+
end
|
72
|
+
|
73
|
+
def network_acl_spec_template
|
74
|
+
template = <<-'EOF'
|
75
|
+
<%- if network_acl_tag_name -%>
|
76
|
+
describe network_acl('<%= network_acl_tag_name %>') do
|
77
|
+
<%- else -%>
|
78
|
+
describe network_acl('<%= network_acl_id %>') do
|
79
|
+
<%- end -%>
|
80
|
+
it { should exist }
|
81
|
+
it { should belong_to_vpc('<%= @vpc_tag_name %>') }
|
82
|
+
<% subnet_specs.each do |spec| %>
|
83
|
+
<%= spec %>
|
84
|
+
<% end %>
|
85
|
+
<% linespecs.each do |line| %>
|
86
|
+
<%= line %>
|
87
|
+
<% end %>
|
88
|
+
its(:inbound_entries_count) { should eq <%= inbound_entries_count %> }
|
89
|
+
its(:outbound_entries_count) { should eq <%= inbound_entries_count %> }
|
90
|
+
end
|
91
|
+
EOF
|
92
|
+
template
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -47,6 +47,24 @@ module Awspec::Type
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
+
# rubocop:disable Metrics/LineLength
|
51
|
+
PROTOCOLS = { 'ALL' => -1, 'HOPOPT' => 0, 'ICMP' => 1, 'IGMP' => 2, 'GGP' => 3, 'IPv4' => 4, 'ST' => 5, 'TCP' => 6, 'CBT' => 7, 'EGP' => 8, 'IGP' => 9, 'BBN-RCC-MON' => 10,
|
52
|
+
'NVP-II' => 11, 'PUP' => 12, 'ARGUS' => 13, 'EMCON' => 14, 'XNET' => 15, 'CHAOS' => 16, 'UDP' => 17, 'MUX' => 18, 'DCN-MEAS' => 19, 'HMP' => 20,
|
53
|
+
'PRM' => 21, 'XNS-IDP' => 22, 'TRUNK-1' => 23, 'TRUNK-2' => 24, 'LEAF-1' => 25, 'LEAF-2' => 26, 'RDP' => 27, 'IRTP' => 28, 'ISO-TP4' => 29, 'NETBLT' => 30,
|
54
|
+
'MFE-NSP' => 31, 'MERIT-INP' => 32, 'DCCP' => 33, '3PC' => 34, 'IDPR' => 35, 'XTP' => 36, 'DDP' => 37, 'IDPR-CMTP' => 38, 'TP++' => 39, 'IL' => 40,
|
55
|
+
'IPv6' => 41, 'SDRP' => 42, 'IPv6-Route' => 43, 'IPv6-Frag' => 44, 'IDRP' => 45, 'RSVP' => 46, 'GRE' => 47, 'DSR' => 48, 'BNA' => 49, 'ESP' => 50,
|
56
|
+
'AH' => 51, 'I-NLSP' => 52, 'SWIPE' => 53, 'NARP' => 54, 'MOBILE' => 55, 'TLSP' => 56, 'IPv6-ICMP' => 58, 'IPv6-NoNxt' => 59, 'IPv6-Opts' => 60,
|
57
|
+
'61' => 61, 'CFTP' => 62, '63' => 63, 'SAT-EXPAK' => 64, 'KRYPTOLAN' => 65, 'RVD' => 66, 'IPPC' => 67, '68' => 68, 'SAT-MON' => 69, 'VISA' => 70,
|
58
|
+
'IPCV' => 71, 'CPNX' => 72, 'CPHB' => 73, 'WSN' => 74, 'PVP' => 75, 'BR-SAT-MON' => 76, 'SUN-ND' => 77, 'WB-MON' => 78, 'WB-EXPAK' => 79, 'ISO-IP' => 80,
|
59
|
+
'VMTP' => 81, 'SECURE-VMTP' => 82, 'VINES' => 83, 'IPTM' => 84, 'TTP' => 84, 'NSFNET-IGP' => 85, 'DGP' => 86, 'TCF' => 87, 'EIGRP' => 88, 'OSPFIGP' => 89, 'Sprite-RPC' => 90,
|
60
|
+
'LARP' => 91, 'MTP' => 92, 'AX.25' => 93, 'IPIP' => 94, 'MICP' => 95, 'SCC-SP' => 96, 'ETHERIP' => 97, 'ENCAP' => 98, '99' => 99, 'GMTP' => 100,
|
61
|
+
'IFMP' => 101, 'PNNI' => 102, 'PIM' => 103, 'ARIS' => 104, 'SCPS' => 105, 'QNX' => 106, 'A/N' => 107, 'IPComp' => 108, 'SNP' => 109, 'Compaq-Peer' => 110,
|
62
|
+
'IPX-in-IP' => 111, 'VRRP' => 112, 'PGM' => 113, '114' => 114, 'L2TP' => 115, 'DDX' => 116, 'IATP' => 117, 'STP' => 118, 'SRP' => 119, 'UTI' => 120,
|
63
|
+
'SMP' => 121, 'SM' => 122, 'PTP' => 123, 'ISIS over IPv4' => 124, 'FIRE' => 125, 'CRTP' => 126, 'CRUDP' => 127, 'SSCOPMCE' => 128, 'IPLT' => 129, 'SPS' => 130,
|
64
|
+
'PIPE' => 131, 'SCTP' => 132, 'FC' => 133, 'RSVP-E2E-IGNORE' => 134, 'Mobility Header' => 135, 'UDPLite' => 136, 'MPLS-in-IP' => 137, 'manet' => 138, 'HIP' => 139, 'Shim6' => 140,
|
65
|
+
'WESP' => 141, 'ROHC' => 142, '253' => 253, '254' => 254 }
|
66
|
+
# rubocop:enable Metrics/LineLength
|
67
|
+
|
50
68
|
private
|
51
69
|
|
52
70
|
def entry?(rule_action, port = nil, protocol = nil, cidr = nil, rule_number = nil)
|
@@ -71,24 +89,6 @@ module Awspec::Type
|
|
71
89
|
end
|
72
90
|
end
|
73
91
|
|
74
|
-
# rubocop:disable Metrics/LineLength
|
75
|
-
PROTOCOLS = { 'ALL' => -1, 'HOPOPT' => 0, 'ICMP' => 1, 'IGMP' => 2, 'GGP' => 3, 'IPv4' => 4, 'ST' => 5, 'TCP' => 6, 'CBT' => 7, 'EGP' => 8, 'IGP' => 9, 'BBN-RCC-MON' => 10,
|
76
|
-
'NVP-II' => 11, 'PUP' => 12, 'ARGUS' => 13, 'EMCON' => 14, 'XNET' => 15, 'CHAOS' => 16, 'UDP' => 17, 'MUX' => 18, 'DCN-MEAS' => 19, 'HMP' => 20,
|
77
|
-
'PRM' => 21, 'XNS-IDP' => 22, 'TRUNK-1' => 23, 'TRUNK-2' => 24, 'LEAF-1' => 25, 'LEAF-2' => 26, 'RDP' => 27, 'IRTP' => 28, 'ISO-TP4' => 29, 'NETBLT' => 30,
|
78
|
-
'MFE-NSP' => 31, 'MERIT-INP' => 32, 'DCCP' => 33, '3PC' => 34, 'IDPR' => 35, 'XTP' => 36, 'DDP' => 37, 'IDPR-CMTP' => 38, 'TP++' => 39, 'IL' => 40,
|
79
|
-
'IPv6' => 41, 'SDRP' => 42, 'IPv6-Route' => 43, 'IPv6-Frag' => 44, 'IDRP' => 45, 'RSVP' => 46, 'GRE' => 47, 'DSR' => 48, 'BNA' => 49, 'ESP' => 50,
|
80
|
-
'AH' => 51, 'I-NLSP' => 52, 'SWIPE' => 53, 'NARP' => 54, 'MOBILE' => 55, 'TLSP' => 56, 'IPv6-ICMP' => 58, 'IPv6-NoNxt' => 59, 'IPv6-Opts' => 60,
|
81
|
-
'61' => 61, 'CFTP' => 62, '63' => 63, 'SAT-EXPAK' => 64, 'KRYPTOLAN' => 65, 'RVD' => 66, 'IPPC' => 67, '68' => 68, 'SAT-MON' => 69, 'VISA' => 70,
|
82
|
-
'IPCV' => 71, 'CPNX' => 72, 'CPHB' => 73, 'WSN' => 74, 'PVP' => 75, 'BR-SAT-MON' => 76, 'SUN-ND' => 77, 'WB-MON' => 78, 'WB-EXPAK' => 79, 'ISO-IP' => 80,
|
83
|
-
'VMTP' => 81, 'SECURE-VMTP' => 82, 'VINES' => 83, 'IPTM' => 84, 'TTP' => 84, 'NSFNET-IGP' => 85, 'DGP' => 86, 'TCF' => 87, 'EIGRP' => 88, 'OSPFIGP' => 89, 'Sprite-RPC' => 90,
|
84
|
-
'LARP' => 91, 'MTP' => 92, 'AX.25' => 93, 'IPIP' => 94, 'MICP' => 95, 'SCC-SP' => 96, 'ETHERIP' => 97, 'ENCAP' => 98, '99' => 99, 'GMTP' => 100,
|
85
|
-
'IFMP' => 101, 'PNNI' => 102, 'PIM' => 103, 'ARIS' => 104, 'SCPS' => 105, 'QNX' => 106, 'A/N' => 107, 'IPComp' => 108, 'SNP' => 109, 'Compaq-Peer' => 110,
|
86
|
-
'IPX-in-IP' => 111, 'VRRP' => 112, 'PGM' => 113, '114' => 114, 'L2TP' => 115, 'DDX' => 116, 'IATP' => 117, 'STP' => 118, 'SRP' => 119, 'UTI' => 120,
|
87
|
-
'SMP' => 121, 'SM' => 122, 'PTP' => 123, 'ISIS over IPv4' => 124, 'FIRE' => 125, 'CRTP' => 126, 'CRUDP' => 127, 'SSCOPMCE' => 128, 'IPLT' => 129, 'SPS' => 130,
|
88
|
-
'PIPE' => 131, 'SCTP' => 132, 'FC' => 133, 'RSVP-E2E-IGNORE' => 134, 'Mobility Header' => 135, 'UDPLite' => 136, 'MPLS-in-IP' => 137, 'manet' => 138, 'HIP' => 139, 'Shim6' => 140,
|
89
|
-
'WESP' => 141, 'ROHC' => 142, '253' => 253, '254' => 254 }
|
90
|
-
# rubocop:enable Metrics/LineLength
|
91
|
-
|
92
92
|
def protocol_match?(a, b)
|
93
93
|
if a.match(/\A\d+\z/) && a.to_i >= 0
|
94
94
|
return false unless b.to_i == a.to_i
|
data/lib/awspec/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: awspec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.20.
|
4
|
+
version: 0.20.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- k1LoW
|
@@ -216,6 +216,7 @@ files:
|
|
216
216
|
- lib/awspec/generator/spec/ec2.rb
|
217
217
|
- lib/awspec/generator/spec/elb.rb
|
218
218
|
- lib/awspec/generator/spec/iam_policy.rb
|
219
|
+
- lib/awspec/generator/spec/network_acl.rb
|
219
220
|
- lib/awspec/generator/spec/rds.rb
|
220
221
|
- lib/awspec/generator/spec/route53_hosted_zone.rb
|
221
222
|
- lib/awspec/generator/spec/security_group.rb
|