diff --git a/nova/privsep/libvirt.py b/nova/privsep/libvirt.py index 8baade3ff6ec..da8dccb2ef1d 100644 --- a/nova/privsep/libvirt.py +++ b/nova/privsep/libvirt.py @@ -223,22 +223,35 @@ def unplug_plumgrid_vif(dev): @nova.privsep.sys_admin_pctxt.entrypoint -def plug_contrail_vif(instance, vif, ip_addr, ip6_addr, ptype): - cmd_args = ('--oper=add --uuid=%s --instance_uuid=%s --vn_uuid=%s ' - '--vm_project_uuid=%s --ip_address=%s --ipv6_address=%s' - ' --vm_name=%s --mac=%s --tap_name=%s --port_type=%s ' - '--tx_vlan_id=%d --rx_vlan_id=%d' - % (vif['id'], instance.uuid, vif['network']['id'], - instance.project_id, ip_addr, ip6_addr, - instance.display_name, vif['address'], - vif['devname'], ptype, -1, -1)) - processutils.execute('vrouter-port-control', cmd_args) +def plug_contrail_vif(project_id, vm_id, vm_name, vif_id, net_id, port_type, + dev_name, mac, ip_addr, ip6_addr): + cmd = ( + 'vrouter-port-control', + '--oper=add', + '--vm_project_uuid=%s' % project_id, + '--instance_uuid=%s' % vm_id, + ' --vm_name=%s' % vm_name, + '--uuid=%s' % vif_id, + '--vn_uuid=%s' % net_id, + '--port_type=%s' % port_type, + '--tap_name=%s' % dev_name, + '--mac=%s' % mac, + '--ip_address=%s' % ip_addr, + '--ipv6_address=%s' % ip6_addr, + '--tx_vlan_id=-1', + '--rx_vlan_id=-1', + ) + processutils.execute(*cmd) @nova.privsep.sys_admin_pctxt.entrypoint -def unplug_contrail_vif(vif): - cmd_args = ('--oper=delete --uuid=%s' % (vif['id'])) - processutils.execute('vrouter-port-control', cmd_args) +def unplug_contrail_vif(port_id): + cmd = ( + 'vrouter-port-control', + '--oper=delete', + '--uuid=%s' % port_id, + ) + processutils.execute(*cmd) @nova.privsep.sys_admin_pctxt.entrypoint diff --git a/nova/tests/unit/virt/libvirt/test_vif.py b/nova/tests/unit/virt/libvirt/test_vif.py index 43db5fbf5a91..bb6264d19ac2 100644 --- a/nova/tests/unit/virt/libvirt/test_vif.py +++ b/nova/tests/unit/virt/libvirt/test_vif.py @@ -1057,7 +1057,7 @@ class LibvirtVifTestCase(test.NoDBTestCase): def test_unplug_vrouter_with_details(self, mock_unplug_contrail): d = vif.LibvirtGenericVIFDriver() d.unplug(self.instance, self.vif_vrouter) - mock_unplug_contrail.assert_called_once_with(self.vif_vrouter) + mock_unplug_contrail.assert_called_once_with(self.vif_vrouter['id']) @mock.patch('nova.privsep.libvirt.plug_contrail_vif') def test_plug_vrouter_with_details(self, mock_plug_contrail): @@ -1076,7 +1076,10 @@ class LibvirtVifTestCase(test.NoDBTestCase): mock.call('ip', 'link', 'set', 'tap-xxx-yyy-zzz', 'up', run_as_root=True, check_exit_code=[0, 2, 254])]) mock_plug_contrail.called_once_with( - instance, self.vif_vrouter, '0.0.0.0', None, 'NovaVMPort') + instance.project_id, instance.uuid, instance.display_name, + self.vif_vrouter['id'], self.vif_vrouter['network']['id'], + 'NovaVMPort', self.vif_vrouter['devname'], + self.vif_vrouter['address'], '0.0.0.0', None) @mock.patch('nova.network.linux_net.create_tap_dev') @mock.patch('nova.privsep.libvirt.plug_contrail_vif') @@ -1095,8 +1098,11 @@ class LibvirtVifTestCase(test.NoDBTestCase): mock_create_tap_dev.assert_called_once_with('tap-xxx-yyy-zzz', multiqueue=True) - mock_plug_contrail.assert_called_once_with( - instance, self.vif_vrouter, '0.0.0.0', None, 'NovaVMPort') + mock_plug_contrail.called_once_with( + instance.project_id, instance.uuid, instance.display_name, + self.vif_vrouter['id'], self.vif_vrouter['network']['id'], + 'NovaVMPort', self.vif_vrouter['devname'], + self.vif_vrouter['address'], '0.0.0.0', None) def test_ivs_ethernet_driver(self): d = vif.LibvirtGenericVIFDriver() diff --git a/nova/virt/libvirt/vif.py b/nova/virt/libvirt/vif.py index b0a75bd11bbc..6d5f2385e97d 100644 --- a/nova/virt/libvirt/vif.py +++ b/nova/virt/libvirt/vif.py @@ -724,7 +724,17 @@ class LibvirtGenericVIFDriver(object): instance.flavor) linux_net.create_tap_dev(dev, multiqueue=multiqueue) nova.privsep.libvirt.plug_contrail_vif( - instance, vif, ip_addr, ip6_addr, ptype) + instance.project_id, + instance.uuid, + instance.display_name, + vif['id'], + vif['network']['id'], + ptype, + dev, + vif['address'], + ip_addr, + ip6_addr, + ) except processutils.ProcessExecutionError: LOG.exception(_("Failed while plugging vif"), instance=instance) @@ -875,8 +885,9 @@ class LibvirtGenericVIFDriver(object): Unbind the vif from a Contrail virtual port. """ dev = self.get_vif_devname(vif) + port_id = vif['id'] try: - nova.privsep.libvirt.unplug_contrail_vif(vif) + nova.privsep.libvirt.unplug_contrail_vif(port_id) linux_net.delete_net_dev(dev) except processutils.ProcessExecutionError: LOG.exception(_("Failed while unplugging vif"), instance=instance)