puppet/mirror/manifests/init.pp
2013-11-02 23:31:58 +02:00

197 lines
4.4 KiB
Puppet

# Install mirroring scripts
#
# === Parameters
#
# $datadir:
# Directory for mirrored data. Defaults to /srv/mirrors
#
# $cron:
# Boolean for enabling the sync-mirror cron job. Defaults to true.
#
class mirror($datadir="/srv/mirrors", $cron=true) {
include user::system
realize(User["mirror"], Group["mirror"])
require rsync
if $datadir != "/srv/mirrors" {
file { "/srv/mirrors":
ensure => link,
target => $datadir,
owner => "root",
group => "root",
seltype => "httpd_sys_content_t",
before => File[$datadir],
}
selinux::manage_fcontext { "/srv/mirrors(/.*)?":
type => "httpd_sys_content_t",
before => File["/srv/mirrors"],
}
}
file { $datadir:
ensure => directory,
mode => "0755",
owner => "root",
group => "root",
seltype => "httpd_sys_content_t",
}
selinux::manage_fcontext { "${datadir}(/.*)?":
type => "httpd_sys_content_t",
before => File[$datadir],
}
file { "/etc/sync-mirrors":
ensure => directory,
mode => "0755",
owner => "root",
group => "root",
recurse => true,
purge => true,
}
file { [ "/var/run/sync-mirrors", "/var/log/sync-mirrors", ]:
ensure => directory,
mode => "0755",
owner => "mirror",
group => "mirror",
before => Cron["sync-mirrors"],
require => User["mirror"],
}
file { "/usr/local/bin/sync-mirrors":
ensure => present,
source => "puppet:///modules/mirror/sync-mirrors",
mode => "0755",
owner => "root",
group => "root",
}
cron { "sync-mirrors":
ensure => $cron ? {
false => absent,
default => present,
},
command => "/usr/local/bin/sync-mirrors",
user => "mirror",
hour => [ 0, 6, 12, 18, ],
minute => 0,
require => [ File["/usr/local/bin/sync-mirrors"], User["mirror"], ],
}
}
# Create new mirror
#
# === Parameters:
#
# $name:
# Mirror name
#
# $source:
# Rsync path from where to sync mirror
#
# $postcmd:
# Run this command after sync is completed
#
# $rsync_options:
# Extra options for rsync
#
# === Sample usage:
#
# mirrors::mirror { "centos":
# source => "rsync://rsync.nic.funet.fi/ftp/pub/mirrors/centos.org/",
# rsync_options => [
# "--exclude=SRPMS",
# "--exclude=debug",
# "--exclude=isos",
# ],
# }
#
define mirror::mirror($source, $rsync_options=[], $postcmd=undef) {
require mirror
file { "/etc/sync-mirrors/${name}.conf":
ensure => present,
content => template("mirror/mirror.conf.erb"),
mode => "0644",
owner => "root",
group => "root",
require => File["/srv/mirrors/${name}"],
}
file { "/srv/mirrors/${name}":
ensure => directory,
owner => "mirror",
group => "mirror",
seltype => "httpd_sys_content_t",
}
}
# Run weekly hardlinking for mirrored data
#
class mirror::hardlink {
require mirror
package { "hardlink":
ensure => installed,
}
cron { "hardlink-mirrors-weekly":
command => "/usr/sbin/hardlink /srv/mirrors/",
user => "mirror",
hour => 4,
minute => 0,
weekday => 0,
}
}
# Install Fedora mirror reporting tool
#
# https://fedoraproject.org/wiki/Infrastructure/Mirroring
#
# === Parameters:
#
# $sitename:
# Site name configured to mirrormanager
#
# $password:
# Site password configured to mirrormanager
#
# $hostname:
# Host name configured to mirrormanager
#
# $mirrors:
# Components mirrored to this hosts
#
# === Sample usage:
#
# mirrors::reportmirror {
# sitename => "foo.sh"
# password => "secret",
# hostname => "mirrors.foo.sh",
# mirrors => [ "fedora", "epel", ],
# }
#
class mirror::reportmirror($sitename, $password, $hostname, $mirrors=[]) {
package { "mirrormanager-client":
ensure => installed,
}
file { "/etc/mirrormanager-client/report_mirror.conf":
ensure => present,
content => template("mirror/report_mirror.conf.erb"),
mode => "0640",
owner => "root",
group => "mirror",
require => [ Package["mirrormanager-client"], Group["mirror"], ],
}
}