# Sets up our dns-server, assumes that all zone information comes from # hiera. class profiles::dns_zones ( Hash $zones, Hash $default = {}, Optional[Hash] $views = undef, Hash $view_defaults = {}, String $default_view = '_GLOBAL_', Hash $zonedata_default = {}, Hash[String,Hash] $zonedata = {}, Hash[String,Array[Hash]] $records = {}, ) { if $views != undef { class { 'dns': enable_views => true, } create_resources(dns::view, $views, $view_defaults) } else { include ::dns } create_resources(dns::zone, $zones, $default) create_resources(dns_zone, $zonedata, $zonedata_default) $zonedata.each |$zone, $_| { Dns_record <<| zone == $zone |>> # This breaks if views are used # "rndc reload $zone IN $view" works, but then we have too loop # somehow exec { "reload ${zone}": command => ['rndc' ,'reload', $zone], path => ['/usr/bin', '/usr/sbin'], refreshonly => true, subscribe => Dns_zone[$zone], } } $records.each |$zone, $record_entries| { $zone_hash = $record_entries.map |$d| { $type = $d['type'] $key = $d['key'] $value = $d['value'] ["${zone} ${type} ${key} ${value}", $d] } create_resources(dns_record, Hash($zone_hash), { 'zone' => $zone, }) } }