Puppet Function: ipa_topology_ring
- Defined in:
- lib/puppet/parser/functions/ipa_topology_ring.rb
- Function type:
- Ruby 3.x API
Overview
Return an ipa ring topology from a sorted list of hosts
Example:
$valid_peers = ipa_topology_ring($peers) notice(“valid peers is: $valid_peers”)
This function is used internally for building automatic topologies.
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/puppet/parser/functions/ipa_topology_ring.rb', line 21 newfunction(:ipa_topology_ring, :type => :rvalue, :doc => <<-'ENDHEREDOC') do |args| Return an ipa ring topology from a sorted list of hosts Example: $valid_peers = ipa_topology_ring($peers) notice("valid peers is: ${valid_peers}") This function is used internally for building automatic topologies. ENDHEREDOC Puppet::Parser::Functions.function('warning') # load function # signature: replica, bricks -> bricks unless args.length == 1 raise Puppet::ParseError, "ipa_topology_ring(): wrong number of arguments (#{args.length}; must be 1)" end if not(args[0].is_a?(Array)) raise Puppet::ParseError, "ipa_topology_ring(): expects the first argument to be an array, got #{args[0].inspect} which is of type #{args[0].class}" end peers = args[0] if peers.uniq.length != peers.length # there are duplicates! raise Puppet::ParseError, "ipa_topology_ring(): duplicates were found in the first argument!" end # NOTE: need at least one if peers.length < 1 function_warning(["ipa_topology_ring(): peer list is empty"]) return {} end # if we only have one peer, and it's me, then topology is empty if peers.length == 1 and peers[0] == lookupvar('fqdn') return {} end result = {} i = 0 while i < peers.length do x = peers[i] # from if i < peers.length-1 y = peers[i+1] # to else y = peers[0] # wrap around end # store value as a list, in the ring case of length 1 result[x] = [y] i+=1 # i++ end result # return end |