diff --git a/netbox/dcim/filters.py b/netbox/dcim/filters.py index 63091c2a8..1162f66a5 100644 --- a/netbox/dcim/filters.py +++ b/netbox/dcim/filters.py @@ -558,6 +558,9 @@ class DeviceComponentFilterSet(django_filters.FilterSet): to_field_name='name', label='Device (name)', ) + tag = django_filters.CharFilter( + name='tags__slug', + ) class ConsolePortFilter(DeviceComponentFilterSet): @@ -616,6 +619,9 @@ class InterfaceFilter(django_filters.FilterSet): method='_mac_address', label='MAC address', ) + tag = django_filters.CharFilter( + name='tags__slug', + ) class Meta: model = Interface @@ -722,6 +728,9 @@ class VirtualChassisFilter(django_filters.FilterSet): to_field_name='slug', label='Tenant (slug)', ) + tag = django_filters.CharFilter( + name='tags__slug', + ) class Meta: model = VirtualChassis diff --git a/netbox/ipam/filters.py b/netbox/ipam/filters.py index 88463b336..0a8606e52 100644 --- a/netbox/ipam/filters.py +++ b/netbox/ipam/filters.py @@ -466,6 +466,9 @@ class ServiceFilter(django_filters.FilterSet): to_field_name='name', label='Virtual machine (name)', ) + tag = django_filters.CharFilter( + name='tags__slug', + ) class Meta: model = Service diff --git a/netbox/ipam/forms.py b/netbox/ipam/forms.py index 8a2f815ad..8209b2ffa 100644 --- a/netbox/ipam/forms.py +++ b/netbox/ipam/forms.py @@ -918,10 +918,11 @@ class VLANFilterForm(BootstrapMixin, CustomFieldFilterForm): # class ServiceForm(BootstrapMixin, CustomFieldForm): + tags = TagField(required=False) class Meta: model = Service - fields = ['name', 'protocol', 'port', 'ipaddresses', 'description'] + fields = ['name', 'protocol', 'port', 'ipaddresses', 'description', 'tags'] help_texts = { 'ipaddresses': "IP address assignment is optional. If no IPs are selected, the service is assumed to be " "reachable via all IPs assigned to the device.", diff --git a/netbox/ipam/models.py b/netbox/ipam/models.py index e1bd93f97..242acf184 100644 --- a/netbox/ipam/models.py +++ b/netbox/ipam/models.py @@ -877,6 +877,8 @@ class Service(ChangeLoggedModel, CustomFieldModel): object_id_field='obj_id' ) + tags = TaggableManager() + serializer = 'ipam.api.serializers.ServiceSerializer' class Meta: diff --git a/netbox/templates/dcim/interface_edit.html b/netbox/templates/dcim/interface_edit.html index 0e212cf3e..6423c61c2 100644 --- a/netbox/templates/dcim/interface_edit.html +++ b/netbox/templates/dcim/interface_edit.html @@ -16,6 +16,12 @@ {% render_field form.mode %} +
+
Tags
+
+ {% render_field form.tags %} +
+
{% if obj.mode %}
802.1Q VLANs
diff --git a/netbox/templates/dcim/virtualchassis_list.html b/netbox/templates/dcim/virtualchassis_list.html index e8d4f3366..756bc5f28 100644 --- a/netbox/templates/dcim/virtualchassis_list.html +++ b/netbox/templates/dcim/virtualchassis_list.html @@ -9,6 +9,7 @@
{% include 'inc/search_panel.html' %} + {% include 'inc/tags_panel.html' %}
{% endblock %} diff --git a/netbox/templates/ipam/service_edit.html b/netbox/templates/ipam/service_edit.html index b3cf5571a..521aec137 100644 --- a/netbox/templates/ipam/service_edit.html +++ b/netbox/templates/ipam/service_edit.html @@ -40,4 +40,10 @@ {% endif %} +
+
Tags
+
+ {% render_field form.tags %} +
+
{% endblock %} diff --git a/netbox/templates/ipam/service_list.html b/netbox/templates/ipam/service_list.html index c78b2bba2..5cfc3e12d 100644 --- a/netbox/templates/ipam/service_list.html +++ b/netbox/templates/ipam/service_list.html @@ -8,6 +8,7 @@
{% include 'inc/search_panel.html' %} + {% include 'inc/tags_panel.html' %}
{% endblock %}