awspec 0.0.2 → 0.1.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/README.md +4 -2
- data/lib/awspec/helper/type.rb +2 -1
- data/lib/awspec/matcher/have_record_set.rb +32 -0
- data/lib/awspec/matcher.rb +3 -0
- data/lib/awspec/type/base.rb +39 -1
- data/lib/awspec/type/ec2.rb +2 -30
- data/lib/awspec/type/rds.rb +2 -2
- data/lib/awspec/type/rds_db_parameter_group.rb +2 -0
- data/lib/awspec/type/route53_hosted_zone.rb +64 -0
- data/lib/awspec/type/s3.rb +26 -0
- data/lib/awspec/type/security_group.rb +1 -1
- data/lib/awspec/type/vpc.rb +1 -1
- data/lib/awspec/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 174d933837b6f18c123157d8d39636cc8151f2a1
|
4
|
+
data.tar.gz: 80eb495b6e34d683d09122f2f3235b95e60ddf91
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 699c01823b05271e2ac4a1c91e9f0e83edaf3f169a16d8a5fd1a54b9fc121e1e7219c0fd29903a3bd36eb598b24c0a9fd16fa58fef4b7dbc0760f0d2596e1d53
|
7
|
+
data.tar.gz: 101535a6b96aad8949196bc35e865ca0980c019d01411a6240ffa3ca876ec8f934ba54c6cd57002975818d3d14ebb3a5dd56236e08caca9b82ae8a8f118ba45a
|
data/README.md
CHANGED
@@ -46,11 +46,13 @@ end
|
|
46
46
|
- [X] RDS DB Parameter Group (`rds_db_parameter_group`)
|
47
47
|
- [X] Security Group (`security_group`)
|
48
48
|
- [X] VPC (`vpc`)
|
49
|
+
- [X] S3 (`s3`)
|
50
|
+
- Route53
|
51
|
+
- [X] Route53 Hosted Zone (`route53_hosted_zone`)
|
49
52
|
|
50
53
|
### Next..
|
51
54
|
|
52
|
-
- [ ]
|
53
|
-
- [ ] Route53
|
55
|
+
- [ ] AutoScaling
|
54
56
|
- ...
|
55
57
|
|
56
58
|
## Contributing
|
data/lib/awspec/helper/type.rb
CHANGED
@@ -0,0 +1,32 @@
|
|
1
|
+
RSpec::Matchers.define :have_record_set do |name|
|
2
|
+
match do |hosted_zone|
|
3
|
+
hosted_zone.has_record_set?(name, @type, @value, @options)
|
4
|
+
end
|
5
|
+
|
6
|
+
%w(soa a txt ns cname mx ptr srv spf aaaa).each do |type|
|
7
|
+
chain type do |value|
|
8
|
+
@type = type
|
9
|
+
@value = value
|
10
|
+
@options = {} if @options.nil?
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
chain :alias do |dns_name, hosted_zone_id|
|
15
|
+
@type = 'a'
|
16
|
+
@options = {} if @options.nil?
|
17
|
+
@options[:alias_dns_name] = dns_name
|
18
|
+
@options[:alias_hosted_zone_id] = hosted_zone_id
|
19
|
+
end
|
20
|
+
|
21
|
+
chain :aaaa_alias do |dns_name, hosted_zone_id|
|
22
|
+
@type = 'aaaa'
|
23
|
+
@options = {} if @options.nil?
|
24
|
+
@options[:alias_dns_name] = dns_name
|
25
|
+
@options[:alias_hosted_zone_id] = hosted_zone_id
|
26
|
+
end
|
27
|
+
|
28
|
+
chain :ttl do |ttl|
|
29
|
+
@options = {} if @options.nil?
|
30
|
+
@options[:ttl] = ttl
|
31
|
+
end
|
32
|
+
end
|
data/lib/awspec/matcher.rb
CHANGED
data/lib/awspec/type/base.rb
CHANGED
@@ -4,10 +4,16 @@ module Awspec::Type
|
|
4
4
|
class Base
|
5
5
|
attr_reader :id, :ec2_client
|
6
6
|
|
7
|
+
# rubocop:disable all
|
7
8
|
def initialize(id = nil)
|
8
|
-
@
|
9
|
+
@id = nil
|
9
10
|
@ec2_client = Aws::EC2::Client.new
|
10
11
|
end
|
12
|
+
# rubocop:enable all
|
13
|
+
|
14
|
+
def exists?
|
15
|
+
@id
|
16
|
+
end
|
11
17
|
|
12
18
|
def find_vpc(id)
|
13
19
|
res = @ec2_client.describe_vpcs({
|
@@ -59,5 +65,37 @@ module Awspec::Type
|
|
59
65
|
|
60
66
|
return res[:security_groups][0] if res[:security_groups].count == 1
|
61
67
|
end
|
68
|
+
|
69
|
+
def find_ec2(id)
|
70
|
+
if id.is_a?(Array)
|
71
|
+
# Aws::EC2::Client.describe_instances native filters format
|
72
|
+
res = @client.describe_instances({
|
73
|
+
filters: id
|
74
|
+
})
|
75
|
+
elsif id.is_a?(Hash)
|
76
|
+
# syntax sugar
|
77
|
+
filters = []
|
78
|
+
id.each do |k, v|
|
79
|
+
filters.push({ name: k, values: Array(v) })
|
80
|
+
end
|
81
|
+
res = @client.describe_instances({
|
82
|
+
filters: filters
|
83
|
+
})
|
84
|
+
else
|
85
|
+
# instance_id or tag:Name
|
86
|
+
begin
|
87
|
+
res = @client.describe_instances({
|
88
|
+
instance_ids: [id]
|
89
|
+
})
|
90
|
+
rescue
|
91
|
+
# Aws::EC2::Errors::InvalidInstanceIDMalformed
|
92
|
+
# Aws::EC2::Errors::InvalidInstanceIDNotFound
|
93
|
+
res = @client.describe_instances({
|
94
|
+
filters: [{ name: 'tag:Name', values: [id] }]
|
95
|
+
})
|
96
|
+
end
|
97
|
+
end
|
98
|
+
return res[:reservations][0][:instances][0] if res[:reservations][0][:instances].count == 1
|
99
|
+
end
|
62
100
|
end
|
63
101
|
end
|
data/lib/awspec/type/ec2.rb
CHANGED
@@ -5,36 +5,8 @@ module Awspec::Type
|
|
5
5
|
def initialize(id)
|
6
6
|
super
|
7
7
|
@client = @ec2_client
|
8
|
-
|
9
|
-
|
10
|
-
res = @client.describe_instances({
|
11
|
-
filters: id
|
12
|
-
})
|
13
|
-
elsif id.is_a?(Hash)
|
14
|
-
# syntax sugar
|
15
|
-
filters = []
|
16
|
-
id.each do |k, v|
|
17
|
-
filters.push({ name: k, values: Array(v) })
|
18
|
-
end
|
19
|
-
res = @client.describe_instances({
|
20
|
-
filters: filters
|
21
|
-
})
|
22
|
-
else
|
23
|
-
# instance_id or tag:Name
|
24
|
-
begin
|
25
|
-
res = @client.describe_instances({
|
26
|
-
instance_ids: [id]
|
27
|
-
})
|
28
|
-
rescue
|
29
|
-
# Aws::EC2::Errors::InvalidInstanceIDMalformed
|
30
|
-
# Aws::EC2::Errors::InvalidInstanceIDNotFound
|
31
|
-
res = @client.describe_instances({
|
32
|
-
filters: [{ name: 'tag:Name', values: [id] }]
|
33
|
-
})
|
34
|
-
end
|
35
|
-
end
|
36
|
-
@id = res[:reservations][0][:instances][0][:instance_id]
|
37
|
-
@instance = res[:reservations][0][:instances][0]
|
8
|
+
@instance = find_ec2(id)
|
9
|
+
@id = @instance[:instance_id] if @instance
|
38
10
|
end
|
39
11
|
|
40
12
|
states = %w(
|
data/lib/awspec/type/rds.rb
CHANGED
@@ -9,8 +9,8 @@ module Awspec::Type
|
|
9
9
|
res = @client.describe_db_instances({
|
10
10
|
db_instance_identifier: id
|
11
11
|
})
|
12
|
-
@
|
13
|
-
@
|
12
|
+
@instance = res[:db_instances][0] if res[:db_instances].count == 1
|
13
|
+
@id = @instance[:db_instance_identifier] if @instance
|
14
14
|
end
|
15
15
|
|
16
16
|
states = %w(
|
@@ -3,6 +3,7 @@ module Awspec::Type
|
|
3
3
|
attr_reader :parameters
|
4
4
|
|
5
5
|
def initialize(name)
|
6
|
+
super
|
6
7
|
@client = Aws::RDS::Client.new
|
7
8
|
@parameters = {}
|
8
9
|
|
@@ -17,6 +18,7 @@ module Awspec::Type
|
|
17
18
|
@parameters[param.parameter_name] = param.parameter_value
|
18
19
|
end
|
19
20
|
end
|
21
|
+
@id = name unless @parameters.empty?
|
20
22
|
end
|
21
23
|
|
22
24
|
def method_missing(name)
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module Awspec::Type
|
2
|
+
class Route53HostedZone < Base
|
3
|
+
attr_reader :hosted_zone, :resource_record_sets
|
4
|
+
|
5
|
+
def initialize(id)
|
6
|
+
super
|
7
|
+
@client = Aws::Route53::Client.new
|
8
|
+
@hosted_zone = find_hosted_zone(id)
|
9
|
+
@id = @hosted_zone[:id] if @hosted_zone
|
10
|
+
return unless @id
|
11
|
+
res = @client.list_resource_record_sets({
|
12
|
+
hosted_zone_id: @id
|
13
|
+
})
|
14
|
+
@resource_record_sets = res.resource_record_sets
|
15
|
+
end
|
16
|
+
|
17
|
+
def has_record_set?(name, type, value, options = {})
|
18
|
+
ret = @resource_record_sets.find do |record_set|
|
19
|
+
next if record_set.type != type.upcase
|
20
|
+
options[:ttl] = record_set.ttl unless options[:ttl]
|
21
|
+
if !record_set.resource_records.empty?
|
22
|
+
v = record_set.resource_records.map { |r| r.value }.join("\n")
|
23
|
+
record_set.name == name && \
|
24
|
+
value == v && \
|
25
|
+
record_set.ttl == options[:ttl]
|
26
|
+
else
|
27
|
+
# ALIAS
|
28
|
+
record_set.name == name && \
|
29
|
+
record_set.alias_target.dns_name == options[:alias_dns_name] && \
|
30
|
+
record_set.alias_target.hosted_zone_id == options[:alias_hosted_zone_id]
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def find_hosted_zone(id)
|
36
|
+
hosted_zones = {}
|
37
|
+
marker = nil
|
38
|
+
loop do
|
39
|
+
res = @client.list_hosted_zones({
|
40
|
+
marker: marker
|
41
|
+
})
|
42
|
+
marker = res.marker
|
43
|
+
break if res.hosted_zones.empty?
|
44
|
+
res.hosted_zones.each do |hosted_zone|
|
45
|
+
hosted_zones[hosted_zone[:name]] = hosted_zones
|
46
|
+
if hosted_zone[:name] == id || hosted_zone[:id] == '/hostedzone/' + id || hosted_zone[:id] == id
|
47
|
+
return hosted_zone
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
break if marker.nil?
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def method_missing(name)
|
56
|
+
describe = name.to_s
|
57
|
+
if @hosted_zone.key?(describe)
|
58
|
+
@hosted_zone[describe]
|
59
|
+
else
|
60
|
+
super
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Awspec::Type
|
2
|
+
class S3 < Base
|
3
|
+
attr_reader :client, :bucket
|
4
|
+
|
5
|
+
def initialize(id)
|
6
|
+
super
|
7
|
+
@client = Aws::S3::Client.new
|
8
|
+
res = @client.list_buckets
|
9
|
+
ret = @client.list_buckets[:buckets].find do |bucket|
|
10
|
+
bucket.name == id
|
11
|
+
end
|
12
|
+
@id = id if ret
|
13
|
+
@bucket = ret
|
14
|
+
end
|
15
|
+
|
16
|
+
def has_object?(key)
|
17
|
+
res = @client.head_object({
|
18
|
+
bucket: @id,
|
19
|
+
key: key.sub(%r(\A/), '')
|
20
|
+
})
|
21
|
+
res
|
22
|
+
rescue
|
23
|
+
false
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/awspec/type/vpc.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.0
|
4
|
+
version: 0.1.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-07-
|
11
|
+
date: 2015-07-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -135,11 +135,14 @@ files:
|
|
135
135
|
- lib/awspec/matcher/belong_to_db_subnet_group.rb
|
136
136
|
- lib/awspec/matcher/belong_to_subnet.rb
|
137
137
|
- lib/awspec/matcher/belong_to_vpc.rb
|
138
|
+
- lib/awspec/matcher/have_record_set.rb
|
138
139
|
- lib/awspec/setup.rb
|
139
140
|
- lib/awspec/type/base.rb
|
140
141
|
- lib/awspec/type/ec2.rb
|
141
142
|
- lib/awspec/type/rds.rb
|
142
143
|
- lib/awspec/type/rds_db_parameter_group.rb
|
144
|
+
- lib/awspec/type/route53_hosted_zone.rb
|
145
|
+
- lib/awspec/type/s3.rb
|
143
146
|
- lib/awspec/type/security_group.rb
|
144
147
|
- lib/awspec/type/vpc.rb
|
145
148
|
- lib/awspec/version.rb
|