roadworker 0.3.10 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -13
- data/README.md +2 -1
- data/lib/roadworker/dsl-converter.rb +8 -2
- data/lib/roadworker/dsl-tester.rb +3 -2
- data/lib/roadworker/dsl.rb +23 -7
- data/lib/roadworker/route53-ext.rb +46 -0
- data/lib/roadworker/route53-health-check.rb +4 -2
- data/lib/roadworker/route53-wrapper.rb +2 -2
- data/lib/roadworker/string-ext.rb +3 -3
- data/lib/roadworker/version.rb +1 -1
- metadata +15 -15
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
NWNiMzA2Nzk5YmE4NTllY2ZlMDFiMWNjZTYxYjYxYmM4MGEzNTRkMQ==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: efa1def64b9857b4163dec7834451bd043691b02
|
4
|
+
data.tar.gz: 22896a3d8aec83cbe1e8cd35902a19bae813a9ff
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
OGMzYzc2YzNlN2E1NjJjNGIwM2FmM2UxOTBlYTI4YjA4OTNiY2RlZThjOTZi
|
11
|
-
ZmYwNDUyMjVhMDQyNDhhNGU0MDVhYmRjMTU4NmI0Yzk4MjQ5OGI=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
ZGYxMzFkZGY5M2M0YjM5YWYyZWJlODc1YmU0MzNmODE3ZWRjOWQyODhkZDEw
|
14
|
-
ZGZiMmIyNTFmOWFhNjJhMzgxMjZiNWRhMDMzNmYyNmY4MWNmMzM3MDcyNmZj
|
15
|
-
MjE2ZDUyMTVhNTM0NTA3YzUzMjA2NzM5MzM3NjNmOTE5OTdhZjA=
|
6
|
+
metadata.gz: 0ff0d8d411d8946dcf5d6c603176fec39ce612ad9ff0b32ef5d197735c9e697d6d5f7c1bb20c26dbacec5fa498145a44877fc015cd61711df2d11d3772149ce3
|
7
|
+
data.tar.gz: 58a926b9dd085d59a817cd0a4b8a72fe922daddee9f1b1199f3b00f63598eece18d88dcc2b4d006d249c58ef7c85d08e5e422d4c1b01ffd3ff039577a007402f
|
data/README.md
CHANGED
@@ -4,6 +4,7 @@ Roadworker is a tool to manage Route53.
|
|
4
4
|
|
5
5
|
It defines the state of Route53 using DSL, and updates Route53 according to DSL.
|
6
6
|
|
7
|
+
[![Gem Version](https://badge.fury.io/rb/roadworker.png)](http://badge.fury.io/rb/roadworker)
|
7
8
|
[![Build Status](https://drone.io/bitbucket.org/winebarrel/roadworker/status.png)](https://drone.io/bitbucket.org/winebarrel/roadworker/latest)
|
8
9
|
|
9
10
|
**Notice**
|
@@ -66,7 +67,7 @@ hosted_zone "info.winebarrel.jp." do
|
|
66
67
|
rrset "zzz.info.winebarrel.jp", "A" do
|
67
68
|
set_identifier "Primary"
|
68
69
|
failover "PRIMARY"
|
69
|
-
health_check "http://192.0.43.10:80/path", :host => "example.com"
|
70
|
+
health_check "http://192.0.43.10:80/path", :host => "example.com", :search_string => "ANY_RESPONSE_STRING"
|
70
71
|
ttl 456
|
71
72
|
resource_records(
|
72
73
|
"127.0.0.1",
|
@@ -33,8 +33,14 @@ module Roadworker
|
|
33
33
|
end
|
34
34
|
when :health_check_id
|
35
35
|
config = HealthCheck.config_to_hash(@health_checks[value])
|
36
|
-
hc_args = config[:url].inspect
|
37
|
-
|
36
|
+
hc_args = config[:url].sub(/\A(https?)_str_match:/) { $1 + ':' }.inspect
|
37
|
+
|
38
|
+
[:host, :search_string].each do |key|
|
39
|
+
if config[key]
|
40
|
+
hc_args << ", :#{key} => #{config[key].inspect}"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
38
44
|
"health_check #{hc_args}"
|
39
45
|
else
|
40
46
|
"#{key} #{value.inspect}"
|
@@ -91,8 +91,9 @@ module Roadworker
|
|
91
91
|
expected_value = expected_value.map {|i| i.downcase.sub(/\.\Z/, '') }
|
92
92
|
actual_value = actual_value.map {|i| i.downcase.sub(/\.\Z/, '') }
|
93
93
|
when 'TXT', 'SPF'
|
94
|
-
|
95
|
-
|
94
|
+
# see https://github.com/bluemonk/net-dns/blob/651dc1006d9ee0c167fa515e4b9d2494af415ae9/lib/net/dns/rr/txt.rb#L46
|
95
|
+
expected_value = expected_value.map {|i| i.scan(/"([^"]+)"/).join(' ').strip }
|
96
|
+
actual_value = actual_value.map {|i| i.strip }
|
96
97
|
end
|
97
98
|
|
98
99
|
expected_message = record.resource_records ? expected_value.map {|i| "#{i}(#{expected_ttl})" }.join(',') : "#{record.dns_name}(#{expected_ttl})"
|
data/lib/roadworker/dsl.rb
CHANGED
@@ -120,18 +120,34 @@ module Roadworker
|
|
120
120
|
@result.failover = value
|
121
121
|
end
|
122
122
|
|
123
|
-
def health_check(url, options
|
123
|
+
def health_check(url, *options)
|
124
124
|
config = HealthCheck.parse_url(url)
|
125
125
|
|
126
|
-
if options
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
126
|
+
if options.length == 1 and options.first.kind_of?(Hash)
|
127
|
+
options = options.first
|
128
|
+
|
129
|
+
{
|
130
|
+
:host => :fully_qualified_domain_name,
|
131
|
+
:search_string => :search_string,
|
132
|
+
}.each do |option_key, config_key|
|
133
|
+
config[config_key] = options[option_key] if options[option_key]
|
134
|
+
end
|
135
|
+
else
|
136
|
+
options.each_with_index do |value, i|
|
137
|
+
key = [
|
138
|
+
:fully_qualified_domain_name,
|
139
|
+
:search_string,
|
140
|
+
][i]
|
141
|
+
|
142
|
+
config[key] = value
|
131
143
|
end
|
132
144
|
end
|
133
145
|
|
134
|
-
|
146
|
+
if config[:search_string]
|
147
|
+
config[:type] += '_STR_MATCH'
|
148
|
+
end
|
149
|
+
|
150
|
+
@result.health_check = config
|
135
151
|
end
|
136
152
|
|
137
153
|
def resource_records(*values)
|
@@ -1,6 +1,52 @@
|
|
1
1
|
require 'aws-sdk'
|
2
2
|
|
3
3
|
module AWS
|
4
|
+
module Core
|
5
|
+
class Client
|
6
|
+
|
7
|
+
# PTF:
|
8
|
+
class << self
|
9
|
+
alias load_api_config_orig load_api_config
|
10
|
+
|
11
|
+
def load_api_config(api_version)
|
12
|
+
yaml = load_api_config_orig(api_version)
|
13
|
+
|
14
|
+
if service_name == 'Route53'
|
15
|
+
replace_api_version(yaml)
|
16
|
+
end
|
17
|
+
|
18
|
+
return yaml
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def replace_api_version(value)
|
24
|
+
case value
|
25
|
+
when String
|
26
|
+
if value =~ /2012-12-12/
|
27
|
+
value.gsub!(/2012-12-12/, '2013-04-01')
|
28
|
+
end
|
29
|
+
when Array
|
30
|
+
value.each {|v| replace_api_version(v) }
|
31
|
+
when Hash
|
32
|
+
value.each do |k, v|
|
33
|
+
if k == :health_check_config
|
34
|
+
v[:members][:search_string] = {
|
35
|
+
:name => 'SearchString',
|
36
|
+
:type => :string,
|
37
|
+
:position => 5,
|
38
|
+
}
|
39
|
+
end
|
40
|
+
|
41
|
+
replace_api_version(v)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end # of class method
|
46
|
+
|
47
|
+
end # Client
|
48
|
+
end # Core
|
49
|
+
|
4
50
|
class Route53
|
5
51
|
|
6
52
|
# http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region
|
@@ -18,12 +18,14 @@ module Roadworker
|
|
18
18
|
port = config[:port]
|
19
19
|
type = config[:type].downcase
|
20
20
|
path = config[:resource_path]
|
21
|
-
fqdn = config[:fully_qualified_domain_name]
|
21
|
+
fqdn = config[:fully_qualified_domain_name]
|
22
|
+
fqdn = fqdn.downcase if fqdn
|
23
|
+
search_string = config[:search_string]
|
22
24
|
|
23
25
|
url = "#{type}://#{ipaddr}:#{port}"
|
24
26
|
url << path if path && path != '/'
|
25
27
|
|
26
|
-
{:url => url, :
|
28
|
+
{:url => url, :host => fqdn, :search_string => search_string}
|
27
29
|
end
|
28
30
|
|
29
31
|
def parse_url(url)
|
@@ -61,7 +61,7 @@ module Roadworker
|
|
61
61
|
HostedZoneWrapper.new(zone, @options)
|
62
62
|
end
|
63
63
|
end # HostedZoneCollection
|
64
|
-
|
64
|
+
|
65
65
|
class HostedZoneWrapper
|
66
66
|
include Roadworker::Log
|
67
67
|
|
@@ -115,7 +115,7 @@ module Roadworker
|
|
115
115
|
end
|
116
116
|
|
117
117
|
def create(name, type, expected_record)
|
118
|
-
log(:info, 'Create ResourceRecordSet', :cyan) do
|
118
|
+
log(:info, 'Create ResourceRecordSet', :cyan) do
|
119
119
|
log_id = [name, type].join(' ')
|
120
120
|
rrset_setid = expected_record.set_identifier
|
121
121
|
rrset_setid ? (log_id + " (#{rrset_setid})") : log_id
|
@@ -13,11 +13,11 @@ class String
|
|
13
13
|
end
|
14
14
|
end # of class method
|
15
15
|
|
16
|
-
Term::ANSIColor::Attribute.named_attributes.map do |
|
16
|
+
Term::ANSIColor::Attribute.named_attributes.map do |attribute|
|
17
17
|
class_eval(<<-EOS, __FILE__, __LINE__ + 1)
|
18
|
-
def #{
|
18
|
+
def #{attribute.name}
|
19
19
|
if @@colorize
|
20
|
-
Term::ANSIColor.send(#{
|
20
|
+
Term::ANSIColor.send(#{attribute.name.inspect}, self)
|
21
21
|
else
|
22
22
|
self
|
23
23
|
end
|
data/lib/roadworker/version.rb
CHANGED
metadata
CHANGED
@@ -1,41 +1,41 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: roadworker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- winebarrel
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-02-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 1.
|
19
|
+
version: 1.33.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 1.
|
26
|
+
version: 1.33.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: term-ansicolor
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 1.2.2
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 1.2.2
|
41
41
|
- !ruby/object:Gem::Dependency
|
@@ -56,14 +56,14 @@ dependencies:
|
|
56
56
|
name: uuid
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - '>='
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: 2.3.7
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - '>='
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 2.3.7
|
69
69
|
- !ruby/object:Gem::Dependency
|
@@ -84,14 +84,14 @@ dependencies:
|
|
84
84
|
name: rake
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - '>='
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - '>='
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
@@ -142,17 +142,17 @@ require_paths:
|
|
142
142
|
- lib
|
143
143
|
required_ruby_version: !ruby/object:Gem::Requirement
|
144
144
|
requirements:
|
145
|
-
- -
|
145
|
+
- - '>='
|
146
146
|
- !ruby/object:Gem::Version
|
147
147
|
version: '0'
|
148
148
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
|
-
- -
|
150
|
+
- - '>='
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '0'
|
153
153
|
requirements: []
|
154
154
|
rubyforge_project:
|
155
|
-
rubygems_version: 2.
|
155
|
+
rubygems_version: 2.0.14
|
156
156
|
signing_key:
|
157
157
|
specification_version: 4
|
158
158
|
summary: Roadworker is a tool to manage Route53.
|