Merge "Update plugs Contrail methods to work with privsep" into stable/queens

This commit is contained in:
Zuul 2018-02-22 08:18:14 +00:00 committed by Gerrit Code Review
commit cc23edc15f
3 changed files with 49 additions and 19 deletions

View File

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

View File

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

View File

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