puppet/tftp/manifests/init.pp
2015-05-04 11:00:36 +03:00

138 lines
3.5 KiB
Puppet

# 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": {
$tftpdir = "/var/lib/tftpboot"
}
"centos","redhat": {
case $::operatingsystemrelease {
/^[45]\./: {
$tftpdir = "/tftpboot"
}
default: {
$tftpdir = "/var/lib/tftpboot"
}
}
}
default: {
$tftpdir = "/tftpboot"
}
}
file { $tftpdir:
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":
ensure => installed,
name => $::operatingsystem ? {
ubuntu => "tftpd-hpa",
debian => "tftpd-hpa",
default => "tftp-server",
},
}
}
case $::operatingsystem {
"debian","ubuntu": {
service { "tftpd-hpa":
ensure => running,
hasstatus => true,
enable => true,
require => [ File["/var/lib/tftpboot"],
Package["tftp-server"], ],
}
}
"openbsd": {
if versioncmp($::operatingsystemrelease, '5.2') < 0 {
include inetd::server
inetd::service { "tftp":
ensure => present,
require => File["/tftpboot"],
}
} else {
service { "tftpd":
ensure => running,
hasstatus => true,
enable => true,
start => "/usr/sbin/tftpd /tftpboot",
require => File["/tftpboot"],
}
}
}
default: {
include inetd::server
inetd::service { "tftp":
ensure => present,
require => Package["tftp-server"],
}
}
}
}
# Install tftp client tools
#
class tftp::client {
package { "tftp":
ensure => installed,
}
}