From 1cc8a82921e3cd578fd808fb8e9c45496c40ab94 Mon Sep 17 00:00:00 2001 From: Arthur Date: Tue, 31 Oct 2023 07:37:22 -0700 Subject: [PATCH] 14132 model changes --- netbox/extras/choices.py | 15 +++++++++++++++ netbox/extras/constants.py | 10 ++++++++++ netbox/extras/migrations/0099_eventrule.py | 14 +++++++++++++- netbox/extras/models/models.py | 22 ++++++++++++++++++++++ 4 files changed, 60 insertions(+), 1 deletion(-) diff --git a/netbox/extras/choices.py b/netbox/extras/choices.py index 0572a33a1..447747382 100644 --- a/netbox/extras/choices.py +++ b/netbox/extras/choices.py @@ -280,3 +280,18 @@ class DashboardWidgetColorChoices(ChoiceSet): (BLACK, _('Black')), (WHITE, _('White')), ) + + +# +# Event Rules +# + +class EventRuleTypeChoices(ChoiceSet): + + WEBHOOK = 'webhook' + SCRIPT = 'script' + + CHOICES = ( + (WEBHOOK, _('Webhook'), 'webhook'), + (SCRIPT, _('Script'), 'script'), + ) diff --git a/netbox/extras/constants.py b/netbox/extras/constants.py index 48b44fb45..a976baf8c 100644 --- a/netbox/extras/constants.py +++ b/netbox/extras/constants.py @@ -1,3 +1,6 @@ +from django.db.models import Q + + # Events EVENT_CREATE = 'create' EVENT_UPDATE = 'update' @@ -133,3 +136,10 @@ DEFAULT_DASHBOARD = [ } }, ] + +EVENT_TYPE_MODELS = Q( + app_label='extras', + model__in=( + 'webhook', + 'script', + )) diff --git a/netbox/extras/migrations/0099_eventrule.py b/netbox/extras/migrations/0099_eventrule.py index 8be994752..ee8719a57 100644 --- a/netbox/extras/migrations/0099_eventrule.py +++ b/netbox/extras/migrations/0099_eventrule.py @@ -1,6 +1,7 @@ -# Generated by Django 4.2.5 on 2023-10-30 21:57 +# Generated by Django 4.2.5 on 2023-10-31 14:37 from django.db import migrations, models +import django.db.models.deletion import extras.utils import taggit.managers import utilities.json @@ -31,6 +32,8 @@ class Migration(migrations.Migration): ('type_job_end', models.BooleanField(default=False)), ('enabled', models.BooleanField(default=True)), ('conditions', models.JSONField(blank=True, null=True)), + ('event_type', models.CharField(default='webhook', max_length=30)), + ('object_id', models.PositiveBigIntegerField(blank=True, null=True)), ( 'content_types', models.ManyToManyField( @@ -39,6 +42,15 @@ class Migration(migrations.Migration): to='contenttypes.contenttype', ), ), + ( + 'object_type', + models.ForeignKey( + limit_choices_to=models.Q(('app_label', 'extras'), ('model__in', ('webhook', 'script'))), + on_delete=django.db.models.deletion.CASCADE, + related_name='eventrule_actions', + to='contenttypes.contenttype', + ), + ), ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), ], options={ diff --git a/netbox/extras/models/models.py b/netbox/extras/models/models.py index be37e7d02..cf961044a 100644 --- a/netbox/extras/models/models.py +++ b/netbox/extras/models/models.py @@ -93,6 +93,28 @@ class EventRule(CustomFieldsMixin, ExportTemplatesMixin, TagsMixin, ChangeLogged help_text=_("A set of conditions which determine whether the event will be generated.") ) + event_type = models.CharField( + max_length=30, + choices=EventRuleTypeChoices, + default=EventRuleTypeChoices.WEBHOOK, + verbose_name=_('event type') + ) + # Action to take + object_type = models.ForeignKey( + to=ContentType, + related_name='eventrule_actions', + limit_choices_to=EVENT_TYPE_MODELS, + on_delete=models.CASCADE, + ) + object_id = models.PositiveBigIntegerField( + blank=True, + null=True + ) + object = GenericForeignKey( + ct_field='object_type', + fk_field='object_id', + ) + class Meta: ordering = ('name',) verbose_name = _('eventrule')