2020-10-16 20:19:45 +00:00
|
|
|
from bundlewrap.exceptions import NoSuchGroup, NoSuchNode
|
|
|
|
from ipaddress import ip_address
|
|
|
|
|
|
|
|
def resolve_identifier(repo, identifier):
|
|
|
|
"""
|
|
|
|
Try to resolve an identifier (group or node). Return a set of ip
|
|
|
|
addresses valid for this identifier.
|
|
|
|
"""
|
|
|
|
try:
|
|
|
|
nodes = {repo.get_node(identifier)}
|
|
|
|
except NoSuchNode:
|
|
|
|
try:
|
|
|
|
nodes = repo.nodes_in_group(identifier)
|
|
|
|
except NoSuchGroup:
|
|
|
|
try:
|
|
|
|
return {ip_address(identifier)}
|
|
|
|
except:
|
|
|
|
return set()
|
|
|
|
|
|
|
|
found_ips = set()
|
|
|
|
for node in nodes:
|
|
|
|
for interface, config in node.metadata.get('interfaces', {}).items():
|
|
|
|
for ip in config.get('ipv4', set()):
|
|
|
|
found_ips.add(ip_address(ip))
|
|
|
|
for ip in config.get('ipv4', set()):
|
|
|
|
found_ips.add(ip_address(ip))
|
|
|
|
|
2020-11-08 09:41:41 +00:00
|
|
|
if node.metadata.get('external_ipv4', None):
|
2020-10-16 20:19:45 +00:00
|
|
|
found_ips.add(ip_address(node.metadata.get('external_ipv4')))
|
|
|
|
|
|
|
|
return found_ips
|