puppet/util/manifests/init.pp

221 lines
4.8 KiB
Puppet

# Extract tar package.
#
# === Parameters
#
# $name:
# Destination directory.
#
# $ensure:
# If 'latest', remove target and re-extract when source file changes.
#
# $source:
# File to extract.
#
# $strip:
# Remove the specified number of leading path elements.
# Defaults to 0.
#
# $preserve:
# Preserve owner and permissions. Defaults to false.
#
# $pattern:
# The pathnames or shell-style globbing patterns indicate which
# items in the archive should be processed.
#
# $user:
# User to extract the files as.
#
# $group:
# Group to extract the files as.
#
# === Sample usage
#
# util::extract::tar { "/usr/local/src/moin-1.8.8":
# strip => 1,
# source => "/usr/local/src/moin-1.8.8.tar.gz",
# }
#
define util::extract::tar(
$source,
$ensure=present,
$strip=0,
$preserve=false,
$pattern="",
$user=undef,
$group=undef
) {
if $user {
$user_real = $user
} else {
$user_real = "root"
}
if $group {
$group_real = $group
} else {
$group_real = $::operatingsystem ? {
"openbsd" => "wheel",
default => "root",
}
}
require gnu::tar
case $ensure {
latest: {
exec { "tar-rmdir-${name}":
path => "/bin:/usr/bin:/sbin:/usr/sbin",
command => "rm -fr ${name}",
before => File[$name],
subscribe => File[$source],
refreshonly => true,
}
}
default: { }
}
file { $name:
ensure => directory,
mode => "0755",
owner => $user,
group => $group,
}
case regsubst($source, '.*\.([^.]+)$', '\1') {
"tar": {
$cat = "cat"
}
"gz","tgz": {
$cat = "zcat"
}
"bz2","tbz": {
$cat = "bzcat"
}
"xz": {
$cat = "xzcat"
}
default: {
fail("unknown file type")
}
}
$tar = $::operatingsystem ? {
"openbsd" => "gtar",
default => "tar",
}
if $preserve {
$command = "/bin/sh -c 'umask 022; ${cat} ${source} | ${tar} xf - --strip-components=${strip} -C ${name} ${pattern}'"
} else {
$command = "/bin/sh -c 'umask 022; ${cat} ${source} | ${tar} xf - --strip-components=${strip} -C ${name} ${pattern} --no-same-owner --no-same-permissions'"
}
exec { "tar-extract-${name}":
path => "/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin",
command => $command,
unless => "test -n \"$(ls -A ${name})\"",
user => $user,
group => $group,
require => File[$name],
}
}
# Extract tar package.
#
# === Parameters
#
# $name:
# Destination directory.
# $ensure:
# If 'latest', remove target and re-extract when source file changes.
# $source:
# File to extract.
#
# === Sample usage
#
#util::extract::zip { "/usr/lib/firefox-addons/extensions/{73a6fe31-595d-460b-a920-fcc0f8843232}":
# source => "/usr/local/src/noscript.xpi",
#}
#
define util::extract::zip($source, $ensure=present) {
case $ensure {
latest: {
exec { "zip-rmdir-${name}":
path => "/bin:/usr/bin:/sbin:/usr/sbin",
command => "rm -fr ${name}",
before => File[$name],
subscribe => File[$source],
refreshonly => true,
}
}
default: { }
}
$command = "unzip ${source} -d ${name}"
file { $name:
ensure => directory,
mode => "0755",
owner => root,
group => root,
}
exec { "zip-extract-${name}":
path => "/bin:/usr/bin:/sbin:/usr/sbin",
command => $command,
require => File[$name],
unless => "test -n \"$(ls -A ${name})\"",
}
}
# Install patch.
#
class util::patch::package {
if $::kernel == "Linux" {
package { "patch":
ensure => installed,
}
}
}
# Apply patch.
#
# === Parameters
#
# $name:
# Destination directory.
# $source:
# Patch file.
# $strip:
# Remove the specified number of leading path elements.
# Defaults to 0.
#
# === Sample usage
#
# util::patch { "/usr/local/src/moin-1.8.8":
# strip => 1,
# source => "/usr/local/src/moin.patch",
# }
#
define util::patch($source, $strip=0) {
include util::patch::package
exec { "patch-${name}-${source}":
path => "/bin:/usr/bin:/sbin:/usr/sbin",
cwd => $name,
command => "patch -N -b -t -p${strip} < ${source}",
onlyif => "patch --dry-run -N -b -t -p${strip} < ${source}",
require => Class["util::patch::package"],
}
}