first commit
This commit is contained in:
commit
e3354dfe8e
170
container.json
Normal file
170
container.json
Normal file
@ -0,0 +1,170 @@
|
|||||||
|
{
|
||||||
|
"zone": {
|
||||||
|
"soa": "higgsboson.tk.",
|
||||||
|
"ns": "higgsboson.tk.",
|
||||||
|
"serial": 46,
|
||||||
|
"refresh": "1H",
|
||||||
|
"retry": "4H",
|
||||||
|
"expire": "3W",
|
||||||
|
"minimum": "1D",
|
||||||
|
"v4_subnet": "10.100.0.0/16",
|
||||||
|
"v6_subnet": "2a01:4f8:210:31fd:1::/80"
|
||||||
|
},
|
||||||
|
"network": {
|
||||||
|
"bridge": {
|
||||||
|
"ipv4": "10.100.0.1/32",
|
||||||
|
"ipv6": "2a01:4f8:210:31fd:1::1/128",
|
||||||
|
"lxc": false
|
||||||
|
},
|
||||||
|
"base": {
|
||||||
|
"ipv4": "10.100.0.2/32",
|
||||||
|
"ipv6": "2a01:4f8:210:31fd:1::2/128"
|
||||||
|
},
|
||||||
|
"ldap": {
|
||||||
|
"ipv4": "10.100.0.3/32",
|
||||||
|
"ipv6": "2a01:4f8:210:31fd:1::3/128",
|
||||||
|
"group": "php"
|
||||||
|
},
|
||||||
|
"web": {
|
||||||
|
"ipv4": "10.100.0.5/32",
|
||||||
|
"ipv6": "2a01:4f8:210:31fd:1::5/128"
|
||||||
|
},
|
||||||
|
"dns": {
|
||||||
|
"ipv4": "10.100.0.6/32",
|
||||||
|
"ipv6": "2a01:4f8:210:31fd:1::6/128"
|
||||||
|
},
|
||||||
|
"faces": {
|
||||||
|
"ipv4": "10.100.0.7/32",
|
||||||
|
"ipv6": "2a01:4f8:210:31fd:1::7/128"
|
||||||
|
},
|
||||||
|
"jtes": {
|
||||||
|
"ipv4": "10.100.0.8/32",
|
||||||
|
"ipv6": "2a01:4f8:210:31fd:1::8/128"
|
||||||
|
},
|
||||||
|
"mysql": {
|
||||||
|
"ipv4": "10.100.0.9/32",
|
||||||
|
"ipv6": "2a01:4f8:210:31fd:1::9/128"
|
||||||
|
},
|
||||||
|
"git": {
|
||||||
|
"ipv4": "10.100.0.4/32",
|
||||||
|
"ipv6": "2a01:4f8:210:31fd:1::4/128"
|
||||||
|
},
|
||||||
|
"postgres": {
|
||||||
|
"ipv4": "10.100.0.10/32",
|
||||||
|
"ipv6": "2a01:4f8:210:31fd:1::a/128"
|
||||||
|
},
|
||||||
|
"phpmyadmin": {
|
||||||
|
"ipv4": "10.100.0.11/32",
|
||||||
|
"ipv6": "2a01:4f8:210:31fd:1::b/128",
|
||||||
|
"group": "php",
|
||||||
|
"vars": {
|
||||||
|
"php_extensions": [
|
||||||
|
"mysql",
|
||||||
|
"pdo_mysql"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"phppgadmin": {
|
||||||
|
"ipv4": "10.100.0.13/32",
|
||||||
|
"ipv6": "2a01:4f8:210:31fd:1::d/128",
|
||||||
|
"group": "php",
|
||||||
|
"vars": {
|
||||||
|
"php_extensions": [
|
||||||
|
"pgsql",
|
||||||
|
"pdo_pgsql"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"adminer": {
|
||||||
|
"ipv4": "10.100.0.14/32",
|
||||||
|
"ipv6": "2a01:4f8:210:31fd:1::e/128",
|
||||||
|
"group": "php",
|
||||||
|
"vars": {
|
||||||
|
"php_extensions": [
|
||||||
|
"mysql",
|
||||||
|
"pdo_mysql",
|
||||||
|
"pgsql",
|
||||||
|
"pdo_pgsql"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mail": {
|
||||||
|
"ipv4": "10.100.0.16/32",
|
||||||
|
"ipv6": "2a01:4f8:210:31fd:1::10/128"
|
||||||
|
},
|
||||||
|
"istwiki": {
|
||||||
|
"ipv4": "10.100.0.17/32",
|
||||||
|
"ipv6": "2a01:4f8:210:31fd:1::11/128",
|
||||||
|
"group": "php",
|
||||||
|
"vars": {
|
||||||
|
"php_extensions": [
|
||||||
|
"mysql",
|
||||||
|
"pdo_mysql"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ytm": {
|
||||||
|
"ipv4": "10.100.0.18/32",
|
||||||
|
"ipv6": "2a01:4f8:210:31fd:1::12/128",
|
||||||
|
"group": "php",
|
||||||
|
"vars": {
|
||||||
|
"php_extensions": [
|
||||||
|
"mysql",
|
||||||
|
"mysqli",
|
||||||
|
"pdo_mysql"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ldapadmin": {
|
||||||
|
"ipv4": "10.100.0.12/32",
|
||||||
|
"ipv6": "2a01:4f8:210:31fd:1::c/128",
|
||||||
|
"group": "php",
|
||||||
|
"vars": {
|
||||||
|
"php_extensions": [
|
||||||
|
"ldap"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"rainloop": {
|
||||||
|
"ipv4": "10.100.0.19/32",
|
||||||
|
"ipv6": "2a01:4f8:210:31fd:1::13/128",
|
||||||
|
"group": "php",
|
||||||
|
"vars": {
|
||||||
|
"php_extensions": [
|
||||||
|
"pgsql",
|
||||||
|
"pdo_pgsql",
|
||||||
|
"openssl"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"owncloud": {
|
||||||
|
"ipv4": "10.100.0.15/32",
|
||||||
|
"ipv6": "2a01:4f8:210:31fd:1::f/128",
|
||||||
|
"group": "php",
|
||||||
|
"vars": {
|
||||||
|
"php_extensions": [
|
||||||
|
"pgsql",
|
||||||
|
"pdo_pgsql",
|
||||||
|
"gd",
|
||||||
|
"iconv",
|
||||||
|
"xmlrpc",
|
||||||
|
"zip",
|
||||||
|
"bz2",
|
||||||
|
"intl",
|
||||||
|
"mcrypt",
|
||||||
|
"openssl",
|
||||||
|
"ldap",
|
||||||
|
"apcu",
|
||||||
|
"exif",
|
||||||
|
"imagick"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"test": {
|
||||||
|
"ipv4": "10.100.0.20/32",
|
||||||
|
"ipv6": "2a01:4f8:210:31fd:1::14/128",
|
||||||
|
"group": null,
|
||||||
|
"vars": null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
22
default.conf
Normal file
22
default.conf
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
lxc.autodev = 1
|
||||||
|
lxc.kmsg = 0
|
||||||
|
lxc.cap.drop = sys_module mac_admin mac_override sys_time net_admin
|
||||||
|
|
||||||
|
lxc.network.type = veth
|
||||||
|
lxc.network.link = br0
|
||||||
|
lxc.network.flags = up
|
||||||
|
lxc.network.name =eth0
|
||||||
|
lxc.network.mtu = 1500
|
||||||
|
lxc.network.ipv4.gateway = auto
|
||||||
|
lxc.network.ipv6.gateway = 2a01:4f8:210:31fd:1::1
|
||||||
|
|
||||||
|
lxc.mount.entry = /data/pacman-pkg-cache var/cache/pacman/pkg none bind 0 0
|
||||||
|
lxc.mount.entry = /data/repo srv/repo none bind,ro 0 0
|
||||||
|
lxc.mount.entry = /run/systemd/journal mnt/journal none bind,ro,create=dir 0 0
|
||||||
|
|
||||||
|
lxc.hook.clone = /etc/lxc/hooks/setup-machine-id
|
||||||
|
lxc.hook.clone = /etc/lxc/hooks/remove-journal
|
||||||
|
lxc.hook.clone = /etc/lxc/hooks/cleanup-lxc-config
|
||||||
|
lxc.hook.clone = /etc/lxc/hooks/create-lxc-config
|
||||||
|
lxc.hook.clone = /etc/lxc/hooks/update-zone
|
||||||
|
lxc.hook.clone = /etc/lxc/hooks/ansible
|
11
hooks/ansible
Executable file
11
hooks/ansible
Executable file
@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -x
|
||||||
|
if [ -z "$LXC_NAME" ]; then
|
||||||
|
echo "LXC_NAME not set" 2>&1
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
lxc-start -n "$LXC_NAME" -d
|
||||||
|
ansible-playbook -i /etc/ansible/inventory /etc/ansible/site.yml --limit "$LXC_NAME" 1>&2
|
||||||
|
lxc-stop -n "$LXC_NAME"
|
27
hooks/cleanup-lxc-config
Executable file
27
hooks/cleanup-lxc-config
Executable file
@ -0,0 +1,27 @@
|
|||||||
|
#!/usr/bin/env ruby
|
||||||
|
require 'json'
|
||||||
|
require 'fileutils'
|
||||||
|
|
||||||
|
abort "Must run as root" unless Process.uid == 0
|
||||||
|
|
||||||
|
CONTAINER_DATA = "/etc/lxc/container.json"
|
||||||
|
|
||||||
|
data = JSON.load(File.open(CONTAINER_DATA))
|
||||||
|
containers = `lxc-ls -1`.split(/\n/)
|
||||||
|
|
||||||
|
modified = false
|
||||||
|
data["network"].each do |host, value|
|
||||||
|
unless containers.include?(host) or value["lxc"] == false
|
||||||
|
data["network"].delete(host)
|
||||||
|
modified = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if modified
|
||||||
|
FileUtils.cp(CONTAINER_DATA, CONTAINER_DATA + ".backup")
|
||||||
|
File.open(CONTAINER_DATA, "w+") do |f|
|
||||||
|
f.puts JSON.pretty_generate(data)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
puts "Unchanged"
|
||||||
|
end
|
124
hooks/create-lxc-config
Executable file
124
hooks/create-lxc-config
Executable file
@ -0,0 +1,124 @@
|
|||||||
|
#!/usr/bin/env ruby
|
||||||
|
|
||||||
|
require "erb"
|
||||||
|
require "pathname"
|
||||||
|
require 'ostruct'
|
||||||
|
require 'optparse'
|
||||||
|
require 'json'
|
||||||
|
require 'netaddr'
|
||||||
|
|
||||||
|
def try_env(key)
|
||||||
|
ENV[key] or abort("enviroment variable '#{key}' not set")
|
||||||
|
end
|
||||||
|
|
||||||
|
def address_free?(assigned_subnets, address)
|
||||||
|
assigned_subnets.find { |s| s.contains?(address) || s == address }
|
||||||
|
end
|
||||||
|
|
||||||
|
def find_address(subnet, assigned_subsubnets)
|
||||||
|
subnet.enumerate(Limit: 1E4, Short: true)[1..1E4].each do |cidr|
|
||||||
|
unless address_free?(assigned_subsubnets, cidr)
|
||||||
|
return cidr
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
CONFIG_PATH = Pathname.new("/etc/lxc/")
|
||||||
|
IPV4_SUBNET = NetAddr::CIDR.create("10.100.0.0/16")
|
||||||
|
IPV6_SUBNET = NetAddr::CIDR.create("2a01:4f8:210:31fd:1::/80")
|
||||||
|
|
||||||
|
options = OpenStruct.new
|
||||||
|
options.container_name = try_env("LXC_NAME")
|
||||||
|
options.container_config = try_env("LXC_CONFIG_FILE")
|
||||||
|
options.rootfs = try_env("LXC_ROOTFS_PATH")
|
||||||
|
|
||||||
|
OptionParser.new do |opts|
|
||||||
|
opts.banner = "Usage: create-lxc-config [options]"
|
||||||
|
|
||||||
|
opts.on("-4", "--ipv4", "private Ipv4 subnet") do |v|
|
||||||
|
options.ipv4 = v
|
||||||
|
end
|
||||||
|
opts.on("-6", "--ipv6", "public Ipv6 subnet") do |v|
|
||||||
|
options.ipv6 = v
|
||||||
|
end
|
||||||
|
opts.on("--group GROUP", String, "set ansible group (default NONE)") do |group|
|
||||||
|
options.group = group
|
||||||
|
end
|
||||||
|
opts.on("--vars FILE", String, "set json file for ansible variables") do |vars|
|
||||||
|
begin
|
||||||
|
options.vars = JSON.load(File.open(vars))
|
||||||
|
unless options.vars.is_a? Hash
|
||||||
|
abort "vars: Should be a json object"
|
||||||
|
end
|
||||||
|
rescue SystemCallError => e
|
||||||
|
abort "Failed to open '#{vars}': #{e.message}"
|
||||||
|
rescue JSON::ParserError => e
|
||||||
|
abort "Failed to parse ansible variables: #{e.message}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end.parse!
|
||||||
|
container_data = CONFIG_PATH.join("container.json")
|
||||||
|
|
||||||
|
data = if File.exists?(container_data)
|
||||||
|
JSON.load(File.open(container_data))
|
||||||
|
else
|
||||||
|
{}
|
||||||
|
end
|
||||||
|
|
||||||
|
data["network"] ||= {}
|
||||||
|
|
||||||
|
#if data["network"][options.container_name]
|
||||||
|
# abort "container name '#{options.container_name}' in '#{container_data}' already in use!"
|
||||||
|
#end
|
||||||
|
data["network"][options.container_name] = {}
|
||||||
|
|
||||||
|
ipv4_subnets = data["network"].map {|k,v| NetAddr::CIDR.create(v["ipv4"]) if v["ipv4"]}.compact!
|
||||||
|
ipv6_subnets = data["network"].map {|k,v| NetAddr::CIDR.create(v["ipv6"]) if v["ipv6"]}.compact!
|
||||||
|
|
||||||
|
ipv4_address = if options.ipv4.nil?
|
||||||
|
find_address(IPV4_SUBNET, ipv4_subnets)
|
||||||
|
elsif address_free?(ipv4_subnets, options.ipv4)
|
||||||
|
abort "The address #{ipv4} is already assigned"
|
||||||
|
else
|
||||||
|
options.ipv4
|
||||||
|
end
|
||||||
|
|
||||||
|
ipv6_address = if options.ipv6.nil?
|
||||||
|
find_address(IPV6_SUBNET, ipv6_subnets)
|
||||||
|
elsif address_free?(ipv6_subnets, options.ipv6)
|
||||||
|
abort "The address #{ipv4} is already assigned"
|
||||||
|
else
|
||||||
|
options.ipv6
|
||||||
|
end
|
||||||
|
|
||||||
|
network_config = data["network"][options.container_name]
|
||||||
|
network_config["ipv4"] = NetAddr::CIDR.create(ipv4_address).to_s(Short: true)
|
||||||
|
network_config["ipv6"] = NetAddr::CIDR.create(ipv6_address).to_s(Short: true)
|
||||||
|
network_config["group"] = options.group
|
||||||
|
network_config["vars"] = options.vars
|
||||||
|
|
||||||
|
open(container_data, File::CREAT|File::TRUNC|File::RDWR) do |f|
|
||||||
|
f.write(JSON.pretty_generate(data))
|
||||||
|
end
|
||||||
|
|
||||||
|
class TemplateContext
|
||||||
|
def initialize(hash)
|
||||||
|
hash.each do |key, value|
|
||||||
|
singleton_class.send(:define_method, key) { value }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def get_binding
|
||||||
|
binding
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context = TemplateContext.new(container_name: options.container_name,
|
||||||
|
ipv4: NetAddr::CIDR.create(ipv4_address, Mask: IPV4_SUBNET.to_i(:netmask)).desc(IP: true, Short: true),
|
||||||
|
ipv6: NetAddr::CIDR.create(ipv6_address, Mask: IPV6_SUBNET.to_i(:netmask)).desc(IP: true, Short: true),
|
||||||
|
rootfs: options.rootfs)
|
||||||
|
|
||||||
|
erb = ERB.new(File.read(CONFIG_PATH.join("templates", "config.erb")))
|
||||||
|
open(options.container_config, "w+") do |f|
|
||||||
|
f.write(erb.result(context.get_binding))
|
||||||
|
end
|
10
hooks/remove-journal
Executable file
10
hooks/remove-journal
Executable file
@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -xeu
|
||||||
|
|
||||||
|
JOURNAL="$LXC_ROOTFS_PATH/var/log/journal"
|
||||||
|
|
||||||
|
if [ -d "$JOURNAL" ]; then
|
||||||
|
cd $JOURNAL
|
||||||
|
rm -rf *
|
||||||
|
fi
|
11
hooks/setup-machine-id
Executable file
11
hooks/setup-machine-id
Executable file
@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -eux
|
||||||
|
|
||||||
|
MACHINE_ID="${LXC_ROOTFS_PATH}/etc/machine-id"
|
||||||
|
|
||||||
|
if [ -f "$MACHINE_ID" ]; then
|
||||||
|
rm "$MACHINE_ID"
|
||||||
|
fi
|
||||||
|
|
||||||
|
systemd-machine-id-setup --root="$LXC_ROOTFS_PATH"
|
4
hooks/update-container
Executable file
4
hooks/update-container
Executable file
@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
pacman -r "$LXC_ROOTFS_PATH" -Syu --noconfirm
|
||||||
|
exit $?
|
85
hooks/update-zone
Executable file
85
hooks/update-zone
Executable file
@ -0,0 +1,85 @@
|
|||||||
|
#!/usr/bin/env ruby
|
||||||
|
require 'json'
|
||||||
|
require 'erb'
|
||||||
|
require 'netaddr'
|
||||||
|
require 'fileutils'
|
||||||
|
require 'pathname'
|
||||||
|
|
||||||
|
LXC_ROOT = Pathname.new("/etc/lxc")
|
||||||
|
ZONE_PATH = LXC_ROOT.join("zones")
|
||||||
|
TEMPLATE_PATH = LXC_ROOT.join("templates")
|
||||||
|
CONTAINER_DATA = LXC_ROOT.join("container.json")
|
||||||
|
LXC_ZONE = ZONE_PATH.join("lxc.zone")
|
||||||
|
DNS_CONTAINER = "dns"
|
||||||
|
|
||||||
|
|
||||||
|
def atomic_write(path, content)
|
||||||
|
temp_path = path.to_s + ".tmp"
|
||||||
|
File.open(temp_path, 'w+') do |f|
|
||||||
|
f.write(content)
|
||||||
|
end
|
||||||
|
|
||||||
|
FileUtils.mv(temp_path, path)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
class ZoneData
|
||||||
|
def initialize(data)
|
||||||
|
@data = data
|
||||||
|
end
|
||||||
|
attr_reader :data
|
||||||
|
def get_binding
|
||||||
|
binding
|
||||||
|
end
|
||||||
|
|
||||||
|
def ip(subnet)
|
||||||
|
NetAddr::CIDR.create(subnet).ip(Short: true)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class RdnsData
|
||||||
|
def initialize(data, subnet)
|
||||||
|
@data = data
|
||||||
|
@subnet = subnet
|
||||||
|
end
|
||||||
|
attr_reader :data, :subnet
|
||||||
|
def get_binding
|
||||||
|
binding
|
||||||
|
end
|
||||||
|
|
||||||
|
def pointers(&block)
|
||||||
|
subnet_arpa = @subnet.arpa
|
||||||
|
version = @subnet.version
|
||||||
|
|
||||||
|
data["network"].each do |name, data|
|
||||||
|
next unless data["ipv#{version}"]
|
||||||
|
arpa = NetAddr::CIDR.create(data["ipv#{version}"]).arpa
|
||||||
|
addr = arpa[0, arpa.size - subnet_arpa.size - 1]
|
||||||
|
yield addr, name
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
json = JSON.load(File.open(CONTAINER_DATA))
|
||||||
|
json["zone"]["serial"] += 1
|
||||||
|
|
||||||
|
rdns_zone_template = File.read(TEMPLATE_PATH.join("rdns-zone.erb"))
|
||||||
|
zone_data = ZoneData.new(json)
|
||||||
|
|
||||||
|
lxc_zone_template = File.read(TEMPLATE_PATH.join("lxc-zone.erb"))
|
||||||
|
zone = ERB.new(lxc_zone_template, nil, '-').result(zone_data.get_binding)
|
||||||
|
|
||||||
|
v4_subnet = NetAddr::CIDR.create(json["zone"]["v4_subnet"])
|
||||||
|
v4_rdns_path = ZONE_PATH.join(v4_subnet.arpa.gsub(/\.$/, ""))
|
||||||
|
v4_rdns_zone = ERB.new(rdns_zone_template, nil, '-').result(RdnsData.new(json, v4_subnet).get_binding)
|
||||||
|
|
||||||
|
v6_subnet = NetAddr::CIDR.create(json["zone"]["v6_subnet"])
|
||||||
|
v6_rdns_path = ZONE_PATH.join(v6_subnet.arpa.gsub(/\.$/, ""))
|
||||||
|
v6_rdns_zone = ERB.new(rdns_zone_template, nil, '-').result(RdnsData.new(json, v6_subnet).get_binding)
|
||||||
|
|
||||||
|
atomic_write(LXC_ZONE, zone)
|
||||||
|
atomic_write(v4_rdns_path, v4_rdns_zone)
|
||||||
|
atomic_write(v6_rdns_path, v6_rdns_zone)
|
||||||
|
atomic_write(CONTAINER_DATA, JSON.pretty_generate(json))
|
||||||
|
|
||||||
|
system("lxc-attach", "-n", DNS_CONTAINER, "--", "rndc", "reload")
|
2
lxc.conf
Normal file
2
lxc.conf
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
lxc.lxcpath = /data/containers
|
||||||
|
lxc.bdev.zfs.root = data/containers
|
6
templates/config.erb
Normal file
6
templates/config.erb
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
lxc.include = /etc/lxc/default.conf
|
||||||
|
lxc.utsname = <%= container_name %>
|
||||||
|
lxc.rootfs = <%= rootfs %>
|
||||||
|
lxc.network.ipv4 = <%= ipv4 %>
|
||||||
|
lxc.network.ipv6 = <%= ipv6 %>
|
||||||
|
lxc.network.veth.pair = lxc_<%= container_name[0..(16-4)] %>
|
21
templates/lxc-zone.erb
Normal file
21
templates/lxc-zone.erb
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
@ IN SOA <%= data["zone"]["soa"] %> hostmaster (
|
||||||
|
<%= data["zone"]["serial"] %> ; serial
|
||||||
|
<%= data["zone"]["refresh"] %> ; refresh
|
||||||
|
<%= data["zone"]["retry"] %> ; retry
|
||||||
|
<%= data["zone"]["expire"] %> ; expire
|
||||||
|
<%= data["zone"]["minimum"] %>) ; minimum
|
||||||
|
NS <%= data["zone"]["ns"] %>
|
||||||
|
|
||||||
|
<% data["network"].each do |name, value| %>
|
||||||
|
<% if value["cname"] -%>
|
||||||
|
<%= name %> CNAME <%= value["cname"] %>
|
||||||
|
<% end -%>
|
||||||
|
<% if value["ipv4"] -%>
|
||||||
|
<%= name %> A <%= ip(value["ipv4"]) %>
|
||||||
|
ipv4.<%= name %> A <%= ip(value["ipv4"]) %>
|
||||||
|
<% end -%>
|
||||||
|
<% if value["ipv6"] -%>
|
||||||
|
<%= name %> AAAA <%= ip(value["ipv6"]) %>
|
||||||
|
ipv6.<%= name %> AAAA <%= ip(value["ipv6"]) %>
|
||||||
|
<% end -%>
|
||||||
|
<% end -%>
|
11
templates/rdns-zone.erb
Normal file
11
templates/rdns-zone.erb
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
@ IN SOA <%= data["zone"]["soa"] %> hostmaster (
|
||||||
|
<%= data["zone"]["serial"] %> ; serial
|
||||||
|
<%= data["zone"]["refresh"] %> ; refresh
|
||||||
|
<%= data["zone"]["retry"] %> ; retry
|
||||||
|
<%= data["zone"]["expire"] %> ; expire
|
||||||
|
<%= data["zone"]["minimum"] %>) ; minimum
|
||||||
|
NS <%= data["zone"]["ns"] %>
|
||||||
|
|
||||||
|
<% pointers do |addr, name| %>
|
||||||
|
<%= addr %> PTR <%= name %>.lxc.
|
||||||
|
<% end -%>
|
48
zones/1.0.0.0.d.f.1.3.0.1.2.0.8.f.4.0.1.0.a.2.ip6.arpa
Normal file
48
zones/1.0.0.0.d.f.1.3.0.1.2.0.8.f.4.0.1.0.a.2.ip6.arpa
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
@ IN SOA higgsboson.tk. hostmaster (
|
||||||
|
46 ; serial
|
||||||
|
1H ; refresh
|
||||||
|
4H ; retry
|
||||||
|
3W ; expire
|
||||||
|
1D) ; minimum
|
||||||
|
NS higgsboson.tk.
|
||||||
|
|
||||||
|
|
||||||
|
1.0.0.0.0.0.0.0.0.0.0.0 PTR bridge.lxc.
|
||||||
|
|
||||||
|
2.0.0.0.0.0.0.0.0.0.0.0 PTR base.lxc.
|
||||||
|
|
||||||
|
3.0.0.0.0.0.0.0.0.0.0.0 PTR ldap.lxc.
|
||||||
|
|
||||||
|
5.0.0.0.0.0.0.0.0.0.0.0 PTR web.lxc.
|
||||||
|
|
||||||
|
6.0.0.0.0.0.0.0.0.0.0.0 PTR dns.lxc.
|
||||||
|
|
||||||
|
7.0.0.0.0.0.0.0.0.0.0.0 PTR faces.lxc.
|
||||||
|
|
||||||
|
8.0.0.0.0.0.0.0.0.0.0.0 PTR jtes.lxc.
|
||||||
|
|
||||||
|
9.0.0.0.0.0.0.0.0.0.0.0 PTR mysql.lxc.
|
||||||
|
|
||||||
|
4.0.0.0.0.0.0.0.0.0.0.0 PTR git.lxc.
|
||||||
|
|
||||||
|
a.0.0.0.0.0.0.0.0.0.0.0 PTR postgres.lxc.
|
||||||
|
|
||||||
|
b.0.0.0.0.0.0.0.0.0.0.0 PTR phpmyadmin.lxc.
|
||||||
|
|
||||||
|
d.0.0.0.0.0.0.0.0.0.0.0 PTR phppgadmin.lxc.
|
||||||
|
|
||||||
|
e.0.0.0.0.0.0.0.0.0.0.0 PTR adminer.lxc.
|
||||||
|
|
||||||
|
0.1.0.0.0.0.0.0.0.0.0.0 PTR mail.lxc.
|
||||||
|
|
||||||
|
1.1.0.0.0.0.0.0.0.0.0.0 PTR istwiki.lxc.
|
||||||
|
|
||||||
|
2.1.0.0.0.0.0.0.0.0.0.0 PTR ytm.lxc.
|
||||||
|
|
||||||
|
c.0.0.0.0.0.0.0.0.0.0.0 PTR ldapadmin.lxc.
|
||||||
|
|
||||||
|
3.1.0.0.0.0.0.0.0.0.0.0 PTR rainloop.lxc.
|
||||||
|
|
||||||
|
f.0.0.0.0.0.0.0.0.0.0.0 PTR owncloud.lxc.
|
||||||
|
|
||||||
|
4.1.0.0.0.0.0.0.0.0.0.0 PTR test.lxc.
|
48
zones/100.10.in-addr.arpa
Normal file
48
zones/100.10.in-addr.arpa
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
@ IN SOA higgsboson.tk. hostmaster (
|
||||||
|
46 ; serial
|
||||||
|
1H ; refresh
|
||||||
|
4H ; retry
|
||||||
|
3W ; expire
|
||||||
|
1D) ; minimum
|
||||||
|
NS higgsboson.tk.
|
||||||
|
|
||||||
|
|
||||||
|
1.0 PTR bridge.lxc.
|
||||||
|
|
||||||
|
2.0 PTR base.lxc.
|
||||||
|
|
||||||
|
3.0 PTR ldap.lxc.
|
||||||
|
|
||||||
|
5.0 PTR web.lxc.
|
||||||
|
|
||||||
|
6.0 PTR dns.lxc.
|
||||||
|
|
||||||
|
7.0 PTR faces.lxc.
|
||||||
|
|
||||||
|
8.0 PTR jtes.lxc.
|
||||||
|
|
||||||
|
9.0 PTR mysql.lxc.
|
||||||
|
|
||||||
|
4.0 PTR git.lxc.
|
||||||
|
|
||||||
|
10.0 PTR postgres.lxc.
|
||||||
|
|
||||||
|
11.0 PTR phpmyadmin.lxc.
|
||||||
|
|
||||||
|
13.0 PTR phppgadmin.lxc.
|
||||||
|
|
||||||
|
14.0 PTR adminer.lxc.
|
||||||
|
|
||||||
|
16.0 PTR mail.lxc.
|
||||||
|
|
||||||
|
17.0 PTR istwiki.lxc.
|
||||||
|
|
||||||
|
18.0 PTR ytm.lxc.
|
||||||
|
|
||||||
|
12.0 PTR ldapadmin.lxc.
|
||||||
|
|
||||||
|
19.0 PTR rainloop.lxc.
|
||||||
|
|
||||||
|
15.0 PTR owncloud.lxc.
|
||||||
|
|
||||||
|
20.0 PTR test.lxc.
|
108
zones/lxc.zone
Normal file
108
zones/lxc.zone
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
@ IN SOA higgsboson.tk. hostmaster (
|
||||||
|
46 ; serial
|
||||||
|
1H ; refresh
|
||||||
|
4H ; retry
|
||||||
|
3W ; expire
|
||||||
|
1D) ; minimum
|
||||||
|
NS higgsboson.tk.
|
||||||
|
|
||||||
|
|
||||||
|
bridge A 10.100.0.1
|
||||||
|
ipv4.bridge A 10.100.0.1
|
||||||
|
bridge AAAA 2a01:4f8:210:31fd:1::1
|
||||||
|
ipv6.bridge AAAA 2a01:4f8:210:31fd:1::1
|
||||||
|
|
||||||
|
base A 10.100.0.2
|
||||||
|
ipv4.base A 10.100.0.2
|
||||||
|
base AAAA 2a01:4f8:210:31fd:1::2
|
||||||
|
ipv6.base AAAA 2a01:4f8:210:31fd:1::2
|
||||||
|
|
||||||
|
ldap A 10.100.0.3
|
||||||
|
ipv4.ldap A 10.100.0.3
|
||||||
|
ldap AAAA 2a01:4f8:210:31fd:1::3
|
||||||
|
ipv6.ldap AAAA 2a01:4f8:210:31fd:1::3
|
||||||
|
|
||||||
|
web A 10.100.0.5
|
||||||
|
ipv4.web A 10.100.0.5
|
||||||
|
web AAAA 2a01:4f8:210:31fd:1::5
|
||||||
|
ipv6.web AAAA 2a01:4f8:210:31fd:1::5
|
||||||
|
|
||||||
|
dns A 10.100.0.6
|
||||||
|
ipv4.dns A 10.100.0.6
|
||||||
|
dns AAAA 2a01:4f8:210:31fd:1::6
|
||||||
|
ipv6.dns AAAA 2a01:4f8:210:31fd:1::6
|
||||||
|
|
||||||
|
faces A 10.100.0.7
|
||||||
|
ipv4.faces A 10.100.0.7
|
||||||
|
faces AAAA 2a01:4f8:210:31fd:1::7
|
||||||
|
ipv6.faces AAAA 2a01:4f8:210:31fd:1::7
|
||||||
|
|
||||||
|
jtes A 10.100.0.8
|
||||||
|
ipv4.jtes A 10.100.0.8
|
||||||
|
jtes AAAA 2a01:4f8:210:31fd:1::8
|
||||||
|
ipv6.jtes AAAA 2a01:4f8:210:31fd:1::8
|
||||||
|
|
||||||
|
mysql A 10.100.0.9
|
||||||
|
ipv4.mysql A 10.100.0.9
|
||||||
|
mysql AAAA 2a01:4f8:210:31fd:1::9
|
||||||
|
ipv6.mysql AAAA 2a01:4f8:210:31fd:1::9
|
||||||
|
|
||||||
|
git A 10.100.0.4
|
||||||
|
ipv4.git A 10.100.0.4
|
||||||
|
git AAAA 2a01:4f8:210:31fd:1::4
|
||||||
|
ipv6.git AAAA 2a01:4f8:210:31fd:1::4
|
||||||
|
|
||||||
|
postgres A 10.100.0.10
|
||||||
|
ipv4.postgres A 10.100.0.10
|
||||||
|
postgres AAAA 2a01:4f8:210:31fd:1::a
|
||||||
|
ipv6.postgres AAAA 2a01:4f8:210:31fd:1::a
|
||||||
|
|
||||||
|
phpmyadmin A 10.100.0.11
|
||||||
|
ipv4.phpmyadmin A 10.100.0.11
|
||||||
|
phpmyadmin AAAA 2a01:4f8:210:31fd:1::b
|
||||||
|
ipv6.phpmyadmin AAAA 2a01:4f8:210:31fd:1::b
|
||||||
|
|
||||||
|
phppgadmin A 10.100.0.13
|
||||||
|
ipv4.phppgadmin A 10.100.0.13
|
||||||
|
phppgadmin AAAA 2a01:4f8:210:31fd:1::d
|
||||||
|
ipv6.phppgadmin AAAA 2a01:4f8:210:31fd:1::d
|
||||||
|
|
||||||
|
adminer A 10.100.0.14
|
||||||
|
ipv4.adminer A 10.100.0.14
|
||||||
|
adminer AAAA 2a01:4f8:210:31fd:1::e
|
||||||
|
ipv6.adminer AAAA 2a01:4f8:210:31fd:1::e
|
||||||
|
|
||||||
|
mail A 10.100.0.16
|
||||||
|
ipv4.mail A 10.100.0.16
|
||||||
|
mail AAAA 2a01:4f8:210:31fd:1::10
|
||||||
|
ipv6.mail AAAA 2a01:4f8:210:31fd:1::10
|
||||||
|
|
||||||
|
istwiki A 10.100.0.17
|
||||||
|
ipv4.istwiki A 10.100.0.17
|
||||||
|
istwiki AAAA 2a01:4f8:210:31fd:1::11
|
||||||
|
ipv6.istwiki AAAA 2a01:4f8:210:31fd:1::11
|
||||||
|
|
||||||
|
ytm A 10.100.0.18
|
||||||
|
ipv4.ytm A 10.100.0.18
|
||||||
|
ytm AAAA 2a01:4f8:210:31fd:1::12
|
||||||
|
ipv6.ytm AAAA 2a01:4f8:210:31fd:1::12
|
||||||
|
|
||||||
|
ldapadmin A 10.100.0.12
|
||||||
|
ipv4.ldapadmin A 10.100.0.12
|
||||||
|
ldapadmin AAAA 2a01:4f8:210:31fd:1::c
|
||||||
|
ipv6.ldapadmin AAAA 2a01:4f8:210:31fd:1::c
|
||||||
|
|
||||||
|
rainloop A 10.100.0.19
|
||||||
|
ipv4.rainloop A 10.100.0.19
|
||||||
|
rainloop AAAA 2a01:4f8:210:31fd:1::13
|
||||||
|
ipv6.rainloop AAAA 2a01:4f8:210:31fd:1::13
|
||||||
|
|
||||||
|
owncloud A 10.100.0.15
|
||||||
|
ipv4.owncloud A 10.100.0.15
|
||||||
|
owncloud AAAA 2a01:4f8:210:31fd:1::f
|
||||||
|
ipv6.owncloud AAAA 2a01:4f8:210:31fd:1::f
|
||||||
|
|
||||||
|
test A 10.100.0.20
|
||||||
|
ipv4.test A 10.100.0.20
|
||||||
|
test AAAA 2a01:4f8:210:31fd:1::14
|
||||||
|
ipv6.test AAAA 2a01:4f8:210:31fd:1::14
|
Loading…
Reference in New Issue
Block a user