class DockerBoss::Module::DNS

Attributes

records[R]

Public Class Methods

new(config) click to toggle source
# File lib/docker_boss/module/dns.rb, line 10
def initialize(config)
  @records = {}
  @setup_records = {}
  @config = config
  DockerBoss.logger.debug "dns: Set up"
  setup
end

Public Instance Methods

run() click to toggle source
# File lib/docker_boss/module/dns.rb, line 26
def run
  listen = []

  DockerBoss.logger.debug "dns: Starting DNS server"

  @config['listen'].each do |l|
    host = DockerBoss::Helpers.render_erb(l['host'], {})
    listen << [:udp, host, l['port'].to_i]
    listen << [:tcp, host, l['port'].to_i]
    DockerBoss.logger.debug "dns: Listening on #{host} (port: #{l['port']})"
  end

  Thread.new do
    RubyDNS::run_server(:listen => listen, :ttl => @config['ttl'], :upstream_dns => @config['upstream'], :zones => @config['zones'], :supervisor_class => Server, :manager => self)
  end
end
setup() click to toggle source
# File lib/docker_boss/module/dns.rb, line 18
def setup
  setup = DockerBoss::Helpers.render_erb(@config.fetch('setup', ''), {})
  setup.lines.each do |line|
    (name, ip) = line.lstrip.chomp.split(" ", 2)
    @setup_records[name] = ip
  end
end
trigger(containers, trigger_id) click to toggle source
# File lib/docker_boss/module/dns.rb, line 43
def trigger(containers, trigger_id)
  records = @setup_records.clone
  containers.each do |c|
    names = DockerBoss::Helpers.render_erb(@config['spec'], :container => c)
    names.lines.each do |n|
      records[n.lstrip.chomp] = c['NetworkSettings']['IPAddress']
    end
  end

  @records = records
end