mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
Closes #7681: Add service_id field for provider networks
This commit is contained in:
@ -2,4 +2,4 @@
|
|||||||
|
|
||||||
This model can be used to represent the boundary of a provider network, the details of which are unknown or unimportant to the NetBox user. For example, it might represent a provider's regional MPLS network to which multiple circuits provide connectivity.
|
This model can be used to represent the boundary of a provider network, the details of which are unknown or unimportant to the NetBox user. For example, it might represent a provider's regional MPLS network to which multiple circuits provide connectivity.
|
||||||
|
|
||||||
Each provider network must be assigned to a provider. A circuit may terminate to either a provider network or to a site.
|
Each provider network must be assigned to a provider, and may optionally be assigned an arbitrary service ID. A circuit may terminate to either a provider network or to a site.
|
||||||
|
@ -41,6 +41,7 @@ FIELD_CHOICES = {
|
|||||||
### Enhancements
|
### Enhancements
|
||||||
|
|
||||||
* [#7650](https://github.com/netbox-community/netbox/issues/7650) - Add support for local account password validation
|
* [#7650](https://github.com/netbox-community/netbox/issues/7650) - Add support for local account password validation
|
||||||
|
* [#7681](https://github.com/netbox-community/netbox/issues/7681) - Add `service_id` field for provider networks
|
||||||
* [#7759](https://github.com/netbox-community/netbox/issues/7759) - Improved the user preferences form
|
* [#7759](https://github.com/netbox-community/netbox/issues/7759) - Improved the user preferences form
|
||||||
* [#8168](https://github.com/netbox-community/netbox/issues/8168) - Add `min_vid` and `max_vid` fields to VLAN group
|
* [#8168](https://github.com/netbox-community/netbox/issues/8168) - Add `min_vid` and `max_vid` fields to VLAN group
|
||||||
|
|
||||||
@ -58,6 +59,8 @@ FIELD_CHOICES = {
|
|||||||
* `/api/dcim/module-bays/`
|
* `/api/dcim/module-bays/`
|
||||||
* `/api/dcim/module-bay-templates/`
|
* `/api/dcim/module-bay-templates/`
|
||||||
* `/api/dcim/module-types/`
|
* `/api/dcim/module-types/`
|
||||||
|
* circuits.ProviderNetwork
|
||||||
|
* Added `service_id` field
|
||||||
* dcim.ConsolePort
|
* dcim.ConsolePort
|
||||||
* Added `module` field
|
* Added `module` field
|
||||||
* dcim.ConsoleServerPort
|
* dcim.ConsoleServerPort
|
||||||
|
@ -37,8 +37,8 @@ class ProviderNetworkSerializer(PrimaryModelSerializer):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = ProviderNetwork
|
model = ProviderNetwork
|
||||||
fields = [
|
fields = [
|
||||||
'id', 'url', 'display', 'provider', 'name', 'description', 'comments', 'tags', 'custom_fields', 'created',
|
'id', 'url', 'display', 'provider', 'name', 'service_id', 'description', 'comments', 'tags',
|
||||||
'last_updated',
|
'custom_fields', 'created', 'last_updated',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -98,13 +98,14 @@ class ProviderNetworkFilterSet(PrimaryModelFilterSet):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = ProviderNetwork
|
model = ProviderNetwork
|
||||||
fields = ['id', 'name']
|
fields = ['id', 'name', 'service_id']
|
||||||
|
|
||||||
def search(self, queryset, name, value):
|
def search(self, queryset, name, value):
|
||||||
if not value.strip():
|
if not value.strip():
|
||||||
return queryset
|
return queryset
|
||||||
return queryset.filter(
|
return queryset.filter(
|
||||||
Q(name__icontains=value) |
|
Q(name__icontains=value) |
|
||||||
|
Q(service_id__icontains=value) |
|
||||||
Q(description__icontains=value) |
|
Q(description__icontains=value) |
|
||||||
Q(comments__icontains=value)
|
Q(comments__icontains=value)
|
||||||
).distinct()
|
).distinct()
|
||||||
|
@ -62,10 +62,14 @@ class ProviderNetworkBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditFor
|
|||||||
queryset=Provider.objects.all(),
|
queryset=Provider.objects.all(),
|
||||||
required=False
|
required=False
|
||||||
)
|
)
|
||||||
description = forms.CharField(
|
service_id = forms.CharField(
|
||||||
max_length=100,
|
max_length=100,
|
||||||
required=False
|
required=False
|
||||||
)
|
)
|
||||||
|
description = forms.CharField(
|
||||||
|
max_length=200,
|
||||||
|
required=False
|
||||||
|
)
|
||||||
comments = CommentField(
|
comments = CommentField(
|
||||||
widget=SmallTextarea,
|
widget=SmallTextarea,
|
||||||
label='Comments'
|
label='Comments'
|
||||||
@ -73,7 +77,7 @@ class ProviderNetworkBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditFor
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
nullable_fields = [
|
nullable_fields = [
|
||||||
'description', 'comments',
|
'service_id', 'description', 'comments',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ class ProviderNetworkCSVForm(CustomFieldModelCSVForm):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = ProviderNetwork
|
model = ProviderNetwork
|
||||||
fields = [
|
fields = [
|
||||||
'provider', 'name', 'description', 'comments',
|
'provider', 'name', 'service_id', 'description', 'comments',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -64,6 +64,10 @@ class ProviderNetworkFilterForm(CustomFieldModelFilterForm):
|
|||||||
label=_('Provider'),
|
label=_('Provider'),
|
||||||
fetch_trigger='open'
|
fetch_trigger='open'
|
||||||
)
|
)
|
||||||
|
service_id = forms.CharField(
|
||||||
|
max_length=100,
|
||||||
|
required=False
|
||||||
|
)
|
||||||
tag = TagFilterField(model)
|
tag = TagFilterField(model)
|
||||||
|
|
||||||
|
|
||||||
|
@ -66,10 +66,10 @@ class ProviderNetworkForm(CustomFieldModelForm):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = ProviderNetwork
|
model = ProviderNetwork
|
||||||
fields = [
|
fields = [
|
||||||
'provider', 'name', 'description', 'comments', 'tags',
|
'provider', 'name', 'service_id', 'description', 'comments', 'tags',
|
||||||
]
|
]
|
||||||
fieldsets = (
|
fieldsets = (
|
||||||
('Provider Network', ('provider', 'name', 'description', 'tags')),
|
('Provider Network', ('provider', 'name', 'service_id', 'description', 'tags')),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
16
netbox/circuits/migrations/0032_provider_service_id.py
Normal file
16
netbox/circuits/migrations/0032_provider_service_id.py
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('circuits', '0004_rename_cable_peer'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='providernetwork',
|
||||||
|
name='service_id',
|
||||||
|
field=models.CharField(blank=True, max_length=100),
|
||||||
|
),
|
||||||
|
]
|
@ -5,7 +5,6 @@ from django.urls import reverse
|
|||||||
from dcim.fields import ASNField
|
from dcim.fields import ASNField
|
||||||
from extras.utils import extras_features
|
from extras.utils import extras_features
|
||||||
from netbox.models import PrimaryModel
|
from netbox.models import PrimaryModel
|
||||||
from utilities.querysets import RestrictedQuerySet
|
|
||||||
|
|
||||||
__all__ = (
|
__all__ = (
|
||||||
'ProviderNetwork',
|
'ProviderNetwork',
|
||||||
@ -87,6 +86,11 @@ class ProviderNetwork(PrimaryModel):
|
|||||||
on_delete=models.PROTECT,
|
on_delete=models.PROTECT,
|
||||||
related_name='networks'
|
related_name='networks'
|
||||||
)
|
)
|
||||||
|
service_id = models.CharField(
|
||||||
|
max_length=100,
|
||||||
|
blank=True,
|
||||||
|
verbose_name='Service ID'
|
||||||
|
)
|
||||||
description = models.CharField(
|
description = models.CharField(
|
||||||
max_length=200,
|
max_length=200,
|
||||||
blank=True
|
blank=True
|
||||||
|
@ -69,8 +69,8 @@ class ProviderNetworkTable(BaseTable):
|
|||||||
|
|
||||||
class Meta(BaseTable.Meta):
|
class Meta(BaseTable.Meta):
|
||||||
model = ProviderNetwork
|
model = ProviderNetwork
|
||||||
fields = ('pk', 'id', 'name', 'provider', 'description', 'comments', 'tags')
|
fields = ('pk', 'id', 'name', 'provider', 'service_id', 'description', 'comments', 'tags')
|
||||||
default_columns = ('pk', 'name', 'provider', 'description')
|
default_columns = ('pk', 'name', 'provider', 'service_id', 'description')
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -28,6 +28,10 @@
|
|||||||
<th scope="row">Name</th>
|
<th scope="row">Name</th>
|
||||||
<td>{{ object.name }}</td>
|
<td>{{ object.name }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th scope="row">Service ID</th>
|
||||||
|
<td>{{ object.service_id|placeholder }}</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row">Description</th>
|
<th scope="row">Description</th>
|
||||||
<td>{{ object.description|placeholder }}</td>
|
<td>{{ object.description|placeholder }}</td>
|
||||||
|
Reference in New Issue
Block a user