phpservermon/puphpet/puppet/modules/puppi/manifests/install_packages.pp

84 lines
2.3 KiB
Puppet

# = Define: puppi::install_packages
#
# This define installs a list of packages without manging them as Puppet
# resources. It's useful when you need a set of packages installed,
# for example as prerequisites to build code from source, but you don't want
# to create Puppet package resources for them (since they may conflict with
# existing classes that provide the same packages.
#
# == Parameters:
#
# [*packages*]
# String. Required.
# A space separated list of of the packages to install
#
# [*template*]
# String. Optional. Default: 'puppi/install_packages.erb'
# The template to use to generate the script that installs the packages
#
# [*scrips_dir*]
# String. Optional. Default: '/root/puppi_install_packages'
# The directory where you place the scripts created by the define.
#
# [*autorun*]
# Boolean. Default: true.
# Define if to automatically execute the script when Puppet runs.
#
# [*refreshonly*]
# Boolean. Optional. Default: true
# Defines the logic of execution of the script when Puppet runs.
# Maps to the omonymous Exec type argument.
#
# [*timeout*]
# String. Optional. Default: '600'
# Exec timeout in seconds.
#
# [*ensure*]
# Define if the runscript script and eventual cron job
# must be present or absent. Default: present.
#
# == Examples
#
# - Minimal setup
# puppi::install_packages { 'build_tools':
# source => 'build-essential vim git-core curl bison',
# }
#
define puppi::install_packages (
$packages,
$template = 'puppi/install_packages.erb',
$scripts_dir = '/root/puppi_install_packages',
$autorun = true,
$refreshonly = true,
$timeout = '600',
$ensure = 'present' ) {
if ! defined(File[$scripts_dir]) {
file { $scripts_dir:
ensure => directory,
mode => '0755',
owner => 'root',
group => 'root',
}
}
file { "install_packages_${name}":
ensure => $ensure,
path => "${scripts_dir}/${name}",
mode => '0755',
owner => 'root',
group => 'root',
content => template($template),
}
if $autorun == true {
exec { "install_packages_${name}":
command => "${scripts_dir}/${name}",
refreshonly => $refreshonly,
subscribe => File["install_packages_${name}"],
timeout => $timeout,
}
}
}