diff --git a/changelogs/fragments/42322-nmcli_fix_vlan_mod_function.yaml b/changelogs/fragments/42322-nmcli_fix_vlan_mod_function.yaml new file mode 100644 index 00000000000..8abd773ae98 --- /dev/null +++ b/changelogs/fragments/42322-nmcli_fix_vlan_mod_function.yaml @@ -0,0 +1,2 @@ +bugfixes: + - "nmcli - fix syntax of vlan modification command (https://github.com/ansible/ansible/issues/42322)" diff --git a/lib/ansible/modules/net_tools/nmcli.py b/lib/ansible/modules/net_tools/nmcli.py index 90a989b050c..1c0ec02ffb7 100644 --- a/lib/ansible/modules/net_tools/nmcli.py +++ b/lib/ansible/modules/net_tools/nmcli.py @@ -1033,10 +1033,10 @@ class Nmcli(object): params = {'dev': self.vlandev, 'id': self.vlanid, - 'ip4': self.ip4, - 'gw4': self.gw4, - 'ip6': self.ip6, - 'gw6': self.gw6, + 'ip4': self.ip4 or '', + 'gw4': self.gw4 or '', + 'ip6': self.ip6 or '', + 'gw6': self.gw6 or '', 'autoconnect': self.bool_to_string(self.autoconnect) } for k, v in params.items(): @@ -1048,16 +1048,22 @@ class Nmcli(object): cmd = [self.nmcli_bin] cmd.append('con') cmd.append('mod') - cmd.append('con-name') + + if self.conn_name is not None: + cmd.append(self.conn_name) + elif self.ifname is not None: + cmd.append(self.ifname) + else: + cmd.append('vlan%s' % self.vlanid) params = {'vlan.parent': self.vlandev, 'vlan.id': self.vlanid, - 'ipv4.address': self.ip4, - 'ipv4.gateway': self.gw4, - 'ipv4.dns': self.dns4, - 'ipv6.address': self.ip6, - 'ipv6.gateway': self.gw6, - 'ipv6.dns': self.dns6, + 'ipv4.address': self.ip4 or '', + 'ipv4.gateway': self.gw4 or '', + 'ipv4.dns': self.dns4 or '', + 'ipv6.address': self.ip6 or '', + 'ipv6.gateway': self.gw6 or '', + 'ipv6.dns': self.dns6 or '', 'autoconnect': self.bool_to_string(self.autoconnect) } diff --git a/test/units/modules/net_tools/test_nmcli.py b/test/units/modules/net_tools/test_nmcli.py index 42492d88a7f..86713226d14 100644 --- a/test/units/modules/net_tools/test_nmcli.py +++ b/test/units/modules/net_tools/test_nmcli.py @@ -402,7 +402,15 @@ def test_create_vlan_con(mocked_generic_connection_create): arg_list = nmcli.Nmcli.execute_command.call_args_list args, kwargs = arg_list[0] - for param in ['vlan']: + assert args[0][0] == '/usr/bin/nmcli' + assert args[0][1] == 'con' + assert args[0][2] == 'add' + assert args[0][3] == 'type' + assert args[0][4] == 'vlan' + assert args[0][5] == 'con-name' + assert args[0][6] == 'non_existent_nw_device' + + for param in ['ip4', '10.10.10.10', 'gw4', '10.10.10.1']: assert param in args[0] @@ -419,7 +427,12 @@ def test_mod_vlan_conn(mocked_generic_connection_modify): arg_list = nmcli.Nmcli.execute_command.call_args_list args, kwargs = arg_list[0] - for param in ['vlan.id']: + assert args[0][0] == '/usr/bin/nmcli' + assert args[0][1] == 'con' + assert args[0][2] == 'mod' + assert args[0][3] == 'non_existent_nw_device' + + for param in ['ipv4.address', '10.10.10.10', 'ipv4.gateway', '10.10.10.1']: assert param in args[0]