From 29ee7288e1eec3b7415412127859fa301b634495 Mon Sep 17 00:00:00 2001 From: Fahrudin Halilovic <fahrudin.halilovic@ess.eu> Date: Wed, 25 Sep 2024 16:16:36 +0200 Subject: [PATCH] Fixed m2m signal triggering behavior for tag assignments. --- netbox_awx_plugin/signals.py | 43 +++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/netbox_awx_plugin/signals.py b/netbox_awx_plugin/signals.py index bd6bc2c..44a073e 100644 --- a/netbox_awx_plugin/signals.py +++ b/netbox_awx_plugin/signals.py @@ -37,8 +37,11 @@ def process_inventory_task(task_name, sender, instance): enqueue_task(task_name, inventory, sender, instance) -### Signal Handlers for Group-Related Models ### -@receiver(post_save, sender=[Site, DeviceRole, DeviceType, Prefix, Tag]) +@receiver(post_save, sender=Site) +@receiver(post_save, sender=DeviceRole) +@receiver(post_save, sender=DeviceType) +@receiver(post_save, sender=Prefix) +@receiver(post_save, sender=Tag) def handle_group_post_save(sender, instance, **kwargs): """ Handles post-save events for group-related models. @@ -48,7 +51,11 @@ def handle_group_post_save(sender, instance, **kwargs): -@receiver(pre_save, sender=[Site, DeviceRole, DeviceType, Prefix]) +@receiver(pre_save, sender=Site) +@receiver(pre_save, sender=DeviceRole) +@receiver(pre_save, sender=DeviceType) +@receiver(pre_save, sender=Prefix) +@receiver(pre_save, sender=Tag) def handle_group_pre_save(sender, instance, **kwargs): """ Handles pre-save events for group-related models to store the original instance for comparison. @@ -59,15 +66,20 @@ def handle_group_pre_save(sender, instance, **kwargs): -@receiver(post_delete, sender=[Site, DeviceRole, DeviceType, Prefix, Tag]) +@receiver(post_delete, sender=Site) +@receiver(post_delete, sender=DeviceRole) +@receiver(post_delete, sender=DeviceType) +@receiver(post_delete, sender=Prefix) +@receiver(post_delete, sender=Tag) def handle_group_post_delete(sender, instance, **kwargs): """ Handles post-delete events for group-related models to remove AWX groups when objects are deleted. """ process_inventory_task("delete_group", sender, instance) -### Signal Handlers for Device and VirtualMachine ### -@receiver(post_save, sender=[Device, VirtualMachine]) + +@receiver(post_save, sender=Device) +@receiver(post_save, sender=VirtualMachine) def handle_device_post_save(sender, instance, **kwargs): """ Handles post-save events for Devices and Virtual Machines. @@ -93,16 +105,11 @@ def handle_interface_post_save(sender, instance, **kwargs): @receiver(m2m_changed, sender=Device.tags.through) +def handle_device_tag_assignment(sender, instance, action, reverse, model, pk_set, **kwargs): + if isinstance(instance, Device): + process_inventory_task("sync_host", Device, instance) + @receiver(m2m_changed, sender=VirtualMachine.tags.through) -def handle_tag_assignment(sender, instance, action, reverse, model, pk_set, **kwargs): - """ - Handles many-to-many change events (m2m_changed) for Device and VirtualMachine tags. - Associates hosts with AWX groups when tags are assigned. - """ - if action == "post_add": - logger.debug(f"Tags added to {instance}. Syncing host with AWX group.") - process_inventory_task("sync_host", Device if Device.tags.through else VirtualMachine, instance) - if action == "post_remove": - logger.debug(f"Tags removed to {instance}. Syncing host with AWX group.") - process_inventory_task("sync_host", Device if Device.tags.through else VirtualMachine, instance) - \ No newline at end of file +def handle_vm_tag_assignment(sender, instance, action, reverse, model, pk_set, **kwargs): + if isinstance(instance, VirtualMachine): + process_inventory_task("sync_host", VirtualMachine, instance) -- GitLab