9793b3c972
Adds a class to configure fence devices and a helper function which helps to select the devices for configuration on appropriate nodes. Depends on patches outside OpenStack's Gerrit: https://github.com/redhat-openstack/puppet-pacemaker/pull/50 https://github.com/redhat-openstack/puppet-pacemaker/pull/52 Change-Id: I819fc8c126ec47cd207c59b3dcf92ff699649c5a
35 lines
1.5 KiB
Ruby
35 lines
1.5 KiB
Ruby
module Puppet::Parser::Functions
|
|
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
|
|
end
|