Fix bulk creation of VCMemberships via API

This commit is contained in:
Jeremy Stretch 2018-01-02 16:40:52 -05:00
parent b27529d927
commit e5c13d2d72
2 changed files with 21 additions and 13 deletions

View File

@ -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)

View File

@ -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'])