[% # Return an array of shared IPv6 addresses from the interface of a given # type for all nodes which act as a given role # # @param argv.role The role of the node to process # One of: proxy, lb, mgmt # @param argv.type The interface type of a node to extract # the shared ip from # One of: web_int, web_ext, sip_int, sip_ext, ... # @param argv.format Optional reformatting of IPv6 addresses # @return out The array of shared IPv6 addresses -%] [% blktmp.processed_hosts = {} -%] [% out = [] -%] [% FOREACH host IN hosts.keys.sort -%] [% IF hosts.$host.role.grep('^' _ argv.role _ '$').size() && !blktmp.processed_hosts.$host.defined -%] [% FOREACH iface IN hosts.$host.interfaces -%] [% FOREACH realiface IN hosts.$host.keys -%] [% IF realiface == iface -%] [% IF hosts.$host.$realiface.type.grep('^' _ argv.type _ '$').size() -%] [% peer = hosts.$host.peer -%] [% blktmp.processed_hosts.$peer = 1 -%] [% FOREACH ip IN hosts.$host.$realiface.shared_v6ip -%] [% IF argv.format == 'expand' -%] [% WHILE ip.match('::') && ip.match(':', 1).size < 8 -%] [% ip = ip.replace('::', '::0:') -%] [% END -%] [% ip = ip.replace('::', ':') -%] [% ip = ip.replace('^:', '0:') -%] [% ip = ip.replace(':$', ':0') -%] [% END -%] [% out.push(ip) -%] [% END -%] [% END -%] [% END -%] [% END -%] [% END -%] [% END -%] [% END -%] [% out = out.sort -%]