roadworker 0.5.6.beta4 → 0.5.6.beta5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/roadworker/client.rb +1 -1
- data/lib/roadworker/dsl-converter.rb +4 -3
- data/lib/roadworker/dsl-tester.rb +12 -12
- data/lib/roadworker/dsl.rb +7 -5
- data/lib/roadworker/route53-ext.rb +18 -18
- data/lib/roadworker/route53-health-check.rb +2 -1
- data/lib/roadworker/route53-wrapper.rb +15 -15
- data/lib/roadworker/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f704ca0ddbe2ecec12884f5f0a2303e92ce94936
|
4
|
+
data.tar.gz: c07c66533c03a73f17be918f6da9ae05c53a8dfa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5498a358be59907f492c8e8f17542da3ae7710c203f787a60fdd7e82bc62efb5052e912f850be7b834a08eaee00a24e0ac53eac5f12b23bda4d82b732e6a732d
|
7
|
+
data.tar.gz: 189612e79f32c335732ec98d13adc80d8d144f185d2f350b2a5204c3099f106be2391ac2f1bbad13af6c3712b4610b287a7d24524d6dbb2e702897719d60f304
|
data/lib/roadworker/client.rb
CHANGED
@@ -48,6 +48,7 @@ module Roadworker
|
|
48
48
|
:failure_threshold,
|
49
49
|
:measure_latency,
|
50
50
|
:inverted,
|
51
|
+
:enable_sni,
|
51
52
|
].each do |key|
|
52
53
|
unless config[key].nil?
|
53
54
|
hc_args << ", :#{key} => #{config[key].inspect}"
|
@@ -58,11 +59,11 @@ module Roadworker
|
|
58
59
|
when :dns_name
|
59
60
|
if value.kind_of?(Array) and value.length > 1
|
60
61
|
dns_name_opts = value.pop
|
61
|
-
value = value.inspect.sub(/\A\[/, '').sub(/\]\
|
62
|
-
dns_name_opts = dns_name_opts.inspect.sub(/\A\{/, '').sub(/\}\
|
62
|
+
value = value.inspect.sub(/\A\[/, '').sub(/\]\z/, '')
|
63
|
+
dns_name_opts = dns_name_opts.inspect.sub(/\A\{/, '').sub(/\}\z/, '')
|
63
64
|
"#{key} #{value}, #{dns_name_opts}"
|
64
65
|
else
|
65
|
-
value = [value].flatten.inspect.sub(/\A\[/, '').sub(/\]\
|
66
|
+
value = [value].flatten.inspect.sub(/\A\[/, '').sub(/\]\z/, '')
|
66
67
|
"#{key} #{value}"
|
67
68
|
end
|
68
69
|
else
|
@@ -95,8 +95,8 @@ module Roadworker
|
|
95
95
|
|
96
96
|
case type
|
97
97
|
when 'NS', 'PTR', 'MX', 'CNAME', 'SRV'
|
98
|
-
expected_value = expected_value.map {|i| i.downcase.sub(/\.\
|
99
|
-
actual_value = actual_value.map {|i| i.downcase.sub(/\.\
|
98
|
+
expected_value = expected_value.map {|i| i.downcase.sub(/\.\z/, '') }
|
99
|
+
actual_value = actual_value.map {|i| i.downcase.sub(/\.\z/, '') }
|
100
100
|
when 'TXT', 'SPF'
|
101
101
|
# see https://github.com/bluemonk/net-dns/blob/651dc1006d9ee0c167fa515e4b9d2494af415ae9/lib/net/dns/rr/txt.rb#L46
|
102
102
|
expected_value = expected_value.map {|i| i.scan(/(?:\\\\|(?:\\"|(?:[^\\"]|[^"])))*"((?:\\\\|(?:\\"|(?:\\"|(?:[^\\"]|[^"]))))*)"/).join(' ').gsub(/\\(.)/) { $1 }.strip }
|
@@ -118,20 +118,20 @@ module Roadworker
|
|
118
118
|
|
119
119
|
if fetch_dns_name(record.dns_name)
|
120
120
|
# A(Alias)
|
121
|
-
case fetch_dns_name(record.dns_name).sub(/\.\
|
121
|
+
case fetch_dns_name(record.dns_name).sub(/\.\z/, '')
|
122
122
|
when /\.elb\.amazonaws\.com/i
|
123
123
|
is_same = response.answer.all? {|a|
|
124
124
|
response_query_ptr = query(a.value, 'PTR', error_messages)
|
125
125
|
|
126
126
|
if response_query_ptr
|
127
127
|
response_query_ptr.answer.all? do |ptr|
|
128
|
-
ptr.value =~ /\.compute\.amazonaws\.com\.\
|
128
|
+
ptr.value =~ /\.compute\.amazonaws\.com\.\z/
|
129
129
|
end
|
130
130
|
else
|
131
131
|
false
|
132
132
|
end
|
133
133
|
}
|
134
|
-
when /\As3-website-(?:[^.]+)\.amazonaws\.com\
|
134
|
+
when /\As3-website-(?:[^.]+)\.amazonaws\.com\z/
|
135
135
|
response_answer_ip_1_2 = response.answer.map {|a| a.value.split('.').slice(0, 2) }.uniq
|
136
136
|
|
137
137
|
# try 3 times
|
@@ -148,13 +148,13 @@ module Roadworker
|
|
148
148
|
response_answer_ip_1_2.include?(ip.split('.').slice(0, 2))
|
149
149
|
}
|
150
150
|
end
|
151
|
-
when /\.cloudfront\.net\
|
151
|
+
when /\.cloudfront\.net\z/
|
152
152
|
is_same = response.answer.all? {|a|
|
153
153
|
response_query_ptr = query(a.value, 'PTR', error_messages)
|
154
154
|
|
155
155
|
if response_query_ptr
|
156
156
|
response_query_ptr.answer.all? do |ptr|
|
157
|
-
ptr.value =~ /\.cloudfront\.net\.\
|
157
|
+
ptr.value =~ /\.cloudfront\.net\.\z/
|
158
158
|
end
|
159
159
|
end
|
160
160
|
}
|
@@ -184,9 +184,9 @@ module Roadworker
|
|
184
184
|
if asterisk_answers
|
185
185
|
asterisk_answers.each do |ast_key, answers|
|
186
186
|
ast_name = ast_key[0]
|
187
|
-
ast_regex = Regexp.new('\A' + ast_name.sub(/\.\
|
187
|
+
ast_regex = Regexp.new('\A' + ast_name.sub(/\.\z/, '').gsub('.', '\.').gsub('*', '.+') + '\Z')
|
188
188
|
|
189
|
-
if ast_regex =~ name.sub(/\.\
|
189
|
+
if ast_regex =~ name.sub(/\.\z/, '') and actual_value.any? {|i| answers.include?(i) }
|
190
190
|
warning_messages << "#{name} #{type}: same as `#{ast_name}`"
|
191
191
|
end
|
192
192
|
end
|
@@ -252,8 +252,8 @@ module Roadworker
|
|
252
252
|
def fix_srv_host(query_name, host)
|
253
253
|
if (host || '').strip.empty?
|
254
254
|
query_name
|
255
|
-
elsif host =~ /\x1A\
|
256
|
-
host = host.sub(/\x1A\
|
255
|
+
elsif host =~ /\x1A\z/
|
256
|
+
host = host.sub(/\x1A\z/, '')
|
257
257
|
query_name = query_name.split('.')
|
258
258
|
query_name.slice!(0, host.count('.'))
|
259
259
|
host + query_name.join('.')
|
@@ -295,7 +295,7 @@ module Roadworker
|
|
295
295
|
end
|
296
296
|
|
297
297
|
def asterisk_to_anyname(name)
|
298
|
-
rand_str = (("a".."z").to_a + ("A".."
|
298
|
+
rand_str = (("a".."z").to_a + ("A".."z").to_a + (0..9).to_a).shuffle[0..7].join
|
299
299
|
name.gsub('*', "#{ASTERISK_PREFIX}-#{rand_str}")
|
300
300
|
end
|
301
301
|
|
data/lib/roadworker/dsl.rb
CHANGED
@@ -51,10 +51,10 @@ module Roadworker
|
|
51
51
|
end
|
52
52
|
|
53
53
|
def hosted_zone(name, &block)
|
54
|
-
@result.hosted_zones <<
|
54
|
+
@result.hosted_zones << Hostedzone.new(@context, name, [], &block).result
|
55
55
|
end
|
56
56
|
|
57
|
-
class
|
57
|
+
class Hostedzone
|
58
58
|
include Roadworker::TemplateHelper
|
59
59
|
|
60
60
|
attr_reader :result
|
@@ -94,7 +94,7 @@ module Roadworker
|
|
94
94
|
end
|
95
95
|
|
96
96
|
def resource_record_set(rrset_name, type, &block)
|
97
|
-
if rrset_name.sub(/\.\
|
97
|
+
if rrset_name.sub(/\.\z/, '') !~ /#{Regexp.escape(@name.sub(/\.\Z/, ''))}\Z/i
|
98
98
|
raise "Invalid ResourceRecordSet Name: #{rrset_name}"
|
99
99
|
end
|
100
100
|
|
@@ -179,7 +179,8 @@ module Roadworker
|
|
179
179
|
:health_threshold => :health_threshold,
|
180
180
|
:failure_threshold => :failure_threshold,
|
181
181
|
:measure_latency => :measure_latency,
|
182
|
-
:inverted => :inverted
|
182
|
+
:inverted => :inverted,
|
183
|
+
:enable_sni => :enable_sni,
|
183
184
|
}.each do |option_key, config_key|
|
184
185
|
config[config_key] = options[option_key] unless options[option_key].nil?
|
185
186
|
end
|
@@ -193,6 +194,7 @@ module Roadworker
|
|
193
194
|
config[:failure_threshold] ||= 3
|
194
195
|
config[:measure_latency] ||= false
|
195
196
|
config[:inverted] ||= false
|
197
|
+
config[:enable_sni] ||= false
|
196
198
|
end
|
197
199
|
|
198
200
|
@result.health_check = config
|
@@ -208,7 +210,7 @@ module Roadworker
|
|
208
210
|
|
209
211
|
end # ResourceRecordSet
|
210
212
|
|
211
|
-
end #
|
213
|
+
end # Hostedzone
|
212
214
|
|
213
215
|
end # DSL
|
214
216
|
end # RoadWorker
|
@@ -5,20 +5,20 @@ module Aws
|
|
5
5
|
|
6
6
|
# http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region
|
7
7
|
S3_WEBSITE_ENDPOINTS = {
|
8
|
-
's3-website-us-east-1.amazonaws.com' => '
|
9
|
-
's3-website-us-west-2.amazonaws.com' => '
|
10
|
-
's3-website-us-west-1.amazonaws.com' => '
|
11
|
-
's3-website-eu-west-1.amazonaws.com' => '
|
12
|
-
's3-website.eu-central-1.amazonaws.com' => '
|
13
|
-
's3-website-ap-southeast-1.amazonaws.com' => '
|
14
|
-
's3-website-ap-southeast-2.amazonaws.com' => '
|
15
|
-
's3-website-ap-northeast-1.amazonaws.com' => '
|
16
|
-
's3-website-sa-east-1.amazonaws.com' => '
|
17
|
-
's3-website-us-gov-west-1.amazonaws.com' => '
|
8
|
+
's3-website-us-east-1.amazonaws.com' => 'z3AQBSTGFYJSTF',
|
9
|
+
's3-website-us-west-2.amazonaws.com' => 'z3BJ6K6RIION7M',
|
10
|
+
's3-website-us-west-1.amazonaws.com' => 'z2F56UZL2M1ACD',
|
11
|
+
's3-website-eu-west-1.amazonaws.com' => 'z1BKCTXD74EZPE',
|
12
|
+
's3-website.eu-central-1.amazonaws.com' => 'z21DNDUVLTQW6Q',
|
13
|
+
's3-website-ap-southeast-1.amazonaws.com' => 'z3O0J2DXBE1FTB',
|
14
|
+
's3-website-ap-southeast-2.amazonaws.com' => 'z1WCIGYICN2BYD',
|
15
|
+
's3-website-ap-northeast-1.amazonaws.com' => 'z2M4EHUR26P7ZW',
|
16
|
+
's3-website-sa-east-1.amazonaws.com' => 'z7KQH4QJS55SO',
|
17
|
+
's3-website-us-gov-west-1.amazonaws.com' => 'z31GFT0UA1I2HV',
|
18
18
|
}
|
19
19
|
|
20
20
|
# http://docs.aws.amazon.com/Route53/latest/APIReference/API_ChangeResourceRecordSets.html
|
21
|
-
|
21
|
+
CF_HOSTED_zONE_ID = 'Z2FDTNDATAQYW2'
|
22
22
|
|
23
23
|
class << self
|
24
24
|
def normalize_dns_name_options(src)
|
@@ -34,22 +34,22 @@ module Aws
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def dns_name_to_alias_target(name, options, hosted_zone_id, hosted_zone_name)
|
37
|
-
hosted_zone_name = hosted_zone_name.sub(/\.\
|
38
|
-
name = name.sub(/\.\
|
37
|
+
hosted_zone_name = hosted_zone_name.sub(/\.\z/, '')
|
38
|
+
name = name.sub(/\.\z/, '')
|
39
39
|
options ||= {}
|
40
40
|
|
41
|
-
if name =~ /([^.]+)\.elb\.amazonaws.com\
|
41
|
+
if name =~ /([^.]+)\.elb\.amazonaws.com\z/i
|
42
42
|
region = $1.downcase
|
43
43
|
alias_target = elb_dns_name_to_alias_target(name, region, options)
|
44
44
|
|
45
45
|
# XXX:
|
46
46
|
alias_target.merge(options)
|
47
|
-
elsif (s3_hosted_zone_id = S3_WEBSITE_ENDPOINTS[name.downcase]) and name =~ /\As3-website-([^.]+)\.amazonaws\.com\
|
47
|
+
elsif (s3_hosted_zone_id = S3_WEBSITE_ENDPOINTS[name.downcase]) and name =~ /\As3-website-([^.]+)\.amazonaws\.com\z/i
|
48
48
|
region = $1.downcase
|
49
49
|
s3_dns_name_to_alias_target(name, region, s3_hosted_zone_id)
|
50
|
-
elsif name =~ /\.cloudfront\.net\
|
50
|
+
elsif name =~ /\.cloudfront\.net\z/i
|
51
51
|
cf_dns_name_to_alias_target(name)
|
52
|
-
elsif name =~
|
52
|
+
elsif name =~ /(\A|\.)#{Regexp.escape(hosted_zone_name)}\z/i
|
53
53
|
this_hz_dns_name_to_alias_target(name, hosted_zone_id)
|
54
54
|
else
|
55
55
|
raise "Invalid DNS Name: #{name}"
|
@@ -100,7 +100,7 @@ module Aws
|
|
100
100
|
|
101
101
|
def cf_dns_name_to_alias_target(name)
|
102
102
|
{
|
103
|
-
:hosted_zone_id =>
|
103
|
+
:hosted_zone_id => CF_HOSTED_zONE_ID,
|
104
104
|
:dns_name => name,
|
105
105
|
:evaluate_target_health => false, # XXX:
|
106
106
|
}
|
@@ -44,6 +44,7 @@ module Roadworker
|
|
44
44
|
:failure_threshold,
|
45
45
|
:measure_latency,
|
46
46
|
:inverted,
|
47
|
+
:enable_sni,
|
47
48
|
].each do |key|
|
48
49
|
hash[key] = config[key] unless config[key].nil?
|
49
50
|
end
|
@@ -74,7 +75,7 @@ module Roadworker
|
|
74
75
|
config[key] = value if value
|
75
76
|
}
|
76
77
|
|
77
|
-
if url.host =~ /\A\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\
|
78
|
+
if url.host =~ /\A\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\z/
|
78
79
|
config.ip_address = url.host
|
79
80
|
else
|
80
81
|
config.fully_qualified_domain_name = url.host
|
@@ -24,10 +24,10 @@ module Roadworker
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def hosted_zones
|
27
|
-
|
27
|
+
HostedzoneCollectionWrapper.new(@options.route53.list_hosted_zones, @options)
|
28
28
|
end
|
29
29
|
|
30
|
-
class
|
30
|
+
class HostedzoneCollectionWrapper
|
31
31
|
include Roadworker::Log
|
32
32
|
|
33
33
|
def initialize(hosted_zones_response, options)
|
@@ -38,7 +38,7 @@ module Roadworker
|
|
38
38
|
def each
|
39
39
|
Collection.batch(@hosted_zones_response, :hosted_zones) do |zone|
|
40
40
|
resp = @options.route53.get_hosted_zone(id: zone.id)
|
41
|
-
yield(
|
41
|
+
yield(HostedzoneWrapper.new(resp.hosted_zone, resp.vp_cs, @options))
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
@@ -50,7 +50,7 @@ module Roadworker
|
|
50
50
|
opts.delete(:vpc)
|
51
51
|
end
|
52
52
|
|
53
|
-
logmsg = 'Create
|
53
|
+
logmsg = 'Create Hostedzone'
|
54
54
|
logmsg << " #{vpc.inspect}"
|
55
55
|
log(:info, logmsg, :cyan, name)
|
56
56
|
|
@@ -70,11 +70,11 @@ module Roadworker
|
|
70
70
|
@options.updated = true
|
71
71
|
end
|
72
72
|
|
73
|
-
|
73
|
+
HostedzoneWrapper.new(zone, vpcs, @options)
|
74
74
|
end
|
75
|
-
end #
|
75
|
+
end # HostedzoneCollection
|
76
76
|
|
77
|
-
class
|
77
|
+
class HostedzoneWrapper
|
78
78
|
include Roadworker::Log
|
79
79
|
|
80
80
|
def initialize(hosted_zone, vpcs, options)
|
@@ -92,7 +92,7 @@ module Roadworker
|
|
92
92
|
|
93
93
|
def delete
|
94
94
|
if @options.force
|
95
|
-
log(:info, 'Delete
|
95
|
+
log(:info, 'Delete Hostedzone', :red, @hosted_zone.name)
|
96
96
|
|
97
97
|
self.rrsets.each do |record|
|
98
98
|
record.delete
|
@@ -103,7 +103,7 @@ module Roadworker
|
|
103
103
|
@options.updated = true
|
104
104
|
end
|
105
105
|
else
|
106
|
-
log(:info, 'Undefined
|
106
|
+
log(:info, 'Undefined Hostedzone (pass `--force` if you want to remove)', :yellow, @hosted_zone.name)
|
107
107
|
end
|
108
108
|
end
|
109
109
|
|
@@ -132,7 +132,7 @@ module Roadworker
|
|
132
132
|
def method_missing(method_name, *args)
|
133
133
|
@hosted_zone.send(method_name, *args)
|
134
134
|
end
|
135
|
-
end #
|
135
|
+
end # HostedzoneWrapper
|
136
136
|
|
137
137
|
class ResourceRecordSetCollectionWrapper
|
138
138
|
include Roadworker::Log
|
@@ -223,8 +223,8 @@ module Roadworker
|
|
223
223
|
elsif expected and actual
|
224
224
|
case attribute
|
225
225
|
when :dns_name
|
226
|
-
expected[0] = expected[0].downcase.sub(/\.\
|
227
|
-
actual[0] = actual[0].downcase.sub(/\.\
|
226
|
+
expected[0] = expected[0].downcase.sub(/\.\z/, '')
|
227
|
+
actual[0] = actual[0].downcase.sub(/\.\z/, '')
|
228
228
|
end
|
229
229
|
|
230
230
|
(expected == actual)
|
@@ -288,9 +288,9 @@ module Roadworker
|
|
288
288
|
end
|
289
289
|
|
290
290
|
def delete
|
291
|
-
if self.type =~ /\A(SOA|NS)\
|
292
|
-
hz_name = (@hosted_zone.name || @options.hosted_zone_name).downcase.sub(/\.\
|
293
|
-
rrs_name = @resource_record_set.name.downcase.sub(/\.\
|
291
|
+
if self.type =~ /\A(SOA|NS)\z/i
|
292
|
+
hz_name = (@hosted_zone.name || @options.hosted_zone_name).downcase.sub(/\.\z/, '')
|
293
|
+
rrs_name = @resource_record_set.name.downcase.sub(/\.\z/, '')
|
294
294
|
return if hz_name == rrs_name
|
295
295
|
end
|
296
296
|
|
data/lib/roadworker/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: roadworker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.6.
|
4
|
+
version: 0.5.6.beta5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- winebarrel
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-03-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk
|