Report abuse

modules/custom/manifests/init.pp

class custom {
        # This just does some prep work for the defines below
        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";
        }
}

# This define is sick and wrong.
# It is a recursive-to-/ file { ensure => directory }
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":
        }

        # Make sure there's something, even if empty
        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"];
        }
}