diff --git a/bundles/hosts/items.py b/bundles/hosts/items.py new file mode 100644 index 0000000..1961763 --- /dev/null +++ b/bundles/hosts/items.py @@ -0,0 +1,39 @@ +from ipaddress import ip_address +from collections import OrderedDict + +def sorted_hostnames(hostnames): + return sorted( + hostnames, + key=lambda e: (len(e.split('.')), e), + ) + +def sorted_hosts_for_ip_version(version): + return OrderedDict( + sorted( + [ + (ip, sorted_hostnames(hostnames)) + for ip, hostnames in node.metadata.get('hosts').items() + if ip_address(ip).version == version + ], + key=lambda e: ip_address(e[0]), + ), + ) + + +sorted_hosts = OrderedDict({ + **sorted_hosts_for_ip_version(4), + **sorted_hosts_for_ip_version(6), +}) +ip_width = len(max(sorted_hosts.keys(), key=len)) + +files['/etc/hosts'] = { + 'content': '\n'.join( + ' '.join([ + ip.ljust(ip_width, ' '), + *hostnames + ]) + for ip, hostnames in sorted_hosts.items() + ), +} + + diff --git a/bundles/hosts/metadata.py b/bundles/hosts/metadata.py new file mode 100644 index 0000000..0e99b4c --- /dev/null +++ b/bundles/hosts/metadata.py @@ -0,0 +1,28 @@ +defaults = { + 'hosts': { + '127.0.0.1': [ + 'localhost', + node.name, + ], + '::1': [ + 'localhost', + 'ip6-localhost', + 'ip6-loopback', + ], + 'fe00::0': [ + 'ip6-localnet' + ], + 'ff00::0': [ + 'ip6-mcastprefix' + ], + 'ff02::1': [ + 'ip6-allnodes' + ], + 'ff02::2': [ + 'ip6-allrouters' + ], + 'ff02::3': [ + 'ip6-allhosts' + ], + }, +} diff --git a/groups/os/linux.py b/groups/os/linux.py index b632300..3083f45 100644 --- a/groups/os/linux.py +++ b/groups/os/linux.py @@ -7,5 +7,15 @@ 'systemd', 'systemd-networkd', 'systemd-timers', + 'hosts', ], + 'metadata': { + 'hosts': { + '10.0.10.2': [ + 'resolver.name', + 'first.resolver.name', + 'second.resolver.name', + ], + }, + }, } diff --git a/nodes/htz.mails.py b/nodes/htz.mails.py index f0ff67d..519bb98 100644 --- a/nodes/htz.mails.py +++ b/nodes/htz.mails.py @@ -17,7 +17,7 @@ 'metadata': { 'id': 'ea29bdf0-0b47-4bf4-8346-67d60c9dc4ae', 'bind': { - 'hostname': 'ns.sublimity.de', + 'hostname': 'resolver.name', 'zones': { 'sublimity.de': [], 'freibrief.net': [],