mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-15 11:42:52 -06:00
Fix bulk creation of VCMemberships via API
This commit is contained in:
parent
b27529d927
commit
e5c13d2d72
@ -419,12 +419,17 @@ class VCMembershipViewSet(ModelViewSet):
|
||||
with transaction.atomic():
|
||||
|
||||
# Automatically create a new VirtualChassis for new VCMemberships with no VC specified
|
||||
virtual_chassis = request.data.get('virtual_chassis', None)
|
||||
is_master = request.data.get('is_master', False)
|
||||
if not virtual_chassis and is_master:
|
||||
vc = VirtualChassis()
|
||||
vc.save()
|
||||
request.data['virtual_chassis'] = vc.pk
|
||||
if isinstance(request.data, list):
|
||||
for i, vcm in enumerate(request.data):
|
||||
if not vcm.get('virtual_chassis') and vcm.get('is_master'):
|
||||
vc = VirtualChassis()
|
||||
vc.save()
|
||||
request.data[i]['virtual_chassis'] = vc.pk
|
||||
else:
|
||||
if not request.data.get('virtual_chassis') and request.data.get('is_master'):
|
||||
vc = VirtualChassis()
|
||||
vc.save()
|
||||
request.data['virtual_chassis'] = vc.pk
|
||||
|
||||
return super(VCMembershipViewSet, self).create(request, *args, **kwargs)
|
||||
|
||||
|
@ -3097,29 +3097,31 @@ class VCMembershipTest(HttpStatusMixin, APITestCase):
|
||||
|
||||
def test_create_vcmembership_bulk(self):
|
||||
|
||||
vc = VirtualChassis.objects.create()
|
||||
vc3 = VirtualChassis.objects.create()
|
||||
|
||||
data = [
|
||||
# Set the master of an existing VC
|
||||
{
|
||||
'virtual_chassis': vc.pk,
|
||||
'virtual_chassis': vc3.pk,
|
||||
'device': self.device7.pk,
|
||||
'position': 1,
|
||||
'is_master': True,
|
||||
'priority': 10,
|
||||
},
|
||||
# Add a non-master member to a VC
|
||||
{
|
||||
'virtual_chassis': vc.pk,
|
||||
'virtual_chassis': vc3.pk,
|
||||
'device': self.device8.pk,
|
||||
'position': 2,
|
||||
'is_master': False,
|
||||
'priority': 20,
|
||||
},
|
||||
# Force the creation of a new VC
|
||||
{
|
||||
'virtual_chassis': vc.pk,
|
||||
'device': self.device9.pk,
|
||||
'position': 3,
|
||||
'is_master': False,
|
||||
'priority': 30,
|
||||
'position': 1,
|
||||
'is_master': True,
|
||||
'priority': 10,
|
||||
},
|
||||
]
|
||||
|
||||
@ -3127,6 +3129,7 @@ class VCMembershipTest(HttpStatusMixin, APITestCase):
|
||||
response = self.client.post(url, data, format='json', **self.header)
|
||||
|
||||
self.assertHttpStatus(response, status.HTTP_201_CREATED)
|
||||
self.assertEqual(VirtualChassis.objects.count(), 4)
|
||||
self.assertEqual(VCMembership.objects.count(), 9)
|
||||
self.assertEqual(response.data[0]['device'], data[0]['device'])
|
||||
self.assertEqual(response.data[1]['device'], data[1]['device'])
|
||||
|
Loading…
Reference in New Issue
Block a user