dev/provisioning/modules/puppi/manifests/install_packages.pp
changeset 28 b0b56e0f8c7f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dev/provisioning/modules/puppi/manifests/install_packages.pp	Fri Jan 15 15:35:00 2016 +0100
@@ -0,0 +1,83 @@
+# = 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,
+    }
+  }
+
+}