14132 fix runscript

This commit is contained in:
Arthur 2023-11-14 09:11:00 -08:00
parent 3dbdd47ada
commit 48ed7cc91d
3 changed files with 11 additions and 7 deletions

View File

@ -282,7 +282,7 @@ class EventRuleForm(NetBoxModelForm):
for module in ScriptModule.objects.all(): for module in ScriptModule.objects.all():
scripts = [] scripts = []
for script_name in module.scripts.keys(): for script_name in module.scripts.keys():
name = f"{str(module.pk)}:{script_name.lower()}" name = f"{str(module.pk)}:{script_name}"
scripts.append((name, script_name)) scripts.append((name, script_name))
if scripts: if scripts:

View File

@ -472,7 +472,7 @@ def get_module_and_script(module_name, script_name):
return module, script return module, script
def run_script(data, request, job, commit=True, **kwargs): def run_script(data, job, request=None, commit=True, **kwargs):
""" """
A wrapper for calling Script.run(). This performs error handling and provides a hook for committing changes. It A wrapper for calling Script.run(). This performs error handling and provides a hook for committing changes. It
exists outside the Script class to ensure it cannot be overridden by a script author. exists outside the Script class to ensure it cannot be overridden by a script author.
@ -486,6 +486,7 @@ def run_script(data, request, job, commit=True, **kwargs):
logger.info(f"Running script (commit={commit})") logger.info(f"Running script (commit={commit})")
# Add files to form data # Add files to form data
if request:
files = request.FILES files = request.FILES
for field_name, fileobj in files.items(): for field_name, fileobj in files.items():
data[field_name] = fileobj data[field_name] = fileobj

View File

@ -10,6 +10,7 @@ from utilities.rqworker import get_workers_for_queue
from extras.conditions import ConditionSet from extras.conditions import ConditionSet
from extras.constants import WEBHOOK_EVENT_TYPES from extras.constants import WEBHOOK_EVENT_TYPES
from extras.models import ScriptModule from extras.models import ScriptModule
from extras.scripts import run_script
from extras.webhooks import generate_signature from extras.webhooks import generate_signature
logger = logging.getLogger('netbox.webhooks_worker') logger = logging.getLogger('netbox.webhooks_worker')
@ -19,13 +20,15 @@ def process_script(event_rule, model_name, event, data, timestamp, username, req
""" """
Run the requested script Run the requested script
""" """
module_name = event_rule.action_object_identifier.split(":")[0] module_id = event_rule.action_object_identifier.split(":")[0]
script_name = event_rule.action_object_identifier.split(":")[1] script_name = event_rule.action_object_identifier.split(":")[1]
try: try:
module = ScriptModule.objects.get(file_path__regex=f"^{module_name}\\.") module = ScriptModule.objects.get(pk=module_id)
except ScriptModule.DoesNotExist: except ScriptModule.DoesNotExist:
return return
# breakpoint()
script = module.scripts[script_name]() script = module.scripts[script_name]()
job = Job.enqueue( job = Job.enqueue(