mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
ovirt_host_networks: Fix idempotency (#37075)
This commit is contained in:
parent
0fee332643
commit
99ce712259
1 changed files with 24 additions and 4 deletions
|
@ -283,14 +283,33 @@ def main():
|
||||||
labels = module.params['labels']
|
labels = module.params['labels']
|
||||||
nic_name = bond.get('name') if bond else module.params['interface']
|
nic_name = bond.get('name') if bond else module.params['interface']
|
||||||
|
|
||||||
nics_service = hosts_service.host_service(host.id).nics_service()
|
host_service = hosts_service.host_service(host.id)
|
||||||
|
nics_service = host_service.nics_service()
|
||||||
nic = search_by_name(nics_service, nic_name)
|
nic = search_by_name(nics_service, nic_name)
|
||||||
|
|
||||||
|
network_names = [network['name'] for network in networks]
|
||||||
state = module.params['state']
|
state = module.params['state']
|
||||||
if (
|
if (
|
||||||
state == 'present' and
|
state == 'present' and
|
||||||
(nic is None or host_networks_module.has_update(nics_service.service(nic.id)))
|
(nic is None or host_networks_module.has_update(nics_service.service(nic.id)))
|
||||||
):
|
):
|
||||||
|
# Remove networks which are attached to different interface then user want:
|
||||||
|
attachments_service = host_service.network_attachments_service()
|
||||||
|
remove_network_attachments = [
|
||||||
|
a for a in attachments_service.list()
|
||||||
|
if get_link_name(connection, a.network) in network_names and
|
||||||
|
get_link_name(connection, a.host_nic) != interface
|
||||||
|
]
|
||||||
|
if remove_network_attachments:
|
||||||
|
host_networks_module.action(
|
||||||
|
entity=host,
|
||||||
|
action='setup_networks',
|
||||||
|
post_action=host_networks_module._action_save_configuration,
|
||||||
|
check_connectivity=module.params['check'],
|
||||||
|
removed_network_attachments=remove_network_attachments,
|
||||||
|
)
|
||||||
|
|
||||||
|
# Assign the networks:
|
||||||
host_networks_module.action(
|
host_networks_module.action(
|
||||||
entity=host,
|
entity=host,
|
||||||
action='setup_networks',
|
action='setup_networks',
|
||||||
|
@ -343,7 +362,9 @@ def main():
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
) for network in networks
|
) for network in networks if network['name'] not in [
|
||||||
|
get_link_name(connection, a.network) for a in attachments_service.list()
|
||||||
|
] # Attach only networks which are not yet attached.
|
||||||
] if networks else None,
|
] if networks else None,
|
||||||
)
|
)
|
||||||
elif state == 'absent' and nic:
|
elif state == 'absent' and nic:
|
||||||
|
@ -353,7 +374,6 @@ def main():
|
||||||
attachments = attachments_service.list()
|
attachments = attachments_service.list()
|
||||||
attached_labels = set([str(lbl.id) for lbl in nic_service.network_labels_service().list()])
|
attached_labels = set([str(lbl.id) for lbl in nic_service.network_labels_service().list()])
|
||||||
if networks:
|
if networks:
|
||||||
network_names = [network['name'] for network in networks]
|
|
||||||
attachments = [
|
attachments = [
|
||||||
attachment for attachment in attachments
|
attachment for attachment in attachments
|
||||||
if get_link_name(connection, attachment.network) in network_names
|
if get_link_name(connection, attachment.network) in network_names
|
||||||
|
@ -374,7 +394,7 @@ def main():
|
||||||
] if bond else None,
|
] if bond else None,
|
||||||
removed_labels=[
|
removed_labels=[
|
||||||
otypes.NetworkLabel(id=str(name)) for name in labels
|
otypes.NetworkLabel(id=str(name)) for name in labels
|
||||||
],
|
] if labels else None,
|
||||||
removed_network_attachments=list(attachments),
|
removed_network_attachments=list(attachments),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue