awspec 0.23.0 → 0.24.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.md +6 -26
- data/lib/awspec/command/generate.rb +3 -3
- data/lib/awspec/generator.rb +2 -0
- data/lib/awspec/generator/doc/type/{s3.rb → s3_bucket.rb} +3 -3
- data/lib/awspec/generator/spec/ebs.rb +55 -0
- data/lib/awspec/generator/spec/s3_bucket.rb +46 -0
- data/lib/awspec/helper/finder/ebs.rb +12 -0
- data/lib/awspec/helper/finder/s3.rb +16 -0
- data/lib/awspec/helper/type.rb +7 -1
- data/lib/awspec/stub/ebs.rb +1 -0
- data/lib/awspec/stub/{s3.rb → s3_bucket.rb} +31 -0
- data/lib/awspec/type/{s3.rb → s3_bucket.rb} +31 -1
- data/lib/awspec/version.rb +1 -1
- metadata +7 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9d18888b14d8e1858e59126b09d82f75705cc744
|
4
|
+
data.tar.gz: 51e0923dc3afb735b6566a1beb4e8de83f79475f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a29ad76af244e9feac511c78779200d3c2a400e58dddcb7f6e967441c9d3758e7a29e9f6d472f6df7ddd512637f411c55910d5547509190ba4a641fffebe96b7
|
7
|
+
data.tar.gz: 75b430184399d5e2d46da464525b75b03b0a6c31ad3b34c6d54cc856f8d8459c7fed9c7bec453d2d2e5722f0ad893872a579278b5829f5619ef662e4096c5367
|
data/doc/resource_types.md
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
| [rds_db_parameter_group](#rds_db_parameter_group)
|
6
6
|
| [security_group](#security_group)
|
7
7
|
| [vpc](#vpc)
|
8
|
-
| [
|
8
|
+
| [s3_bucket](#s3_bucket)
|
9
9
|
| [route53_hosted_zone](#route53_hosted_zone)
|
10
10
|
| [autoscaling_group](#autoscaling_group)
|
11
11
|
| [subnet](#subnet)
|
@@ -270,41 +270,21 @@ end
|
|
270
270
|
```
|
271
271
|
|
272
272
|
#### its(:vpc_id), its(:state), its(:cidr_block), its(:dhcp_options_id), its(:instance_tenancy), its(:is_default)
|
273
|
-
## <a name="
|
273
|
+
## <a name="s3_bucket">s3_bucket</a>
|
274
274
|
|
275
|
-
|
275
|
+
S3Bucket resource type.
|
276
276
|
|
277
277
|
### exist
|
278
278
|
|
279
|
-
```ruby
|
280
|
-
describe s3('my-bucket') do
|
281
|
-
it { should exist }
|
282
|
-
end
|
283
|
-
```
|
284
|
-
|
285
|
-
|
286
279
|
### have_acl_grant
|
287
280
|
|
288
|
-
|
289
|
-
describe s3('my-bucket') do
|
290
|
-
its(:acl_grants_count) { should eq 3 }
|
291
|
-
it { should have_acl_grant(grantee: 'my-bucket-owner', permission: 'FULL_CONTROL') }
|
292
|
-
it { should have_acl_grant(grantee: 'my-bucket-write-only', permission: 'WRITE') }
|
293
|
-
it { should have_acl_grant(grantee: 'my-bucket-read-only', permission: 'READ') }
|
294
|
-
its(:acl_owner) { should eq 'my-bucket-owner' }
|
295
|
-
end
|
296
|
-
```
|
297
|
-
|
281
|
+
### have_cors_rule
|
298
282
|
|
299
283
|
### have_object
|
300
284
|
|
301
|
-
|
302
|
-
describe s3('my-bucket') do
|
303
|
-
it { should have_object('path/to/object') }
|
304
|
-
end
|
305
|
-
```
|
285
|
+
### have_policy
|
306
286
|
|
307
|
-
#### its(:acl_grants_count), its(:acl_owner), its(:name), its(:creation_date)
|
287
|
+
#### its(:acl_grants_count), its(:acl_owner), its(:cors_rules_count), its(:name), its(:creation_date)
|
308
288
|
## <a name="route53_hosted_zone">route53_hosted_zone</a>
|
309
289
|
|
310
290
|
Route53HostedZone resource type.
|
@@ -26,12 +26,12 @@ module Awspec
|
|
26
26
|
end
|
27
27
|
|
28
28
|
types_for_generate_all = %w(
|
29
|
-
iam_policy cloudwatch_alarm directconnect
|
29
|
+
iam_policy cloudwatch_alarm directconnect ebs s3_bucket
|
30
30
|
)
|
31
31
|
|
32
32
|
types_for_generate_all.each do |type|
|
33
|
-
if type
|
34
|
-
desc
|
33
|
+
if %w(iam_policy ebs).include?(type)
|
34
|
+
desc type, "Generate attached #{type} spec"
|
35
35
|
else
|
36
36
|
desc type, "Generate #{type} spec"
|
37
37
|
end
|
data/lib/awspec/generator.rb
CHANGED
@@ -13,6 +13,8 @@ require 'awspec/generator/spec/network_acl'
|
|
13
13
|
require 'awspec/generator/spec/route_table'
|
14
14
|
require 'awspec/generator/spec/subnet'
|
15
15
|
require 'awspec/generator/spec/directconnect'
|
16
|
+
require 'awspec/generator/spec/ebs'
|
17
|
+
require 'awspec/generator/spec/s3_bucket'
|
16
18
|
|
17
19
|
# Doc
|
18
20
|
require 'awspec/generator/doc/type'
|
@@ -1,14 +1,14 @@
|
|
1
1
|
module Awspec::Generator
|
2
2
|
module Doc
|
3
3
|
module Type
|
4
|
-
class
|
4
|
+
class S3Bucket < Base
|
5
5
|
def initialize
|
6
6
|
super
|
7
|
-
@type = Awspec::Type::
|
7
|
+
@type = Awspec::Type::S3Bucket.new('my-bucket')
|
8
8
|
@ret = @type.resource
|
9
9
|
@matchers = []
|
10
10
|
@ignore_matchers = []
|
11
|
-
@describes = %w(acl_grants_count acl_owner)
|
11
|
+
@describes = %w(acl_grants_count acl_owner cors_rules_count)
|
12
12
|
end
|
13
13
|
end
|
14
14
|
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Awspec::Generator
|
2
|
+
module Spec
|
3
|
+
class Ebs
|
4
|
+
include Awspec::Helper::Finder
|
5
|
+
def generate_all
|
6
|
+
volumes = select_all_attached_ebs
|
7
|
+
volumes.empty? && fail('Not Found EBS')
|
8
|
+
specs = volumes.map do |volume|
|
9
|
+
attachment_specs = generate_attachment_specs(volume)
|
10
|
+
content = ERB.new(ebs_spec_template, nil, '-').result(binding).gsub(/^\n/, '')
|
11
|
+
end
|
12
|
+
specs.join("\n")
|
13
|
+
end
|
14
|
+
|
15
|
+
def generate_attachment_specs(volume)
|
16
|
+
linespecs = []
|
17
|
+
volume.attachments.each do |attachment|
|
18
|
+
instance = find_ec2(attachment.instance_id)
|
19
|
+
linespecs.push(ERB.new(attachment_linetemplate, nil, '-').result(binding)) if attachment.instance_id
|
20
|
+
end
|
21
|
+
linespecs
|
22
|
+
end
|
23
|
+
|
24
|
+
def attachment_linetemplate
|
25
|
+
template = <<-'EOF'
|
26
|
+
<%- if instance.tag_name -%>
|
27
|
+
it { should be_attached_to('<%= instance.tag_name %>') }
|
28
|
+
<%- else -%>
|
29
|
+
it { should be_attached_to('<%= instance.instance_id %>') }
|
30
|
+
<%- end -%>
|
31
|
+
EOF
|
32
|
+
template
|
33
|
+
end
|
34
|
+
|
35
|
+
def ebs_spec_template
|
36
|
+
template = <<-'EOF'
|
37
|
+
<%- if volume.tag_name -%>
|
38
|
+
describe ebs('<%= volume.tag_name %>') do
|
39
|
+
<%- else -%>
|
40
|
+
describe ebs('<%= volume.volume_id %>') do
|
41
|
+
<%- end -%>
|
42
|
+
it { should exist }
|
43
|
+
it { should be_<%= volume.state.tr('-', '_') %> }
|
44
|
+
its(:size) { should eq <%= volume.size %> }
|
45
|
+
its(:volume_type) { should eq '<%= volume.volume_type %>' }
|
46
|
+
<% attachment_specs.each do |line| %>
|
47
|
+
<%= line %>
|
48
|
+
<% end %>
|
49
|
+
end
|
50
|
+
EOF
|
51
|
+
template
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Awspec::Generator
|
2
|
+
module Spec
|
3
|
+
class S3Bucket
|
4
|
+
include Awspec::Helper::Finder
|
5
|
+
def generate_all
|
6
|
+
buckets = select_all_buckets
|
7
|
+
buckets.empty? && fail('Not Found Bucket')
|
8
|
+
specs = buckets.map do |bucket|
|
9
|
+
acl = find_bucket_acl(bucket.name)
|
10
|
+
grant_specs = generate_grant_specs(acl)
|
11
|
+
content = ERB.new(bucket_spec_template, nil, '-').result(binding).gsub(/^\n/, '')
|
12
|
+
end
|
13
|
+
specs.join("\n")
|
14
|
+
end
|
15
|
+
|
16
|
+
def generate_grant_specs(acl)
|
17
|
+
linespecs = []
|
18
|
+
acl.grants.each do |grant|
|
19
|
+
linespecs.push(ERB.new(grant_linetemplate, nil, '-').result(binding))
|
20
|
+
end
|
21
|
+
linespecs
|
22
|
+
end
|
23
|
+
|
24
|
+
def grant_linetemplate
|
25
|
+
template = <<-'EOF'
|
26
|
+
it { should have_acl_grant(grantee: '<%= grant.grantee.display_name %>', permission: '<%= grant.permission %>') }
|
27
|
+
EOF
|
28
|
+
template
|
29
|
+
end
|
30
|
+
|
31
|
+
def bucket_spec_template
|
32
|
+
template = <<-'EOF'
|
33
|
+
describe s3_bucket('<%= bucket.name %>') do
|
34
|
+
it { should exist }
|
35
|
+
its(:acl_grants_count) { should eq <%= acl.grants.count %> }
|
36
|
+
<% grant_specs.each do |line| %>
|
37
|
+
<%= line %>
|
38
|
+
<% end %>
|
39
|
+
its(:acl_owner) { should eq '<%= acl.owner.display_name %>' }
|
40
|
+
end
|
41
|
+
EOF
|
42
|
+
template
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -22,6 +22,18 @@ module Awspec::Helper
|
|
22
22
|
end
|
23
23
|
volumes
|
24
24
|
end
|
25
|
+
|
26
|
+
def select_all_attached_ebs
|
27
|
+
selected = []
|
28
|
+
res = @ec2_client.describe_volumes
|
29
|
+
|
30
|
+
loop do
|
31
|
+
selected += res.volumes.select { |v| v.attachments.count > 0 }
|
32
|
+
(res.next_page? && res = res.next_page) || break
|
33
|
+
end
|
34
|
+
|
35
|
+
selected
|
36
|
+
end
|
25
37
|
end
|
26
38
|
end
|
27
39
|
end
|
@@ -13,6 +13,22 @@ module Awspec::Helper
|
|
13
13
|
rescue Aws::S3::Errors::NoSuchBucket
|
14
14
|
nil
|
15
15
|
end
|
16
|
+
|
17
|
+
def find_bucket_cors(id)
|
18
|
+
@s3_client.get_bucket_cors(bucket: id)
|
19
|
+
rescue Aws::S3::Errors::NoSuchBucket
|
20
|
+
nil
|
21
|
+
end
|
22
|
+
|
23
|
+
def find_bucket_policy(id)
|
24
|
+
@s3_client.get_bucket_policy(bucket: id)
|
25
|
+
rescue Aws::S3::Errors::NoSuchBucket
|
26
|
+
nil
|
27
|
+
end
|
28
|
+
|
29
|
+
def select_all_buckets
|
30
|
+
@s3_client.list_buckets.buckets
|
31
|
+
end
|
16
32
|
end
|
17
33
|
end
|
18
34
|
end
|
data/lib/awspec/helper/type.rb
CHANGED
@@ -3,7 +3,7 @@ module Awspec
|
|
3
3
|
module Type
|
4
4
|
TYPES = %w(
|
5
5
|
base ec2 rds rds_db_parameter_group security_group
|
6
|
-
vpc
|
6
|
+
vpc s3_bucket route53_hosted_zone autoscaling_group subnet
|
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
|
@@ -23,6 +23,12 @@ module Awspec
|
|
23
23
|
puts Color.on_red(Color.white('!!! `auto_scaling_group` type is deprecated. use `autoscaling_group` !!!'))
|
24
24
|
Awspec::Type::AutoscalingGroup.new(name)
|
25
25
|
end
|
26
|
+
|
27
|
+
def s3(name)
|
28
|
+
puts ''
|
29
|
+
puts Color.on_red(Color.white('!!! `s3` type is deprecated. use `s3_bucket` !!!'))
|
30
|
+
Awspec::Type::S3Bucket.new(name)
|
31
|
+
end
|
26
32
|
end
|
27
33
|
end
|
28
34
|
end
|
data/lib/awspec/stub/ebs.rb
CHANGED
@@ -37,6 +37,37 @@ Aws.config[:s3] = {
|
|
37
37
|
permission: 'READ'
|
38
38
|
}
|
39
39
|
]
|
40
|
+
},
|
41
|
+
get_bucket_cors: {
|
42
|
+
cors_rules: [
|
43
|
+
{
|
44
|
+
allowed_methods: ['GET'],
|
45
|
+
allowed_origins: ['*']
|
46
|
+
},
|
47
|
+
{
|
48
|
+
allowed_headers: ['*'],
|
49
|
+
allowed_methods: ['GET'],
|
50
|
+
allowed_origins: ['https://example.com', 'https://example.org'],
|
51
|
+
expose_headers: ['X-Custom-Header'],
|
52
|
+
max_age_seconds: 3600
|
53
|
+
}
|
54
|
+
]
|
55
|
+
},
|
56
|
+
get_bucket_policy: {
|
57
|
+
policy: <<-POLICY
|
58
|
+
{
|
59
|
+
"Version": "2012-10-17",
|
60
|
+
"Statement": [
|
61
|
+
{
|
62
|
+
"Sid": "AllowPublicRead",
|
63
|
+
"Effect": "Allow",
|
64
|
+
"Principal": "*",
|
65
|
+
"Action": "s3:GetObject",
|
66
|
+
"Resource": "arn:aws:s3:::my-bucket/*"
|
67
|
+
}
|
68
|
+
]
|
69
|
+
}
|
70
|
+
POLICY
|
40
71
|
}
|
41
72
|
}
|
42
73
|
}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Awspec::Type
|
2
|
-
class
|
2
|
+
class S3Bucket < Base
|
3
3
|
def initialize(id)
|
4
4
|
super
|
5
5
|
@resource = find_bucket(id)
|
@@ -34,5 +34,35 @@ module Awspec::Type
|
|
34
34
|
@acl = find_bucket_acl(@id)
|
35
35
|
@acl.grants.count
|
36
36
|
end
|
37
|
+
|
38
|
+
def has_cors_rule?(allowed_headers: [],
|
39
|
+
allowed_methods:,
|
40
|
+
allowed_origins:,
|
41
|
+
expose_headers: [],
|
42
|
+
max_age_seconds: nil)
|
43
|
+
cors_rules.any? do |rule|
|
44
|
+
(rule.allowed_headers - allowed_headers).empty? &&
|
45
|
+
(rule.allowed_methods - allowed_methods).empty? &&
|
46
|
+
(rule.allowed_origins - allowed_origins).empty? &&
|
47
|
+
(rule.expose_headers - expose_headers).empty? &&
|
48
|
+
rule.max_age_seconds == max_age_seconds
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def cors_rules_count
|
53
|
+
cors_rules.count
|
54
|
+
end
|
55
|
+
|
56
|
+
def has_policy?(policy)
|
57
|
+
bp = find_bucket_policy(@id)
|
58
|
+
bp ? (bp.policy.read == policy) : false
|
59
|
+
end
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
def cors_rules
|
64
|
+
cors = find_bucket_cors(@id)
|
65
|
+
cors ? cors.cors_rules : []
|
66
|
+
end
|
37
67
|
end
|
38
68
|
end
|
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.24.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-12-
|
11
|
+
date: 2015-12-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -235,13 +235,14 @@ files:
|
|
235
235
|
- lib/awspec/generator/doc/type/rds_db_parameter_group.rb
|
236
236
|
- lib/awspec/generator/doc/type/route53_hosted_zone.rb
|
237
237
|
- lib/awspec/generator/doc/type/route_table.rb
|
238
|
-
- lib/awspec/generator/doc/type/
|
238
|
+
- lib/awspec/generator/doc/type/s3_bucket.rb
|
239
239
|
- lib/awspec/generator/doc/type/security_group.rb
|
240
240
|
- lib/awspec/generator/doc/type/ses_identity.rb
|
241
241
|
- lib/awspec/generator/doc/type/subnet.rb
|
242
242
|
- lib/awspec/generator/doc/type/vpc.rb
|
243
243
|
- lib/awspec/generator/spec/cloudwatch_alarm.rb
|
244
244
|
- lib/awspec/generator/spec/directconnect.rb
|
245
|
+
- lib/awspec/generator/spec/ebs.rb
|
245
246
|
- lib/awspec/generator/spec/ec2.rb
|
246
247
|
- lib/awspec/generator/spec/elb.rb
|
247
248
|
- lib/awspec/generator/spec/iam_policy.rb
|
@@ -249,6 +250,7 @@ files:
|
|
249
250
|
- lib/awspec/generator/spec/rds.rb
|
250
251
|
- lib/awspec/generator/spec/route53_hosted_zone.rb
|
251
252
|
- lib/awspec/generator/spec/route_table.rb
|
253
|
+
- lib/awspec/generator/spec/s3_bucket.rb
|
252
254
|
- lib/awspec/generator/spec/security_group.rb
|
253
255
|
- lib/awspec/generator/spec/subnet.rb
|
254
256
|
- lib/awspec/generator/spec/vpc.rb
|
@@ -307,7 +309,7 @@ files:
|
|
307
309
|
- lib/awspec/stub/rds_db_parameter_group.rb
|
308
310
|
- lib/awspec/stub/route53_hosted_zone.rb
|
309
311
|
- lib/awspec/stub/route_table.rb
|
310
|
-
- lib/awspec/stub/
|
312
|
+
- lib/awspec/stub/s3_bucket.rb
|
311
313
|
- lib/awspec/stub/security_group.rb
|
312
314
|
- lib/awspec/stub/ses_identity.rb
|
313
315
|
- lib/awspec/stub/subnet.rb
|
@@ -332,7 +334,7 @@ files:
|
|
332
334
|
- lib/awspec/type/rds_db_parameter_group.rb
|
333
335
|
- lib/awspec/type/route53_hosted_zone.rb
|
334
336
|
- lib/awspec/type/route_table.rb
|
335
|
-
- lib/awspec/type/
|
337
|
+
- lib/awspec/type/s3_bucket.rb
|
336
338
|
- lib/awspec/type/security_group.rb
|
337
339
|
- lib/awspec/type/ses_identity.rb
|
338
340
|
- lib/awspec/type/subnet.rb
|