diff --git a/netbox/dcim/api/serializers.py b/netbox/dcim/api/serializers.py index 3c4021e72..83e0fb271 100644 --- a/netbox/dcim/api/serializers.py +++ b/netbox/dcim/api/serializers.py @@ -123,7 +123,7 @@ class SiteSerializer(PrimaryModelSerializer): class Meta: model = Site fields = [ - 'id', 'url', 'display', 'name', 'slug', 'status', 'region', 'group', 'tenant', 'facility', 'asns', + 'id', 'url', 'display', 'name', 'slug', 'status', 'region', 'group', 'tenant', 'facility', 'asn', 'asns', 'time_zone', 'description', 'physical_address', 'shipping_address', 'latitude', 'longitude', 'contact_name', 'contact_phone', 'contact_email', 'comments', 'tags', 'custom_fields', 'created', 'last_updated', 'asn_count', 'circuit_count', 'device_count', 'prefix_count', 'rack_count', 'virtualmachine_count', diff --git a/netbox/dcim/filtersets.py b/netbox/dcim/filtersets.py index 82396b64b..0142b36c6 100644 --- a/netbox/dcim/filtersets.py +++ b/netbox/dcim/filtersets.py @@ -163,6 +163,7 @@ class SiteFilterSet(PrimaryModelFilterSet, TenancyFilterSet): Q(comments__icontains=value) ) try: + qs_filter |= Q(asn=int(value.strip())) qs_filter |= Q(asns=int(value.strip())) except ValueError: pass diff --git a/netbox/dcim/forms/models.py b/netbox/dcim/forms/models.py index 9703c4cac..805788c04 100644 --- a/netbox/dcim/forms/models.py +++ b/netbox/dcim/forms/models.py @@ -122,13 +122,14 @@ class SiteForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): class Meta: model = Site fields = [ - 'name', 'slug', 'status', 'region', 'group', 'tenant_group', 'tenant', 'facility', 'asns', 'time_zone', - 'description', 'physical_address', 'shipping_address', 'latitude', 'longitude', 'contact_name', + 'name', 'slug', 'status', 'region', 'group', 'tenant_group', 'tenant', 'facility', 'asn', 'asns', + 'time_zone', 'description', 'physical_address', 'shipping_address', 'latitude', 'longitude', 'contact_name', 'contact_phone', 'contact_email', 'comments', 'tags', ] fieldsets = ( ('Site', ( - 'name', 'slug', 'status', 'region', 'group', 'facility', 'asns', 'time_zone', 'description', 'tags', + 'name', 'slug', 'status', 'region', 'group', 'facility', 'asn', 'asns', 'time_zone', 'description', + 'tags', )), ('Tenancy', ('tenant_group', 'tenant')), ('Contact Info', ( @@ -152,6 +153,7 @@ class SiteForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): } help_texts = { 'name': "Full name of the site", + 'asn': "BGP autonomous system number. This field is depreciated in favour of the many-to-many field for ASNs", 'facility': "Data center provider and facility (e.g. Equinix NY7)", 'time_zone': "Local time zone", 'description': "Short description (will appear in sites list)", @@ -161,6 +163,18 @@ class SiteForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): 'longitude': "Longitude in decimal format (xx.yyyyyy)" } + def __init__(self, instance, *args, **kwargs): + super(SiteForm, self).__init__(instance=instance, *args, **kwargs) + if instance is None or (instance and (instance.asn is None or instance.asn == '')): + site_fieldset = list(self.Meta.fieldsets[0][1]) + site_fieldset.pop(6) + self.Meta.fieldsets = ( + ('Site', tuple(site_fieldset)), + self.Meta.fieldsets[1], + self.Meta.fieldsets[2], + ) + del self.fields['asn'] + class LocationForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): region = DynamicModelChoiceField( diff --git a/netbox/dcim/migrations/0138_remove_site_asn.py b/netbox/dcim/migrations/0138_remove_site_asn.py deleted file mode 100644 index a4100ea14..000000000 --- a/netbox/dcim/migrations/0138_remove_site_asn.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.8 on 2021-10-25 04:33 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0137_relax_uniqueness_constraints'), - ('ipam', '0051_asn_model') - ] - - operations = [ - migrations.RemoveField( - model_name='site', - name='asn', - ), - ] diff --git a/netbox/dcim/models/sites.py b/netbox/dcim/models/sites.py index a093a4d84..ab9d8e82d 100644 --- a/netbox/dcim/models/sites.py +++ b/netbox/dcim/models/sites.py @@ -189,6 +189,12 @@ class Site(PrimaryModel): blank=True, help_text='Local facility ID or description' ) + asn = ASNField( + blank=True, + null=True, + verbose_name='ASN', + help_text='32-bit autonomous system number' + ) time_zone = TimeZoneField( blank=True ) @@ -251,7 +257,7 @@ class Site(PrimaryModel): objects = RestrictedQuerySet.as_manager() clone_fields = [ - 'status', 'region', 'group', 'tenant', 'facility', 'time_zone', 'description', 'physical_address', + 'status', 'region', 'group', 'tenant', 'facility', 'asn', 'time_zone', 'description', 'physical_address', 'shipping_address', 'latitude', 'longitude', 'contact_name', 'contact_phone', 'contact_email', ] diff --git a/netbox/templates/dcim/site.html b/netbox/templates/dcim/site.html index 55cc57b50..260412815 100644 --- a/netbox/templates/dcim/site.html +++ b/netbox/templates/dcim/site.html @@ -80,6 +80,10 @@ Description {{ object.description|placeholder }} + + AS Number + {{ object.asn|placeholder }} + Time Zone