dev/provisioning/modules/datacat/manifests/init.pp
changeset 28 b0b56e0f8c7f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dev/provisioning/modules/datacat/manifests/init.pp	Fri Jan 15 15:35:00 2016 +0100
@@ -0,0 +1,95 @@
+# Definition: datacat
+#
+# This definition allows you to declare datacat managed files.
+#
+# Parameters:
+# All parameters are as for the file type, with the addition of a $template
+# parameter which is a path to a template to be used as the content of the
+# file.
+#
+# Sample Usage:
+#  datacat { '/etc/motd':
+#    owner => 'root',
+#    group => 'root,
+#    template => 'motd/motd.erb',
+#  }
+#
+define datacat(
+  $ensure                  = 'file',
+  $template                = undef,
+  $template_body           = undef,
+  $collects                = [],
+  $backup                  = undef,
+  $checksum                = undef,
+  $force                   = undef,
+  $group                   = undef,
+  $owner                   = undef,
+  $mode                    = undef,
+  $path                    = $title,
+  $replace                 = undef,
+  $selinux_ignore_defaults = undef,
+  $selrange                = undef,
+  $selrole                 = undef,
+  $seltype                 = undef,
+  $seluser                 = undef,
+  $show_diff               = 'UNSET'
+) {
+  if $show_diff != 'UNSET' {
+    if versioncmp($settings::puppetversion, '3.2.0') >= 0 {
+      File { show_diff => $show_diff }
+    } else {
+      warning('show_diff not supported in puppet prior to 3.2, ignoring')
+    }
+  }
+
+  # we could validate ensure by simply passing it to file, but unfortunately
+  # someone could try to be smart and pass 'directory', so we only allow a limited range
+  if $ensure != 'absent' and $ensure != 'present' and $ensure != 'file' {
+    fail("Datacat[${title}] invalid value for ensure")
+  }
+
+  if $ensure == 'absent' {
+    file { $title:
+      ensure                  => $ensure,
+      path                    => $path,
+      backup                  => $backup,
+      force                   => $force,
+    }
+  } else {
+    file { $title:
+      path                    => $path,
+      backup                  => $backup,
+      checksum                => $checksum,
+      content                 => "To be replaced by datacat_collector[${title}]\n",
+      force                   => $force,
+      group                   => $group,
+      mode                    => $mode,
+      owner                   => $owner,
+      replace                 => $replace,
+      selinux_ignore_defaults => $selinux_ignore_defaults,
+      selrange                => $selrange,
+      selrole                 => $selrole,
+      seltype                 => $seltype,
+      seluser                 => $seluser,
+    }
+
+    $template_real = $template ? {
+      undef   => 'inline',
+      default => $template,
+    }
+
+    $template_body_real = $template_body ? {
+      undef   => template_body($template_real),
+      default => $template_body,
+    }
+
+    datacat_collector { $title:
+      template        => $template_real,
+      template_body   => $template_body_real,
+      target_resource => File[$title], # when we evaluate we modify the private data of this resource
+      target_field    => 'content',
+      collects        => $collects,
+      before          => File[$title], # we want to evaluate before that resource so it can do the work
+    }
+  }
+}