diff --git a/changelogs/fragments/69226-hurd-extract-functionality.yaml b/changelogs/fragments/69226-hurd-extract-functionality.yaml new file mode 100644 index 00000000000..987b21730af --- /dev/null +++ b/changelogs/fragments/69226-hurd-extract-functionality.yaml @@ -0,0 +1,2 @@ +bugfixes: +- hurd - Address FIXMEs. Extract functionality and exit early. diff --git a/lib/ansible/module_utils/facts/network/hurd.py b/lib/ansible/module_utils/facts/network/hurd.py index f1d3a8707cf..518df3900a7 100644 --- a/lib/ansible/module_utils/facts/network/hurd.py +++ b/lib/ansible/module_utils/facts/network/hurd.py @@ -29,6 +29,38 @@ class HurdPfinetNetwork(Network): platform = 'GNU' _socket_dir = '/servers/socket/' + def assign_network_facts(self, network_facts, fsysopts_path, socket_path): + rc, out, err = self.module.run_command([fsysopts_path, '-L', socket_path]) + # FIXME: build up a interfaces datastructure, then assign into network_facts + network_facts['interfaces'] = [] + for i in out.split(): + if '=' in i and i.startswith('--'): + k, v = i.split('=', 1) + # remove '--' + k = k[2:] + if k == 'interface': + # remove /dev/ from /dev/eth0 + v = v[5:] + network_facts['interfaces'].append(v) + network_facts[v] = { + 'active': True, + 'device': v, + 'ipv4': {}, + 'ipv6': [], + } + current_if = v + elif k == 'address': + network_facts[current_if]['ipv4']['address'] = v + elif k == 'netmask': + network_facts[current_if]['ipv4']['netmask'] = v + elif k == 'address6': + address, prefix = v.split('/') + network_facts[current_if]['ipv6'].append({ + 'address': address, + 'prefix': prefix, + }) + return network_facts + def populate(self, collected_facts=None): network_facts = {} @@ -44,41 +76,10 @@ class HurdPfinetNetwork(Network): socket_path = link break - # FIXME: extract to method - # FIXME: exit early on falsey socket_path and un-indent whole block - - if socket_path: - rc, out, err = self.module.run_command([fsysopts_path, '-L', socket_path]) - # FIXME: build up a interfaces datastructure, then assign into network_facts - network_facts['interfaces'] = [] - for i in out.split(): - if '=' in i and i.startswith('--'): - k, v = i.split('=', 1) - # remove '--' - k = k[2:] - if k == 'interface': - # remove /dev/ from /dev/eth0 - v = v[5:] - network_facts['interfaces'].append(v) - network_facts[v] = { - 'active': True, - 'device': v, - 'ipv4': {}, - 'ipv6': [], - } - current_if = v - elif k == 'address': - network_facts[current_if]['ipv4']['address'] = v - elif k == 'netmask': - network_facts[current_if]['ipv4']['netmask'] = v - elif k == 'address6': - address, prefix = v.split('/') - network_facts[current_if]['ipv6'].append({ - 'address': address, - 'prefix': prefix, - }) + if socket_path is None: + return network_facts - return network_facts + return self.assign_network_facts(network_facts, fsysopts_path, socket_path) class HurdNetworkCollector(NetworkCollector):