# @summary Sets up one DNS zone # # @example # dns::zone { 'example.com': # rname => 'ns1.example.com', # mname => 'domainmaster.example.com', # ns => [ 'ns1', 'ns2', ] # } # # @param zone # Domain this zone controls. # @param mname # Primary master # @param rname # mail to zone admin # @param retry # Retry value for zone # @param expire # Expire value for zone # @param negative_ttl # Negative ttl for zone # @param ttl # Default ttl for zone # @param refresh # Refresh value for SOA # @param records # Hash of records to create. Instanciates Dns::Record resources. # @param ns # List of nameservers for this zone. Creates Dns::Record resources # with NS entries. # @param type # Zonetype. master, slave, ... # @param update_policy # A bind9 update policy, as a string. # @param dynamic # However if this zone should be treated as a dynamic zone. If # enabled rndc freezes and thaws the zone around static updates. # Otherwise the zone file will be directly changed, and simply # reloaded afterwards. # # Defaults to true if an update_policy is set. # @param soa_ttl # TTL of SOA record. # # @param owner # Owner of zonefile. # @param group # Group of zonefile. # @param backup # Should a backup be created. See file resources documentation. # @param selinux_ignore_defaults # See file resources documentation. # @param selrange # See file resources documentation. # @param selrole # See file resources documentation. # @param seltype # See file resources documentation. # @param seluser # See file resources documentation. # @param show_diff # Should a diff be shown. # # @param ensure # Should this zone be present define dns::zone ( String $rname = undef, String $mname = $ns[0], Dns::Ttl $refresh = '24h', Dns::Ttl $retry = '2h', Dns::Ttl $expire = '1000h', Dns::Ttl $negative_ttl = '2d', Dns::Ttl $ttl = '24h', Optional[Dns::Ttl] $soa_ttl = undef, String $zone = $name, Array[Dns::RecordEntry] $records = [], Array[String] $ns = [$mname], String $type = 'master', Optional[String] $update_policy = undef, Boolean $dynamic = $update_policy != undef, Optional[Variant[String, Integer]] $owner = undef, Optional[Variant[String, Integer]] $group = undef, Variant[Boolean, String] $backup = false, Optional[Boolean] $selinux_ignore_defaults = undef, Optional[String] $selrange = undef, Optional[String] $selrole = undef, Optional[String] $seltype = undef, Optional[String] $seluser = undef, Boolean $show_diff = true, Enum['present', 'absent'] $ensure = 'present', ) { $zone_ = dns::ensure_ending_period($zone) $zone_serial = $facts.get("dns_zone_serial.'${zone_}'", 0) $params = { 'rname' => $rname, 'mname' => $mname, 'refresh' => $refresh, 'expire' => $expire, 'negative_ttl' => $negative_ttl, 'soa_ttl' => $soa_ttl, 'retry' => $retry, 'owner' => $owner, 'group' => $group, 'backup' => $backup, 'selinux_ignore_defaults' => $selinux_ignore_defaults, 'selrange' => $selrange, 'selrole' => $selrole, 'seltype' => $seltype, 'seluser' => $seluser, 'show_diff' => $show_diff, 'ensure' => $ensure, } if $ensure == 'present' { if $dynamic { exec { "Dns::zone freeze ${zone_}": command => [$dns::rndc, 'freeze', $zone_], refreshonly => true, } ~> dns_zone2 { $zone_: * => $params, } ~> exec { "Dns::zone thaw ${zone_}": command => [$dns::rndc, 'thaw', $zone_], refreshonly => true, subscribe => Dns_zone2[$zone_], } } else { dns_zone2 { $zone_: * => $params, } ~> exec { "Dns::zone reload ${zone_}": command => [$dns::rndc, 'reload', $zone_], refreshonly => true, } } } else { dns_zone2 { $zone_: ensure => 'absent', } } if $ensure == 'present' { concat::fragment { "Dns::Zone - ${zone_}": target => $dns::config_file, content => epp("${module_name}/zoneconf.epp", { zone => $zone_, type => $type, update_policy => $update_policy, }), require => Dns_zone2[$zone_], } } }