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