From 3dbdd47ada2983b1b06303597df9def8fe7dcb74 Mon Sep 17 00:00:00 2001 From: Arthur Date: Mon, 13 Nov 2023 15:53:00 -0800 Subject: [PATCH] 14132 script run fixup --- netbox/extras/events_worker.py | 2 +- netbox/extras/forms/model_forms.py | 2 +- netbox/extras/scripts_worker.py | 31 ++++++++++++++++++++++++------ 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/netbox/extras/events_worker.py b/netbox/extras/events_worker.py index 2b6adc17d..0f664167a 100644 --- a/netbox/extras/events_worker.py +++ b/netbox/extras/events_worker.py @@ -45,7 +45,7 @@ def module_member(name): def process_event_rules(event_rule, model_name, event, data, timestamp, username, request_id, snapshots): if event_rule.action_type == EventRuleActionChoices.WEBHOOK: process_webhook(event_rule, model_name, event, data, timestamp, username, request_id, snapshots) - elif event_rule.action_type == EventRuleActionChoicesEventRuleTypeChoices.SCRIPT: + elif event_rule.action_type == EventRuleActionChoices.SCRIPT: process_script(event_rule, model_name, event, data, timestamp, username, request_id, snapshots) diff --git a/netbox/extras/forms/model_forms.py b/netbox/extras/forms/model_forms.py index 9fc51d98b..b04e9042e 100644 --- a/netbox/extras/forms/model_forms.py +++ b/netbox/extras/forms/model_forms.py @@ -293,7 +293,7 @@ class EventRuleForm(NetBoxModelForm): def get_webhook_choices(self): initial = None - if self.fields['action_object_type'] and self.fields['action_object_id']: + if self.fields['action_object_type'] and get_field_value(self, 'action_object_id'): initial = Webhook.objects.get(pk=get_field_value(self, 'action_object_id')) self.fields['action_choice'] = DynamicModelChoiceField( label=_('Webhook'), diff --git a/netbox/extras/scripts_worker.py b/netbox/extras/scripts_worker.py index 39454dfb4..decc0263e 100644 --- a/netbox/extras/scripts_worker.py +++ b/netbox/extras/scripts_worker.py @@ -1,20 +1,39 @@ import logging import requests +from core.models import Job from django.conf import settings from django_rq import job from jinja2.exceptions import TemplateError +from utilities.rqworker import get_workers_for_queue -from .conditions import ConditionSet -from .constants import WEBHOOK_EVENT_TYPES -from .webhooks import generate_signature +from extras.conditions import ConditionSet +from extras.constants import WEBHOOK_EVENT_TYPES +from extras.models import ScriptModule +from extras.webhooks import generate_signature logger = logging.getLogger('netbox.webhooks_worker') -def process_script(webhook, model_name, event, data, timestamp, username, request_id=None, snapshots=None): +def process_script(event_rule, model_name, event, data, timestamp, username, request_id=None, snapshots=None): """ - Make a POST request to the defined Webhook + Run the requested script """ + module_name = event_rule.action_object_identifier.split(":")[0] + script_name = event_rule.action_object_identifier.split(":")[1] + try: + module = ScriptModule.objects.get(file_path__regex=f"^{module_name}\\.") + except ScriptModule.DoesNotExist: + return - pass + script = module.scripts[script_name]() + + job = Job.enqueue( + run_script, + instance=module, + name=script.class_name, + user=None, + schedule_at=None, + interval=None, + data=event_rule.parameters, + )