awspec 0.6.1 → 0.6.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +10 -0
  3. data/doc/_resource_types/rds_db_parameter_group.md +8 -0
  4. data/doc/resource_types.md +32 -25
  5. data/lib/awspec.rb +2 -0
  6. data/lib/awspec/bin/toolbox +5 -0
  7. data/lib/awspec/generator.rb +5 -1
  8. data/lib/awspec/generator/doc/type.rb +26 -0
  9. data/lib/awspec/generator/doc/type/auto_scaling_group.rb +16 -0
  10. data/lib/awspec/generator/doc/type/base.rb +89 -0
  11. data/lib/awspec/generator/doc/type/ebs.rb +17 -0
  12. data/lib/awspec/generator/doc/type/ec2.rb +17 -0
  13. data/lib/awspec/generator/doc/type/elb.rb +20 -0
  14. data/lib/awspec/generator/doc/type/rds.rb +17 -0
  15. data/lib/awspec/generator/doc/type/rds_db_parameter_group.rb +16 -0
  16. data/lib/awspec/generator/doc/type/route53_hosted_zone.rb +16 -0
  17. data/lib/awspec/generator/doc/type/route_table.rb +16 -0
  18. data/lib/awspec/generator/doc/type/s3.rb +16 -0
  19. data/lib/awspec/generator/doc/type/security_group.rb +16 -0
  20. data/lib/awspec/generator/doc/type/subnet.rb +16 -0
  21. data/lib/awspec/generator/doc/type/vpc.rb +17 -0
  22. data/lib/awspec/generator/template.rb +100 -0
  23. data/lib/awspec/stub.rb +7 -0
  24. data/lib/awspec/stub/auto_scaling_group.rb +87 -0
  25. data/lib/awspec/stub/ebs.rb +66 -0
  26. data/lib/awspec/stub/ec2.rb +117 -0
  27. data/lib/awspec/stub/elb.rb +129 -0
  28. data/lib/awspec/stub/rds.rb +93 -0
  29. data/lib/awspec/stub/rds_db_parameter_group.rb +16 -0
  30. data/lib/awspec/stub/route53_hosted_zone.rb +83 -0
  31. data/lib/awspec/stub/route_table.rb +60 -0
  32. data/lib/awspec/stub/s3.rb +14 -0
  33. data/lib/awspec/stub/security_group.rb +66 -0
  34. data/lib/awspec/stub/subnet.rb +33 -0
  35. data/lib/awspec/stub/vpc.rb +69 -0
  36. data/lib/awspec/toolbox.rb +13 -0
  37. data/lib/awspec/version.rb +1 -1
  38. metadata +33 -16
  39. data/lib/awspec/docgen.rb +0 -23
  40. data/lib/awspec/generator/doc/auto_scaling_group.rb +0 -15
  41. data/lib/awspec/generator/doc/base.rb +0 -74
  42. data/lib/awspec/generator/doc/ebs.rb +0 -15
  43. data/lib/awspec/generator/doc/ec2.rb +0 -15
  44. data/lib/awspec/generator/doc/elb.rb +0 -18
  45. data/lib/awspec/generator/doc/rds.rb +0 -15
  46. data/lib/awspec/generator/doc/rds_db_parameter_group.rb +0 -15
  47. data/lib/awspec/generator/doc/route53_hosted_zone.rb +0 -15
  48. data/lib/awspec/generator/doc/route_table.rb +0 -15
  49. data/lib/awspec/generator/doc/s3.rb +0 -15
  50. data/lib/awspec/generator/doc/security_group.rb +0 -15
  51. data/lib/awspec/generator/doc/subnet.rb +0 -15
  52. data/lib/awspec/generator/doc/vpc.rb +0 -15
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 233cbc5d2647507ec61335211db2877435b21d93
4
- data.tar.gz: a3dca3393a13bcbf2802b80c0fc2f3a226a3ff9a
3
+ metadata.gz: 550ef18bd95e67b78e4e77dfb8436ae9f4577bfe
4
+ data.tar.gz: 27dfa72aea176f0926111f3a4ee1cf61d9206e94
5
5
  SHA512:
