mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
nmcli: add connection.zone parameter (#1426)
This commit is contained in:
parent
65d4fe2f4f
commit
8cedec381f
3 changed files with 119 additions and 0 deletions
2
changelogs/fragments/1426-nmcli-add-zone-parameter.yml
Normal file
2
changelogs/fragments/1426-nmcli-add-zone-parameter.yml
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
minor_changes:
|
||||||
|
- nmcli - add ``zone`` parameter (https://github.com/ansible-collections/community.general/issues/949, https://github.com/ansible-collections/community.general/pull/1426).
|
|
@ -257,6 +257,12 @@ options:
|
||||||
description:
|
description:
|
||||||
- This is used with IPIP/SIT - IPIP/SIT local IP address.
|
- This is used with IPIP/SIT - IPIP/SIT local IP address.
|
||||||
type: str
|
type: str
|
||||||
|
zone:
|
||||||
|
description:
|
||||||
|
- The trust level of the connection.
|
||||||
|
- When updating this property on a currently activated connection, the change takes effect immediately.
|
||||||
|
type: str
|
||||||
|
version_added: 2.0.0
|
||||||
'''
|
'''
|
||||||
|
|
||||||
EXAMPLES = r'''
|
EXAMPLES = r'''
|
||||||
|
@ -538,6 +544,13 @@ EXAMPLES = r'''
|
||||||
ip_tunnel_local: 192.168.1.2
|
ip_tunnel_local: 192.168.1.2
|
||||||
ip_tunnel_remote: 192.168.1.5
|
ip_tunnel_remote: 192.168.1.5
|
||||||
|
|
||||||
|
- name: Add zone
|
||||||
|
community.general.nmcli:
|
||||||
|
type: ethernet
|
||||||
|
conn_name: my-eth1
|
||||||
|
zone: external
|
||||||
|
state: present
|
||||||
|
|
||||||
# nmcli exits with status 0 if it succeeds and exits with a status greater
|
# nmcli exits with status 0 if it succeeds and exits with a status greater
|
||||||
# than zero when there is a failure. The following list of status codes may be
|
# than zero when there is a failure. The following list of status codes may be
|
||||||
# returned:
|
# returned:
|
||||||
|
@ -633,6 +646,7 @@ class Nmcli(object):
|
||||||
self.ip_tunnel_remote = module.params['ip_tunnel_remote']
|
self.ip_tunnel_remote = module.params['ip_tunnel_remote']
|
||||||
self.nmcli_bin = self.module.get_bin_path('nmcli', True)
|
self.nmcli_bin = self.module.get_bin_path('nmcli', True)
|
||||||
self.dhcp_client_id = module.params['dhcp_client_id']
|
self.dhcp_client_id = module.params['dhcp_client_id']
|
||||||
|
self.zone = module.params['zone']
|
||||||
|
|
||||||
if self.ip4:
|
if self.ip4:
|
||||||
self.ipv4_method = 'manual'
|
self.ipv4_method = 'manual'
|
||||||
|
@ -659,6 +673,7 @@ class Nmcli(object):
|
||||||
# Options common to multiple connection types.
|
# Options common to multiple connection types.
|
||||||
options = {
|
options = {
|
||||||
'connection.autoconnect': self.autoconnect,
|
'connection.autoconnect': self.autoconnect,
|
||||||
|
'connection.zone': self.zone,
|
||||||
}
|
}
|
||||||
|
|
||||||
# IP address options.
|
# IP address options.
|
||||||
|
@ -972,6 +987,7 @@ class Nmcli(object):
|
||||||
'mac': self.mac_setting,
|
'mac': self.mac_setting,
|
||||||
'master': 'connection.master',
|
'master': 'connection.master',
|
||||||
'slave-type': 'connection.slave-type',
|
'slave-type': 'connection.slave-type',
|
||||||
|
'zone': 'connection.zone',
|
||||||
}
|
}
|
||||||
|
|
||||||
changed = False
|
changed = False
|
||||||
|
@ -1077,6 +1093,7 @@ def main():
|
||||||
# general usage
|
# general usage
|
||||||
mtu=dict(type='int'),
|
mtu=dict(type='int'),
|
||||||
mac=dict(type='str'),
|
mac=dict(type='str'),
|
||||||
|
zone=dict(type='str'),
|
||||||
# bridge specific vars
|
# bridge specific vars
|
||||||
stp=dict(type='bool', default=True),
|
stp=dict(type='bool', default=True),
|
||||||
priority=dict(type='int', default=128),
|
priority=dict(type='int', default=128),
|
||||||
|
|
|
@ -126,6 +126,31 @@ ipv6.dns-search: search6.redhat.com
|
||||||
ipv6.method: auto
|
ipv6.method: auto
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
TESTCASE_GENERIC_ZONE = [
|
||||||
|
{
|
||||||
|
'type': 'generic',
|
||||||
|
'conn_name': 'non_existent_nw_device',
|
||||||
|
'ifname': 'generic_non_existant',
|
||||||
|
'ip4': '10.10.10.10/24',
|
||||||
|
'gw4': '10.10.10.1',
|
||||||
|
'state': 'present',
|
||||||
|
'zone': 'external',
|
||||||
|
'_ansible_check_mode': False,
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
TESTCASE_GENERIC_ZONE_SHOW_OUTPUT = """\
|
||||||
|
connection.id: non_existent_nw_device
|
||||||
|
connection.interface-name: generic_non_existant
|
||||||
|
connection.autoconnect: yes
|
||||||
|
connection.zone: external
|
||||||
|
ipv4.method: manual
|
||||||
|
ipv4.addresses: 10.10.10.10/24
|
||||||
|
ipv4.gateway: 10.10.10.1
|
||||||
|
ipv4.never-default: no
|
||||||
|
ipv6.method: auto
|
||||||
|
"""
|
||||||
|
|
||||||
TESTCASE_BOND = [
|
TESTCASE_BOND = [
|
||||||
{
|
{
|
||||||
'type': 'bond',
|
'type': 'bond',
|
||||||
|
@ -399,6 +424,13 @@ def mocked_generic_connection_dns_search_unchanged(mocker):
|
||||||
execute_return=(0, TESTCASE_GENERIC_DNS4_SEARCH_SHOW_OUTPUT, ""))
|
execute_return=(0, TESTCASE_GENERIC_DNS4_SEARCH_SHOW_OUTPUT, ""))
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def mocked_generic_connection_zone_unchanged(mocker):
|
||||||
|
mocker_set(mocker,
|
||||||
|
connection_exists=True,
|
||||||
|
execute_return=(0, TESTCASE_GENERIC_ZONE_SHOW_OUTPUT, ""))
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def mocked_bond_connection_unchanged(mocker):
|
def mocked_bond_connection_unchanged(mocker):
|
||||||
mocker_set(mocker,
|
mocker_set(mocker,
|
||||||
|
@ -664,6 +696,74 @@ def test_dns4_none(mocked_connection_exists, capfd):
|
||||||
assert results['changed']
|
assert results['changed']
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('patch_ansible_module', TESTCASE_GENERIC_ZONE, indirect=['patch_ansible_module'])
|
||||||
|
def test_generic_connection_create_zone(mocked_generic_connection_create, capfd):
|
||||||
|
"""
|
||||||
|
Test : Generic connection created with zone
|
||||||
|
"""
|
||||||
|
with pytest.raises(SystemExit):
|
||||||
|
nmcli.main()
|
||||||
|
|
||||||
|
assert nmcli.Nmcli.execute_command.call_count == 1
|
||||||
|
arg_list = nmcli.Nmcli.execute_command.call_args_list
|
||||||
|
args, kwargs = arg_list[0]
|
||||||
|
|
||||||
|
assert 'connection.zone' in args[0]
|
||||||
|
|
||||||
|
out, err = capfd.readouterr()
|
||||||
|
results = json.loads(out)
|
||||||
|
assert not results.get('failed')
|
||||||
|
assert results['changed']
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('patch_ansible_module', TESTCASE_GENERIC_ZONE, indirect=['patch_ansible_module'])
|
||||||
|
def test_generic_connection_modify_zone(mocked_generic_connection_create, capfd):
|
||||||
|
"""
|
||||||
|
Test : Generic connection modified with zone
|
||||||
|
"""
|
||||||
|
with pytest.raises(SystemExit):
|
||||||
|
nmcli.main()
|
||||||
|
|
||||||
|
assert nmcli.Nmcli.execute_command.call_count == 1
|
||||||
|
arg_list = nmcli.Nmcli.execute_command.call_args_list
|
||||||
|
args, kwargs = arg_list[0]
|
||||||
|
|
||||||
|
assert 'connection.zone' in args[0]
|
||||||
|
|
||||||
|
out, err = capfd.readouterr()
|
||||||
|
results = json.loads(out)
|
||||||
|
assert not results.get('failed')
|
||||||
|
assert results['changed']
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('patch_ansible_module', TESTCASE_GENERIC_ZONE, indirect=['patch_ansible_module'])
|
||||||
|
def test_generic_connection_zone_unchanged(mocked_generic_connection_zone_unchanged, capfd):
|
||||||
|
"""
|
||||||
|
Test : Generic connection with zone unchanged
|
||||||
|
"""
|
||||||
|
with pytest.raises(SystemExit):
|
||||||
|
nmcli.main()
|
||||||
|
|
||||||
|
out, err = capfd.readouterr()
|
||||||
|
results = json.loads(out)
|
||||||
|
assert not results.get('failed')
|
||||||
|
assert not results['changed']
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('patch_ansible_module', TESTCASE_CONNECTION, indirect=['patch_ansible_module'])
|
||||||
|
def test_zone_none(mocked_connection_exists, capfd):
|
||||||
|
"""
|
||||||
|
Test if zone param is None
|
||||||
|
"""
|
||||||
|
with pytest.raises(SystemExit):
|
||||||
|
nmcli.main()
|
||||||
|
|
||||||
|
out, err = capfd.readouterr()
|
||||||
|
results = json.loads(out)
|
||||||
|
assert not results.get('failed')
|
||||||
|
assert results['changed']
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('patch_ansible_module', TESTCASE_BRIDGE, indirect=['patch_ansible_module'])
|
@pytest.mark.parametrize('patch_ansible_module', TESTCASE_BRIDGE, indirect=['patch_ansible_module'])
|
||||||
def test_create_bridge(mocked_generic_connection_create, capfd):
|
def test_create_bridge(mocked_generic_connection_create, capfd):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in a new issue