bundlewrap/bundles/hosts/items.py
mwiegand c075e696fe wip
2021-07-12 20:38:13 +02:00

39 lines
919 B
Python

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()
),
}