mirror of
https://github.com/linux-system-roles/network.git
synced 2026-01-23 18:35:13 +00:00
When deactivating a profile in libNM, we should: * Check `NM.ActionConnection` existence * Check `NM.ActionConnection.props.state` not DEACTIVATED * Use signal `state-changed` of `NM.ActionConnection`. * Only invoke `NM.Client.deactivate_connection_async()` if not in DEACTIVATING state. * Ignore `NM.ManagerError.CONNECTIONNOTACTIVE` error. This patch also introduced a new class `NetworkManagerProvider` in `module_utils/network_lsr/nm`: * Independent from Ansible but need to use absolute import due to limitation of ansible 2.8. * Provide sync function wrapping async calls of libNM. * Use stable logging method of python. * Only load this module when provider is nm. This patch also changed how logging is handling in `Cmd_nm.run_action_down()` as initial step on isolate ansible log mechanism from provider module. By moving provider codes to `module_utils` folder, we can eventually simplify the bloated `library/network_connections.py`. Signed-off-by: Gris Ge <fge@redhat.com>
29 lines
1,013 B
Python
29 lines
1,013 B
Python
# SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
import logging
|
|
|
|
# Relative import is not support by ansible 2.8 yet
|
|
# pylint: disable=import-error, no-name-in-module
|
|
from ansible.module_utils.network_lsr.nm.active_connection import ( # noqa:E501
|
|
deactivate_active_connection,
|
|
)
|
|
from ansible.module_utils.network_lsr.nm.client import get_client # noqa:E501
|
|
|
|
# pylint: enable=import-error, no-name-in-module
|
|
|
|
|
|
class NetworkManagerProvider:
|
|
def deactivate_connection(self, connection_name, timeout, check_mode):
|
|
"""
|
|
Return True if changed.
|
|
"""
|
|
nm_client = get_client()
|
|
changed = False
|
|
for nm_ac in nm_client.get_active_connections():
|
|
nm_profile = nm_ac.get_connection()
|
|
if nm_profile and nm_profile.get_id() == connection_name:
|
|
changed |= deactivate_active_connection(nm_ac, timeout, check_mode)
|
|
if not changed:
|
|
logging.info("No active connection for {0}".format(connection_name))
|
|
|
|
return changed
|