diff --git a/docs/release-notes/version-2.10.md b/docs/release-notes/version-2.10.md index f8288cd6a..e5734ea8e 100644 --- a/docs/release-notes/version-2.10.md +++ b/docs/release-notes/version-2.10.md @@ -60,6 +60,7 @@ All end-to-end cable paths are now cached using the new CablePath model. This al * [#4360](https://github.com/netbox-community/netbox/issues/4360) - Remove support for the Django template language from export templates * [#4878](https://github.com/netbox-community/netbox/issues/4878) - Custom field data is now stored directly on each object * [#4941](https://github.com/netbox-community/netbox/issues/4941) - `commit` argument is now required argument in a custom script's `run()` method +* [#5011](https://github.com/netbox-community/netbox/issues/5011) - Standardized name field lengths across all models * [#5225](https://github.com/netbox-community/netbox/issues/5225) - Circuit termination port speed is now an optional field ### REST API Changes diff --git a/netbox/circuits/migrations/0024_standardize_name_length.py b/netbox/circuits/migrations/0024_standardize_name_length.py new file mode 100644 index 000000000..8d0ae48e3 --- /dev/null +++ b/netbox/circuits/migrations/0024_standardize_name_length.py @@ -0,0 +1,38 @@ +# Generated by Django 3.1 on 2020-10-15 19:33 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('circuits', '0023_circuittermination_port_speed_optional'), + ] + + operations = [ + migrations.AlterField( + model_name='circuit', + name='cid', + field=models.CharField(max_length=100), + ), + migrations.AlterField( + model_name='circuittype', + name='name', + field=models.CharField(max_length=100, unique=True), + ), + migrations.AlterField( + model_name='circuittype', + name='slug', + field=models.SlugField(max_length=100, unique=True), + ), + migrations.AlterField( + model_name='provider', + name='name', + field=models.CharField(max_length=100, unique=True), + ), + migrations.AlterField( + model_name='provider', + name='slug', + field=models.SlugField(max_length=100, unique=True), + ), + ] diff --git a/netbox/circuits/models.py b/netbox/circuits/models.py index a4eed83f0..3d6d5d232 100644 --- a/netbox/circuits/models.py +++ b/netbox/circuits/models.py @@ -27,10 +27,11 @@ class Provider(ChangeLoggedModel, CustomFieldModel): stores information pertinent to the user's relationship with the Provider. """ name = models.CharField( - max_length=50, + max_length=100, unique=True ) slug = models.SlugField( + max_length=100, unique=True ) asn = ASNField( @@ -98,10 +99,11 @@ class CircuitType(ChangeLoggedModel): "Long Haul," "Metro," or "Out-of-Band". """ name = models.CharField( - max_length=50, + max_length=100, unique=True ) slug = models.SlugField( + max_length=100, unique=True ) description = models.CharField( @@ -138,7 +140,7 @@ class Circuit(ChangeLoggedModel, CustomFieldModel): in Kbps. """ cid = models.CharField( - max_length=50, + max_length=100, verbose_name='Circuit ID' ) provider = models.ForeignKey( diff --git a/netbox/dcim/migrations/0122_standardize_name_length.py b/netbox/dcim/migrations/0122_standardize_name_length.py new file mode 100644 index 000000000..6c805f2ee --- /dev/null +++ b/netbox/dcim/migrations/0122_standardize_name_length.py @@ -0,0 +1,98 @@ +# Generated by Django 3.1 on 2020-10-15 19:33 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('dcim', '0121_cablepath'), + ] + + operations = [ + migrations.AlterField( + model_name='devicerole', + name='name', + field=models.CharField(max_length=100, unique=True), + ), + migrations.AlterField( + model_name='devicerole', + name='slug', + field=models.SlugField(max_length=100, unique=True), + ), + migrations.AlterField( + model_name='devicetype', + name='model', + field=models.CharField(max_length=100), + ), + migrations.AlterField( + model_name='devicetype', + name='slug', + field=models.SlugField(max_length=100), + ), + migrations.AlterField( + model_name='manufacturer', + name='name', + field=models.CharField(max_length=100, unique=True), + ), + migrations.AlterField( + model_name='manufacturer', + name='slug', + field=models.SlugField(max_length=100, unique=True), + ), + migrations.AlterField( + model_name='powerfeed', + name='name', + field=models.CharField(max_length=100), + ), + migrations.AlterField( + model_name='powerpanel', + name='name', + field=models.CharField(max_length=100), + ), + migrations.AlterField( + model_name='rack', + name='name', + field=models.CharField(max_length=100), + ), + migrations.AlterField( + model_name='rackgroup', + name='name', + field=models.CharField(max_length=100), + ), + migrations.AlterField( + model_name='rackgroup', + name='slug', + field=models.SlugField(max_length=100), + ), + migrations.AlterField( + model_name='rackrole', + name='name', + field=models.CharField(max_length=100, unique=True), + ), + migrations.AlterField( + model_name='rackrole', + name='slug', + field=models.SlugField(max_length=100, unique=True), + ), + migrations.AlterField( + model_name='region', + name='name', + field=models.CharField(max_length=100, unique=True), + ), + migrations.AlterField( + model_name='region', + name='slug', + field=models.SlugField(max_length=100, unique=True), + ), + migrations.AlterField( + model_name='site', + name='name', + field=models.CharField(max_length=100, unique=True), + ), + migrations.AlterField( + model_name='site', + name='slug', + field=models.SlugField(max_length=100, unique=True), + ), + ] diff --git a/netbox/dcim/models/devices.py b/netbox/dcim/models/devices.py index 98e4045f1..2c067bd86 100644 --- a/netbox/dcim/models/devices.py +++ b/netbox/dcim/models/devices.py @@ -41,10 +41,11 @@ class Manufacturer(ChangeLoggedModel): A Manufacturer represents a company which produces hardware devices; for example, Juniper or Dell. """ name = models.CharField( - max_length=50, + max_length=100, unique=True ) slug = models.SlugField( + max_length=100, unique=True ) description = models.CharField( @@ -95,9 +96,11 @@ class DeviceType(ChangeLoggedModel, CustomFieldModel): related_name='device_types' ) model = models.CharField( - max_length=50 + max_length=100 + ) + slug = models.SlugField( + max_length=100 ) - slug = models.SlugField() part_number = models.CharField( max_length=50, blank=True, @@ -340,10 +343,11 @@ class DeviceRole(ChangeLoggedModel): virtual machines as well. """ name = models.CharField( - max_length=50, + max_length=100, unique=True ) slug = models.SlugField( + max_length=100, unique=True ) color = ColorField( @@ -390,8 +394,8 @@ class Platform(ChangeLoggedModel): unique=True ) slug = models.SlugField( - unique=True, - max_length=100 + max_length=100, + unique=True ) manufacturer = models.ForeignKey( to='dcim.Manufacturer', diff --git a/netbox/dcim/models/power.py b/netbox/dcim/models/power.py index f869a3af4..8dae9074a 100644 --- a/netbox/dcim/models/power.py +++ b/netbox/dcim/models/power.py @@ -38,7 +38,7 @@ class PowerPanel(ChangeLoggedModel, CustomFieldModel): null=True ) name = models.CharField( - max_length=50 + max_length=100 ) tags = TaggableManager(through=TaggedItem) @@ -89,7 +89,7 @@ class PowerFeed(ChangeLoggedModel, PathEndpoint, CableTermination, CustomFieldMo null=True ) name = models.CharField( - max_length=50 + max_length=100 ) status = models.CharField( max_length=50, diff --git a/netbox/dcim/models/racks.py b/netbox/dcim/models/racks.py index 78c72f503..b5dd92069 100644 --- a/netbox/dcim/models/racks.py +++ b/netbox/dcim/models/racks.py @@ -47,9 +47,11 @@ class RackGroup(MPTTModel, ChangeLoggedModel): campus. If a Site instead represents a single building, a RackGroup might represent a single room or floor. """ name = models.CharField( - max_length=50 + max_length=100 + ) + slug = models.SlugField( + max_length=100 ) - slug = models.SlugField() site = models.ForeignKey( to='dcim.Site', on_delete=models.CASCADE, @@ -118,10 +120,11 @@ class RackRole(ChangeLoggedModel): Racks can be organized by functional role, similar to Devices. """ name = models.CharField( - max_length=50, + max_length=100, unique=True ) slug = models.SlugField( + max_length=100, unique=True ) color = ColorField( @@ -161,7 +164,7 @@ class Rack(ChangeLoggedModel, CustomFieldModel): Each Rack is assigned to a Site and (optionally) a RackGroup. """ name = models.CharField( - max_length=50 + max_length=100 ) _name = NaturalOrderingField( target_field='name', diff --git a/netbox/dcim/models/sites.py b/netbox/dcim/models/sites.py index 0adc9aac5..923b33124 100644 --- a/netbox/dcim/models/sites.py +++ b/netbox/dcim/models/sites.py @@ -39,10 +39,11 @@ class Region(MPTTModel, ChangeLoggedModel): db_index=True ) name = models.CharField( - max_length=50, + max_length=100, unique=True ) slug = models.SlugField( + max_length=100, unique=True ) description = models.CharField( @@ -98,7 +99,7 @@ class Site(ChangeLoggedModel, CustomFieldModel): field can be used to include an external designation, such as a data center name (e.g. Equinix SV6). """ name = models.CharField( - max_length=50, + max_length=100, unique=True ) _name = NaturalOrderingField( @@ -107,6 +108,7 @@ class Site(ChangeLoggedModel, CustomFieldModel): blank=True ) slug = models.SlugField( + max_length=100, unique=True ) status = models.CharField( diff --git a/netbox/ipam/migrations/0042_standardize_name_length.py b/netbox/ipam/migrations/0042_standardize_name_length.py new file mode 100644 index 000000000..09bfdda6e --- /dev/null +++ b/netbox/ipam/migrations/0042_standardize_name_length.py @@ -0,0 +1,53 @@ +# Generated by Django 3.1 on 2020-10-15 19:33 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('ipam', '0041_routetarget'), + ] + + operations = [ + migrations.AlterField( + model_name='rir', + name='name', + field=models.CharField(max_length=100, unique=True), + ), + migrations.AlterField( + model_name='rir', + name='slug', + field=models.SlugField(max_length=100, unique=True), + ), + migrations.AlterField( + model_name='role', + name='name', + field=models.CharField(max_length=100, unique=True), + ), + migrations.AlterField( + model_name='role', + name='slug', + field=models.SlugField(max_length=100, unique=True), + ), + migrations.AlterField( + model_name='service', + name='name', + field=models.CharField(max_length=100), + ), + migrations.AlterField( + model_name='vlangroup', + name='name', + field=models.CharField(max_length=100), + ), + migrations.AlterField( + model_name='vlangroup', + name='slug', + field=models.SlugField(max_length=100), + ), + migrations.AlterField( + model_name='vrf', + name='name', + field=models.CharField(max_length=100), + ), + ] diff --git a/netbox/ipam/models.py b/netbox/ipam/models.py index 11ce180a4..f6414d5d7 100644 --- a/netbox/ipam/models.py +++ b/netbox/ipam/models.py @@ -46,7 +46,7 @@ class VRF(ChangeLoggedModel, CustomFieldModel): are said to exist in the "global" table.) """ name = models.CharField( - max_length=50 + max_length=100 ) rd = models.CharField( max_length=VRF_RD_MAX_LENGTH, @@ -168,10 +168,11 @@ class RIR(ChangeLoggedModel): space. This can be an organization like ARIN or RIPE, or a governing standard such as RFC 1918. """ name = models.CharField( - max_length=50, + max_length=100, unique=True ) slug = models.SlugField( + max_length=100, unique=True ) is_private = models.BooleanField( @@ -313,10 +314,11 @@ class Role(ChangeLoggedModel): "Management." """ name = models.CharField( - max_length=50, + max_length=100, unique=True ) slug = models.SlugField( + max_length=100, unique=True ) weight = models.PositiveSmallIntegerField( @@ -826,9 +828,11 @@ class VLANGroup(ChangeLoggedModel): A VLAN group is an arbitrary collection of VLANs within which VLAN IDs and names must be unique. """ name = models.CharField( - max_length=50 + max_length=100 + ) + slug = models.SlugField( + max_length=100 ) - slug = models.SlugField() site = models.ForeignKey( to='dcim.Site', on_delete=models.PROTECT, @@ -1021,7 +1025,7 @@ class Service(ChangeLoggedModel, CustomFieldModel): blank=True ) name = models.CharField( - max_length=30 + max_length=100 ) protocol = models.CharField( max_length=50, diff --git a/netbox/secrets/migrations/0012_standardize_name_length.py b/netbox/secrets/migrations/0012_standardize_name_length.py new file mode 100644 index 000000000..e41d81761 --- /dev/null +++ b/netbox/secrets/migrations/0012_standardize_name_length.py @@ -0,0 +1,23 @@ +# Generated by Django 3.1 on 2020-10-15 19:33 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('secrets', '0011_secret_generic_assignments'), + ] + + operations = [ + migrations.AlterField( + model_name='secretrole', + name='name', + field=models.CharField(max_length=100, unique=True), + ), + migrations.AlterField( + model_name='secretrole', + name='slug', + field=models.SlugField(max_length=100, unique=True), + ), + ] diff --git a/netbox/secrets/models.py b/netbox/secrets/models.py index f5508d47d..862fd4f2d 100644 --- a/netbox/secrets/models.py +++ b/netbox/secrets/models.py @@ -241,10 +241,11 @@ class SecretRole(ChangeLoggedModel): such as "Login Credentials" or "SNMP Communities." """ name = models.CharField( - max_length=50, + max_length=100, unique=True ) slug = models.SlugField( + max_length=100, unique=True ) description = models.CharField( diff --git a/netbox/tenancy/migrations/0011_standardize_name_length.py b/netbox/tenancy/migrations/0011_standardize_name_length.py new file mode 100644 index 000000000..1e29a0f5e --- /dev/null +++ b/netbox/tenancy/migrations/0011_standardize_name_length.py @@ -0,0 +1,33 @@ +# Generated by Django 3.1 on 2020-10-15 19:33 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('tenancy', '0010_custom_field_data'), + ] + + operations = [ + migrations.AlterField( + model_name='tenant', + name='name', + field=models.CharField(max_length=100, unique=True), + ), + migrations.AlterField( + model_name='tenant', + name='slug', + field=models.SlugField(max_length=100, unique=True), + ), + migrations.AlterField( + model_name='tenantgroup', + name='name', + field=models.CharField(max_length=100, unique=True), + ), + migrations.AlterField( + model_name='tenantgroup', + name='slug', + field=models.SlugField(max_length=100, unique=True), + ), + ] diff --git a/netbox/tenancy/models.py b/netbox/tenancy/models.py index 5a6108e09..3ba644c09 100644 --- a/netbox/tenancy/models.py +++ b/netbox/tenancy/models.py @@ -21,10 +21,11 @@ class TenantGroup(MPTTModel, ChangeLoggedModel): An arbitrary collection of Tenants. """ name = models.CharField( - max_length=50, + max_length=100, unique=True ) slug = models.SlugField( + max_length=100, unique=True ) parent = TreeForeignKey( @@ -81,10 +82,11 @@ class Tenant(ChangeLoggedModel, CustomFieldModel): department. """ name = models.CharField( - max_length=30, + max_length=100, unique=True ) slug = models.SlugField( + max_length=100, unique=True ) group = models.ForeignKey( diff --git a/netbox/virtualization/migrations/0019_standardize_name_length.py b/netbox/virtualization/migrations/0019_standardize_name_length.py new file mode 100644 index 000000000..d6820640d --- /dev/null +++ b/netbox/virtualization/migrations/0019_standardize_name_length.py @@ -0,0 +1,33 @@ +# Generated by Django 3.1 on 2020-10-15 19:33 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('virtualization', '0018_custom_field_data'), + ] + + operations = [ + migrations.AlterField( + model_name='clustergroup', + name='name', + field=models.CharField(max_length=100, unique=True), + ), + migrations.AlterField( + model_name='clustergroup', + name='slug', + field=models.SlugField(max_length=100, unique=True), + ), + migrations.AlterField( + model_name='clustertype', + name='name', + field=models.CharField(max_length=100, unique=True), + ), + migrations.AlterField( + model_name='clustertype', + name='slug', + field=models.SlugField(max_length=100, unique=True), + ), + ] diff --git a/netbox/virtualization/models.py b/netbox/virtualization/models.py index 2c9cd2a9b..198bfd1a5 100644 --- a/netbox/virtualization/models.py +++ b/netbox/virtualization/models.py @@ -35,10 +35,11 @@ class ClusterType(ChangeLoggedModel): A type of Cluster. """ name = models.CharField( - max_length=50, + max_length=100, unique=True ) slug = models.SlugField( + max_length=100, unique=True ) description = models.CharField( @@ -76,10 +77,11 @@ class ClusterGroup(ChangeLoggedModel): An organizational group of Clusters. """ name = models.CharField( - max_length=50, + max_length=100, unique=True ) slug = models.SlugField( + max_length=100, unique=True ) description = models.CharField(