Skip to content

Commit

Permalink
Fixes #14550: Fix changing event rule action type from webhook to scr…
Browse files Browse the repository at this point in the history
…ipt (#14571)

* Fixes #14550: Fix changing event rule action type from webhook to script

* Remove action_parameters from form; set on instance under save()
  • Loading branch information
jeremystretch authored Dec 22, 2023
1 parent 58f925c commit 00807d1
Showing 1 changed file with 17 additions and 10 deletions.
27 changes: 17 additions & 10 deletions netbox/extras/forms/model_forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -269,8 +269,7 @@ class EventRuleForm(NetBoxModelForm):
(_('Events'), ('type_create', 'type_update', 'type_delete', 'type_job_start', 'type_job_end')),
(_('Conditions'), ('conditions',)),
(_('Action'), (
'action_type', 'action_choice', 'action_parameters', 'action_object_type', 'action_object_id',
'action_data',
'action_type', 'action_choice', 'action_object_type', 'action_object_id', 'action_data',
)),
)

Expand All @@ -279,7 +278,7 @@ class Meta:
fields = (
'content_types', 'name', 'description', 'type_create', 'type_update', 'type_delete', 'type_job_start',
'type_job_end', 'enabled', 'conditions', 'action_type', 'action_object_type', 'action_object_id',
'action_parameters', 'action_data', 'comments', 'tags'
'action_data', 'comments', 'tags'
)
labels = {
'type_create': _('Creations'),
Expand All @@ -293,7 +292,6 @@ class Meta:
'action_type': HTMXSelect(),
'action_object_type': forms.HiddenInput,
'action_object_id': forms.HiddenInput,
'action_parameters': forms.HiddenInput,
}

def init_script_choice(self):
Expand All @@ -307,16 +305,16 @@ def init_script_choice(self):
choices.append((str(module), scripts))
self.fields['action_choice'].choices = choices

if self.instance.pk:
if self.instance.action_type == EventRuleActionChoices.SCRIPT and self.instance.action_parameters:
scriptmodule_id = self.instance.action_object_id
script_name = self.instance.action_parameters.get('script_name')
self.fields['action_choice'].initial = f'{scriptmodule_id}:{script_name}'
print(self.fields['action_choice'].initial)

def init_webhook_choice(self):
initial = None
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'))
if self.instance.action_type == EventRuleActionChoices.WEBHOOK:
webhook_id = get_field_value(self, 'action_object_id')
initial = Webhook.objects.get(pk=webhook_id) if webhook_id else None
self.fields['action_choice'] = DynamicModelChoiceField(
label=_('Webhook'),
queryset=Webhook.objects.all(),
Expand Down Expand Up @@ -353,11 +351,20 @@ def clean(self):
)
module_id, script_name = action_choice.split(":", maxsplit=1)
self.cleaned_data['action_object_id'] = module_id
self.cleaned_data['action_parameters'] = {

return self.cleaned_data

def save(self, *args, **kwargs):
# Set action_parameters on the instance
if self.cleaned_data['action_type'] == EventRuleActionChoices.SCRIPT:
module_id, script_name = self.cleaned_data.get('action_choice').split(":", maxsplit=1)
self.instance.action_parameters = {
'script_name': script_name,
}
else:
self.instance.action_parameters = None

return self.cleaned_data
return super().save(*args, **kwargs)


class TagForm(BootstrapMixin, forms.ModelForm):
Expand Down

0 comments on commit 00807d1

Please sign in to comment.