awspec 0.5.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -2
- data/README.md +9 -5
- data/Rakefile +7 -3
- data/doc/_resource_types/ec2.md +15 -0
- data/doc/_resource_types/elb.md +9 -0
- data/doc/resource_types.md +242 -0
- data/lib/awspec/docgen.rb +23 -0
- data/lib/awspec/generator.rb +8 -0
- data/lib/awspec/generator/doc/auto_scaling_group.rb +15 -0
- data/lib/awspec/generator/doc/base.rb +74 -0
- data/lib/awspec/generator/doc/ebs.rb +15 -0
- data/lib/awspec/generator/doc/ec2.rb +15 -0
- data/lib/awspec/generator/doc/elb.rb +18 -0
- data/lib/awspec/generator/doc/rds.rb +15 -0
- data/lib/awspec/generator/doc/rds_db_parameter_group.rb +15 -0
- data/lib/awspec/generator/doc/route53_hosted_zone.rb +15 -0
- data/lib/awspec/generator/doc/route_table.rb +15 -0
- data/lib/awspec/generator/doc/s3.rb +15 -0
- data/lib/awspec/generator/doc/security_group.rb +15 -0
- data/lib/awspec/generator/doc/subnet.rb +15 -0
- data/lib/awspec/generator/doc/vpc.rb +15 -0
- data/lib/awspec/helper/finder.rb +3 -0
- data/lib/awspec/helper/finder/ec2.rb +3 -1
- data/lib/awspec/helper/finder/elb.rb +14 -0
- data/lib/awspec/helper/type.rb +4 -5
- data/lib/awspec/type/ec2.rb +1 -1
- data/lib/awspec/type/elb.rb +71 -0
- data/lib/awspec/type/rds.rb +1 -1
- data/lib/awspec/version.rb +1 -1
- metadata +21 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 64695d36dc5c2eacd3cfb6999fa4639aaad880a5
|
4
|
+
data.tar.gz: 8f8929979324810c08d756abb48f7f0259a74d17
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a38ee03bfc99f1eac2854bc49b43cb31fc533fdebaa11a4bfef33c0a7bbc0d6060bbc769a254483349fa74c8b7c7916a9285030a4dcfe11e889705915dcbbcf6
|
7
|
+
data.tar.gz: 04d2562dfed0c1edf4cb1a0cd62c8d9b66b3136c9c7d25b3cad7671b45260d9d0d2d660b8857d120e8c7360a2c65f0d4ee123258222a9a1a4fff6d4b47b6cf20
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -18,7 +18,7 @@ Or install it yourself as:
|
|
18
18
|
|
19
19
|
$ gem install awspec
|
20
20
|
|
21
|
-
##
|
21
|
+
## Getting Started
|
22
22
|
|
23
23
|
### 1. Generate awspec init files
|
24
24
|
|
@@ -87,17 +87,21 @@ $ awspec generate ec2 vpc-ab123cde >> spec/ec2_spec.rb
|
|
87
87
|
- [x] Auto Scaling Group (`auto_scaling_group`)
|
88
88
|
- [x] Subnet (`subnet`)
|
89
89
|
- [x] RouteTable (`route_table`)
|
90
|
-
- [x] EBS Volume
|
90
|
+
- [x] EBS Volume (`ebs`)
|
91
|
+
- [x] ELB (`elb`)
|
92
|
+
|
93
|
+
[Resource Types more infomation here](doc/resource_types.md)
|
91
94
|
|
92
95
|
### Next..
|
93
96
|
|
94
|
-
-
|
97
|
+
- IAM
|
98
|
+
- [ ] IAM User
|
95
99
|
- ...
|
96
100
|
|
97
101
|
## TODO
|
98
102
|
|
99
|
-
- [
|
100
|
-
- [
|
103
|
+
- [x] Comment format for Document generation
|
104
|
+
- [x] Spec generate command
|
101
105
|
|
102
106
|
## Contributing
|
103
107
|
|
data/Rakefile
CHANGED
@@ -8,14 +8,18 @@ end
|
|
8
8
|
if defined?(RSpec)
|
9
9
|
task spec: 'spec:all'
|
10
10
|
namespace :spec do
|
11
|
-
task all: ['spec:type', 'spec:
|
11
|
+
task all: ['spec:type', 'spec:generator_spec', 'spec:generator_doc']
|
12
12
|
|
13
13
|
RSpec::Core::RakeTask.new(:type) do |t|
|
14
14
|
t.pattern = 'spec/type/*_spec.rb'
|
15
15
|
end
|
16
16
|
|
17
|
-
RSpec::Core::RakeTask.new(:
|
18
|
-
t.pattern = 'spec/generator/*_spec.rb'
|
17
|
+
RSpec::Core::RakeTask.new(:generator_spec) do |t|
|
18
|
+
t.pattern = 'spec/generator/spec/*_spec.rb'
|
19
|
+
end
|
20
|
+
|
21
|
+
RSpec::Core::RakeTask.new(:generator_doc) do |t|
|
22
|
+
t.pattern = 'spec/generator/doc/*_spec.rb'
|
19
23
|
end
|
20
24
|
end
|
21
25
|
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
### have_listener
|
2
|
+
|
3
|
+
http://docs.aws.amazon.com/en_us/ElasticLoadBalancing/latest/DeveloperGuide/elb-listener-config.html
|
4
|
+
|
5
|
+
```ruby
|
6
|
+
describe elb('my-elb') do
|
7
|
+
it { should have_listener(protocol: 'HTTPS', port: 443, instance_protocol: 'HTTP', instance_port: 80) }
|
8
|
+
end
|
9
|
+
```
|
@@ -0,0 +1,242 @@
|
|
1
|
+
# Resource Types
|
2
|
+
|
3
|
+
[ec2](#ec2)
|
4
|
+
| [rds](#rds)
|
5
|
+
| [rds_db_parameter_group](#rds_db_parameter_group)
|
6
|
+
| [security_group](#security_group)
|
7
|
+
| [vpc](#vpc)
|
8
|
+
| [s3](#s3)
|
9
|
+
| [route53_hosted_zone](#route53_hosted_zone)
|
10
|
+
| [auto_scaling_group](#auto_scaling_group)
|
11
|
+
| [subnet](#subnet)
|
12
|
+
| [route_table](#route_table)
|
13
|
+
| [ebs](#ebs)
|
14
|
+
| [elb](#elb)
|
15
|
+
|
16
|
+
## <a name="ec2">ec2</a>
|
17
|
+
|
18
|
+
EC2 resource type.
|
19
|
+
|
20
|
+
### exist
|
21
|
+
|
22
|
+
```ruby
|
23
|
+
describe ec2('my-ec2') do
|
24
|
+
it { should exist }
|
25
|
+
end
|
26
|
+
```
|
27
|
+
|
28
|
+
|
29
|
+
### be_stopped
|
30
|
+
|
31
|
+
### be_pending
|
32
|
+
|
33
|
+
### be_running
|
34
|
+
|
35
|
+
```ruby
|
36
|
+
describe ec2('my-ec2') do
|
37
|
+
it { should be_running }
|
38
|
+
end
|
39
|
+
```
|
40
|
+
|
41
|
+
### be_shutting_down
|
42
|
+
|
43
|
+
### be_terminated
|
44
|
+
|
45
|
+
### be_stopping
|
46
|
+
|
47
|
+
### have_security_group
|
48
|
+
|
49
|
+
### have_eip
|
50
|
+
|
51
|
+
### have_ebs
|
52
|
+
|
53
|
+
### belong_to_subnet
|
54
|
+
|
55
|
+
### belong_to_vpc
|
56
|
+
|
57
|
+
#### its(:instance_id), its(:image_id), its(:private_dns_name), its(:public_dns_name), its(:state_transition_reason), its(:key_name), its(:ami_launch_index), its(:instance_type), its(:launch_time), its(:placement), its(:kernel_id), its(:ramdisk_id), its(:platform), its(:monitoring), its(:subnet_id), its(:vpc_id), its(:private_ip_address), its(:public_ip_address), its(:state_reason), its(:architecture), its(:root_device_type), its(:root_device_name), its(:virtualization_type), its(:instance_lifecycle), its(:spot_instance_request_id), its(:client_token), its(:source_dest_check), its(:hypervisor), its(:iam_instance_profile), its(:ebs_optimized), its(:sriov_net_support)
|
58
|
+
## <a name="rds">rds</a>
|
59
|
+
|
60
|
+
RDS resource type.
|
61
|
+
|
62
|
+
### exist
|
63
|
+
|
64
|
+
### be_upgrading
|
65
|
+
|
66
|
+
### be_storage_full
|
67
|
+
|
68
|
+
### be_available
|
69
|
+
|
70
|
+
### be_backing_up
|
71
|
+
|
72
|
+
### be_creating
|
73
|
+
|
74
|
+
### be_deleting
|
75
|
+
|
76
|
+
### be_failed
|
77
|
+
|
78
|
+
### be_inaccessible_encryption_credentials
|
79
|
+
|
80
|
+
### be_incompatible_credentials
|
81
|
+
|
82
|
+
### be_incompatible_network
|
83
|
+
|
84
|
+
### be_incompatible_option_group
|
85
|
+
|
86
|
+
### be_incompatible_parameters
|
87
|
+
|
88
|
+
### be_restore_error
|
89
|
+
|
90
|
+
### be_maintenance
|
91
|
+
|
92
|
+
### be_modifying
|
93
|
+
|
94
|
+
### be_rebooting
|
95
|
+
|
96
|
+
### be_renaming
|
97
|
+
|
98
|
+
### be_resetting_master_credentials
|
99
|
+
|
100
|
+
### be_incompatible_restore
|
101
|
+
|
102
|
+
### have_db_parameter_group
|
103
|
+
|
104
|
+
### have_option_group
|
105
|
+
|
106
|
+
### have_security_group
|
107
|
+
|
108
|
+
### belong_to_db_subnet_group
|
109
|
+
|
110
|
+
### belong_to_subnet
|
111
|
+
|
112
|
+
### belong_to_vpc
|
113
|
+
|
114
|
+
#### its(:vpc_id), its(:db_instance_identifier), its(:db_instance_class), its(:engine), its(:db_instance_status), its(:master_username), its(:db_name), its(:endpoint), its(:allocated_storage), its(:instance_create_time), its(:preferred_backup_window), its(:backup_retention_period), its(:availability_zone), its(:preferred_maintenance_window), its(:pending_modified_values), its(:latest_restorable_time), its(:multi_az), its(:engine_version), its(:auto_minor_version_upgrade), its(:read_replica_source_db_instance_identifier), its(:license_model), its(:iops), its(:character_set_name), its(:secondary_availability_zone), its(:publicly_accessible), its(:storage_type), its(:tde_credential_arn), its(:db_instance_port), its(:db_cluster_identifier), its(:storage_encrypted), its(:kms_key_id), its(:dbi_resource_id), its(:ca_certificate_identifier)
|
115
|
+
## <a name="rds_db_parameter_group">rds_db_parameter_group</a>
|
116
|
+
|
117
|
+
RdsDbParameterGroup resource type.
|
118
|
+
|
119
|
+
### exist
|
120
|
+
|
121
|
+
|
122
|
+
## <a name="security_group">security_group</a>
|
123
|
+
|
124
|
+
SecurityGroup resource type.
|
125
|
+
|
126
|
+
### exist
|
127
|
+
|
128
|
+
### its(:inbound), its(:outbound)
|
129
|
+
|
130
|
+
#### its(:ip_permissions_count), its(:ip_permissions_egress_count), its(:owner_id), its(:group_name), its(:group_id), its(:description), its(:vpc_id)
|
131
|
+
## <a name="vpc">vpc</a>
|
132
|
+
|
133
|
+
VPC resource type.
|
134
|
+
|
135
|
+
### exist
|
136
|
+
|
137
|
+
### be_pending
|
138
|
+
|
139
|
+
### be_available
|
140
|
+
|
141
|
+
### have_network_acl
|
142
|
+
|
143
|
+
### have_route_table
|
144
|
+
|
145
|
+
#### its(:vpc_id), its(:state), its(:cidr_block), its(:dhcp_options_id), its(:instance_tenancy), its(:is_default)
|
146
|
+
## <a name="s3">s3</a>
|
147
|
+
|
148
|
+
S3 resource type.
|
149
|
+
|
150
|
+
### exist
|
151
|
+
|
152
|
+
### have_object
|
153
|
+
|
154
|
+
#### its(:name), its(:creation_date)
|
155
|
+
## <a name="route53_hosted_zone">route53_hosted_zone</a>
|
156
|
+
|
157
|
+
Route53HostedZone resource type.
|
158
|
+
|
159
|
+
### exist
|
160
|
+
|
161
|
+
### have_record_set
|
162
|
+
|
163
|
+
#### its(:id), its(:name), its(:caller_reference), its(:config), its(:resource_record_set_count)
|
164
|
+
## <a name="auto_scaling_group">auto_scaling_group</a>
|
165
|
+
|
166
|
+
AutoScalingGroup resource type.
|
167
|
+
|
168
|
+
### exist
|
169
|
+
|
170
|
+
### have_ec2
|
171
|
+
|
172
|
+
### have_elb
|
173
|
+
|
174
|
+
#### its(:auto_scaling_group_name), its(:auto_scaling_group_arn), its(:launch_configuration_name), its(:min_size), its(:max_size), its(:desired_capacity), its(:default_cooldown), its(:health_check_type), its(:health_check_grace_period), its(:created_time), its(:placement_group), its(:vpc_zone_identifier), its(:status)
|
175
|
+
## <a name="subnet">subnet</a>
|
176
|
+
|
177
|
+
Subnet resource type.
|
178
|
+
|
179
|
+
### exist
|
180
|
+
|
181
|
+
### be_pending
|
182
|
+
|
183
|
+
### be_available
|
184
|
+
|
185
|
+
#### its(:subnet_id), its(:state), its(:vpc_id), its(:cidr_block), its(:available_ip_address_count), its(:availability_zone), its(:default_for_az), its(:map_public_ip_on_launch)
|
186
|
+
## <a name="route_table">route_table</a>
|
187
|
+
|
188
|
+
RouteTable resource type.
|
189
|
+
|
190
|
+
### exist
|
191
|
+
|
192
|
+
### have_route
|
193
|
+
|
194
|
+
#### its(:route_table_id), its(:vpc_id)
|
195
|
+
## <a name="ebs">ebs</a>
|
196
|
+
|
197
|
+
EBS resource type.
|
198
|
+
|
199
|
+
### exist
|
200
|
+
|
201
|
+
### be_deleted
|
202
|
+
|
203
|
+
### be_in_use
|
204
|
+
|
205
|
+
### be_deleting
|
206
|
+
|
207
|
+
### be_available
|
208
|
+
|
209
|
+
### be_error
|
210
|
+
|
211
|
+
### be_attached_to
|
212
|
+
|
213
|
+
### be_creating
|
214
|
+
|
215
|
+
#### its(:volume_id), its(:size), its(:snapshot_id), its(:availability_zone), its(:state), its(:create_time), its(:volume_type), its(:iops), its(:encrypted), its(:kms_key_id)
|
216
|
+
## <a name="elb">elb</a>
|
217
|
+
|
218
|
+
ELB resource type.
|
219
|
+
|
220
|
+
### exist
|
221
|
+
|
222
|
+
### have_listener
|
223
|
+
|
224
|
+
http://docs.aws.amazon.com/en_us/ElasticLoadBalancing/latest/DeveloperGuide/elb-listener-config.html
|
225
|
+
|
226
|
+
```ruby
|
227
|
+
describe elb('my-elb') do
|
228
|
+
it { should have_listener(protocol: 'HTTPS', port: 443, instance_protocol: 'HTTP', instance_port: 80) }
|
229
|
+
end
|
230
|
+
```
|
231
|
+
|
232
|
+
### have_ec2
|
233
|
+
|
234
|
+
### have_subnet
|
235
|
+
|
236
|
+
### have_security_group
|
237
|
+
|
238
|
+
### belong_to_subnet
|
239
|
+
|
240
|
+
### belong_to_vpc
|
241
|
+
|
242
|
+
#### its(:health_check_target), its(:health_check_interval), its(:health_check_timeout), its(:health_check_unhealthy_threshold), its(:health_check_healthy_threshold), its(:load_balancer_name), its(:dns_name), its(:canonical_hosted_zone_name), its(:canonical_hosted_zone_name_id), its(:vpc_id), its(:created_time), its(:scheme)
|
@@ -0,0 +1,23 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'awspec'
|
4
|
+
|
5
|
+
Aws.config[:stub_responses] = true
|
6
|
+
|
7
|
+
types = Awspec::Helper::Type::TYPES
|
8
|
+
types.delete('base')
|
9
|
+
|
10
|
+
links = types.map do |type|
|
11
|
+
'[' + type + '](#' + type + ')'
|
12
|
+
end
|
13
|
+
header = <<-'EOF'
|
14
|
+
# Resource Types
|
15
|
+
|
16
|
+
<%= links.join("\n| ") %>
|
17
|
+
|
18
|
+
EOF
|
19
|
+
puts ERB.new(header, nil, '-').result(binding)
|
20
|
+
|
21
|
+
types.map do |type|
|
22
|
+
puts eval "Awspec::Generator::Doc::#{type.to_camel_case}.new.generate_doc"
|
23
|
+
end
|
data/lib/awspec/generator.rb
CHANGED
@@ -1,5 +1,13 @@
|
|
1
|
+
types = Awspec::Helper::Type::TYPES
|
2
|
+
|
3
|
+
# Spec
|
1
4
|
require 'awspec/generator/spec/ec2'
|
2
5
|
require 'awspec/generator/spec/rds'
|
3
6
|
require 'awspec/generator/spec/vpc'
|
4
7
|
require 'awspec/generator/spec/security_group'
|
5
8
|
require 'awspec/generator/spec/route53_hosted_zone'
|
9
|
+
|
10
|
+
# Doc
|
11
|
+
types.each do |type|
|
12
|
+
require 'awspec/generator/doc/' + type
|
13
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Awspec::Generator
|
2
|
+
module Doc
|
3
|
+
class AutoScalingGroup < Base
|
4
|
+
def initialize
|
5
|
+
@type_name = 'AutoScalingGroup'
|
6
|
+
require File.dirname(__FILE__) + '/../../../../spec/stub/' + @type_name.to_snake_case
|
7
|
+
@type = Awspec::Type::AutoScalingGroup.new('my-auto-scaling-group')
|
8
|
+
@ret = @type.group
|
9
|
+
@matchers = []
|
10
|
+
@ignore_matchers = []
|
11
|
+
@describes = []
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
module Awspec::Generator
|
2
|
+
module Doc
|
3
|
+
class Base
|
4
|
+
def generate_doc
|
5
|
+
@matchers += collect_matchers - @ignore_matchers
|
6
|
+
@matchers.sort! do |a, b|
|
7
|
+
sort_num(a) <=> sort_num(b)
|
8
|
+
end
|
9
|
+
@describes += @ret.members.select do |describe|
|
10
|
+
next true unless @ret[describe].is_a?(Array) || @ret[describe].is_a?(Hash) || @ret[describe].is_a?(Struct)
|
11
|
+
end if @ret.respond_to?(:members)
|
12
|
+
its = @describes.map do |describe|
|
13
|
+
'its(:' + describe.to_s + ')'
|
14
|
+
end
|
15
|
+
|
16
|
+
@descriptions = {}
|
17
|
+
merge_file = File.dirname(__FILE__) + '/../../../../doc/_resource_types/' + @type_name.to_snake_case + '.md'
|
18
|
+
if File.exist?(merge_file)
|
19
|
+
matcher = nil
|
20
|
+
File.foreach(merge_file) do |line|
|
21
|
+
if /\A### (.+)\Z/ =~ line
|
22
|
+
matcher = Regexp.last_match[1]
|
23
|
+
next
|
24
|
+
end
|
25
|
+
@descriptions[matcher] = '' unless @descriptions[matcher]
|
26
|
+
@descriptions[matcher] += line
|
27
|
+
end
|
28
|
+
end
|
29
|
+
ERB.new(doc_template, nil, '-').result(binding)
|
30
|
+
end
|
31
|
+
|
32
|
+
def collect_matchers
|
33
|
+
methods = @type.methods - Awspec::Helper::Finder.instance_methods - Object.methods
|
34
|
+
methods.select! do |method|
|
35
|
+
method.to_s.include?('?')
|
36
|
+
end
|
37
|
+
methods.map! do |method|
|
38
|
+
next 'exist' if 'exists?' == method.to_s
|
39
|
+
next 'have_' + Regexp.last_match[1] if /\Ahas_(.+)\?\z/ =~ method.to_s
|
40
|
+
next 'be_' + Regexp.last_match[1] if /\A(.+)\?\z/ =~ method.to_s
|
41
|
+
method.to_s
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def doc_template
|
46
|
+
template = <<-'EOF'
|
47
|
+
## <a name="<%= @type_name.to_snake_case %>"><%= @type_name.to_snake_case %></a>
|
48
|
+
|
49
|
+
<%= @type_name %> resource type.
|
50
|
+
<% @matchers.each do |matcher| %>
|
51
|
+
### <%= matcher %>
|
52
|
+
<%- if @descriptions.include?(matcher) -%><%= @descriptions[matcher] %><%- end -%>
|
53
|
+
<% end %>
|
54
|
+
<%- unless its.empty? -%>#### <%= its.join(', ') %><%- end -%>
|
55
|
+
|
56
|
+
EOF
|
57
|
+
template
|
58
|
+
end
|
59
|
+
|
60
|
+
def sort_num(str)
|
61
|
+
case str
|
62
|
+
when 'exist'
|
63
|
+
0
|
64
|
+
when /\Abe_/
|
65
|
+
1
|
66
|
+
when /\Ahave_/
|
67
|
+
2
|
68
|
+
else
|
69
|
+
3
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Awspec::Generator
|
2
|
+
module Doc
|
3
|
+
class Ebs < Base
|
4
|
+
def initialize
|
5
|
+
@type_name = 'EBS'
|
6
|
+
require File.dirname(__FILE__) + '/../../../../spec/stub/' + @type_name.to_snake_case
|
7
|
+
@type = Awspec::Type::Ebs.new('my-ebs')
|
8
|
+
@ret = @type.volume
|
9
|
+
@matchers = []
|
10
|
+
@ignore_matchers = []
|
11
|
+
@describes = []
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Awspec::Generator
|
2
|
+
module Doc
|
3
|
+
class Ec2 < Base
|
4
|
+
def initialize
|
5
|
+
@type_name = 'EC2'
|
6
|
+
require File.dirname(__FILE__) + '/../../../../spec/stub/' + @type_name.to_snake_case
|
7
|
+
@type = Awspec::Type::Ec2.new('my-ec2')
|
8
|
+
@ret = @type.instance
|
9
|
+
@matchers = %w(belong_to_vpc belong_to_subnet)
|
10
|
+
@ignore_matchers = []
|
11
|
+
@describes = []
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Awspec::Generator
|
2
|
+
module Doc
|
3
|
+
class Elb < Base
|
4
|
+
def initialize
|
5
|
+
@type_name = 'ELB'
|
6
|
+
require File.dirname(__FILE__) + '/../../../../spec/stub/' + @type_name.to_snake_case
|
7
|
+
@type = Awspec::Type::Elb.new('my-elb')
|
8
|
+
@ret = @type.lb
|
9
|
+
@matchers = %w(belong_to_vpc belong_to_subnet)
|
10
|
+
@ignore_matchers = []
|
11
|
+
@describes = %w(
|
12
|
+
health_check_target health_check_interval health_check_timeout
|
13
|
+
health_check_unhealthy_threshold health_check_healthy_threshold
|
14
|
+
)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Awspec::Generator
|
2
|
+
module Doc
|
3
|
+
class Rds < Base
|
4
|
+
def initialize
|
5
|
+
@type_name = 'RDS'
|
6
|
+
require File.dirname(__FILE__) + '/../../../../spec/stub/' + @type_name.to_snake_case
|
7
|
+
@type = Awspec::Type::Rds.new('my-rds')
|
8
|
+
@ret = @type.instance
|
9
|
+
@matchers = %w(belong_to_vpc belong_to_subnet belong_to_db_subnet_group)
|
10
|
+
@ignore_matchers = []
|
11
|
+
@describes = %w(vpc_id)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Awspec::Generator
|
2
|
+
module Doc
|
3
|
+
class RdsDbParameterGroup < Base
|
4
|
+
def initialize
|
5
|
+
@type_name = 'RdsDbParameterGroup'
|
6
|
+
require File.dirname(__FILE__) + '/../../../../spec/stub/' + @type_name.to_snake_case
|
7
|
+
@type = Awspec::Type::RdsDbParameterGroup.new('my-rds-db-parameter-group')
|
8
|
+
@ret = @type.parameters
|
9
|
+
@matchers = []
|
10
|
+
@ignore_matchers = []
|
11
|
+
@describes = []
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Awspec::Generator
|
2
|
+
module Doc
|
3
|
+
class Route53HostedZone < Base
|
4
|
+
def initialize
|
5
|
+
@type_name = 'Route53HostedZone'
|
6
|
+
require File.dirname(__FILE__) + '/../../../../spec/stub/' + @type_name.to_snake_case
|
7
|
+
@type = Awspec::Type::Route53HostedZone.new('example.com.')
|
8
|
+
@ret = @type.hosted_zone
|
9
|
+
@matchers = []
|
10
|
+
@ignore_matchers = []
|
11
|
+
@describes = []
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Awspec::Generator
|
2
|
+
module Doc
|
3
|
+
class RouteTable < Base
|
4
|
+
def initialize
|
5
|
+
@type_name = 'RouteTable'
|
6
|
+
require File.dirname(__FILE__) + '/../../../../spec/stub/' + @type_name.to_snake_case
|
7
|
+
@type = Awspec::Type::RouteTable.new('my-route-table')
|
8
|
+
@ret = @type.route_table
|
9
|
+
@matchers = []
|
10
|
+
@ignore_matchers = []
|
11
|
+
@describes = []
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Awspec::Generator
|
2
|
+
module Doc
|
3
|
+
class S3 < Base
|
4
|
+
def initialize
|
5
|
+
@type_name = 'S3'
|
6
|
+
require File.dirname(__FILE__) + '/../../../../spec/stub/' + @type_name.to_snake_case
|
7
|
+
@type = Awspec::Type::S3.new('my-bucket')
|
8
|
+
@ret = @type.bucket
|
9
|
+
@matchers = []
|
10
|
+
@ignore_matchers = []
|
11
|
+
@describes = []
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Awspec::Generator
|
2
|
+
module Doc
|
3
|
+
class SecurityGroup < Base
|
4
|
+
def initialize
|
5
|
+
@type_name = 'SecurityGroup'
|
6
|
+
require File.dirname(__FILE__) + '/../../../../spec/stub/' + @type_name.to_snake_case
|
7
|
+
@type = Awspec::Type::SecurityGroup.new('my-security-group-name')
|
8
|
+
@ret = @type.sg
|
9
|
+
@matchers = ['its(:inbound), its(:outbound)']
|
10
|
+
@ignore_matchers = %w(be_opened be_inbound_opened be_outbound_opened)
|
11
|
+
@describes = %w(ip_permissions_count ip_permissions_egress_count)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Awspec::Generator
|
2
|
+
module Doc
|
3
|
+
class Subnet < Base
|
4
|
+
def initialize
|
5
|
+
@type_name = 'Subnet'
|
6
|
+
require File.dirname(__FILE__) + '/../../../../spec/stub/' + @type_name.to_snake_case
|
7
|
+
@type = Awspec::Type::Subnet.new('my-route-table')
|
8
|
+
@ret = @type.subnet
|
9
|
+
@matchers = []
|
10
|
+
@ignore_matchers = []
|
11
|
+
@describes = []
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Awspec::Generator
|
2
|
+
module Doc
|
3
|
+
class Vpc < Base
|
4
|
+
def initialize
|
5
|
+
@type_name = 'VPC'
|
6
|
+
require File.dirname(__FILE__) + '/../../../../spec/stub/' + @type_name.to_snake_case
|
7
|
+
@type = Awspec::Type::Vpc.new('my-vpc')
|
8
|
+
@ret = @type.vpc
|
9
|
+
@matchers = []
|
10
|
+
@ignore_matchers = []
|
11
|
+
@describes = []
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/awspec/helper/finder.rb
CHANGED
@@ -6,6 +6,7 @@ require 'awspec/helper/finder/rds'
|
|
6
6
|
require 'awspec/helper/finder/route53'
|
7
7
|
require 'awspec/helper/finder/s3'
|
8
8
|
require 'awspec/helper/finder/auto_scaling'
|
9
|
+
require 'awspec/helper/finder/elb'
|
9
10
|
|
10
11
|
module Awspec::Helper
|
11
12
|
module Finder
|
@@ -17,6 +18,7 @@ module Awspec::Helper
|
|
17
18
|
include Awspec::Helper::Finder::Route53
|
18
19
|
include Awspec::Helper::Finder::S3
|
19
20
|
include Awspec::Helper::Finder::AutoScaling
|
21
|
+
include Awspec::Helper::Finder::Elb
|
20
22
|
|
21
23
|
# rubocop:disable all
|
22
24
|
def initialize(id = nil)
|
@@ -25,6 +27,7 @@ module Awspec::Helper
|
|
25
27
|
@route53_client = Aws::Route53::Client.new
|
26
28
|
@s3_client = Aws::S3::Client.new
|
27
29
|
@auto_scaling_client = Aws::AutoScaling::Client.new
|
30
|
+
@elb_client = Aws::ElasticLoadBalancing::Client.new
|
28
31
|
end
|
29
32
|
end
|
30
33
|
end
|
@@ -16,7 +16,7 @@ module Awspec::Helper
|
|
16
16
|
res = @ec2_client.describe_instances({
|
17
17
|
filters: filters
|
18
18
|
})
|
19
|
-
|
19
|
+
elsif id.is_a?(String)
|
20
20
|
# instance_id or tag:Name
|
21
21
|
begin
|
22
22
|
res = @ec2_client.describe_instances({
|
@@ -29,6 +29,8 @@ module Awspec::Helper
|
|
29
29
|
filters: [{ name: 'tag:Name', values: [id] }]
|
30
30
|
})
|
31
31
|
end
|
32
|
+
else
|
33
|
+
return nil
|
32
34
|
end
|
33
35
|
return res[:reservations][0][:instances][0] if res[:reservations].count == 1 && \
|
34
36
|
res[:reservations][0][:instances].count == 1
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Awspec::Helper
|
2
|
+
module Finder
|
3
|
+
module Elb
|
4
|
+
def find_elb(id)
|
5
|
+
res = @elb_client.describe_load_balancers({
|
6
|
+
load_balancer_names: [id]
|
7
|
+
})
|
8
|
+
return res[:load_balancer_descriptions][0] if res[:load_balancer_descriptions].count == 1
|
9
|
+
rescue
|
10
|
+
return nil
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/lib/awspec/helper/type.rb
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
module Awspec
|
2
2
|
module Helper
|
3
3
|
module Type
|
4
|
-
|
4
|
+
TYPES = %w(
|
5
5
|
base ec2 rds rds_db_parameter_group security_group
|
6
6
|
vpc s3 route53_hosted_zone auto_scaling_group subnet
|
7
|
-
route_table ebs
|
7
|
+
route_table ebs elb
|
8
8
|
)
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
types.each do |type|
|
10
|
+
TYPES.each do |type|
|
11
|
+
require "awspec/type/#{type}"
|
13
12
|
define_method type do |*args|
|
14
13
|
name = args.first
|
15
14
|
eval "Awspec::Type::#{type.to_camel_case}.new(name)"
|
data/lib/awspec/type/ec2.rb
CHANGED
@@ -0,0 +1,71 @@
|
|
1
|
+
module Awspec::Type
|
2
|
+
class Elb < Base
|
3
|
+
attr_reader :lb
|
4
|
+
|
5
|
+
def initialize(id)
|
6
|
+
super
|
7
|
+
@lb = find_elb(id)
|
8
|
+
@id = @lb[:load_balancer_name] if @lb
|
9
|
+
end
|
10
|
+
|
11
|
+
health_check_options = %w(
|
12
|
+
target interval timeout
|
13
|
+
unhealthy_threshold healthy_threshold
|
14
|
+
)
|
15
|
+
|
16
|
+
health_check_options.each do |option|
|
17
|
+
define_method 'health_check_' + option do
|
18
|
+
@lb[:health_check][option]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def method_missing(name)
|
23
|
+
describe = name.to_sym
|
24
|
+
if @lb.members.include?(describe)
|
25
|
+
@lb[describe]
|
26
|
+
else
|
27
|
+
super
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def has_ec2?(id)
|
32
|
+
ec2 = find_ec2(id)
|
33
|
+
@lb.instances.find do |instance|
|
34
|
+
instance.instance_id = ec2.instance_id
|
35
|
+
end if ec2
|
36
|
+
end
|
37
|
+
|
38
|
+
def has_security_group?(sg_id)
|
39
|
+
sgs = @lb[:security_groups]
|
40
|
+
ret = sgs.find do |sg|
|
41
|
+
sg == sg_id
|
42
|
+
end
|
43
|
+
return true if ret
|
44
|
+
sg2 = find_security_group(sg_id)
|
45
|
+
return false unless sg2.tag_name == sg_id || sg2[:group_name] == sg_id
|
46
|
+
sgs.find do |sg|
|
47
|
+
sg == sg2[:group_name]
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def has_subnet?(subnet_id)
|
52
|
+
subnets = @lb[:subnets]
|
53
|
+
ret = subnets.find do |s|
|
54
|
+
s == subnet_id
|
55
|
+
end
|
56
|
+
return true if ret
|
57
|
+
res = find_subnet(subnet_id)
|
58
|
+
ret = subnets.find do |s|
|
59
|
+
s == res[:subnet_id]
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def has_listener?(protocol:, port:, instance_protocol:, instance_port:)
|
64
|
+
@lb[:listener_descriptions].find do |desc|
|
65
|
+
listener = desc.listener
|
66
|
+
listener.protocol == protocol && listener.load_balancer_port == port && \
|
67
|
+
listener.instance_protocol == instance_protocol && listener.instance_port == instance_port
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
data/lib/awspec/type/rds.rb
CHANGED
data/lib/awspec/version.rb
CHANGED
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.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- k1LoW
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-08-
|
11
|
+
date: 2015-08-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -140,13 +140,30 @@ files:
|
|
140
140
|
- Rakefile
|
141
141
|
- awspec.gemspec
|
142
142
|
- bin/awspec
|
143
|
+
- doc/_resource_types/ec2.md
|
144
|
+
- doc/_resource_types/elb.md
|
145
|
+
- doc/resource_types.md
|
143
146
|
- lib/awspec.rb
|
144
147
|
- lib/awspec/cli.rb
|
145
148
|
- lib/awspec/command/generate.rb
|
149
|
+
- lib/awspec/docgen.rb
|
146
150
|
- lib/awspec/ext.rb
|
147
151
|
- lib/awspec/ext/string.rb
|
148
152
|
- lib/awspec/ext/struct.rb
|
149
153
|
- lib/awspec/generator.rb
|
154
|
+
- lib/awspec/generator/doc/auto_scaling_group.rb
|
155
|
+
- lib/awspec/generator/doc/base.rb
|
156
|
+
- lib/awspec/generator/doc/ebs.rb
|
157
|
+
- lib/awspec/generator/doc/ec2.rb
|
158
|
+
- lib/awspec/generator/doc/elb.rb
|
159
|
+
- lib/awspec/generator/doc/rds.rb
|
160
|
+
- lib/awspec/generator/doc/rds_db_parameter_group.rb
|
161
|
+
- lib/awspec/generator/doc/route53_hosted_zone.rb
|
162
|
+
- lib/awspec/generator/doc/route_table.rb
|
163
|
+
- lib/awspec/generator/doc/s3.rb
|
164
|
+
- lib/awspec/generator/doc/security_group.rb
|
165
|
+
- lib/awspec/generator/doc/subnet.rb
|
166
|
+
- lib/awspec/generator/doc/vpc.rb
|
150
167
|
- lib/awspec/generator/spec/ec2.rb
|
151
168
|
- lib/awspec/generator/spec/rds.rb
|
152
169
|
- lib/awspec/generator/spec/route53_hosted_zone.rb
|
@@ -156,6 +173,7 @@ files:
|
|
156
173
|
- lib/awspec/helper/finder.rb
|
157
174
|
- lib/awspec/helper/finder/auto_scaling.rb
|
158
175
|
- lib/awspec/helper/finder/ec2.rb
|
176
|
+
- lib/awspec/helper/finder/elb.rb
|
159
177
|
- lib/awspec/helper/finder/rds.rb
|
160
178
|
- lib/awspec/helper/finder/route53.rb
|
161
179
|
- lib/awspec/helper/finder/s3.rb
|
@@ -174,6 +192,7 @@ files:
|
|
174
192
|
- lib/awspec/type/base.rb
|
175
193
|
- lib/awspec/type/ebs.rb
|
176
194
|
- lib/awspec/type/ec2.rb
|
195
|
+
- lib/awspec/type/elb.rb
|
177
196
|
- lib/awspec/type/rds.rb
|
178
197
|
- lib/awspec/type/rds_db_parameter_group.rb
|
179
198
|
- lib/awspec/type/route53_hosted_zone.rb
|