diff --git a/CHANGELOG.md b/CHANGELOG.md index ca2f3efd9..f7f928d78 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ v2.4.8 (FUTURE) * [#2565](https://github.com/digitalocean/netbox/issues/2565) - Improved rendering of Markdown tables * [#2575](https://github.com/digitalocean/netbox/issues/2575) - Correct model specified for rack roles table * [#2588](https://github.com/digitalocean/netbox/issues/2588) - Catch all exceptions from failed NAPALM API Calls +* [#2589](https://github.com/digitalocean/netbox/issues/2589) - Virtual machine API serializer should require cluster assignment --- diff --git a/netbox/virtualization/api/serializers.py b/netbox/virtualization/api/serializers.py index b749f1e5e..80fa73002 100644 --- a/netbox/virtualization/api/serializers.py +++ b/netbox/virtualization/api/serializers.py @@ -93,7 +93,7 @@ class VirtualMachineIPAddressSerializer(WritableNestedSerializer): class VirtualMachineSerializer(TaggitSerializer, CustomFieldModelSerializer): status = ChoiceField(choices=VM_STATUS_CHOICES, required=False) site = NestedSiteSerializer(read_only=True) - cluster = NestedClusterSerializer(required=False, allow_null=True) + cluster = NestedClusterSerializer() role = NestedDeviceRoleSerializer(required=False, allow_null=True) tenant = NestedTenantSerializer(required=False, allow_null=True) platform = NestedPlatformSerializer(required=False, allow_null=True) diff --git a/netbox/virtualization/tests/test_api.py b/netbox/virtualization/tests/test_api.py index 32f56b99b..99e57b201 100644 --- a/netbox/virtualization/tests/test_api.py +++ b/netbox/virtualization/tests/test_api.py @@ -380,6 +380,18 @@ class VirtualMachineTest(APITestCase): self.assertEqual(virtualmachine4.name, data['name']) self.assertEqual(virtualmachine4.cluster.pk, data['cluster']) + def test_create_virtualmachine_without_cluster(self): + + data = { + 'name': 'Test Virtual Machine 4', + } + + url = reverse('virtualization-api:virtualmachine-list') + response = self.client.post(url, data, format='json', **self.header) + + self.assertHttpStatus(response, status.HTTP_400_BAD_REQUEST) + self.assertEqual(VirtualMachine.objects.count(), 3) + def test_create_virtualmachine_bulk(self): data = [