Update RRData incrementally
Compute the adds and deletes required to get from existing RRData to new RRData and perform just those operations instead of doing a complete drop/add of the entire RRData set. Also during an update, do adds before deletes. This eliminates the existence gap and fixes #29
This commit is contained in:
parent
eb6d3f5d63
commit
827fb1e88f
@ -1,3 +1,4 @@
|
|||||||
|
# ex: syntax=ruby si sw=2 ts=2 et
|
||||||
require 'tempfile'
|
require 'tempfile'
|
||||||
|
|
||||||
module PuppetBind
|
module PuppetBind
|
||||||
@ -27,8 +28,8 @@ module PuppetBind
|
|||||||
def flush
|
def flush
|
||||||
return if @properties.empty?
|
return if @properties.empty?
|
||||||
update do |file|
|
update do |file|
|
||||||
destructo(file)
|
|
||||||
accio(file)
|
accio(file)
|
||||||
|
destructo(file)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -58,17 +59,25 @@ module PuppetBind
|
|||||||
end
|
end
|
||||||
|
|
||||||
def accio(file)
|
def accio(file)
|
||||||
newdata.each do |datum|
|
rrdata_adds.each do |datum|
|
||||||
file.write "update add #{name}. #{resource[:ttl]} #{rrclass} #{type} #{datum}\n"
|
file.write "update add #{name}. #{resource[:ttl]} #{rrclass} #{type} #{datum}\n"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def destructo(file)
|
def destructo(file)
|
||||||
rrdata.each do |datum|
|
rrdata_deletes.each do |datum|
|
||||||
file.write "update delete #{name}. #{ttl} #{rrclass} #{type} #{datum}\n"
|
file.write "update delete #{name}. #{ttl} #{rrclass} #{type} #{datum}\n"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def rrdata_adds
|
||||||
|
newdata - rrdata
|
||||||
|
end
|
||||||
|
|
||||||
|
def rrdata_deletes
|
||||||
|
type === 'SOA' ? [] : rrdata - newdata
|
||||||
|
end
|
||||||
|
|
||||||
def server
|
def server
|
||||||
resource[:server]
|
resource[:server]
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user