class ldap::common { case $ldap_base_dn { "": { $ldap_base_dn = "dc=example,dc=com" # Write a function that uses the domain fact warning("ldap_base_dn not set, using default $ldap_base_dn") } } case $ldap_admin_dn { "": { $ldap_admin_dn = "cn=admin,$ldap_base_dn" warning("ldap_admin_dn not set, using default $ldap_admin_dn") } } case $ldap_admin_password { "": { fail("ldap_admin_password not set!") } } $ldappackage = "slapd" $ldapservice = "slapd" $ldapdir = "/etc/ldap" $ldaputilpackage = "ldap-utils" $ldapclientpackage = "libnss-ldap" file { "$ldapdir/ldap.conf": content => template("ldap/ldap.conf.erb"), require => Package[$ldaputilpackage], } package { $ldaputilpackage: ensure => installed; } } class ldap::client inherits ldap::common { case $ldap_server { "": { fail("ldap_server not set!") } } package { $ldapclientpackage: ensure => installed; } file { "/etc/libnss-ldap.conf": content => template("ldap/libnss-ldap.conf.erb"), require => [ Package[$ldapclientpackage], File["/etc/libnss-ldap.secret"] ], } file { "/etc/libnss-ldap.secret": mode => 600, content => "$ldap_admin_password", } } class ldap::master inherits ldap::common { package { $ldappackage: ensure => installed; } file { "$ldapdir/slapd.conf": content => template("ldap/slapd.conf.erb"), require => Package[$ldappackage], notify => Service["$ldapservice"], } service { $ldapservice: require => [ Package[$ldappackage], File["$ldapdir/slapd.conf"] ], ensure => running, enable => true, } }