Puppet Class: foreman_proxy::proxydns

Defined in:
manifests/proxydns.pp

Summary

Configure the ISC named service

Overview

Parameters:

  • forwarders (Array[String]) (defaults to: $foreman_proxy::dns_forwarders)

    The DNS forwarders to use

  • interface (String) (defaults to: $foreman_proxy::dns_interface)

    The interface to use for fact determination. By default the IP is used to create an A record in the forward zone and determine the reverse DNS zone(s).

  • forward_zone (Stdlib::Fqdn) (defaults to: $foreman_proxy::dns_zone)

    The forward DNS zone name

  • reverse_zone (Optional[Variant[Boolean, String, Array[String]]]) (defaults to: $foreman_proxy::dns_reverse)

    The reverse DNS zone name

  • soa (String) (defaults to: $facts['networking']['fqdn'])

    The hostname to use in the SOA record. Also used to create a forward DNS entry.



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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'manifests/proxydns.pp', line 21

class foreman_proxy::proxydns (
  Array[String] $forwarders = $foreman_proxy::dns_forwarders,
  String $interface = $foreman_proxy::dns_interface,
  Stdlib::Fqdn $forward_zone = $foreman_proxy::dns_zone,
  Optional[Variant[Boolean, String, Array[String]]] $reverse_zone = $foreman_proxy::dns_reverse,
  String $soa = $facts['networking']['fqdn'],
) {
  class { 'dns':
    forwarders => $forwarders,
  }

  $user_group = $dns::group

  unless 'networking' in $facts {
    fail('Missing modern networking facts')
  }
  unless $interface in $facts['networking']['interfaces'] {
    fail("Interface '${interface}' was not found in networking facts")
  }

  $ip = $facts['networking']['interfaces'][$interface]['ip']
  $ip6 = $facts['networking']['interfaces'][$interface]['ip6']
  unless $ip or $ip6 {
    fail("Could not get a valid IP address for '${interface}' from facts")
  }

  if $reverse_zone {
    $reverse = $reverse_zone
  } else {
    if $ip {
      $netmask = $facts['networking']['interfaces'][$interface]['netmask']
      unless $netmask =~ Stdlib::IP::Address::V4::Nosubnet {
        fail("Could not get a valid netmask for '${interface}' from facts: '${netmask}'")
      }
      $reverse = foreman_proxy::get_network_in_addr($ip, $netmask)
      unless $reverse =~ String[1] {
        fail("Could not determine reverse for ${ip}/${netmask}")
      }
    } else {
      $reverse = undef
    }
  }

  $update_policy = {
    'rndc-key' => {
      'action'    => 'grant',
      'matchtype' => 'zonesub',
      'rr'        => 'ANY',
    },
  }

  dns::zone { $forward_zone:
    soa           => $soa,
    reverse       => false,
    soaip         => $ip,
    soaipv6       => $ip6,
    update_policy => $update_policy,
  }

  if $reverse {
    dns::zone { $reverse:
      soa           => $soa,
      reverse       => true,
      update_policy => $update_policy,
    }
  }
}