Report abuse

define bind::zone ($masterip = "", $comment = "", $alsonotify = "", $allowtransfer = "", $ensure = "present", $type) {
        if $type == "master" {
                concat_snippet{"${name}_zone_config":
                        content         => template("bind/master_zone_config.erb"),
                        directory       => "/etc/named.conf.d",
                        ensure          => $ensure
                }

                file{"/srv/named/master/${name}":
                        owner           => root,
                        group           => root,
                        require         => Class["bind::master::config"],
                        source          => "puppet://puppet/bind/zones/${name}",
                        notify          => Service["named"],
                        ensure          => $ensure
                }
        } else {
                concat_snippet{"${name}_zone_config":
                        content         => template("bind/slave_zone_config.erb"),
                        directory       => "/etc/named.conf.d",
                        notify          => Service["named"],
                        ensure          => $ensure
                }
        }
}

class bind::master::config {
        concat_file{"/etc/named.conf":
                owner           => root,
                group           => root,
                require         => Class["bind::install"],
                notify          => Service["named"],
        }

        concat_snippet{"named.conf_acl":
                order           => 00,
                directory       => "/etc/named.conf.d",
                source          => "puppet://puppet/bind/master/named.conf_acl",
        }

        concat_snippet{"named.conf":
                order           => 01,
                directory       => "/etc/named.conf.d",
                source          => "puppet://puppet/bind/master/named.conf_header",
        }
}

class bind::zones {
        if defined(Class["bind::master"]) {
                $zone_type = "master"
        } else {
                $zone_type = "slave"
        }

        Bind::Zone{
                        masterip        => "1.2.3.4",
                        type            => $zone_type,
        }

        bind::zone{"one.com"]:
                        alsonotify      => ["4.3.2.1"];

                   "two.com":
                        ;

                   "three.com":
                        comment         => "Belongs to Acme inc.";
        }
}

master server

// Belongs to Acme inc.
zone "three.com" {
        type master;
        file "master/three.com";
};

slave server

// Belongs to Acme inc.
zone "three.com" {
        type slave;

        file "slave/three.com";

        masters {
                    1.2.3.4;
        };
};