Update stdlib and concat to 6.1.0 both
[mirror/dsa-puppet.git] / 3rdparty / modules / stdlib / lib / puppet / parser / functions / load_module_metadata.rb
1 #
2 # load_module_metadata.rb
3 #
4 module Puppet::Parser::Functions
5   newfunction(:load_module_metadata, :type => :rvalue, :doc => <<-DOC
6     @summary
7       This function loads the metadata of a given module.
8
9     @example Example USage:
10       $metadata = load_module_metadata('archive')
11       notify { $metadata['author']: }
12
13     @return
14       The modules metadata
15   DOC
16              ) do |args|
17     raise(Puppet::ParseError, 'load_module_metadata(): Wrong number of arguments, expects one or two') unless [1, 2].include?(args.size)
18     mod = args[0]
19     allow_empty_metadata = args[1]
20     module_path = function_get_module_path([mod])
21     metadata_json = File.join(module_path, 'metadata.json')
22
23     metadata_exists = File.exists?(metadata_json) # rubocop:disable Lint/DeprecatedClassMethods : Changing to .exist? breaks the code
24     if metadata_exists
25       metadata = PSON.load(File.read(metadata_json))
26     else
27       metadata = {}
28       raise(Puppet::ParseError, "load_module_metadata(): No metadata.json file for module #{mod}") unless allow_empty_metadata
29     end
30
31     return metadata
32   end
33 end