From 0355a5f4a18e692079acacda87b1f85aa46d35bc Mon Sep 17 00:00:00 2001 From: Niel Mistry Date: Wed, 28 May 2025 21:41:22 +0200 Subject: [PATCH] nmcli: add autoconnect priority and retries (#10134) * Add autoconnect priority and retries * Add changelog fragment * remove trailing whitespace, fix autoconnect_retries typo in doc * Remove defaults, reformatting Co-authored-by: Felix Fontein * remove defaults from everywhere * add new params in bond connection test * Change version_added to 11.0.0 Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com> --------- Co-authored-by: Felix Fontein Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com> --- .../10134-add-autoconnect-options.yml | 2 ++ plugins/modules/nmcli.py | 19 +++++++++++++++++++ tests/unit/plugins/modules/test_nmcli.py | 2 ++ 3 files changed, 23 insertions(+) create mode 100644 changelogs/fragments/10134-add-autoconnect-options.yml diff --git a/changelogs/fragments/10134-add-autoconnect-options.yml b/changelogs/fragments/10134-add-autoconnect-options.yml new file mode 100644 index 0000000000..0ff28c2790 --- /dev/null +++ b/changelogs/fragments/10134-add-autoconnect-options.yml @@ -0,0 +1,2 @@ +minor_changes: + - nmcli - adds ``autoconnect_priority`` and ``autoconnect_retries`` options to support autoconnect logic (https://github.com/ansible-collections/community.general/pull/10134). \ No newline at end of file diff --git a/plugins/modules/nmcli.py b/plugins/modules/nmcli.py index 64d537954d..0275a6c9b1 100644 --- a/plugins/modules/nmcli.py +++ b/plugins/modules/nmcli.py @@ -46,6 +46,16 @@ options: - Whether the connection profile can be automatically activated. type: bool default: true + autoconnect_priority: + description: + - The priority of the connection profile for autoconnect. If set, connection profiles with higher priority will be preferred. + type: int + version_added: 11.0.0 + autoconnect_retries: + description: + - The number of times to retry autoconnecting. + type: int + version_added: 11.0.0 conn_name: description: - The name used to call the connection. Pattern is V([-][-]). @@ -1688,6 +1698,8 @@ class Nmcli(object): self.state = module.params['state'] self.ignore_unsupported_suboptions = module.params['ignore_unsupported_suboptions'] self.autoconnect = module.params['autoconnect'] + self.autoconnect_priority = module.params['autoconnect_priority'] + self.autoconnect_retries = module.params['autoconnect_retries'] self.conn_name = module.params['conn_name'] self.conn_reload = module.params['conn_reload'] self.slave_type = module.params['slave_type'] @@ -1819,6 +1831,8 @@ class Nmcli(object): # Options common to multiple connection types. options = { 'connection.autoconnect': self.autoconnect, + 'connection.autoconnect-priority': self.autoconnect_priority, + 'connection.autoconnect-retries': self.autoconnect_retries, 'connection.zone': self.zone, } @@ -2262,6 +2276,9 @@ class Nmcli(object): '802-11-wireless-security.wep-key-flags', '802-11-wireless.mac-address-blacklist'): return list + elif setting in ('connection.autoconnect-priority', + 'connection.autoconnect-retries'): + return int return str def get_route_params(self, raw_values): @@ -2571,6 +2588,8 @@ def main(): argument_spec=dict( ignore_unsupported_suboptions=dict(type='bool', default=False), autoconnect=dict(type='bool', default=True), + autoconnect_priority=dict(type='int'), + autoconnect_retries=dict(type='int'), state=dict(type='str', required=True, choices=['absent', 'present', 'up', 'down']), conn_name=dict(type='str', required=True), conn_reload=dict(type='bool', default=False), diff --git a/tests/unit/plugins/modules/test_nmcli.py b/tests/unit/plugins/modules/test_nmcli.py index 614c58a842..79f2f2ea1a 100644 --- a/tests/unit/plugins/modules/test_nmcli.py +++ b/tests/unit/plugins/modules/test_nmcli.py @@ -4350,6 +4350,8 @@ def test_bond_connection_unchanged(mocked_generic_connection_diff_check, capfd): argument_spec=dict( ignore_unsupported_suboptions=dict(type='bool', default=False), autoconnect=dict(type='bool', default=True), + autoconnect_priority=dict(type='int'), + autoconnect_retries=dict(type='int'), state=dict(type='str', required=True, choices=['absent', 'present']), conn_name=dict(type='str', required=True), conn_reload=dict(type='bool', required=False, default=False),