From 8375995680947986900f9f9abefd56e54513d15c Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Tue, 19 Oct 2021 13:06:41 -0400 Subject: [PATCH] Closes #1943: Relax uniqueness constraint on cluster names --- docs/models/virtualization/cluster.md | 2 +- docs/release-notes/version-3.1.md | 1 + netbox/virtualization/api/serializers.py | 4 ++-- .../0024_cluster_relax_uniqueness.py | 21 +++++++++++++++++++ netbox/virtualization/models.py | 7 +++++-- 5 files changed, 30 insertions(+), 5 deletions(-) create mode 100644 netbox/virtualization/migrations/0024_cluster_relax_uniqueness.py diff --git a/docs/models/virtualization/cluster.md b/docs/models/virtualization/cluster.md index 3311ad42d..7fc9bfc06 100644 --- a/docs/models/virtualization/cluster.md +++ b/docs/models/virtualization/cluster.md @@ -1,5 +1,5 @@ # Clusters -A cluster is a logical grouping of physical resources within which virtual machines run. A cluster must be assigned a type (technological classification), and may optionally be assigned to a cluster group, site, and/or tenant. +A cluster is a logical grouping of physical resources within which virtual machines run. A cluster must be assigned a type (technological classification), and may optionally be assigned to a cluster group, site, and/or tenant. Each cluster must have a unique name within its assigned group and/or site, if any. Physical devices may be associated with clusters as hosts. This allows users to track on which host(s) a particular virtual machine may reside. However, NetBox does not support pinning a specific VM within a cluster to a particular host device. diff --git a/docs/release-notes/version-3.1.md b/docs/release-notes/version-3.1.md index 630e46b5b..172fd3ed8 100644 --- a/docs/release-notes/version-3.1.md +++ b/docs/release-notes/version-3.1.md @@ -10,6 +10,7 @@ ### Enhancements * [#1337](https://github.com/netbox-community/netbox/issues/1337) - Add WWN field to interfaces +* [#1943](https://github.com/netbox-community/netbox/issues/1943) - Relax uniqueness constraint on cluster names * [#3839](https://github.com/netbox-community/netbox/issues/3839) - Add `airflow` field for devices types and devices * [#6711](https://github.com/netbox-community/netbox/issues/6711) - Add `longtext` custom field type with Markdown support * [#6715](https://github.com/netbox-community/netbox/issues/6715) - Add tenant assignment for cables diff --git a/netbox/virtualization/api/serializers.py b/netbox/virtualization/api/serializers.py index adad9bf4d..1928960a9 100644 --- a/netbox/virtualization/api/serializers.py +++ b/netbox/virtualization/api/serializers.py @@ -44,9 +44,9 @@ class ClusterGroupSerializer(OrganizationalModelSerializer): class ClusterSerializer(PrimaryModelSerializer): url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:cluster-detail') type = NestedClusterTypeSerializer() - group = NestedClusterGroupSerializer(required=False, allow_null=True) + group = NestedClusterGroupSerializer(required=False, allow_null=True, default=None) tenant = NestedTenantSerializer(required=False, allow_null=True) - site = NestedSiteSerializer(required=False, allow_null=True) + site = NestedSiteSerializer(required=False, allow_null=True, default=None) device_count = serializers.IntegerField(read_only=True) virtualmachine_count = serializers.IntegerField(read_only=True) diff --git a/netbox/virtualization/migrations/0024_cluster_relax_uniqueness.py b/netbox/virtualization/migrations/0024_cluster_relax_uniqueness.py new file mode 100644 index 000000000..5ff214d29 --- /dev/null +++ b/netbox/virtualization/migrations/0024_cluster_relax_uniqueness.py @@ -0,0 +1,21 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('dcim', '0136_device_airflow'), + ('virtualization', '0023_virtualmachine_natural_ordering'), + ] + + operations = [ + migrations.AlterField( + model_name='cluster', + name='name', + field=models.CharField(max_length=100), + ), + migrations.AlterUniqueTogether( + name='cluster', + unique_together={('site', 'name'), ('group', 'name')}, + ), + ] diff --git a/netbox/virtualization/models.py b/netbox/virtualization/models.py index d91a39549..11792944a 100644 --- a/netbox/virtualization/models.py +++ b/netbox/virtualization/models.py @@ -115,8 +115,7 @@ class Cluster(PrimaryModel): A cluster of VirtualMachines. Each Cluster may optionally be associated with one or more Devices. """ name = models.CharField( - max_length=100, - unique=True + max_length=100 ) type = models.ForeignKey( to=ClusterType, @@ -167,6 +166,10 @@ class Cluster(PrimaryModel): class Meta: ordering = ['name'] + unique_together = ( + ('group', 'name'), + ('site', 'name'), + ) def __str__(self): return self.name