class BindDocker

Constants

CONTAINER_NAME
IMAGE

Public Class Methods

add_zonefile(zonefile_path) click to toggle source
# File lib/bind_docker.rb, line 38
def self.add_zonefile zonefile_path
  @@zonefiles.push File.new(zonefile_path)
end
build_docker_file(tmp_dir) click to toggle source
# File lib/bind_docker.rb, line 50
def self.build_docker_file tmp_dir
  File.open(tmp_dir + "/Dockerfile", 'w') do |file|
    file.write(docker_preamble)
    @@zonefiles.each do |zonefile|
      file.write("COPY #{filename(zonefile)} /var/cache/bind/#{filename(zonefile)}\n")
    end
    file.write("COPY #{filename(@@named_conf)} /etc/bind/#{filename(@@named_conf)}\n")
    file.close
  end
end
clear_zonfiles() click to toggle source
# File lib/bind_docker.rb, line 42
def self.clear_zonfiles
  @@zonefiles.clear
end
docker_ip() click to toggle source
# File lib/bind_docker.rb, line 84
def self.docker_ip
  if (/darwin/ =~ RUBY_PLATFORM)
    `docker-machine ip default`.strip
  else
    "127.0.0.1"
  end
end
docker_preamble() click to toggle source
# File lib/bind_docker.rb, line 61
  def self.docker_preamble
    <<-HEREDOC
FROM phusion/baseimage:0.9.18
MAINTAINER storage-solutions@ctl.io

ENV DATA_DIR=/data \
    BIND_USER=bind


RUN rm -rf /etc/apt/apt.conf.d/docker-gzip-indexes \
 && apt-get update \
 && DEBIAN_FRONTEND=noninteractive apt-get install -y bind9 dnsutils \
 && rm -rf /var/lib/apt/lists/*

EXPOSE 53/udp
EXPOSE 53/tcp
VOLUME ["${DATA_DIR}"]
CMD ["/usr/sbin/named", "-g", "-c", "/etc/bind/named.conf"]

    HEREDOC
  end
filename(file) click to toggle source
# File lib/bind_docker.rb, line 14
def self.filename file
  File.split(file)[1]
end
named_conf(named_conf_path) click to toggle source
# File lib/bind_docker.rb, line 46
def self.named_conf named_conf_path
  @@named_conf = File.new(named_conf_path)
end
resolve(address) click to toggle source
# File lib/bind_docker.rb, line 34
def self.resolve address
  Resolv.getaddress(address).to_s
end
resolve_bucket_by_region(bucket, tld) click to toggle source
# File lib/bind_docker.rb, line 92
def self.resolve_bucket_by_region bucket, tld
  begin
    Resolv.getaddress("#{bucket}.#{tld}").to_s
  rescue Resolv::ResolvError
    :nxdomain
  end
end
run!() click to toggle source
# File lib/bind_docker.rb, line 18
def self.run!
  Dir.mktmpdir do |dir|
    FileUtils.cp @@named_conf, dir, {}
    FileUtils.cp @@zonefiles, dir, {}
    build_docker_file dir
    Dir.chdir(dir) do
      `docker build -t #{IMAGE} .`
      `docker run -d -p 1053:53/udp -p 1053:53/tcp --name=#{CONTAINER_NAME} #{IMAGE}`
    end
  end
end
stop!() click to toggle source
# File lib/bind_docker.rb, line 30
def self.stop!
  `docker rm -f #{CONTAINER_NAME} > /dev/null 2>&1`
end