class AcmeNsupdate::Nsupdate

Public Class Methods

new(logger) click to toggle source
# File lib/acme_nsupdate/nsupdate.rb, line 8
def initialize(logger)
  @logger = logger
  @commands = []
end

Public Instance Methods

add(label, type, data, ttl) click to toggle source
# File lib/acme_nsupdate/nsupdate.rb, line 21
def add label, type, data, ttl
  @commands << "update add #{label} #{ttl} #{type} #{data}"
end
del(label, type=nil, data=nil) click to toggle source
# File lib/acme_nsupdate/nsupdate.rb, line 25
def del label, type=nil, data=nil
  @commands << "update del #{label}#{" #{type}" if type}#{" #{data}" if data}"
end
send() click to toggle source
# File lib/acme_nsupdate/nsupdate.rb, line 29
def send
  @logger.debug("Starting nsupdate:")
  Open3.popen3("nsupdate") do |stdin, stdout, stderr, wait_thr|
    @commands.each do |command|
      @logger.debug "  #{command}"
      stdin.puts command
    end
    @logger.debug("  send")
    stdin.puts "send"
    stdin.close
    errors = stdout.readlines.map {|line| line[/^>\s*(.*)$/, 1].strip }.reject(&:empty?)
    errors.concat stderr.readlines.map(&:strip).reject(&:empty?)
    stdout.close
    stderr.close
    unless errors.empty?
      errors = errors.join(" ")
      @logger.error "DNS update transaction failed: #{errors}"
      @logger.info "Transaction:"
      @commands.each do |command|
        @logger.info "  #{command}"
      end
      raise Error.new errors
    end
  end
end
server(server) click to toggle source
# File lib/acme_nsupdate/nsupdate.rb, line 13
def server server
  @commands << "server #{server}"
end
tsig(name, key) click to toggle source
# File lib/acme_nsupdate/nsupdate.rb, line 17
def tsig name, key
  @commands << "key #{name} #{key}"
end