#!/usr/bin/env python3 import yaml, json, sys from collections import defaultdict from urllib.request import urlopen metadata = 'http://169.254.169.254/hetzner/v1/metadata' networks = 'http://169.254.169.254/hetzner/v1/metadata/private-networks' with urlopen(metadata) as metadata: metadata = yaml.safe_load(metadata) metadata_net = metadata['network-config']['config'][0] with urlopen(networks) as networks: networks = yaml.safe_load(networks) data = { 'network': { 'nameservers': [], 'mac_address': metadata_net['mac_address'], 'ipv4_address': metadata['public-ipv4'], 'ipv4_subnet': metadata['public-ipv4'] + '/32', 'ipv4_gateway': '172.31.1.1', 'private': networks, }, 'hostname': metadata['hostname'], 'instance_id': metadata['instance-id'], 'ssh_keys': [x.rstrip() for x in metadata['public-keys']], } for subnet in metadata_net['subnets']: if 'dns_nameservers' in subnet: data['network']['nameservers'] += subnet['dns_nameservers'] if 'ipv6' in subnet: if 'address' in subnet: data['network']['ipv6_subnet'] = subnet['address'] data['network']['ipv6_address'] = subnet['address'][:-3] if 'gateway' in subnet: data['network']['ipv6_gateway'] = subnet['gateway'] json.dump(data, sys.stdout)