sprinkle_dns 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +2 -0
- data/lib/sprinkle_dns/cli/hosted_zone_diff.rb +3 -1
- data/lib/sprinkle_dns/client.rb +16 -10
- data/lib/sprinkle_dns/config.rb +7 -1
- data/lib/sprinkle_dns/hosted_zone_entry.rb +2 -2
- data/lib/sprinkle_dns/version.rb +1 -1
- data/spec/unit/sprinkle_dns_spec.rb +89 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e7508012e43f792a2fec3f28c908c672476b684286c4cd726a7572a6c85abade
|
4
|
+
data.tar.gz: e95768f7c91d4cd0e6cff0204c2e4994734f4b8c37423fe639c5ddd0c858778f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4c20c1b83672ded307e65e0405da4c68f7c7acde3178d531f80c4e8dd462ed717e0d1e2c8802c5aab74729287d6c886686dd68ee432b07c120b63d940dfa333d
|
7
|
+
data.tar.gz: 9a7ebc53c0d8f123150ecd1a7b1db0c0cca0ab2c409cd2179b7470cfa35dfc08f5180f07f7db25e3473819417745ed3d153dc31a7eeaff8ef91bc95591b568bd
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -60,6 +60,7 @@ client = SprinkleDNS::Route53Client.new(ACCESS_KEY_ID, SECRET_ACCESS_KEY)
|
|
60
60
|
sdns = SprinkleDNS::Client.new(client,
|
61
61
|
dry_run: false,
|
62
62
|
diff: true,
|
63
|
+
show_untouched: false,
|
63
64
|
force: true,
|
64
65
|
delete: false,
|
65
66
|
interactive_progress: true,
|
@@ -73,6 +74,7 @@ Here is a table that shows the different configuration options:
|
|
73
74
|
|------------------------|-----------------------------------------------------------------------------------------------------------|---------------|
|
74
75
|
| `dry_run` | Do not make any changes, just compare and exit, useful with `diff: true`. | `true` |
|
75
76
|
| `diff` | Prints a diff to list the changes that are going to be made. | `true` |
|
77
|
+
| `show_untouched` | Specifies whether or not the diff should show untouched records or not. | `false` |
|
76
78
|
| `force` | Do not ask before changes are made, just apply. | `false` |
|
77
79
|
| `delete` | Specifies whether unreferenced entries should be deleted. | `false` |
|
78
80
|
| `interactive_progress` | Shows interactive progress whilst changes are being applied, nice for your terminal, not for your CI-job. | `true` |
|
@@ -35,7 +35,9 @@ module SprinkleDNS::CLI
|
|
35
35
|
elsif to_delete.include?(entry)
|
36
36
|
entries << entry_to_struct('-', entry, hosted_zone)
|
37
37
|
else
|
38
|
-
|
38
|
+
if configuration.show_untouched?
|
39
|
+
entries << entry_to_struct(nil, entry, hosted_zone)
|
40
|
+
end
|
39
41
|
end
|
40
42
|
end
|
41
43
|
end
|
data/lib/sprinkle_dns/client.rb
CHANGED
@@ -17,7 +17,7 @@ module SprinkleDNS
|
|
17
17
|
class Client
|
18
18
|
attr_reader :wanted_hosted_zones, :config
|
19
19
|
|
20
|
-
def initialize(dns_provider, dry_run: false, diff: true, force: true, delete: false, interactive_progress: true, create_hosted_zones: false)
|
20
|
+
def initialize(dns_provider, dry_run: false, diff: true, force: true, delete: false, interactive_progress: true, create_hosted_zones: false, show_untouched: false)
|
21
21
|
@config = SprinkleDNS::Config.new(
|
22
22
|
dry_run: dry_run,
|
23
23
|
diff: diff,
|
@@ -25,6 +25,7 @@ module SprinkleDNS
|
|
25
25
|
delete: delete,
|
26
26
|
interactive_progress: interactive_progress,
|
27
27
|
create_hosted_zones: create_hosted_zones,
|
28
|
+
show_untouched: show_untouched,
|
28
29
|
)
|
29
30
|
@dns_provider = dns_provider
|
30
31
|
@wanted_hosted_zones = []
|
@@ -95,16 +96,21 @@ module SprinkleDNS
|
|
95
96
|
unless @config.force?
|
96
97
|
changes = hosted_zones.map{|h| SprinkleDNS::EntryPolicyService.new(h, @config)}.collect{|eps| eps.entries_to_change}.sum
|
97
98
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
99
|
+
if missing_hosted_zones.any? || changes > 0
|
100
|
+
messages = []
|
101
|
+
messages << "#{missing_hosted_zones.size} hosted-zone(s) to create" if missing_hosted_zones.any?
|
102
|
+
messages << "#{changes} change(s) to make" if changes > 0
|
103
|
+
print messages.join(' and ').concat(". Continue? (y/N)")
|
104
|
+
|
105
|
+
case gets.strip
|
106
|
+
when 'y', 'Y'
|
107
|
+
# continue
|
108
|
+
else
|
109
|
+
puts ".. exiting!"
|
110
|
+
return [hosted_zones, nil]
|
111
|
+
end
|
107
112
|
else
|
113
|
+
puts "No changes to make, everything up to date!"
|
108
114
|
puts ".. exiting!"
|
109
115
|
return [hosted_zones, nil]
|
110
116
|
end
|
data/lib/sprinkle_dns/config.rb
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
module SprinkleDNS
|
2
2
|
class Config
|
3
|
-
def initialize(dry_run: true, diff: true, force: false, delete: false, interactive_progress: true, create_hosted_zones: false)
|
3
|
+
def initialize(dry_run: true, diff: true, force: false, delete: false, interactive_progress: true, create_hosted_zones: false, show_untouched: false)
|
4
4
|
@dry_run = dry_run
|
5
5
|
@diff = diff
|
6
6
|
@force = force
|
7
7
|
@delete = delete
|
8
8
|
@interactive_progress = interactive_progress
|
9
9
|
@create_hosted_zones = create_hosted_zones
|
10
|
+
@show_untouched = show_untouched
|
10
11
|
|
11
12
|
raise SettingNotBoolean.new('dry_run is not a boolean') unless [true, false].include?(dry_run)
|
12
13
|
raise SettingNotBoolean.new('diff is not a boolean') unless [true, false].include?(diff)
|
@@ -14,6 +15,7 @@ module SprinkleDNS
|
|
14
15
|
raise SettingNotBoolean.new('delete is not a boolean') unless [true, false].include?(delete)
|
15
16
|
raise SettingNotBoolean.new('interactive_progress is not a boolean') unless [true, false].include?(interactive_progress)
|
16
17
|
raise SettingNotBoolean.new('create_hosted_zones is not a boolean') unless [true, false].include?(create_hosted_zones)
|
18
|
+
raise SettingNotBoolean.new('show_untouched is not a boolean') unless [true, false].include?(show_untouched)
|
17
19
|
end
|
18
20
|
|
19
21
|
def dry_run?
|
@@ -39,5 +41,9 @@ module SprinkleDNS
|
|
39
41
|
def create_hosted_zones?
|
40
42
|
@create_hosted_zones
|
41
43
|
end
|
44
|
+
|
45
|
+
def show_untouched?
|
46
|
+
@show_untouched
|
47
|
+
end
|
42
48
|
end
|
43
49
|
end
|
@@ -61,8 +61,8 @@ module SprinkleDNS
|
|
61
61
|
|
62
62
|
def new_value(new_entry)
|
63
63
|
if new_entry.class == SprinkleDNS::HostedZoneEntry
|
64
|
-
@changed_value = true if @value != new_entry.value
|
65
|
-
@changed_ttl = true if @ttl
|
64
|
+
@changed_value = true if @value.sort != new_entry.value.sort
|
65
|
+
@changed_ttl = true if @ttl != new_entry.ttl
|
66
66
|
else
|
67
67
|
@changed_value = true
|
68
68
|
@changed_ttl = true
|
data/lib/sprinkle_dns/version.rb
CHANGED
@@ -122,6 +122,95 @@ RSpec.describe SprinkleDNS::Client do
|
|
122
122
|
end
|
123
123
|
end
|
124
124
|
|
125
|
+
context 'comparing should ignore ordering' do
|
126
|
+
it 'for MX-records' do
|
127
|
+
hz = SprinkleDNS::HostedZone.new('rubyisms.co.uk.')
|
128
|
+
|
129
|
+
e1 = SprinkleDNS::HostedZoneEntry.new('MX', 'rubyisms.co.uk.', [
|
130
|
+
"10 aspmx2.googlemail.com.",
|
131
|
+
"5 alt1.aspmx.l.google.com",
|
132
|
+
"1 aspmx.l.google.com.",
|
133
|
+
"5 alt2.aspmx.l.google.com.",
|
134
|
+
"10 aspmx3.googlemail.com.",
|
135
|
+
], 3600, hz.name)
|
136
|
+
# We are emulating that these records are already live, mark them as persisted
|
137
|
+
[e1].each do |persisted|
|
138
|
+
persisted.persisted!
|
139
|
+
hz.resource_record_sets << persisted
|
140
|
+
end
|
141
|
+
|
142
|
+
r42c = SprinkleDNS::MockClient.new([hz])
|
143
|
+
sdns = SprinkleDNS::Client.new(r42c)
|
144
|
+
|
145
|
+
sdns.entry('MX', 'rubyisms.co.uk.', [
|
146
|
+
'1 aspmx.l.google.com',
|
147
|
+
'5 alt2.aspmx.l.google.com',
|
148
|
+
'5 alt1.aspmx.l.google.com',
|
149
|
+
'10 aspmx3.googlemail.com',
|
150
|
+
'10 aspmx2.googlemail.com',
|
151
|
+
], 3600)
|
152
|
+
|
153
|
+
existing_hosted_zones, _ = sdns.compare
|
154
|
+
policy_service = SprinkleDNS::EntryPolicyService.new(hz, sdns.config)
|
155
|
+
|
156
|
+
expect(policy_service.entries_to_create.size).to eq 0
|
157
|
+
expect(policy_service.entries_to_update.size).to eq 0
|
158
|
+
expect(policy_service.entries_to_delete.size).to eq 0
|
159
|
+
end
|
160
|
+
|
161
|
+
it 'for TXT-records' do
|
162
|
+
hz = SprinkleDNS::HostedZone.new('pythonisms.co.uk.')
|
163
|
+
|
164
|
+
e1 = SprinkleDNS::HostedZoneEntry.new('TXT', 'pythonisms.co.uk.', [
|
165
|
+
%q("google-site-verification=FK82Vlp1w5rz0HkTMo6PW8aHU2IIvEsPKARoFlSoDPs"),
|
166
|
+
%q("google-site-verification=HdPsn7e-9AQy0sD671kRWzLuORYI2apSPMpzhp_1LVQ"),
|
167
|
+
%q("google-site-verification=1Vm7qTouRoz66EhSn1fFMLCnx3MQfznsti2zo8UYYiI"),
|
168
|
+
%q("google-site-verification=IiD31xJH-gQmUkpg95z7u8CS2K7bjdwzbsGvPIFLIAk"),
|
169
|
+
%q("google-site-verification=s3KCcWO7nu5LGleqnaHoi8pE0lw2gPf8gKTTM6YKbjs"),
|
170
|
+
%q("google-site-verification=kIfG408ueAdqMx8n0-UP2hXep1ONimdgF6glDaXWglo"),
|
171
|
+
%q("google-site-verification=p72jEH3LGN8T8Nqy8iCS5BZE8MU7FpVSvAhwSIZUFAE"),
|
172
|
+
%q("google-site-verification=tZOAzOQJQA-vY2epnHzLJWlRWIClTqUTV-5f9scFtr0"),
|
173
|
+
%q("google-site-verification=_7tC6N0vfhR_tqWQ_gK4kZlCNEtmV7Fy4PGkRuMvoKA"),
|
174
|
+
%q("google-site-verification=V7KRnRTW8fqQXUhEpFA2o7WkY6MVusthznsZRvEFmwM"),
|
175
|
+
%q("v=spf1 include:_spf.google.com include:support.zendesk.com include:mail.zendesk.com include:servers.mcsv.net include:spf.mandrillapp.com include:sendgrid.net ~all"),
|
176
|
+
%q("google-site-verification=ZIZaEr9kOQqbelfUaa-4Li-Sih1VjNtlkwXr6p9pTQA"),
|
177
|
+
%q("google-site-verification=fqE3nRX4hvcaQNMbF8arnHNAk5VRUsD8j5BYf-61nL4"),
|
178
|
+
], 3600, hz.name)
|
179
|
+
# We are emulating that these records are already live, mark them as persisted
|
180
|
+
[e1].each do |persisted|
|
181
|
+
persisted.persisted!
|
182
|
+
hz.resource_record_sets << persisted
|
183
|
+
end
|
184
|
+
|
185
|
+
r42c = SprinkleDNS::MockClient.new([hz])
|
186
|
+
sdns = SprinkleDNS::Client.new(r42c)
|
187
|
+
|
188
|
+
entries = [
|
189
|
+
%q{"v=spf1 include:_spf.google.com include:support.zendesk.com include:mail.zendesk.com include:servers.mcsv.net include:spf.mandrillapp.com include:sendgrid.net ~all"},
|
190
|
+
%q{"google-site-verification=V7KRnRTW8fqQXUhEpFA2o7WkY6MVusthznsZRvEFmwM"},
|
191
|
+
%q{"google-site-verification=_7tC6N0vfhR_tqWQ_gK4kZlCNEtmV7Fy4PGkRuMvoKA"},
|
192
|
+
%q{"google-site-verification=tZOAzOQJQA-vY2epnHzLJWlRWIClTqUTV-5f9scFtr0"},
|
193
|
+
%q{"google-site-verification=p72jEH3LGN8T8Nqy8iCS5BZE8MU7FpVSvAhwSIZUFAE"},
|
194
|
+
%q{"google-site-verification=kIfG408ueAdqMx8n0-UP2hXep1ONimdgF6glDaXWglo"},
|
195
|
+
%q{"google-site-verification=s3KCcWO7nu5LGleqnaHoi8pE0lw2gPf8gKTTM6YKbjs"},
|
196
|
+
%q{"google-site-verification=IiD31xJH-gQmUkpg95z7u8CS2K7bjdwzbsGvPIFLIAk"},
|
197
|
+
%q{"google-site-verification=1Vm7qTouRoz66EhSn1fFMLCnx3MQfznsti2zo8UYYiI"},
|
198
|
+
%q("google-site-verification=HdPsn7e-9AQy0sD671kRWzLuORYI2apSPMpzhp_1LVQ"),
|
199
|
+
%q("google-site-verification=FK82Vlp1w5rz0HkTMo6PW8aHU2IIvEsPKARoFlSoDPs"),
|
200
|
+
%q("google-site-verification=ZIZaEr9kOQqbelfUaa-4Li-Sih1VjNtlkwXr6p9pTQA"),
|
201
|
+
%q("google-site-verification=fqE3nRX4hvcaQNMbF8arnHNAk5VRUsD8j5BYf-61nL4"),
|
202
|
+
]
|
203
|
+
sdns.entry('TXT', 'pythonisms.co.uk.', entries, 3600)
|
204
|
+
|
205
|
+
existing_hosted_zones, _ = sdns.compare
|
206
|
+
policy_service = SprinkleDNS::EntryPolicyService.new(hz, sdns.config)
|
207
|
+
|
208
|
+
expect(policy_service.entries_to_create.size).to eq 0
|
209
|
+
expect(policy_service.entries_to_update.size).to eq 0
|
210
|
+
expect(policy_service.entries_to_delete.size).to eq 0
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
125
214
|
context 'delete config option' do
|
126
215
|
before(:all) do
|
127
216
|
@hz01 = SprinkleDNS::HostedZone.new('colourful.co.uk.')
|