Update plugs Contrail methods to work with privsep
As privsep uses the msgpack to send method arguments to the privsep
daemon, we could not use anymore custom data type like
nova.objects.instance.Instance.
Change-Id: I09f04d5b2f1cb39339ad7c4569186db5d361797a
Closes-Bug: #1742963
(cherry picked from commit 1f5fe3190b
)
This commit is contained in:
parent
e708799c04
commit
5a646d82ba
|
@ -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
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue