
# Install tftp server
#
# === Global variables:
#
#   $tftp_datadir:
#       Directory containing tftp files.
#
class tftp::server {

    if $tftp_datadir {
        file { "${tftp_datadir}":
            ensure  => directory,
            mode    => 0755,
            owner   => root,
            group   => $operatingsystem ? {
                openbsd => "wheel",
                default => "root",
            },
            seltype => "tftpdir_t",
        }
        file { "/srv/tftpboot":
            ensure  => link,
            target  => "${tftp_datadir}",
            seltype => "tftpdir_t",
            require => File["${tftp_datadir}"],
        }
    } else {
        file { "/srv/tftpboot":
            ensure  => directory,
            mode    => 0755,
            owner   => "root",
            group   => $operatingsystem ? {
                "openbsd" => "wheel",
                default   => "root",
            },
            seltype => "tftpdir_t",
        }
    }

    case $operatingsystem {
        debian,fedora,ubuntu: {
            file { "/var/lib/tftpboot":
                ensure  => link,
                target  => "/srv/tftpboot",
                force   => true,
                require => File["/srv/tftpboot"],
            }
        }
        default: {
            file { "/tftpboot":
                ensure  => link,
                target  => "/srv/tftpboot",
                force   => true,
                require => File["/srv/tftpboot"],
            }
        }
    }

    if "${selinux}" == "true" {
        selinux::manage_fcontext { "/srv/tftpboot(/.*)?":
            type   => "tftpdir_t",
            before => File["/srv/tftpboot"],
        }
        if $tftp_datadir {
            selinux::manage_fcontext { "${tftp_datadir}(/.*)?":
                type => "tftpdir_t",
                before => File["${tftp_datadir}"],
            }
        }
    }

    if $operatingsystem != "OpenBSD" {
        package { "tftp-server":
            name   => $operatingsystem ? {
                ubuntu  => "tftpd-hpa",
                debian  => "tftpd-hpa",
                default => "tftp-server",
            },
            ensure => installed,
        }
    }

    case $operatingsystem {
        debian,ubuntu: {
            service { "tftpd-hpa":
                ensure    => running,
                hasstatus => true,
                enable    => true,
                require   => [ File["/var/lib/tftpboot"],
                               Package["tftp-server"], ],
            }
        }
        default: {
            include inetd::server
            inetd::service { "tftp":
                ensure  => present,
                require => $operatingsystem ? {
                    "openbsd" => undef,
                    default   => Package["tftp-server"],
                },
            }
        }
    }

}


# Install tftp client tools
#
class tftp::client {

    package { "tftp":
        ensure => installed,
    }

}
