zip(self._cfg['cards'], self._cfg['ports'])]
 
         log.info('Create and assign vports: %s', ports)
-        for port in ports:
-            vport = self.ixnet.add(self.ixnet.getRoot(), 'vport')
-            self.ixnet.commit()
-            self.ixnet.execute('assignPorts', [port], [], [vport], True)
+
+        vports = []
+        for _ in ports:
+            vports.append(self.ixnet.add(self.ixnet.getRoot(), 'vport'))
             self.ixnet.commit()
+
+        self.ixnet.execute('assignPorts', ports, [], vports, True)
+        self.ixnet.commit()
+
+        for vport in vports:
             if self.ixnet.getAttribute(vport, '-state') != 'up':
                 log.warning('Port %s is down', vport)
 
 
         self.ixnet_gen._cfg = config
 
         self.assertIsNone(self.ixnet_gen.assign_ports())
-        self.assertEqual(self.ixnet.execute.call_count, 2)
-        self.assertEqual(self.ixnet.commit.call_count, 4)
+        self.assertEqual(self.ixnet.execute.call_count, 1)
+        self.assertEqual(self.ixnet.commit.call_count, 3)
         self.assertEqual(self.ixnet.getAttribute.call_count, 2)
 
     @mock.patch.object(ixnet_api, 'log')