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