6
- metadata.gz: 11b94b62d04b77bbd8f477e0f4b554f13309d447b44e336ea558802a10b33cb54ec7cbda2a50031a489a04c216dd60ea789193e7a3d065d81baa784506cfa566
7
- data.tar.gz: b141e71cea34ed5595e9d983dbee5505d55b118d9a55b5461c6dca080966513a6456a34fd974618f78fa34dda73ddccff994989fbddd965cc5558dcac303d3b8
6
+ metadata.gz: c855e75b35e28865fcfb87fb6ade67d2e857b268d8f641d7c3aa64a0e569f51512d8e730c269e4180c1f0ecdf448588c8f133ceece7769f73523583493128a17
7
+ data.tar.gz: 13d77fdf7d9ea167b11c75a5e3618590a66e354e70b8aa6c00cb14b90bee4a684718acec2c590ea7df45fc83b09effad6e4caa07882269ce604b22db26ff1dfc
data/README.md CHANGED
@@ -111,6 +111,16 @@ $ awspec generate ec2 vpc-ab123cde >> spec/ec2_spec.rb
111
111
  4. Push to the branch (`git push origin my-new-feature`)
112
112
  5. Create a new Pull Request
113
113
 
114
+ ### How to add new resource type (ex. Redshift resource)
115
+
116
+ 1. Create your feature branch (`git checkout -b add-type-redshift`)
117
+ 2. Generate template files (`bundle exec awspec/bin/toolbox template redshift`)
118
+ 3. Fill files with code.
119
+ 4. Generate [doc/resource_types.md](doc/resource_types.md) (`bundle exec awspec/bin/toolbox docgen`)
120
+ 5. Run test (`bundle exec rake spec`)
121
+ 6. Push to the branch (`git push origin add-type-redshift`)
122
+ 7. Create a new Pull Request
123
+
114
124
  ## References
115
125
 
116
126
  awspec is inspired by Serverspec.
@@ -0,0 +1,8 @@
1
+ ### first
2
+
3
+ ```ruby
4
+ describe rds_db_parameter_group('my-rds-db-parameter-group') do
5
+ its(:basedir) { should eq '/rdsdbbin/mysql' }
6
+ its(:innodb_buffer_pool_size) { '{DBInstanceClassMemory*3/4}' }
7
+ end
8
+ ```
@@ -26,8 +26,6 @@ end
26
26
  ```
27
27
 
28
28
 
29
- ### be_stopped
30
-
31
29
  ### be_pending
32
30
 
33
31
  ### be_running
@@ -40,15 +38,17 @@ end
40
38
 
41
39
  ### be_shutting_down
42
40
 
43
- ### be_terminated
41
+ ### be_stopped
44
42
 
45
43
  ### be_stopping
46
44
 
47
- ### have_security_group
45
+ ### be_terminated
46
+
47
+ ### have_ebs
48
48
 
49
49
  ### have_eip
50
50
 
51
- ### have_ebs
51
+ ### have_security_group
52
52
 
53
53
  ### belong_to_subnet
54
54
 
@@ -61,10 +61,6 @@ RDS resource type.
61
61
 
62
62
  ### exist
63
63
 
64
- ### be_upgrading
65
-
66
- ### be_storage_full
67
-
68
64
  ### be_available
69
65
 
70
66
  ### be_backing_up
@@ -85,7 +81,7 @@ RDS resource type.
85
81
 
86
82
  ### be_incompatible_parameters
87
83
 
88
- ### be_restore_error
84
+ ### be_incompatible_restore
89
85
 
90
86
  ### be_maintenance
91
87
 
@@ -97,7 +93,11 @@ RDS resource type.
97
93
 
98
94
  ### be_resetting_master_credentials
99
95
 
100
- ### be_incompatible_restore
96
+ ### be_restore_error
97
+
98
+ ### be_storage_full
99
+
100
+ ### be_upgrading
101
101
 
102
102
  ### have_db_parameter_group
103
103
 
@@ -116,6 +116,13 @@ RDS resource type.
116
116
 
117
117
  RdsDbParameterGroup resource type.
118
118
 
119
+ ```ruby
120
+ describe rds_db_parameter_group('my-rds-db-parameter-group') do
121
+ its(:basedir) { should eq '/rdsdbbin/mysql' }
122
+ its(:innodb_buffer_pool_size) { '{DBInstanceClassMemory*3/4}' }
123
+ end
124
+ ```
125
+
119
126
  ### exist
120
127
 
121
128
 
@@ -143,10 +150,10 @@ VPC resource type.
143
150
 
144
151
  ### exist
145
152
 
146
- ### be_pending
147
-
148
153
  ### be_available
149
154
 
155
+ ### be_pending
156
+
150
157
  ### have_network_acl
151
158
 
152
159
  ### have_route_table
@@ -187,10 +194,10 @@ Subnet resource type.
187
194
 
188
195
  ### exist
189
196
 
190
- ### be_pending
191
-
192
197
  ### be_available
193
198
 
199
+ ### be_pending
200
+
194
201
  #### 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)
195
202
  ## <a name="route_table">route_table</a>
196
203
 
@@ -207,19 +214,19 @@ EBS resource type.
207
214
 
208
215
  ### exist
209
216
 
210
- ### be_deleted
217
+ ### be_attached_to
211
218
 
212
- ### be_in_use
219
+ ### be_available
213
220
 
214
- ### be_deleting
221
+ ### be_creating
215
222
 
216
- ### be_available
223
+ ### be_deleted
217
224
 
218
- ### be_error
225
+ ### be_deleting
219
226
 
220
- ### be_attached_to
227
+ ### be_error
221
228
 
222
- ### be_creating
229
+ ### be_in_use
223
230
 
224
231
  #### 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)
225
232
  ## <a name="elb">elb</a>
@@ -228,6 +235,8 @@ ELB resource type.
228
235
 
229
236
  ### exist
230
237
 
238
+ ### have_ec2
239
+
231
240
  ### have_listener
232
241
 
233
242
  http://docs.aws.amazon.com/en_us/ElasticLoadBalancing/latest/DeveloperGuide/elb-listener-config.html
@@ -238,12 +247,10 @@ describe elb('my-elb') do
238
247
  end
239
248
  ```
240
249
 
241
- ### have_ec2
250
+ ### have_security_group
242
251
 
243
252
  ### have_subnet
244
253
 
245
- ### have_security_group
246
-
247
254
  ### belong_to_subnet
248
255
 
249
256
  ### belong_to_vpc
@@ -3,10 +3,12 @@ require 'rspec'
3
3
  require 'rspec/its'
4
4
  require 'awspec/version'
5
5
  require 'awspec/cli'
6
+ require 'awspec/stub'
6
7
  require 'awspec/matcher'
7
8
  require 'awspec/helper'
8
9
  require 'awspec/ext'
9
10
  require 'awspec/generator'
11
+ require 'awspec/toolbox'
10
12
 
11
13
  module Awspec
12
14
  end
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'awspec'
4
+
5
+ Awspec::Toolbox.start
@@ -9,6 +9,10 @@ require 'awspec/generator/spec/route53_hosted_zone'
9
9
  require 'awspec/generator/spec/elb'
10
10
 
11
11
  # Doc
12
+ require 'awspec/generator/doc/type'
12
13
  types.each do |type|
13
- require 'awspec/generator/doc/' + type
14
+ require 'awspec/generator/doc/type/' + type
14
15
  end
16
+
17
+ # Template
18
+ require 'awspec/generator/template'
@@ -0,0 +1,26 @@
1
+ module Awspec::Generator
2
+ module Doc
3
+ module Type
4
+ def self.generate_doc
5
+ Aws.config[:stub_responses] = true
6
+ types = Awspec::Helper::Type::TYPES
7
+ types.delete('base')
8
+ links = types.map do |type|
9
+ '[' + type + '](#' + type + ')'
10
+ end
11
+ header = <<-'EOF'
12
+ # Resource Types
13
+
14
+ <%= links.join("\n| ") %>
15
+
16
+ EOF
17
+ doc = ERB.new(header, nil, '-').result(binding)
18
+
19
+ types.map do |type|
20
+ doc += eval "Awspec::Generator::Doc::Type::#{type.to_camel_case}.new.generate_doc"
21
+ end
22
+ doc
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,16 @@
1
+ module Awspec::Generator
2
+ module Doc
3
+ module Type
4
+ class AutoScalingGroup < Base
5
+ def initialize
6
+ super
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
16
+ end
@@ -0,0 +1,89 @@
1
+ module Awspec::Generator
2
+ module Doc
3
+ module Type
4
+ class Base
5
+ def initialize
6
+ Awspec::Stub.load type_name.to_snake_case
7
+ @type_name = type_name
8
+ end
9
+
10
+ def type_name
11
+ self.class.to_s.split('::').last
12
+ end
13
+
14
+ def generate_doc
15
+ @matchers += collect_matchers - @ignore_matchers
16
+ @matchers.sort! do |a, b|
17
+ ret = sort_num(a) <=> sort_num(b)
18
+ next ret if ret != 0
19
+ a.casecmp(b)
20
+ end
21
+ @describes += @ret.members.select do |describe|
22
+ next true unless @ret[describe].is_a?(Array) || @ret[describe].is_a?(Hash) || @ret[describe].is_a?(Struct)
23
+ end if @ret.respond_to?(:members)
24
+ its = @describes.map do |describe|
25
+ 'its(:' + describe.to_s + ')'
26
+ end
27
+
28
+ @descriptions = {}
29
+ merge_file = File.dirname(__FILE__) + '/../../../../../doc/_resource_types/' + type_name.to_snake_case + '.md'
30
+ if File.exist?(merge_file)
31
+ matcher = nil
32
+ File.foreach(merge_file) do |line|
33
+ if /\A### (.+)\Z/ =~ line
34
+ matcher = Regexp.last_match[1]
35
+ next
36
+ end
37
+ @descriptions[matcher] = '' unless @descriptions[matcher]
38
+ @descriptions[matcher] += line
39
+ end
40
+ end
41
+ ERB.new(doc_template, nil, '-').result(binding)
42
+ end
43
+
44
+ def collect_matchers
45
+ methods = @type.methods - Awspec::Helper::Finder.instance_methods - Object.methods
46
+ methods.select! do |method|
47
+ method.to_s.include?('?')
48
+ end
49
+ methods.map! do |method|
50
+ next 'exist' if 'exists?' == method.to_s
51
+ next 'have_' + Regexp.last_match[1] if /\Ahas_(.+)\?\z/ =~ method.to_s
52
+ next 'be_' + Regexp.last_match[1] if /\A(.+)\?\z/ =~ method.to_s
53
+ method.to_s
54
+ end
55
+ end
56
+
57
+ def doc_template
58
+ template = <<-'EOF'
59
+ ## <a name="<%= @type_name.to_snake_case %>"><%= @type_name.to_snake_case %></a>
60
+
61
+ <%= @type_name %> resource type.
62
+ <%- if @descriptions.include?('first') -%><%= @descriptions['first'] %><%- end -%>
63
+ <% @matchers.each do |matcher| %>
64
+ ### <%= matcher %>
65
+ <%- if @descriptions.include?(matcher) -%><%= @descriptions[matcher] %><%- end -%>
66
+ <% end %>
67
+ <%- unless its.empty? -%>#### <%= its.join(', ') %><%- end -%>
68
+ <%- if @descriptions.include?('last') -%><%= @descriptions['last'] %><%- end -%>
69
+
70
+ EOF
71
+ template
72
+ end
73
+
74
+ def sort_num(str)
75
+ case str
76
+ when 'exist'
77
+ 0
78
+ when /\Abe_/
79
+ 1
80
+ when /\Ahave_/
81
+ 2
82
+ else
83
+ 3
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,17 @@
1
+ module Awspec::Generator
2
+ module Doc
3
+ module Type
4
+ class Ebs < Base
5
+ def initialize
6
+ super
7
+ @type_name = 'EBS'
8
+ @type = Awspec::Type::Ebs.new('my-ebs')
9
+ @ret = @type.volume
10
+ @matchers = []
11
+ @ignore_matchers = []
12
+ @describes = []
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module Awspec::Generator
2
+ module Doc
3
+ module Type
4
+ class Ec2 < Base
5
+ def initialize
6
+ super
7
+ @type_name = 'EC2'
8
+ @type = Awspec::Type::Ec2.new('my-ec2')
9
+ @ret = @type.instance
10
+ @matchers = %w(belong_to_vpc belong_to_subnet)
11
+ @ignore_matchers = []
12
+ @describes = []
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,20 @@
1
+ module Awspec::Generator
2
+ module Doc
3
+ module Type
4
+ class Elb < Base
5
+ def initialize
6
+ super
7
+ @type_name = 'ELB'
8
+ @type = Awspec::Type::Elb.new('my-elb')
9
+ @ret = @type.lb
10
+ @matchers = %w(belong_to_vpc belong_to_subnet)
11
+ @ignore_matchers = []
12
+ @describes = %w(
13
+ health_check_target health_check_interval health_check_timeout
14
+ health_check_unhealthy_threshold health_check_healthy_threshold
15
+ )
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,17 @@
1
+ module Awspec::Generator
2
+ module Doc
3
+ module Type
4
+ class Rds < Base
5
+ def initialize
6
+ super
7
+ @type_name = 'RDS'
8
+ @type = Awspec::Type::Rds.new('my-rds')
9
+ @ret = @type.instance
10
+ @matchers = %w(belong_to_vpc belong_to_subnet belong_to_db_subnet_group)
11
+ @ignore_matchers = []
12
+ @describes = %w(vpc_id)
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,16 @@
1
+ module Awspec::Generator
2
+ module Doc
3
+ module Type
4
+ class RdsDbParameterGroup < Base
5
+ def initialize
6
+ super
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
16
+ end