Puppet Function: merge

Defined in:
vendor_modules/stdlib/lib/puppet/parser/functions/merge.rb
Function type:
Ruby 3.x API

Summary

Merges two or more hashes together and returns the resulting hash.

Overview

merge()Hash

When there is a duplicate key, the key in the rightmost hash will “win.”

Note that since Puppet 4.0.0 the same merge can be achieved with the + operator.

`$merged_hash = $hash1 + $has

Examples:

*Usage*

$hash1 = {'one' => 1, 'two', => 2}
$hash2 = {'two' => 'dos', 'three', => 'tres'}
$merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}

Returns:

  • (Hash)

    The merged hash



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'vendor_modules/stdlib/lib/puppet/parser/functions/merge.rb', line 7

newfunction(:merge, type: :rvalue, doc: <<-'DOC') do |args|
  @summary
    Merges two or more hashes together and returns the resulting hash.

  @example **Usage**
    $hash1 = {'one' => 1, 'two', => 2}
    $hash2 = {'two' => 'dos', 'three', => 'tres'}
    $merged_hash = merge($hash1, $hash2) # $merged_hash =  {'one' => 1, 'two' => 'dos', 'three' => 'tres'}

  When there is a duplicate key, the key in the rightmost hash will "win."

  @return [Hash]
    The merged hash

  Note that since Puppet 4.0.0 the same merge can be achieved with the + operator.
    `$merged_hash = $hash1 + $hash2`
  DOC

  if args.length < 2
    raise Puppet::ParseError, "merge(): wrong number of arguments (#{args.length}; must be at least 2)"
  end

  # The hash we accumulate into
  accumulator = {}
  # Merge into the accumulator hash
  args.each do |arg|
    next if arg.is_a?(String) && arg.empty? # empty string is synonym for puppet's undef
    unless arg.is_a?(Hash)
      raise Puppet::ParseError, "merge: unexpected argument type #{arg.class}, only expects hash arguments"
    end
    accumulator.merge!(arg)
  end
  # Return the fully merged hash
  accumulator
end