phpservermon/puphpet/puppet/modules/yum/manifests/init.pp

330 lines
11 KiB
Puppet

# = Class: yum
#
# This class manages yum repositories for RedHat based distros:
# RHEL, Centos, Scientific Linux
#
# Copyright 2008, admin(at)immerda.ch
# Copyright 2008, Puzzle ITC GmbH
# Marcel Harry haerry+puppet(at)puzzle.ch
# Simon Josi josi+puppet(at)puzzle.ch
#
# This program is free software; you can redistribute
# it and/or modify it under the terms of the GNU
# General Public License version 3 as published by
# the Free Software Foundation.
#
# Apapted for Example42 by Alessandro Franceschi
#
# == Parameters
#
# [*install_all_keys*]
# If to provide all the module's known rpm gpgp keys.
# Default true, set to false to keep backwards compatibility
#
# [*update*]
# If you want yum automatic updates. Possibile values:
# cron - Updates in a cronjob
# updatesd - Updates via updatesd (Only on Centos/RedHat/SL 5)
# false/no - Automatic updates disabled (Default)
#
# [*update_disable*]
# Set to true if you have enabled updates and now wish to disable
# Defaults to false. Logic pertaining to this parameter is only applied
# when the update method parameter (immediately above) is set.
#
# [*defaultrepo*]
# If you want to enable default repositories for supported OS
# Default: true
# Note: This variable is ignored if you provide a custom source_repo_dir
#
# [*extrarepo*]
# If you want to enable some (supported) extra repositories
# Can be an array. Default: 'epel'
# (Epel is used by many modules)
# Note: This variable is ignored if you provide a custom source_repo_dir
#
# [*plugins_source_dir*]
# The path of the plugins configuration directory
#
# [*repo_dir*]
# The path of the yum.repos.d directory
#
# [*source_repo_dir*]
# The source path to use to populate the yum.repos.d directory
#
# [*clean_repos*]
# Boolean. Defines if you want to cleanup the yum.repos.d dir
# and be sure that it contains only files managed by Puppet
# Default: false
#
# [*my_class*]
# Name of a custom class to autoload to manage module's customizations
# If defined, yum class will automatically "include $my_class"
# Can be defined also by the (top scope) variable $yum_myclass
#
# [*source*]
# Sets the content of source parameter for main configuration file
# If defined, yum main config file will have the param: source => $source
# Can be defined also by the (top scope) variable $yum_source
#
# [*source_dir*]
# If defined, the whole yum configuration directory content is retrieved
# recursively from the specified source
# (source => $source_dir , recurse => true)
# Can be defined also by the (top scope) variable $yum_source_dir
#
# [*source_dir_purge*]
# If set to true (default false) the existing configuration directory is
# mirrored with the content retrieved from source_dir
# (source => $source_dir , recurse => true , purge => true)
# Can be defined also by the (top scope) variable $yum_source_dir_purge
#
# [*template*]
# Sets the path to the template to use as content for main configuration file
# If defined, yum main config file has: content => content("$template")
# Note source and template parameters are mutually exclusive: don't use both
# Can be defined also by the (top scope) variable $yum_template
#
# [*options*]
# An hash of custom options to be used in templates for arbitrary settings.
# Can be defined also by the (top scope) variable $yum_options
#
# [*absent*]
# Set to 'true' to remove package(s) installed by module
# Can be defined also by the (top scope) variable $yum_absent
#
# [*disable*]
# Set to 'true' to disable service(s) managed by module
# Can be defined also by the (top scope) variable $yum_disable
#
# [*disableboot*]
# Set to 'true' to disable service(s) at boot, without checks if it's running
# Use this when the service is managed by a tool like a cluster software
# Can be defined also by the (top scope) variable $yum_disableboot
#
# [*puppi*]
# Set to 'true' to enable creation of module data files that are used by puppi
# Can be defined also by the (top scope) variables $yum_puppi and $puppi
#
# [*puppi_helper*]
# Specify the helper to use for puppi commands. The default for this module
# is specified in params.pp and is generally a good choice.
# You can customize the output of puppi commands for this module using another
# puppi helper. Use the define puppi::helper to create a new custom helper
# Can be defined also by the (top scope) variables $yum_puppi_helper
# and $puppi_helper
#
# [*debug*]
# Set to 'true' to enable modules debugging
# Can be defined also by the (top scope) variables $yum_debug and $debug
#
# [*audit_only*]
# Set to 'true' if you don't intend to override existing configuration files
# and want to audit the difference between existing files and the ones
# managed by Puppet.
# Can be defined also by the (top scope) variables $yum_audit_only
# and $audit_only
#
# [*config_dir*]
# Main configuration directory. Used by puppi
#
# [*config_file*]
# Main configuration file path
#
# [*config_file_mode*]
# Main configuration file path mode
#
# [*config_file_owner*]
# Main configuration file path owner
#
# [*config_file_group*]
# Main configuration file path group
#
# [*cron_params*]
# Optional extra arguments for $update = cron ONLY
#
# [*cron_mailto*]
# Optional mail addres to send update reports for $update = cron ONLY
#
# [*cron_dotw*]
# Days of the week to perform yum updates by cron
# 0123456 (default)
#
# [*log_file*]
# Log file(s). Used by puppi
#
class yum (
$install_all_keys = params_lookup( 'install_all_keys' ),
$update = params_lookup( 'update' ),
$update_disable = params_lookup( 'update_disable' ),
$defaultrepo = params_lookup( 'defaultrepo' ),
$extrarepo = params_lookup( 'extrarepo' ),
$plugins_source_dir = params_lookup( 'plugins_source_dir' ),
$repo_dir = params_lookup( 'repo_dir' ),
$source_repo_dir = params_lookup( 'source_repo_dir' ),
$clean_repos = params_lookup( 'clean_repos' ),
$my_class = params_lookup( 'my_class' ),
$source = params_lookup( 'source' ),
$source_dir = params_lookup( 'source_dir' ),
$source_dir_purge = params_lookup( 'source_dir_purge' ),
$template = params_lookup( 'template' ),
$options = params_lookup( 'options' ),
$absent = params_lookup( 'absent' ),
$disable = params_lookup( 'disable' ),
$disableboot = params_lookup( 'disableboot' ),
$puppi = params_lookup( 'puppi' , 'global' ),
$puppi_helper = params_lookup( 'puppi_helper' , 'global' ),
$debug = params_lookup( 'debug' , 'global' ),
$audit_only = params_lookup( 'audit_only' , 'global' ),
$config_dir = params_lookup( 'config_dir' ),
$config_file = params_lookup( 'config_file' ),
$config_file_mode = params_lookup( 'config_file_mode' ),
$config_file_owner = params_lookup( 'config_file_owner' ),
$config_file_group = params_lookup( 'config_file_group' ),
$update_template = params_lookup( 'update_template' ),
$cron_param = params_lookup( 'cron_param' ),
$cron_mailto = params_lookup( 'cron_mailto' ),
$cron_dotw = params_lookup( 'cron_dotw' ),
$log_file = params_lookup( 'log_file' )
) inherits yum::params {
$bool_install_all_keys=any2bool($install_all_keys)
$bool_defaultrepo=any2bool($defaultrepo)
$bool_clean_repos=any2bool($clean_repos)
$bool_source_dir_purge=any2bool($source_dir_purge)
$bool_absent=any2bool($absent)
$bool_disable=any2bool($disable)
$bool_disableboot=any2bool($disableboot)
$bool_puppi=any2bool($puppi)
$bool_debug=any2bool($debug)
$bool_audit_only=any2bool($audit_only)
$bool_update_disable=any2bool($update_disable)
$osver = split($::operatingsystemrelease, '[.]')
$manage_service_enable = $yum::bool_disableboot ? {
true => false,
default => $yum::bool_disable ? {
true => false,
default => $yum::bool_absent ? {
true => false,
false => true,
},
},
}
$manage_service_ensure = $yum::bool_disable ? {
true => 'stopped',
default => $yum::bool_absent ? {
true => 'stopped',
default => 'running',
},
}
$manage_file = $yum::bool_absent ? {
true => 'absent',
default => 'present',
}
$manage_audit = $yum::bool_audit_only ? {
true => 'all',
false => undef,
}
$manage_file_replace = $yum::bool_audit_only ? {
true => false,
false => true,
}
$manage_file_source = $yum::source ? {
'' => undef,
default => $yum::source,
}
$manage_file_content = $yum::template ? {
'' => undef,
default => template($yum::template),
}
$manage_updates = $yum::update ? {
'cron' => true,
'updatesd' => true,
default => false,
}
file { 'yum.repo_dir':
ensure => directory,
path => $yum::repo_dir,
source => $yum::source_repo_dir,
recurse => true,
purge => $yum::bool_clean_repos,
replace => $yum::manage_file_replace,
audit => $yum::manage_audit,
}
if $yum::source_repo_dir == undef {
include yum::defaults
}
# Yum Configuration file
file { 'yum.conf':
ensure => $yum::manage_file,
path => $yum::config_file,
mode => $yum::config_file_mode,
owner => $yum::config_file_owner,
group => $yum::config_file_group,
source => $yum::manage_file_source,
content => $yum::manage_file_content,
replace => $yum::manage_file_replace,
audit => $yum::manage_audit,
}
# The whole yum configuration directory can be recursively overriden
if $yum::source_dir {
file { 'yum.dir':
ensure => directory,
path => $yum::config_dir,
source => $yum::source_dir,
recurse => true,
purge => $yum::source_dir_purge,
replace => $yum::manage_file_replace,
audit => $yum::manage_audit,
}
}
### Manage Automatic Updates
if $yum::manage_updates {
include $yum::update
}
### Include custom class if $my_class is set
if $yum::my_class {
include $yum::my_class
}
### Provide puppi data, if enabled ( puppi => true )
if $yum::bool_puppi == true {
$classvars=get_class_args()
puppi::ze { 'yum':
ensure => $yum::manage_file,
variables => $classvars,
helper => $yum::puppi_helper,
}
}
### Debugging, if enabled ( debug => true )
if $yum::bool_debug == true {
file { 'debug_yum':
ensure => $yum::manage_file,
path => "${settings::vardir}/debug-yum",
mode => '0640',
owner => 'root',
group => 'root',
content => inline_template('<%= scope.to_hash.reject { |k,v| k.to_s =~ /(uptime.*|path|timestamp|free|.*password.*|.*psk.*|.*key)/ }.to_yaml %>'),
}
}
}