diff options
author | Dan Prince <dprince@redhat.com> | 2015-06-22 16:12:15 -0400 |
---|---|---|
committer | Dan Prince <dprince@redhat.com> | 2015-06-25 14:23:11 -0400 |
commit | 9f066c60f3c965ada31be7690ec61e1c493a36ca (patch) | |
tree | 0a9e0e627e017ef98d522df6954cef71dedd8bba /lib/puppet/parser | |
parent | fdb0ec212f9c9ba9dea83e414abef6cb37b68014 (diff) |
Add a function to write package names
This function writes out package names that have been
defined in a given puppet catalog.
In order to work this should be place last (or very late)
in a manifest to ensure it picks up packages.
Change-Id: Ie21b5bf7df71337da02ea43915dc4e70d3052bb7
Diffstat (limited to 'lib/puppet/parser')
-rw-r--r-- | lib/puppet/parser/functions/write_package_names.rb | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/lib/puppet/parser/functions/write_package_names.rb b/lib/puppet/parser/functions/write_package_names.rb new file mode 100644 index 0000000..8f99674 --- /dev/null +++ b/lib/puppet/parser/functions/write_package_names.rb @@ -0,0 +1,22 @@ +require 'fileutils' + +module Puppet::Parser::Functions + newfunction(:write_package_names, :doc => "Write package names which are managed via this puppet run to a file.") do |arg| + if arg[0].class == String + begin + output_file = arg[0] + packages = catalog.resources.collect { |r| r.title if r.type == 'Package' }.compact + FileUtils.mkdir_p(File.dirname(output_file)) + File.open(output_file, 'w') do |f| + packages.each do |pkg_name| + f.write(pkg_name + "\n") + end + end + rescue JSON::ParserError + raise Puppet::ParseError, "Syntax error: #{arg[0]} is invalid" + end + else + raise Puppet::ParseError, "Syntax error: #{arg[0]} is not a String" + end + end +end |