14438 script job run

This commit is contained in:
Arthur 2024-02-06 10:23:51 -08:00
parent 5981fc958d
commit 9543169025
3 changed files with 6 additions and 9 deletions

View File

@ -16,7 +16,7 @@ from core.choices import JobStatusChoices
from core.models import Job from core.models import Job
from extras.api.serializers import ScriptOutputSerializer from extras.api.serializers import ScriptOutputSerializer
from extras.choices import LogLevelChoices from extras.choices import LogLevelChoices
from extras.models import ScriptModule from extras.models import ScriptModule, Script as ScriptModel
from extras.signals import clear_events from extras.signals import clear_events
from ipam.formfields import IPAddressFormField, IPNetworkFormField from ipam.formfields import IPAddressFormField, IPNetworkFormField
from ipam.validators import MaxPrefixLengthValidator, MinPrefixLengthValidator, prefix_validator from ipam.validators import MaxPrefixLengthValidator, MinPrefixLengthValidator, prefix_validator
@ -485,8 +485,7 @@ def run_script(data, job, request=None, commit=True, **kwargs):
""" """
job.start() job.start()
module = ScriptModule.objects.get(pk=job.object_id) script = ScriptModel.objects.get(pk=job.object_id).python_class()
script = module.scripts.get(job.name)()
logger = logging.getLogger(f"netbox.scripts.{script.full_name}") logger = logging.getLogger(f"netbox.scripts.{script.full_name}")
logger.info(f"Running script (commit={commit})") logger.info(f"Running script (commit={commit})")

View File

@ -1252,7 +1252,6 @@ class ScriptView(ContentTypePermissionRequiredMixin, View):
# Allow execution only if RQ worker process is running # Allow execution only if RQ worker process is running
if not get_workers_for_queue('default'): if not get_workers_for_queue('default'):
messages.error(request, "Unable to run script: RQ worker process not running.") messages.error(request, "Unable to run script: RQ worker process not running.")
elif form.is_valid(): elif form.is_valid():
job = Job.enqueue( job = Job.enqueue(
run_script, run_script,
@ -1263,7 +1262,7 @@ class ScriptView(ContentTypePermissionRequiredMixin, View):
interval=form.cleaned_data.pop('_interval'), interval=form.cleaned_data.pop('_interval'),
data=form.cleaned_data, data=form.cleaned_data,
request=copy_safe_request(request), request=copy_safe_request(request),
job_timeout=script.job_timeout, job_timeout=script.python_class.job_timeout,
commit=form.cleaned_data.pop('_commit') commit=form.cleaned_data.pop('_commit')
) )
@ -1329,11 +1328,10 @@ class ScriptResultView(ContentTypePermissionRequiredMixin, View):
return 'extras.view_script' return 'extras.view_script'
def get(self, request, job_pk): def get(self, request, job_pk):
object_type = ContentType.objects.get_by_natural_key(app_label='extras', model='scriptmodule') object_type = ContentType.objects.get_by_natural_key(app_label='extras', model='script')
job = get_object_or_404(Job.objects.all(), pk=job_pk, object_type=object_type) job = get_object_or_404(Job.objects.all(), pk=job_pk, object_type=object_type)
module = job.object script = job.object
script = module.scripts[job.name]()
# If this is an HTMX request, return only the result HTML # If this is an HTMX request, return only the result HTML
if request.htmx: if request.htmx:

View File

@ -16,7 +16,7 @@
<ol class="breadcrumb"> <ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'extras:script_list' %}">{% trans "Scripts" %}</a></li> <li class="breadcrumb-item"><a href="{% url 'extras:script_list' %}">{% trans "Scripts" %}</a></li>
<li class="breadcrumb-item"><a href="{% url 'extras:script_list' %}#module.{{ script.module }}">{{ script.module|bettertitle }}</a></li> <li class="breadcrumb-item"><a href="{% url 'extras:script_list' %}#module.{{ script.module }}">{{ script.module|bettertitle }}</a></li>
<li class="breadcrumb-item"><a href="{% url 'extras:script' module=script.module name=script.class_name %}">{{ script }}</a></li> <li class="breadcrumb-item"><a href="{% url 'extras:script' script.id %}">{{ script }}</a></li>
<li class="breadcrumb-item">{{ job.created|annotated_date }}</li> <li class="breadcrumb-item">{{ job.created|annotated_date }}</li>
</ol> </ol>
</nav> </nav>