Skip to content

Commit ae48116

Browse files
committed
Added optional tenant field to ScriptInstance
1 parent 468a614 commit ae48116

File tree

7 files changed

+86
-3
lines changed

7 files changed

+86
-3
lines changed

netbox_script_manager/api/serializers.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from netbox.api.serializers import NetBoxModelSerializer
55
from netbox.config import get_config
66
from rest_framework import serializers
7+
from tenancy.api.nested_serializers import NestedTenantSerializer
78
from utilities.templatetags.builtins.filters import render_markdown
89

910
from netbox_script_manager.models import ScriptArtifact, ScriptExecution, ScriptInstance, ScriptLogLine
@@ -30,6 +31,7 @@ def to_representation(self, value):
3031
class ScriptInstanceSerializer(NetBoxModelSerializer):
3132
url = serializers.HyperlinkedIdentityField(view_name="plugins-api:netbox_script_manager-api:scriptinstance-detail")
3233
name = serializers.CharField(required=True)
34+
tenant = NestedTenantSerializer(required=False, allow_null=True)
3335

3436
class Meta:
3537
read_only_fields = ["module_path", "class_name"]
@@ -44,6 +46,7 @@ class Meta:
4446
"class_name",
4547
"display",
4648
"task_queues",
49+
"tenant",
4750
"tags",
4851
"created",
4952
"last_updated",

netbox_script_manager/filtersets.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,25 @@
11
import django_filters
22
from django.db.models import Q
3+
from django.utils.translation import gettext as _
34
from netbox.filtersets import BaseFilterSet, NetBoxModelFilterSet
5+
from tenancy.models import Tenant
46

57
from .choices import LogLevelChoices, ScriptExecutionStatusChoices
68
from .models import ScriptArtifact, ScriptExecution, ScriptInstance, ScriptLogLine
79

810

911
class ScriptInstanceFilterSet(NetBoxModelFilterSet):
12+
tenant_id = django_filters.ModelMultipleChoiceFilter(
13+
queryset=Tenant.objects.all(),
14+
label=_("Tenant (ID)"),
15+
)
16+
tenant = django_filters.ModelMultipleChoiceFilter(
17+
queryset=Tenant.objects.all(),
18+
field_name="tenant__slug",
19+
to_field_name="slug",
20+
label=_("Tenant (slug)"),
21+
)
22+
1023
class Meta:
1124
model = ScriptInstance
1225
fields = ["name", "description", "group", "weight"]

netbox_script_manager/forms.py

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44
from extras.choices import DurationChoices
55
from extras.forms.mixins import SavedFiltersMixin
66
from netbox.forms import NetBoxModelFilterSetForm, NetBoxModelForm
7+
from tenancy.models import Tenant
78
from utilities.forms import BootstrapMixin, FilterForm
8-
from utilities.forms.fields import DynamicModelMultipleChoiceField, TagFilterField
9+
from utilities.forms.fields import DynamicModelChoiceField, DynamicModelMultipleChoiceField, TagFilterField
910
from utilities.forms.widgets import APISelectMultiple, DateTimePicker, NumberWithOptions
1011
from utilities.utils import local_now
1112

@@ -14,9 +15,18 @@
1415

1516

1617
class ScriptInstanceForm(NetBoxModelForm):
18+
tenant = DynamicModelChoiceField(
19+
label=_("Tenant"),
20+
queryset=Tenant.objects.all(),
21+
required=False,
22+
query_params={
23+
"group_id": "$tenant_group",
24+
},
25+
)
26+
1727
class Meta:
1828
model = ScriptInstance
19-
fields = ("name", "group", "weight", "description", "task_queues", "comments", "tags")
29+
fields = ("name", "group", "weight", "description", "task_queues", "comments", "tenant", "tags")
2030

2131
widgets = {
2232
"description": forms.Textarea(attrs={"rows": 3}),
@@ -28,6 +38,13 @@ class ScriptInstanceFilterForm(NetBoxModelFilterSetForm):
2838
name = forms.CharField(required=False)
2939
group = forms.CharField(required=False)
3040
tag = TagFilterField(model)
41+
tenant_id = DynamicModelMultipleChoiceField(
42+
queryset=Tenant.objects.all(),
43+
required=False,
44+
null_option="None",
45+
query_params={"group_id": "$tenant_group_id"},
46+
label=_("Tenant"),
47+
)
3148

3249

3350
class ScriptExecutionFilterForm(SavedFiltersMixin, FilterForm):
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Generated by Django 4.2.4 on 2023-10-09 05:36
2+
3+
from django.db import migrations, models
4+
import django.db.models.deletion
5+
6+
7+
class Migration(migrations.Migration):
8+
dependencies = [
9+
("tenancy", "0011_contactassignment_tags"),
10+
("netbox_script_manager", "0002_scriptexecution_last_updated"),
11+
]
12+
13+
operations = [
14+
migrations.AddField(
15+
model_name="scriptinstance",
16+
name="tenant",
17+
field=models.ForeignKey(
18+
blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="+", to="tenancy.tenant"
19+
),
20+
),
21+
]

netbox_script_manager/models.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,13 @@ class ScriptInstance(PrimaryModel):
207207
default=list,
208208
help_text="Comma separated list of available task queues for the script",
209209
)
210+
tenant = models.ForeignKey(
211+
to="tenancy.Tenant",
212+
on_delete=models.SET_NULL,
213+
related_name="+",
214+
blank=True,
215+
null=True,
216+
)
210217

211218
@cached_property
212219
def script(self):

netbox_script_manager/tables.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import django_tables2 as tables
2+
from django.utils.translation import gettext_lazy as _
23
from django_tables2.tables import Accessor
34
from netbox.tables import NetBoxTable, columns
5+
from tenancy.tables.columns import TenantColumn
46

57
from .models import ScriptArtifact, ScriptExecution, ScriptInstance, ScriptLogLine
68

@@ -9,6 +11,9 @@ class ScriptInstanceTable(NetBoxTable):
911
name = tables.Column(linkify=True)
1012
group = tables.Column(order_by=("group", "weight", "name"))
1113
tags = columns.TagColumn(url_name="plugins:netbox_script_manager:scriptinstance_list")
14+
tenant = TenantColumn(
15+
verbose_name=_("Tenant"),
16+
)
1217

1318
class Meta(NetBoxTable.Meta):
1419
model = ScriptInstance

netbox_script_manager/templates/netbox_script_manager/scriptinstance.html

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,24 @@ <h5 class="card-header">Script Instance</h5>
7878
</tr>
7979
<tr>
8080
<th scope="row">Description</th>
81-
<td>{{ object.description }}</td>
81+
<td>{{ object.description|placeholder }}</td>
82+
</tr>
83+
<tr>
84+
<th scope="row">Weight</th>
85+
<td>{{ object.weight|placeholder }}</td>
86+
</tr>
87+
<tr>
88+
<th scope="row">Group</th>
89+
<td>{{ object.Group|placeholder }}</td>
90+
</tr>
91+
<tr>
92+
<th scope="row">Tenant</th>
93+
<td>
94+
{% if object.tenant.group %}
95+
{{ object.tenant.group|linkify }} /
96+
{% endif %}
97+
{{ object.tenant|linkify|placeholder }}
98+
</td>
8299
</tr>
83100
</table>
84101
</div>

0 commit comments

Comments
 (0)