Puppet Function: local_fence_devices

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

Overview

local_fence_devices()Any

Returns:

  • (Any)


2
3
4
5
6
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
# File 'lib/puppet/parser/functions/local_fence_devices.rb', line 2

newfunction(:local_fence_devices, :arity =>2, :type => :rvalue,
            :doc => ("Given an array of fence device configs, limit them" +
                     "to fence devices whose MAC address is present on" +
                     "some of the local NICs, and prepare a hash which can be" +
                     "passed to create_resources function")) do |args|
  agent = args[0]
  devices = args[1]
  unless agent.is_a?(String) && agent.length > 0
    raise Puppet::ParseError, "local_fence_devices: Argument 'agent' must be a non-empty string. The value given was: #{agent_type}"
  end
  unless devices.is_a?(Array)
    raise Puppet::ParseError, "local_fence_devices: Argument 'devices' must be an array. The value given was: #{devices}"
  end

  # filter by agent type
  agent_type_devices = devices.select { |device| device['agent'] == agent }

  # filter by local mac address
  local_devices = agent_type_devices.select do |device|
    function_has_interface_with(['macaddress', device['host_mac']])
  end

  # construct a hash for create_resources
  return local_devices.each_with_object({}) do |device, hash|
    # disallow collisions
    if hash[device['host_mac']]
       raise Puppet::ParseError, "local_fence_devices: Only single fence device per agent per host is allowed. Collision on #{device['host_mac']} for #{agent}"
    end

    hash[device['host_mac']] = device['params'] || {}
  end
end