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 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