awspec 0.27.2 → 0.28.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cdaf7283fd3ad83496a8d7e26f99250fda35c333
4
- data.tar.gz: f91c17c13d033c634c758ce807f5c4dedec8f5ae
3
+ metadata.gz: 6f73c5f63d506b9942d39232be4d5d3ed4459ba8
4
+ data.tar.gz: bc58760a303309b3699ac78c8b5f91bd7a214562
5
5
  SHA512:
6
- metadata.gz: 74d3b19c417e76c287b62575cc0115eb54b96157eaa8996eefbe666fc86f9ba8fb8f3b68bb7284c5c5142d1880df5ee7345007a22cdcbbd25f34044cf932d42f
7
- data.tar.gz: a3e07e7c7b5ab90415e6bba0e0fee0c8c223f42c6aa026e799dd5e1e2a7dcf3b66331523f5746d8044e8f0369a5be8f62070f022d830e0a87fa283272b9b7280
6
+ metadata.gz: 33982233fcd1c9b6014f958911146d9d53d2ecfc6561d61164cf7c87e1cb45e0d3838c447725170ddd579bcab99a69720cce4c457323828efe30be042f65c72d
7
+ data.tar.gz: 1859a5181cbba64c2dcce3840af265fce99a362c6c26eba903dfee19b315ab1ae5ce56d9e864921a82fdfa4425234d741bb754ae7ca6de383e8e6da57e8bec3c
data/README.md CHANGED
@@ -26,11 +26,11 @@ Or install it yourself as:
26
26
 
27
27
  ## Getting Started
28
28
 
29
- ### 1. Generate awspec init files
29
+ ### STEP 1. Generate awspec init files
30
30
 
31
31
  $ awspec init
32
32
 
33
- ### 2. Set AWS credentials
33
+ ### STEP 2. Set AWS credentials
34
34
 
35
35
  #### 2-1. Use Shared Credentials
36
36
 
@@ -50,7 +50,7 @@ aws_secret_access_key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
50
50
  EOF
51
51
  ```
52
52
 
53
- ### 3. Write spec/*_spec.rb
53
+ ### STEP 3. Write spec/*_spec.rb
54
54
 
55
55
  ```ruby
56
56
  require 'spec_helper'
@@ -68,7 +68,7 @@ describe ec2('my-ec2-tag-name') do
68
68
  end
69
69
  ```
70
70
 
71
- ### 4. Run tests
71
+ ### STEP 4. Run tests
72
72
 
73
73
  $ bundle exec rake spec
74
74
 
@@ -87,7 +87,7 @@ $ awspec generate ec2 vpc-ab123cde --profile mycreds
87
87
  ```
88
88
 
89
89
  ```sh
90
- $ export AWS_PROFILE=mycreds; bundle exec rake spec
90
+ $ AWS_PROFILE=mycreds bundle exec rake spec
91
91
  ```
92
92
 
93
93
  ## Support AWS Resources
@@ -0,0 +1,31 @@
1
+ ### exist
2
+
3
+ ```ruby
4
+ describe nat_gateway('nat-7ff7777f') do
5
+ it { should exist }
6
+ end
7
+ ```
8
+
9
+ ### be_pending, be_failed, be_available, be_deleting, be_deleted
10
+
11
+ ```ruby
12
+ describe nat_gateway('nat-7ff7777f') do
13
+ it { should be_available }
14
+ end
15
+ ```
16
+
17
+ ### have_eip
18
+
19
+ ```ruby
20
+ describe nat_gateway('nat-7ff7777f') do
21
+ it { should have_eip('123.0.456.789') }
22
+ end
23
+ ```
24
+
25
+ ### belong_to_vpc
26
+
27
+ ```ruby
28
+ describe nat_gateway('nat-7ff7777f') do
29
+ it { should belong_to_vpc('my-vpc') }
30
+ end
31
+ ```
@@ -14,6 +14,7 @@ describe route_table('my-route-table') do
14
14
  it { should have_route('0.0.0.0/0').target(gateway: 'igw-1ab2345c') }
15
15
  it { should have_route('192.168.1.0/24').target(instance: 'my-ec2') }
16
16
  it { should have_route('192.168.2.0/24').target(vpc_peering_connection: 'my-pcx') }
17
+ it { should have_route('192.168.3.0/24').target(nat: 'nat-7ff7777f') }
17
18
  end
