diff options
author | Chad Metcalf <chad@wibidata.com> | 2012-09-18 11:43:30 -0700 |
---|---|---|
committer | Jeff McCune <jeff@puppetlabs.com> | 2012-11-27 16:16:28 -0800 |
commit | 8a8c09ed34f9917378cd8b7bcc798c21c2975dce (patch) | |
tree | f1220f9aba0aa6e2ef65431318ad597589861863 /lib/puppet/parser/functions | |
parent | 6f76d8dfd179d3beb73bf69d1ce31411ba3f12ed (diff) | |
download | puppet-stdlib-8a8c09ed34f9917378cd8b7bcc798c21c2975dce.tar.gz puppet-stdlib-8a8c09ed34f9917378cd8b7bcc798c21c2975dce.tar.bz2 |
Add an ensure_packages function.
Its often the case that modules need to install a handful of packages.
In some cases its worth breaking these dependencies out into their own
modules (e.g., Java). In others it makes more sense to keep them in the
module. This can be problematic when multiple modules depend on common
packages (git, python ruby, etc). ensure_resource was a good first step
towards solving this problem. ensure_resource does not handle arrays and
for 3 or more packages stamping out ensure_resource declarations is
tedious.
ensure_packages is a convenience function that takes an array of packages
and wraps calls to ensure_resource. Currently users cannot specify
package versions. But the function could be extended to use a hash if
that functionality would be useful.
Diffstat (limited to 'lib/puppet/parser/functions')
-rw-r--r-- | lib/puppet/parser/functions/ensure_packages.rb | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/lib/puppet/parser/functions/ensure_packages.rb b/lib/puppet/parser/functions/ensure_packages.rb new file mode 100644 index 0000000..450ea02 --- /dev/null +++ b/lib/puppet/parser/functions/ensure_packages.rb @@ -0,0 +1,24 @@ +# +# ensure_packages.rb +# +require 'puppet/parser/functions' + +module Puppet::Parser::Functions + newfunction(:ensure_packages, :type => :statement, :doc => <<-EOS +Takes a list of packages and only installs them if they don't already exist. + EOS + ) do |arguments| + + raise(Puppet::ParseError, "ensure_packages(): Wrong number of arguments " + + "given (#{arguments.size} for 1)") if arguments.size != 1 + raise(Puppet::ParseError, "ensure_packages(): Requires array " + + "given (#{arguments[0].class})") if !arguments[0].kind_of?(Array) + + Puppet::Parser::Functions.function(:ensure_resource) + arguments[0].each { |package_name| + function_ensure_resource(['package', package_name, {'ensure' => 'present' } ]) + } + end +end + +# vim: set ts=2 sw=2 et : |