1
0
Fork 0
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:
Ondra Machacek 2018-03-07 16:25:32 +01:00 committed by ansibot
parent 0fee332643
commit 99ce712259

View file

@ -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),
) )