class dhcp::server::common { package { "dhcp": name => $operatingsystem ? { Debian => "dhcp3-server", OpenBSD => "isc-dhcp-server", Ubuntu => "dhcp3-server", default => "dhcp", }, ensure => installed, } file { "dhcpd.leases": name => $operatingsystem ? { Debian => "/var/lib/dhcp3/dhcpd.leases", OpenBSD => "/var/db/dhcpd.leases", Ubuntu => "/var/lib/dhcp3/dhcpd.leases", default => "/var/lib/dhcpd/dhcpd.leases", }, ensure => present, owner => $operatingsystem ? { debian => dhcpd, ubuntu => dhcpd, default => root, }, group => $operatingsystem ? { Debian => dhcpd, OpenBSD => wheel, Ubuntu => dhcpd, default => root, }, require => Package["dhcp"], before => Service["dhcpd"], } if $operatingsystem == "OpenBSD" and $operatingsystemrelease !~ /4\.[1-8]/ { file { "/etc/rc.d/isc_dhcpd": ensure => present, mode => "0555", owner => "root", group => "bin", source => "puppet:///modules/dhcp/isc_dhcpd.rc", before => Service["dhcpd"], } } service { "dhcpd": name => $operatingsystem ? { Debian => "dhcp3-server", OpenBSD => $operatingsystemrelease ? { /4\.[1-8]/ => "isc-dhcpd", default => "isc_dhcpd", }, Ubuntu => "dhcp3-server", default => "dhcpd", }, ensure => running, enable => true, binary => $operatingsystem ? { OpenBSD => "/usr/local/sbin/dhcpd", default => undef, }, start => $operatingsystem ? { OpenBSD => "/usr/local/sbin/dhcpd -q", default => undef, }, require => Package["dhcp"], } } class dhcp::server inherits dhcp::server::common { file { "/etc/dhcpd.conf": name => $operatingsystem ? { debian => "/etc/dhcp3/dhcpd.conf", ubuntu => "/etc/dhcp3/dhcpd.conf", default => "/etc/dhcpd.conf", }, ensure => present, source => [ "puppet:///files/dhcp/dhcpd.conf.${fqdn}", "puppet:///files/dhcp/dhcpd.conf", ], mode => "0644", owner => root, group => $operatingsystem ? { openbsd => wheel, default => root, }, notify => Service["dhcpd"], } } class dhcp::server::ldap inherits dhcp::server::common { include ldap::client::python file { "/usr/local/sbin/dhcpdump.py": ensure => present, source => "puppet:///modules/dhcp/dhcpdump.py", mode => "0755", owner => root, group => $operatingsystem ? { OpenBSD => wheel, default => root, }, } file { "/etc/dhcpd.conf.in": ensure => present, source => [ "puppet:///files/dhcp/dhcpd.conf.in.${hostname}", "puppet:///files/dhcp/dhcpd.conf.in", ], mode => "0644", owner => root, group => $operatingsystem ? { OpenBSD => wheel, default => root, }, require => Package["dhcp"], } exec { "generate-dhcp-conf": path => "/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin", command => "dhcpdump.py /etc/dhcpd.conf.in* > /etc/dhcpd.conf", unless => "dhcpdump.py /etc/dhcpd.conf.in* | diff /etc/dhcpd.conf -", require => [ File["/etc/dhcpd.conf.in"], File["/usr/local/sbin/dhcpdump.py"], ], notify => Service["dhcpd"], } } # Configure DHCP relay # # === Parameters # # $name: # Relay name (can be anything). # $interface: # IP address for interface to listen. # $server_addr: # Address for DHCP server to relay requests. # # === Sample usage # # dhcp::relay { "relay0": interface => "em2", server_addr => "10.20.110.11" } # define dhcp::relay ($interface, $server_addr) { service { $name: name => $name, ensure => running, provider => "base", hasrestart => false, hasstatus => false, pattern => "/usr/sbin/dhcrelay -i ${interface} ${server_addr}", start => $operatingsystem ? { OpenBSD => "/usr/sbin/dhcrelay -i ${interface} ${server_addr}", default => undef, } } }