diff options
Diffstat (limited to 'lib/puppet/parser/functions/write_package_names.rb')
-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 |