Added support for generating dns reverse records for puppet nodes

This commit is contained in:
Ossi Salmi 2012-12-03 00:20:12 +02:00
parent 36c993a47b
commit b1d21d84e3

View file

@ -450,43 +450,97 @@ define dns::zone($role = "master", $master = "", $slaves = [], $forwarders = [],
require => File["${dns::server::chroot}${zonedir}/db.${zone}-dynamic",
"${dns::server::chroot}${zonedir}/db.${zone}-dynamic.d"],
}
Dns::Node::Record::Reverse <<| tag == $zone |>> {
dbdir => "${dns::server::chroot}${zonedir}/db.${zone}-dynamic.d",
notify => Exec["update-db.${zone}-dynamic"],
require => File["${dns::server::chroot}${zonedir}/db.${zone}-dynamic",
"${dns::server::chroot}${zonedir}/db.${zone}-dynamic.d"],
}
}
}
}
# Generate dynamic DNS records for puppet node.
#
# === Global variables
#
# $dns_node_name:
# A record name. Defaults to $hostname.
#
# $dns_node_zone:
# DNS zone. Defaults to $domain.
#
# $dns_node_ipaddr:
# IP address to use in records. Defaults to $ipaddress.
#
# $dns_node_netmask:
# Netmask for determining reverse zone class. Defaults to $netmask.
#
# $dns_node_alias:
# List of names used as CNAME records.
#
class dns::node {
if !$dns_node_name {
$dns_node_name = $::hostname
}
if !$dns_node_ipaddr {
$dns_node_ipaddr = $::ipaddress
}
if !$dns_node_zone {
$dns_node_zone = $::domain
}
if !$dns_node_ipaddr and !$dns_node_netmask {
$dns_node_ipaddr = $::ipaddress
$dns_node_netmask = $::netmask
} else {
if !$dns_node_ipaddr or !$dns_node_netmask {
fail("Must define both \$dns_node_ipaddr and \$dns_node_netmask")
}
}
if $dns_node_alias {
$dns_node_cname = inline_template("<% dns_node_alias.each do |a| -%><%= a %>\tCNAME\t<%= dns_node_name %>\n<% end -%>")
$dns_node_cname = inline_template("<% dns_node_alias.each do |a| -%><%= a %>\tIN\tCNAME\t<%= dns_node_name %>\n<% end -%>")
} else {
$dns_node_cname = ""
}
@@dns::node::record { "${dns_node_name}.${dns_node_zone}":
name => $dns_node_name,
cname => $dns_node_cname,
ipaddr => $dns_node_ipaddr,
tag => $dns_node_zone
host => $dns_node_name,
cname => $dns_node_cname,
tag => $dns_node_zone
}
$dns_node_class = inline_template("<%= dns_node_netmask.scan('255.').length -%>")
$dns_node_raddr = inline_template("<%= dns_node_ipaddr.split('.').reverse.first(4-dns_node_class.to_i).join('.') -%>")
$dns_node_rzone = inline_template("<%= dns_node_ipaddr.split('.').reverse.last(dns_node_class.to_i).join('.') -%>.in-addr.arpa")
@@dns::node::record::reverse { "${dns_node_name}.${dns_node_zone}":
ipaddr => $dns_node_raddr,
host => "${dns_node_name}.${dns_node_zone}",
tag => $dns_node_rzone
}
}
define dns::node::record($dbdir, $ipaddr, $name, $cname="") {
define dns::node::record($dbdir, $ipaddr, $host, $cname="") {
file { "${dbdir}/rr.${name}":
ensure => present,
content => "${name}\tA\t${ipaddr}\n${cname}",
content => "${host}\tIN\tA\t${ipaddr}\n${cname}",
}
}
define dns::node::record::reverse($dbdir, $ipaddr, $host) {
file { "${dbdir}/rr.${name}":
ensure => present,
content => "${ipaddr}\tIN\tPTR\t${host}.\n",
}
}