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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1fab0389257851cf18cca41f85ba7902d2d6991599f6f41467612fad0861f754
4
- data.tar.gz: daa92a1e2c7a5ad893c606bfadc181e355c76622ee55bc905f8a1afcda734f2a
3
+ metadata.gz: e7508012e43f792a2fec3f28c908c672476b684286c4cd726a7572a6c85abade
4
+ data.tar.gz: e95768f7c91d4cd0e6cff0204c2e4994734f4b8c37423fe639c5ddd0c858778f
5
5
  SHA512:
6
- metadata.gz: c2e87abb06df0034e18b215e688fd6808452fbb95fa105d95a4ab6f1532b4bdc7d35db72ae0ef8afda82f6d445dcfc21e200cb7bb07ca70cb83d1711555aaa22
7
- data.tar.gz: c26276c21b51b54b22a589fcfe622bee85261cf20f9907b36ea7792a300ea81e2e31a830ae8967b0e35c89ada0636f0b8c347261c3fe6b1c2710d483f6b066fb
6
+ metadata.gz: 4c20c1b83672ded307e65e0405da4c68f7c7acde3178d531f80c4e8dd462ed717e0d1e2c8802c5aab74729287d6c886686dd68ee432b07c120b63d940dfa333d
7
+ data.tar.gz: 9a7ebc53c0d8f123150ecd1a7b1db0c0cca0ab2c409cd2179b7470cfa35dfc08f5180f07f7db25e3473819417745ed3d153dc31a7eeaff8ef91bc95591b568bd
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sprinkle_dns (1.0.0)
4
+ sprinkle_dns (1.0.1)
5
5
  aws-sdk-route53 (~> 1.21)
6
6
 
7
7
  GEM
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
- entries << entry_to_struct(nil, entry, hosted_zone)
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
@@ -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
- messages = []
99
-
100
- messages << "#{missing_hosted_zones.size} hosted-zone(s) to create" if missing_hosted_zones.any?
101
- messages << "#{changes} change(s) to make" if changes > 0
102
- print messages.join(' and ').concat(". Continue? (y/N)")
103
-
104
- case gets.strip
105
- when 'y', 'Y'
106
- # continue
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
@@ -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 != new_entry.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
@@ -1,3 +1,3 @@
1
1
  module SprinkleDNS
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.1"
3
3
  end
@@ -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.')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sprinkle_dns
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kasper Grubbe