From f2073e72edd4fd5d50d3c27f7985fc35c803eaec Mon Sep 17 00:00:00 2001 From: Franziska Kunsmann Date: Fri, 16 Oct 2020 22:19:45 +0200 Subject: [PATCH] libs/tools: add resolve_identifier() --- libs/tools.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 libs/tools.py diff --git a/libs/tools.py b/libs/tools.py new file mode 100644 index 0000000..373f2f3 --- /dev/null +++ b/libs/tools.py @@ -0,0 +1,31 @@ +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)) + + if node.metadata.get('external_ipv4'): + found_ips.add(ip_address(node.metadata.get('external_ipv4'))) + + return found_ips