zonify 0.4.6 → 0.4.7
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/bin/zonify +13 -4
- data/lib/zonify.rb +30 -10
- 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: 186d36c96eef1d14b65e3f3a576592cdf3db4bdc
|
4
|
+
data.tar.gz: 1505c7e0e7f101d959d3e73c962b8da3e7dc60b7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1bfcabe561a6ce7f7f0ae7d63c183c110d1af970da427b84d2e944ea80fb5a65efe1dc5472f008ef66c36d23d762c07a6422a6016a0ff4b23a08e3d00bac7d54
|
7
|
+
data.tar.gz: 3250c3104624cc774acfaa8d7f718dc45d835b02fd17cf166c76e3c031e004ded25fd531dcf5963e99a53d50cce11305e7d0de0052098dc51a8d511ab1ca69c1
|
data/bin/zonify
CHANGED
@@ -16,11 +16,12 @@ class CLIAWS
|
|
16
16
|
attr_reader :options
|
17
17
|
def initialize(access=nil, secret=nil)
|
18
18
|
@options = {}
|
19
|
-
@options.merge!(options) if options
|
20
19
|
env_adapter
|
21
|
-
{ :
|
22
|
-
|
23
|
-
|
20
|
+
auth = { :aws_access_key_id => (access or ENV['AWS_ACCESS_KEY']),
|
21
|
+
:aws_secret_access_key => (secret or ENV['AWS_SECRET_KEY']) }
|
22
|
+
auth = { :use_iam_profile => true } unless auth.values.all?
|
23
|
+
@options.merge!(auth)
|
24
|
+
{ :region => ENV['AWS_DEFAULT_REGION'],
|
24
25
|
}.each{|k,v| @options.merge!(k=>v) if v }
|
25
26
|
end
|
26
27
|
def respond_to?(sym)
|
@@ -153,8 +154,16 @@ def main
|
|
153
154
|
norm = (ARGV.delete("--srv-singleton") or not
|
154
155
|
ARGV.delete("--no-srv-singleton"))
|
155
156
|
use_iam_profile = ARGV.delete("--use-iam-profile")
|
157
|
+
zone = nil
|
158
|
+
while i = ARGV.index('--zone')
|
159
|
+
raise 'Zone already set...' if zone
|
160
|
+
ARGV.delete_at(i)
|
161
|
+
zone = ARGV[i]
|
162
|
+
ARGV.delete_at(i)
|
163
|
+
end
|
156
164
|
aws = CLIAWS.new
|
157
165
|
aws.options[:use_iam_profile] = true if use_iam_profile
|
166
|
+
aws.options[:zone] = zone if zone
|
158
167
|
types = nil
|
159
168
|
while i = ARGV.index('--types')
|
160
169
|
ARGV.delete_at(i)
|
data/lib/zonify.rb
CHANGED
@@ -19,12 +19,14 @@ class AWS
|
|
19
19
|
def create(options)
|
20
20
|
options_ec2 = options.merge( :provider=>'AWS',
|
21
21
|
:connection_options=>{:nonblock=>false} )
|
22
|
+
options_ec2.delete(:zone)
|
22
23
|
ec2 = Proc.new{|| Fog::Compute.new(options_ec2) }
|
23
24
|
options_elb = options_ec2.dup.delete_if{|k, _| k == :provider }
|
24
25
|
elb = Proc.new{|| Fog::AWS::ELB.new(options_elb) }
|
25
26
|
options_r53 = options_ec2.dup.delete_if{|k, _| k == :region }
|
26
27
|
r53 = Proc.new{|| Fog::DNS.new(options_r53) }
|
27
|
-
|
28
|
+
options.merge!(:ec2_proc=>ec2, :elb_proc=>elb, :r53_proc=>r53)
|
29
|
+
Zonify::AWS.new(options)
|
28
30
|
end
|
29
31
|
end
|
30
32
|
attr_reader :ec2_proc, :elb_proc, :r53_proc
|
@@ -35,6 +37,7 @@ class AWS
|
|
35
37
|
@ec2_proc = opts[:ec2_proc]
|
36
38
|
@elb_proc = opts[:elb_proc]
|
37
39
|
@r53_proc = opts[:r53_proc]
|
40
|
+
@zone = opts[:zone]
|
38
41
|
end
|
39
42
|
def ec2
|
40
43
|
@ec2 ||= @ec2_proc.call
|
@@ -56,7 +59,11 @@ class AWS
|
|
56
59
|
def route53_zone(suffix)
|
57
60
|
suffix_ = Zonify.dot_(suffix)
|
58
61
|
relevant_zone = r53.zones.select do |zone|
|
59
|
-
|
62
|
+
if @zone
|
63
|
+
@zone == zone.id
|
64
|
+
else
|
65
|
+
suffix_.end_with?(zone.domain)
|
66
|
+
end
|
60
67
|
end.sort_by{|zone| zone.domain.length }.last
|
61
68
|
if relevant_zone
|
62
69
|
relevant_records = relevant_zone.records.all!.map do |rr|
|
@@ -70,9 +77,19 @@ class AWS
|
|
70
77
|
# Apply a changeset to the records in Route53. The records must all be under
|
71
78
|
# the same zone and suffix.
|
72
79
|
def apply(changes, comment='Synced with Zonify tool.')
|
73
|
-
|
74
|
-
|
75
|
-
|
80
|
+
filtered = changes.select{|change| change[:value].length > 100 }
|
81
|
+
# For all the SRV records that were considered too long, get the names of
|
82
|
+
# the associated weighted CNAMEs.
|
83
|
+
filtered_correlates = filtered.map do |change|
|
84
|
+
case change[:name]
|
85
|
+
when /^_[*][.]_[*][.]/
|
86
|
+
change[:name][6, change[:name].length]
|
87
|
+
end
|
88
|
+
end.compact
|
89
|
+
keep = changes.select do |change|
|
90
|
+
change[:value].length <= 100 and not
|
91
|
+
filtered_correlates.include?(change[:name])
|
92
|
+
end
|
76
93
|
unless keep.empty?
|
77
94
|
suffix = keep.first[:name] # Works because of longest submatch rule.
|
78
95
|
zone, _ = route53_zone(suffix)
|
@@ -85,14 +102,18 @@ class AWS
|
|
85
102
|
acc
|
86
103
|
end
|
87
104
|
end
|
88
|
-
|
105
|
+
begin
|
106
|
+
r53.change_resource_record_sets(zone.id, rekeyed, :comment=>comment)
|
107
|
+
rescue Fog::Errors::Error => e
|
108
|
+
STDERR.puts("Failed with some records, due to:\n#{e}")
|
109
|
+
end
|
89
110
|
end
|
90
111
|
end
|
91
112
|
filtered
|
92
113
|
end
|
93
114
|
def instances
|
94
115
|
ec2.servers.inject({}) do |acc, i|
|
95
|
-
dns = i.dns_name
|
116
|
+
dns = (i.dns_name or i.private_dns_name)
|
96
117
|
# The default hostname for EC2 instances is derived from their internal
|
97
118
|
# DNS entry.
|
98
119
|
terminal_states = %w| terminated shutting-down |
|
@@ -294,7 +315,7 @@ def cname_multitudinous(tree)
|
|
294
315
|
if 'SRV' == type and 1 < data[:value].length
|
295
316
|
wrrs = data[:value].inject({}) do |accumulator, rr|
|
296
317
|
server = Zonify.dot_(rr.sub(/^([^ ]+ +){3}/, '').strip)
|
297
|
-
id = server.split('.').first # Always the
|
318
|
+
id = server.split('.').first # Always the instance ID.
|
298
319
|
accumulator[id] = data.merge(:value=>[server], :weight=>"16")
|
299
320
|
accumulator
|
300
321
|
end
|
@@ -434,7 +455,7 @@ end
|
|
434
455
|
LDH_RE = /^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])$/
|
435
456
|
def string_to_ldh_component(s)
|
436
457
|
LDH_RE.match(s) ? s.downcase : s.downcase.gsub(/[^a-z0-9-]/, '-').
|
437
|
-
sub(/(^[-]+|[-]+$)/, '')[0...
|
458
|
+
sub(/(^[-]+|[-]+$)/, '')[0...63]
|
438
459
|
end
|
439
460
|
|
440
461
|
def string_to_ldh(s)
|
@@ -602,4 +623,3 @@ end
|
|
602
623
|
RRTYPE_RE = /^([*]|[A-Z0-9-]+)$/
|
603
624
|
|
604
625
|
end
|
605
|
-
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zonify
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jason Dusek
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-12-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fog
|