sprinkle_dns 1.0.0 → 1.0.1
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/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.')
|