Report abuse

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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

1
2
3
4
5
// Belongs to Acme inc.
zone "three.com" {
        type master;
        file "master/three.com";
};

slave server

1
2
3
4
5
6
7
8
9
10
// Belongs to Acme inc.
zone "three.com" {
        type slave;

        file "slave/three.com";

        masters {
                    1.2.3.4;
        };
};