modules/custom/manifests/init.pp
class custom {
file {
"/tmp/puppet":
ensure => directory,
mode => 700, owner => root, group => root;
}
exec {
"cleanup /tmp/puppet":
path => "/bin/",
cwd => "/tmp",
command => "rm -rf puppet",
require => File["/tmp/puppet"],
unless => "/usr/bin/test -e /tmp/debug-concat_file";
}
}
define mkdir () {
$parent = template("custom/mkdir.erb")
if !defined(Mkdir["$parent"]) and $parent != "/tmp/puppet" {
mkdir {
"$parent":
}
}
file {
"$name":
ensure => directory,
owner => root, group => root, mode => 400,
require => File["$parent"];
}
}
define concat_file (
$ensure = present,
$mode = 0644, $owner = root, $group = root
) {
include custom
$file = "/tmp/puppet/${name}"
$dir = "/tmp/puppet/${name}.d"
$parent = template("custom/mkdir.erb")
mkdir {
"$dir":
}
file {
"${dir}/__nonempty__":
owner => root, group => root, mode => 400,
ensure => present,
content => '',
require => File["${dir}"];
}
exec {
"concat_file_${name}":
path => ["/bin", "/usr/bin"],
cwd => $parent,
command => "cat $dir/* >| $file",
require => File["${dir}/__nonempty__"];
}
file {
"${name}":
ensure => $ensure,
owner => $owner, group => $group, mode => $mode,
source => $file,
require => Exec["concat_file_${name}"],
before => Exec["cleanup /tmp/puppet"];
}
}
define concat_file_chunk (
$file,
$priority = "50",
$content = ""
) {
file {
"/tmp/puppet/${file}.d/${priority}-${title}":
ensure => present,
owner => root, group => root, mode => 400,
content => "$content",
before => Exec["concat_file_${file}"],
require => File["/tmp/puppet/${file}.d"];
}
}