18
19
  ```
19
20
 
@@ -23,6 +23,7 @@
23
23
  | [ses_identity](#ses_identity)
24
24
  | [network_acl](#network_acl)
25
25
  | [directconnect_virtual_interface](#directconnect_virtual_interface)
26
+ | [nat_gateway](#nat_gateway)
26
27
 
27
28
  ## <a name="ec2">ec2</a>
28
29
 
@@ -571,6 +572,7 @@ describe route_table('my-route-table') do
571
572
  it { should have_route('0.0.0.0/0').target(gateway: 'igw-1ab2345c') }
572
573
  it { should have_route('192.168.1.0/24').target(instance: 'my-ec2') }
573
574
  it { should have_route('192.168.2.0/24').target(vpc_peering_connection: 'my-pcx') }
575
+ it { should have_route('192.168.3.0/24').target(nat: 'nat-7ff7777f') }
574
576
  end
575
577
  ```
576
578
 
@@ -1147,3 +1149,43 @@ end
1147
1149
  ```
1148
1150
 
1149
1151
  ### 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(:auth_key), its(:amazon_address), its(:customer_address), its(:virtual_interface_state), its(:customer_router_config), its(:virtual_gateway_id)
1152
+ ## <a name="nat_gateway">nat_gateway</a>
1153
+
1154
+ NatGateway resource type.
1155
+
1156
+ ### exist
1157
+
1158
+ ```ruby
1159
+ describe nat_gateway('nat-7ff7777f') do
1160
+ it { should exist }
1161
+ end
1162
+ ```
1163
+
1164
+
1165
+ ### be_pending, be_failed, be_available, be_deleting, be_deleted
1166
+
1167
+ ```ruby
1168
+ describe nat_gateway('nat-7ff7777f') do
1169
+ it { should be_available }
1170
+ end
1171
+ ```
1172
+
1173
+
1174
+ ### have_eip
1175
+
1176
+ ```ruby
1177
+ describe nat_gateway('nat-7ff7777f') do
1178
+ it { should have_eip('123.0.456.789') }
1179
+ end
1180
+ ```
1181
+
1182
+
1183
+ ### belong_to_vpc
1184
+
1185
+ ```ruby
1186
+ describe nat_gateway('nat-7ff7777f') do
1187
+ it { should belong_to_vpc('my-vpc') }
1188
+ end
1189
+ ```
1190
+
1191
+ ### its(:vpc_id), its(:subnet_id), its(:nat_gateway_id), its(:create_time), its(:delete_time), its(:state), its(:failure_code), its(:failure_message)
@@ -7,7 +7,7 @@ module Awspec
7
7
  class_option :profile
8
8
 
9
9
  types = %w(
10
- vpc ec2 rds security_group elb network_acl route_table subnet
10
+ vpc ec2 rds security_group elb network_acl route_table subnet nat_gateway
11
11
  )
12
12
 
13
13
  types.each do |type|
@@ -15,6 +15,7 @@ require 'awspec/generator/spec/subnet'
15
15
  require 'awspec/generator/spec/directconnect'
16
16
  require 'awspec/generator/spec/ebs'
17
17
  require 'awspec/generator/spec/s3_bucket'
18
+ require 'awspec/generator/spec/nat_gateway'
18
19
 
19
20
  # Doc
20
21
  require 'awspec/generator/doc/type'
@@ -0,0 +1,20 @@
1
+ module Awspec::Generator
2
+ module Doc
3
+ module Type
4
+ class NatGateway < Base
5
+ def initialize
6
+ super
7
+ @type_name = 'NatGateway'
8
+ @type = Awspec::Type::NatGateway.new('nat-7ff7777f')
9
+ @ret = @type.resource_via_client
10
+ @matchers = [
11
+ Awspec::Type::NatGateway::STATES.map { |state| 'be_' + state.tr('-', '_') }.join(', '),
12
+ 'belong_to_vpc'
13
+ ]
14
+ @ignore_matchers = Awspec::Type::NatGateway::STATES.map { |state| 'be_' + state.tr('-', '_') }
15
+ @describes = []
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,39 @@
1
+ module Awspec::Generator
2
+ module Spec
3
+ class NatGateway
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
+ nat_gateways = select_nat_gateway_by_vpc_id(@vpc_id)
13
+ specs = nat_gateways.map do |nat_gateway|
14
+ nat_gateway_id = nat_gateway[:nat_gateway_id]
15
+ content = ERB.new(nat_gateway_spec_template, nil, '-').result(binding).gsub(/^\n/, '')
16
+ end
17
+ specs.join("\n")
18
+ end
19
+
20
+ def nat_gateway_spec_template
21
+ template = <<-'EOF'
22
+ describe nat_gateway('<%= nat_gateway_id %>') do
23
+ it { should exist }
24
+ it { should be_<%= nat_gateway.state %> }
25
+ <%- if @vpc_tag_name -%>
26
+ it { should belong_to_vpc('<%= @vpc_tag_name %>') }
27
+ <%- else -%>
28
+ it { should belong_to_vpc('<%= @vpc_id %>') }
29
+ <%- end -%>
30
+ <% nat_gateway.nat_gateway_addresses.each do |address| %>
31
+ it { should have_eip('<%= address.public_ip %>') }
32
+ <% end %>
33
+ end
34
+ EOF
35
+ template
36
+ end
37
+ end
38
+ end
39
+ end
@@ -86,7 +86,7 @@ EOF
86
86
 
87
87
  Genarate #{@type.camelize} template files.
88
88
 
89
- * !! AND add '#{@type.underscore}' to Awspec::Helper::Type::TYPES in awspec/lib/helper/type.rb *
89
+ * !! AND add '#{@type.underscore}' to Awspec::Helper::Type::TYPES in lib/awspec/helper/type.rb *
90
90
 
91
91
  EOF
92
92
  end
@@ -42,32 +42,31 @@ module Awspec::Helper
42
42
  })
43
43
  end
44
44
 
45
- # find_internet_gateway find_vpn_gateway find_customer_gateway find_nat_gateway
46
- gateway_types = %w(internet vpn customer nat)
45
+ # find_internet_gateway find_vpn_gateway find_customer_gateway
46
+ gateway_types = %w(internet vpn customer)
47
47
  gateway_types.each do |type|
48
48
  define_method 'find_' + type + '_gateway' do |*args|
49
49
  gateway_id = args.first
50
- res = ec2_client.method('describe_' + type + '_gateways').call({
51
- filters: [
52
- {
53
- name: type + '-gateway-id',
54
- values: [gateway_id]
55
- }
56
- ]
57
- })
50
+ method_name = 'describe_' + type + '_gateways'
51
+ res = ec2_client.method(method_name).call({
52
+ filters: [{ name: type + '-gateway-id', values: [gateway_id] }]
53
+ })
54
+
58
55
  return res[type + '_gateways'].first if res[type + '_gateways'].count == 1
59
- res = ec2_client.method('describe_' + type + '_gateways').call({
60
- filters: [
61
- {
62
- name: 'tag:Name',
63
- values: [gateway_id]
64
- }
65
- ]
66
- })
56
+ res = ec2_client.method(method_name).call({
57
+ filters: [{ name: 'tag:Name', values: [gateway_id] }]
58
+ })
67
59
  return res[type + '_gateways'].first if res[type + '_gateways'].count == 1
68
60
  end
69
61
  end
70
62
 
63
+ def find_nat_gateway(gateway_id)
64
+ res = ec2_client.describe_nat_gateways({
65
+ filter: [{ name: 'nat-gateway-id', values: [gateway_id] }]
66
+ })
67
+ return res['nat_gateways'].first if res['nat_gateways'].count == 1
68
+ end
69
+
71
70
  def find_security_group(sg_id)
72
71
  res = ec2_client.describe_security_groups({
73
72
  filters: [{ name: 'group-id', values: [sg_id] }]
@@ -104,6 +103,13 @@ module Awspec::Helper
104
103
  return [] unless res[:addresses].count > 0
105
104
  res[:addresses]
106
105
  end
106
+
107
+ def select_nat_gateway_by_vpc_id(vpc_id)
108
+ res = ec2_client.describe_nat_gateways({
109
+ filter: [{ name: 'vpc-id', values: [vpc_id] }]
110
+ })
111
+ res[:nat_gateways]
112
+ end
107
113
  end
108
114
  end
109
115
  end
@@ -7,6 +7,7 @@ module Awspec
7
7
  route_table ebs elb lambda iam_user iam_group iam_role
8
8
  iam_policy elasticache elasticache_cache_parameter_group
9
9
  cloudwatch_alarm ses_identity network_acl directconnect_virtual_interface
10
+ nat_gateway
10
11
  )
11
12
 
12
13
  TYPES.each do |type|
@@ -0,0 +1,35 @@
1
+ Aws.config[:ec2] = {
2
+ stub_responses: {
3
+ describe_nat_gateways: {
4
+ nat_gateways: [
5
+ {
6
+ nat_gateway_id: 'nat-7ff7777f',
7
+ vpc_id: 'vpc-ab123cde',
8
+ state: 'available',
9
+ nat_gateway_addresses: [
10
+ public_ip: '123.0.456.789',
11
+ allocation_id: 'unknown',
12
+ private_ip: 'unknown',
13
+ network_interface_id: 'unknown'
14
+ ]
15
+ }
16
+ ],
17
+ next_token: nil
18
+ },
19
+ describe_vpcs: {
20
+ vpcs: [
21
+ {
22
+ vpc_id: 'vpc-ab123cde',
23
+ state: 'available',
24
+ cidr_block: '10.0.0.0/16',
25
+ tags: [
26
+ {
27
+ key: 'Name',
28
+ value: 'my-vpc'
29
+ }
30
+ ]
31
+ }
32
+ ]
33
+ }
34
+ }
35
+ }
@@ -0,0 +1,25 @@
1
+ module Awspec::Type
2
+ class NatGateway < Base
3
+ def initialize(id)
4
+ super
5
+ @resource_via_client = find_nat_gateway(id)
6
+ @id = @resource_via_client[:nat_gateway_id] if @resource_via_client
7
+ end
8
+
9
+ STATES = %w(
10
+ pending failed available deleting deleted
11
+ )
12
+
13
+ STATES.each do |state|
14
+ define_method state.tr('-', '_') + '?' do
15
+ @resource_via_client[:state] == state
16
+ end
17
+ end
18
+
19
+ def has_eip?(ip_address = nil)
20
+ @resource_via_client.nat_gateway_addresses.find do |address|
21
+ return address.public_ip == ip_address
22
+ end
23
+ end
24
+ end
25
+ end
@@ -1,3 +1,3 @@
1
1
  module Awspec
2
- VERSION = '0.27.2'
2
+ VERSION = '0.28.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: awspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.27.2
4
+ version: 0.28.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - k1LoW
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-12-18 00:00:00.000000000 Z
11
+ date: 2015-12-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -213,6 +213,7 @@ files:
213
213
  - doc/_resource_types/iam_role.md
214
214
  - doc/_resource_types/iam_user.md
215
215
  - doc/_resource_types/lambda.md
216
+ - doc/_resource_types/nat_gateway.md
216
217
  - doc/_resource_types/network_acl.md
217
218
  - doc/_resource_types/rds.md
218
219
  - doc/_resource_types/rds_db_parameter_group.md
@@ -247,6 +248,7 @@ files:
247
248
  - lib/awspec/generator/doc/type/iam_role.rb
248
249
  - lib/awspec/generator/doc/type/iam_user.rb
249
250
  - lib/awspec/generator/doc/type/lambda.rb
251
+ - lib/awspec/generator/doc/type/nat_gateway.rb
250
252
  - lib/awspec/generator/doc/type/network_acl.rb
251
253
  - lib/awspec/generator/doc/type/rds.rb
252
254
  - lib/awspec/generator/doc/type/rds_db_parameter_group.rb
@@ -263,6 +265,7 @@ files:
263
265
  - lib/awspec/generator/spec/ec2.rb
264
266
  - lib/awspec/generator/spec/elb.rb
265
267
  - lib/awspec/generator/spec/iam_policy.rb
268
+ - lib/awspec/generator/spec/nat_gateway.rb
266
269
  - lib/awspec/generator/spec/network_acl.rb
267
270
  - lib/awspec/generator/spec/rds.rb
268
271
  - lib/awspec/generator/spec/route53_hosted_zone.rb
@@ -322,6 +325,7 @@ files:
322
325
  - lib/awspec/stub/iam_role.rb
323
326
  - lib/awspec/stub/iam_user.rb
324
327
  - lib/awspec/stub/lambda.rb
328
+ - lib/awspec/stub/nat_gateway.rb
325
329
  - lib/awspec/stub/network_acl.rb
326
330
  - lib/awspec/stub/rds.rb
327
331
  - lib/awspec/stub/rds_db_parameter_group.rb
@@ -347,6 +351,7 @@ files:
347
351
  - lib/awspec/type/iam_role.rb
348
352
  - lib/awspec/type/iam_user.rb
349
353
  - lib/awspec/type/lambda.rb
354
+ - lib/awspec/type/nat_gateway.rb
350
355
  - lib/awspec/type/network_acl.rb
351
356
  - lib/awspec/type/rds.rb
352
357
  - lib/awspec/type/rds_db_parameter_group.rb