diff options
author | Colleen Murphy <colleen@gazlene.net> | 2015-10-14 16:09:05 -0700 |
---|---|---|
committer | Colleen Murphy <colleen@gazlene.net> | 2015-10-14 16:16:01 -0700 |
commit | 25410c4598d3c0029fcd05adc2e305dbf5f8d902 (patch) | |
tree | 556730758a11a2e2d42a60d43e553b7abcdf5c4c /lib | |
parent | 0f8df10084c875edac521a2307ce4caf7317b636 (diff) | |
download | puppet-stdlib-25410c4598d3c0029fcd05adc2e305dbf5f8d902.tar.gz puppet-stdlib-25410c4598d3c0029fcd05adc2e305dbf5f8d902.tar.bz2 |
Let load_module_metadata succeed on empty file
Some modules or module versions don't have a metadata.json file, but we
might still want to use the load_module_metadata function on them. The
lack of a file can still give us important information. For example, it
might tell us that the version of the module installed is "very old"
even if we can't read the version number directly. This patch adds a
parameter to let the user specify if an empty file is acceptable. To
preserve backwards compatibility it does not change the current default
behavior, which is to raise an error if metadata.json does not exist.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/puppet/parser/functions/load_module_metadata.rb | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/lib/puppet/parser/functions/load_module_metadata.rb b/lib/puppet/parser/functions/load_module_metadata.rb index 0664a23..c9b8488 100644 --- a/lib/puppet/parser/functions/load_module_metadata.rb +++ b/lib/puppet/parser/functions/load_module_metadata.rb @@ -2,14 +2,22 @@ module Puppet::Parser::Functions newfunction(:load_module_metadata, :type => :rvalue, :doc => <<-EOT EOT ) do |args| - raise(Puppet::ParseError, "load_module_metadata(): Wrong number of arguments, expects one") unless args.size == 1 + raise(Puppet::ParseError, "load_module_metadata(): Wrong number of arguments, expects one or two") unless [1,2].include?(args.size) mod = args[0] + allow_empty_metadata = args[1] module_path = function_get_module_path([mod]) metadata_json = File.join(module_path, 'metadata.json') - raise(Puppet::ParseError, "load_module_metadata(): No metadata.json file for module #{mod}") unless File.exists?(metadata_json) - - metadata = PSON.load(File.read(metadata_json)) + metadata_exists = File.exists?(metadata_json) + if metadata_exists + metadata = PSON.load(File.read(metadata_json)) + else + if allow_empty_metadata + metadata = {} + else + raise(Puppet::ParseError, "load_module_metadata(): No metadata.json file for module #{mod}") + end + end return metadata end |