Skip to content
Snippets Groups Projects

Fixed m2m signal triggering behavior for tag assignments.

Merged Fahrudin Halilovic requested to merge feature/INFRA-10378-awx-tag-sync into main
1 file
+ 25
18
Compare changes
  • Side-by-side
  • Inline
+ 25
18
@@ -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)
Loading