本文整理汇总了Python中contrail_vrouter_api.vrouter_api.ContrailVRouterApi.add_port方法的典型用法代码示例。如果您正苦于以下问题:Python ContrailVRouterApi.add_port方法的具体用法?Python ContrailVRouterApi.add_port怎么用?Python ContrailVRouterApi.add_port使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类contrail_vrouter_api.vrouter_api.ContrailVRouterApi
的用法示例。
在下文中一共展示了ContrailVRouterApi.add_port方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: interface_register
# 需要导入模块: from contrail_vrouter_api.vrouter_api import ContrailVRouterApi [as 别名]
# 或者: from contrail_vrouter_api.vrouter_api.ContrailVRouterApi import add_port [as 别名]
def interface_register(vm, vmi, iface_name, project=None):
api = ContrailVRouterApi()
mac = vmi.virtual_machine_interface_mac_addresses.mac_address[0]
if project:
proj_id = project.uuid
else:
proj_id = None
api.add_port(vm.uuid, vmi.uuid, iface_name, mac, display_name=vm.name, vm_project_id=proj_id)
示例2: test_unicode
# 需要导入模块: from contrail_vrouter_api.vrouter_api import ContrailVRouterApi [as 别名]
# 或者: from contrail_vrouter_api.vrouter_api.ContrailVRouterApi import add_port [as 别名]
def test_unicode(self):
self._start_server()
api = ContrailVRouterApi(server_port=self._port)
self._try_connect(api)
response = api.add_port(str(uuid.uuid1()), str(uuid.uuid1()), 'tapX',
'aa:bb:cc:ee:ff:00',
display_name=u'p\u227do')
self.assertTrue(response)
示例3: main
# 需要导入模块: from contrail_vrouter_api.vrouter_api import ContrailVRouterApi [as 别名]
# 或者: from contrail_vrouter_api.vrouter_api.ContrailVRouterApi import add_port [as 别名]
def main():
parser = argparse.ArgumentParser()
# "--mac-address", metadata.MacAddress,
# "--vm", metadata.InstanceId, "--vmi", metadata.NicId,
# "--interface", masterName, "add", c.DockerId)
parser.add_argument('--mac-address')
parser.add_argument('--vm')
parser.add_argument('--vmi')
parser.add_argument('--interface')
parser.add_argument('command', choices=['add'])
parser.add_argument('dockerId')
args = parser.parse_args()
if args.command == 'add':
api = ContrailVRouterApi()
api.add_port(args.vm, args.vmi, args.interface, args.mac_address, port_type='NovaVMPort', display_name=args.dockerId)
else:
print "No command specified"
示例4: VRouterVIFDriver
# 需要导入模块: from contrail_vrouter_api.vrouter_api import ContrailVRouterApi [as 别名]
# 或者: from contrail_vrouter_api.vrouter_api.ContrailVRouterApi import add_port [as 别名]
class VRouterVIFDriver(LibvirtBaseVIFDriver):
"""VIF driver for VRouter when running Neutron."""
PORT_TYPE = 'NovaVMPort'
def __init__(self, get_connection):
super(VRouterVIFDriver, self).__init__(get_connection)
self._vrouter_client = ContrailVRouterApi()
timer = loopingcall.FixedIntervalLoopingCall(self._keep_alive)
timer.start(interval=2)
def _keep_alive(self):
self._vrouter_client.periodic_connection_check()
def get_config(self, instance, vif, image_meta, inst_type):
conf = super(VRouterVIFDriver, self).get_config(instance, vif,
image_meta, inst_type)
dev = self.get_vif_devname(vif)
designer.set_vif_host_backend_ethernet_config(conf, dev)
designer.set_vif_bandwidth_config(conf, inst_type)
return conf
def plug(self, instance, vif):
dev = self.get_vif_devname(vif)
try:
linux_net.create_tap_dev(dev)
except processutils.ProcessExecutionError:
LOG.exception(_LE("Failed while plugging vif"), instance=instance)
kwargs = {
'ip_address': vif['network']['subnets'][0]['ips'][0]['address'],
'vn_id': vif['network']['id'],
'display_name': instance['display_name'],
'hostname': instance['hostname'],
'host': instance['host'],
'vm_project_id': instance['project_id'],
'port_type': self.PORT_TYPE,
}
try:
result = self._vrouter_client.add_port(instance['uuid'],
vif['id'],
dev,
vif['address'],
**kwargs)
if not result:
LOG.exception(_LE("Failed while plugging vif"),
instance=instance)
except TApplicationException:
LOG.exception(_LE("Failed while plugging vif"), instance=instance)
def unplug(self, instance, vif):
dev = self.get_vif_devname(vif)
try:
self._vrouter_client.delete_port(vif['id'])
linux_net.delete_net_dev(dev)
except (TApplicationException, processutils.ProcessExecutionError):
LOG.exception(_LE("Failed while unplugging vif"),
instance=instance)
示例5: OpenContrailVIFDriver
# 需要导入模块: from contrail_vrouter_api.vrouter_api import ContrailVRouterApi [as 别名]
# 或者: from contrail_vrouter_api.vrouter_api.ContrailVRouterApi import add_port [as 别名]
class OpenContrailVIFDriver(object):
def __init__(self):
self._vrouter_semaphore = eventlet.semaphore.Semaphore()
self._vrouter_client = ContrailVRouterApi(
doconnect=True, semaphore=self._vrouter_semaphore)
timer = loopingcall.FixedIntervalLoopingCall(self._keep_alive)
timer.start(interval=2)
def _keep_alive(self):
self._vrouter_client.periodic_connection_check()
def plug(self, instance, vif):
vif_type = vif['type']
LOG.debug('Plug vif_type=%(vif_type)s instance=%(instance)s '
'vif=%(vif)s',
{'vif_type': vif_type, 'instance': instance,
'vif': vif})
if_local_name = 'veth%s' % vif['id'][:8]
if_remote_name = 'ns%s' % vif['id'][:8]
# Device already exists so return.
if linux_net.device_exists(if_local_name):
return
undo_mgr = utils.UndoManager()
try:
utils.execute('ip', 'link', 'add', if_local_name, 'type', 'veth',
'peer', 'name', if_remote_name, run_as_root=True)
undo_mgr.undo_with(lambda: utils.execute(
'ip', 'link', 'delete', if_local_name, run_as_root=True))
utils.execute('ip', 'link', 'set', if_remote_name, 'address',
vif['address'], run_as_root=True)
except Exception:
LOG.exception("Failed to configure network")
msg = _('Failed to setup the network, rolling back')
undo_mgr.rollback_and_reraise(msg=msg, instance=instance)
def attach(self, instance, vif, container_id):
vif_type = vif['type']
LOG.debug('Attach vif_type=%(vif_type)s instance=%(instance)s '
'vif=%(vif)s',
{'vif_type': vif_type, 'instance': instance,
'vif': vif})
if_local_name = 'veth%s' % vif['id'][:8]
if_remote_name = 'ns%s' % vif['id'][:8]
undo_mgr = utils.UndoManager()
undo_mgr.undo_with(lambda: utils.execute(
'ip', 'link', 'delete', if_local_name, run_as_root=True))
ipv4_address, ipv4_netmask, ipv4_gateway = self._retrieve_ip_address(
vif, 4)
ipv6_address, ipv6_netmask, ipv6_gateway = self._retrieve_ip_address(
vif, 6)
ipv4_address = ipv4_address or '0.0.0.0'
params = {
'ip_address': ipv4_address,
'vn_id': vif['network']['id'],
'display_name': instance['display_name'],
'hostname': instance['hostname'],
'host': instance['host'],
'vm_project_id': instance['project_id'],
'port_type': 'NovaVMPort',
'ip6_address': ipv6_address,
}
try:
utils.execute('ip', 'link', 'set', if_remote_name, 'netns',
container_id, run_as_root=True)
result = self._vrouter_client.add_port(
instance['uuid'], vif['id'],
if_local_name, vif['address'], **params)
if not result:
# follow the exception path
raise RuntimeError('add_port returned %s' % str(result))
utils.execute('ip', 'link', 'set', if_local_name, 'up',
run_as_root=True)
except Exception:
LOG.exception("Failed to attach the network")
msg = _('Failed to attach the network, rolling back')
undo_mgr.rollback_and_reraise(msg=msg, instance=instance)
try:
utils.execute('ip', 'netns', 'exec', container_id, 'ip', 'link',
'set', if_remote_name, 'address', vif['address'],
run_as_root=True)
if ipv6_address:
ip = ipv6_address + "/" + ipv6_netmask
gateway = ipv6_gateway
utils.execute('ip', 'netns', 'exec', container_id, 'ifconfig',
if_remote_name, 'inet6', 'add', ip,
run_as_root=True)
utils.execute('ip', 'netns', 'exec', container_id, 'ip', '-6',
'route', 'replace', 'default', 'via', gateway,
#.........这里部分代码省略.........
示例6: NetnsManager
# 需要导入模块: from contrail_vrouter_api.vrouter_api import ContrailVRouterApi [as 别名]
# 或者: from contrail_vrouter_api.vrouter_api.ContrailVRouterApi import add_port [as 别名]
class NetnsManager(object):
SNAT_RT_TABLES_ID = 42
DEV_NAME_LEN = 14
NETNS_PREFIX = 'vrouter-'
LEFT_DEV_PREFIX = 'int-'
RIGH_DEV_PREFIX = 'gw-'
TAP_PREFIX = 'veth'
def __init__(self, vm_uuid, nic_left, nic_right, root_helper='sudo'):
self.vm_uuid = vm_uuid
self.namespace = self.NETNS_PREFIX + self.vm_uuid
self.nic_left = nic_left
self.nic_right = nic_right
self.root_helper = root_helper
self.nic_left['name'] = (self.LEFT_DEV_PREFIX +
self.nic_left['uuid'])[:self.DEV_NAME_LEN]
self.nic_right['name'] = (self.RIGH_DEV_PREFIX +
self.nic_right['uuid'])[:self.DEV_NAME_LEN]
self.ip_ns = ip_lib.IPWrapper(root_helper=self.root_helper,
namespace=self.namespace)
self.vrouter_client = ContrailVRouterApi()
def _get_tap_name(self, uuid_str):
return (self.TAP_PREFIX + uuid_str)[:self.DEV_NAME_LEN]
def is_netns_already_exists(self):
return self.ip_ns.netns.exists(self.namespace)
def create(self):
ip = ip_lib.IPWrapper(self.root_helper)
ip.ensure_namespace(self.namespace)
if not self.nic_left or not self.nic_right:
raise ValueError('Need left and right interfaces to create a '
'network namespace')
for nic in [self.nic_left, self.nic_right]:
self._create_interfaces(ip, nic)
def set_snat(self):
if not self.ip_ns.netns.exists(self.namespace):
raise ValueError('Need to create the network namespace before set '
'up the SNAT')
self.ip_ns.netns.execute(['sysctl', '-w', 'net.ipv4.ip_forward=1'])
self.ip_ns.netns.execute(['iptables', '-t', 'nat', '-F'])
self.ip_ns.netns.execute(['iptables', '-t', 'nat', '-A', 'POSTROUTING',
'-s', '0.0.0.0/0', '-o',
self.nic_right['name'], '-j', 'MASQUERADE'])
self.ip_ns.netns.execute(['ip', 'route', 'replace', 'default', 'dev',
self.nic_right['name']])
self.ip_ns.netns.execute(['ip', 'route', 'replace', 'default', 'dev',
self.nic_left['name'], 'table',
self.SNAT_RT_TABLES_ID])
try:
self.ip_ns.netns.execute(['ip', 'rule', 'del', 'iif',
str(self.nic_right['name']), 'table',
self.SNAT_RT_TABLES_ID])
except RuntimeError:
pass
self.ip_ns.netns.execute(['ip', 'rule', 'add', 'iif',
str(self.nic_right['name']), 'table',
self.SNAT_RT_TABLES_ID])
def destroy(self):
if not self.ip_ns.netns.exists(self.namespace):
raise ValueError('Namespace %s does not exist' % self.namespace)
for device in self.ip_ns.get_devices(exclude_loopback=True):
ip_lib.IPDevice(device.name,
self.root_helper,
self.namespace).link.delete()
self.ip_ns.netns.delete(self.namespace)
def plug_namespace_interface(self):
if not self.nic_left or not self.nic_right:
raise ValueError('Need left and right interfaces to plug a '
'network namespace onto vrouter')
self._add_port_to_agent(self.nic_left,
display_name='NetNS %s left interface' %
self.vm_uuid)
self._add_port_to_agent(self.nic_right,
display_name='NetNS %s right interface' %
self.vm_uuid)
def unplug_namespace_interface(self):
if not self.nic_left or not self.nic_right:
raise ValueError('Need left and right interfaces to unplug a '
'network namespace onto vrouter')
for nic in [self.nic_left, self.nic_right]:
self._delete_port_to_agent(nic)
def _create_interfaces(self, ip, nic):
if ip_lib.device_exists(nic['name'],
self.root_helper,
namespace=self.namespace):
ip_lib.IPDevice(nic['name'],
self.root_helper,
self.namespace).link.delete()
#.........这里部分代码省略.........
示例7: VRouterApiTest
# 需要导入模块: from contrail_vrouter_api.vrouter_api import ContrailVRouterApi [as 别名]
# 或者: from contrail_vrouter_api.vrouter_api.ContrailVRouterApi import add_port [as 别名]
class VRouterApiTest(unittest.TestCase):
def setUp(self):
self._api = ContrailVRouterApi()
def test_create_port(self):
mock_client = mock.Mock()
self._api._rpc_client_instance = mock.MagicMock(
name='rpc_client_instance')
self._api._rpc_client_instance.return_value = mock_client
self._api.add_port(str(uuid.uuid1()), str(uuid.uuid1()), 'tapX',
'aa:bb:cc:ee:ff:00')
self.assertTrue(mock_client.AddPort.called)
def test_delete_port(self):
mock_client = mock.Mock()
self._api._rpc_client_instance = mock.MagicMock(
name='rpc_client_instance')
self._api._rpc_client_instance.return_value = mock_client
vm_uuid = uuid.uuid1()
vif_uuid = uuid.uuid1()
self._api.add_port(str(vm_uuid), str(vif_uuid), 'tapX',
'aa:bb:cc:ee:ff:00')
self.assertTrue(mock_client.AddPort.called)
self.assertTrue(self._api._ports[vif_uuid])
self._api.delete_port(str(vif_uuid))
self.assertTrue(mock_client.DeletePort.called)
def test_resynchronize(self):
self._api._rpc_client_instance = mock.MagicMock(
name='rpc_client_instance')
self._api._rpc_client_instance.return_value = None
vm_uuid = str(uuid.uuid1())
vif_uuid = str(uuid.uuid1())
port1 = ttypes.Port(self._api._uuid_string_to_hex(vif_uuid),
self._api._uuid_string_to_hex(vm_uuid),
'tapX', '0.0.0.0', [0] * 16, 'aa:bb:cc:ee:ff:00')
self._api.add_port(vm_uuid, vif_uuid, 'tapX', 'aa:bb:cc:ee:ff:00')
mock_client = mock.Mock()
self._api._rpc_client_instance.return_value = mock_client
self._api.periodic_connection_check()
mock_client.AddPort.assert_called_with([port1])
def test_resynchronize_multi_ports(self):
self._api._rpc_client_instance = mock.MagicMock(
name='rpc_client_instance')
self._api._rpc_client_instance.return_value = None
vm_uuid = str(uuid.uuid1())
vif_uuid = str(uuid.uuid1())
port1 = ttypes.Port(self._api._uuid_string_to_hex(vif_uuid),
self._api._uuid_string_to_hex(vm_uuid),
'tapX', '0.0.0.0', [0] * 16, 'aa:bb:cc:ee:ff:00')
self._api.add_port(vm_uuid, vif_uuid, 'tapX', 'aa:bb:cc:ee:ff:00')
vm_uuid = str(uuid.uuid1())
vif_uuid = str(uuid.uuid1())
port2 = ttypes.Port(self._api._uuid_string_to_hex(vif_uuid),
self._api._uuid_string_to_hex(vm_uuid),
'tapY', '0.0.0.0', [0] * 16, '11:22:33:44:55:66')
self._api.add_port(vm_uuid, vif_uuid, 'tapY', '11:22:33:44:55:66')
mock_client = mock.Mock()
self._api._rpc_client_instance.return_value = mock_client
self._api.connect()
self._api._resynchronize()
mock_client.AddPort.assert_called_with([port1, port2])
def test_additional_arguments(self):
mock_client = mock.Mock()
self._api._rpc_client_instance = mock.MagicMock(
name='rpc_client_instance')
self._api._rpc_client_instance.return_value = mock_client
vif_uuid = uuid.uuid1()
network_uuid = uuid.uuid1()
project_id = uuid.uuid1().hex
self._api.add_port(str(uuid.uuid1()), str(vif_uuid), 'tapX',
'aa:bb:cc:ee:ff:00',
network_uuid=str(network_uuid),
vm_project_id=project_id)
self.assertTrue(mock_client.AddPort.called)
port = self._api._ports[vif_uuid]
self.assertEqual(self._api._uuid_to_hex(network_uuid),
port.vn_id)
self.assertEqual(self._api._uuid_string_to_hex(project_id),
port.vm_project_id)
示例8: ContrailInterfaceDriver
# 需要导入模块: from contrail_vrouter_api.vrouter_api import ContrailVRouterApi [as 别名]
# 或者: from contrail_vrouter_api.vrouter_api.ContrailVRouterApi import add_port [as 别名]
class ContrailInterfaceDriver(interface.LinuxInterfaceDriver):
""" Opencontrail VIF driver for neutron."""
@classmethod
def _parse_class_args(cls, cfg_parser):
cfg_parser.read(CONTRAIL_CFG_FILE)
cls._api_server_ip = _read_cfg(cfg_parser, 'APISERVER',
'api_server_ip', '127.0.0.1')
cls._api_server_port = _read_cfg(cfg_parser, 'APISERVER',
'api_server_port', '8082')
cls._api_server_use_ssl = _read_cfg(cfg_parser, 'APISERVER',
'use_ssl', False)
def __init__(self, conf):
super(ContrailInterfaceDriver, self).__init__(conf)
self._port_dict = {}
self._client = self._connect_to_api_server()
self._vrouter_client = ContrailVRouterApi()
timer = loopingcall.FixedIntervalLoopingCall(self._keep_alive)
timer.start(interval=2)
def _connect_to_api_server(self):
cfg_parser = ConfigParser.ConfigParser()
ContrailInterfaceDriver._parse_class_args(cfg_parser)
try:
client = VncApi(api_server_host=self._api_server_ip,
api_server_port=self._api_server_port,
api_server_use_ssl=self._api_server_use_ssl)
return client
except:
pass
def _keep_alive(self):
self._vrouter_client.periodic_connection_check()
def _delete_port(self, port_id):
self._vrouter_client.delete_port(port_id)
def _instance_locate(self, port_obj):
""" lookup the instance associated with the port object.
Create the vm instance if port object is not associated
with a vm instance
"""
if port_obj.get_virtual_machine_refs() is not None:
try:
vm_uuid = port_obj.get_virtual_machine_refs()[0]['uuid']
instance_obj = self._client.virtual_machine_read(id=vm_uuid)
return instance_obj
except NoIdError:
pass
vm_uuid = str(uuid.uuid4())
instance_obj = VirtualMachine(vm_uuid)
instance_obj.uuid = vm_uuid
self._client.virtual_machine_create(instance_obj)
port_obj.set_virtual_machine(instance_obj)
self._client.virtual_machine_interface_update(port_obj)
return instance_obj
def _add_port_to_agent(self, port_id, net_id, iface_name, mac_address):
port_obj = self._client.virtual_machine_interface_read(id=port_id)
if port_obj is None:
LOG.debug(_("Invalid port_id : %s"), port_id)
return
ips = port_obj.get_instance_ip_back_refs()
ip_addr = '0.0.0.0'
# get the ip address of the port if associated
if ips and len(ips):
ip_uuid = ips[0]['uuid']
ip = self._client.instance_ip_read(id=ip_uuid)
ip_addr = ip.get_instance_ip_address()
net_obj = self._client.virtual_network_read(id=net_id)
if net_obj is None:
LOG.debug(_("Invalid net_id : %s"), net_id)
return
# get the instance object the port is attached to
instance_obj = self._instance_locate(port_obj)
if instance_obj is None:
return
kwargs = {}
kwargs['ip_address'] = ip_addr
kwargs['network_uuid'] = net_id
kwargs['vm_project_uuid'] = net_obj.parent_uuid
self._vrouter_client.add_port(instance_obj.uuid, port_id, iface_name,
mac_address, **kwargs)
def plug(self, network_id, port_id, device_name, mac_address,
bridge=None, namespace=None, prefix=None):
if not ip_lib.device_exists(device_name, self.root_helper, namespace):
ip = ip_lib.IPWrapper(self.root_helper)
tap_name = device_name.replace(prefix or 'veth', 'veth')
# Create ns_dev in a namespace if one is configured.
root_dev, ns_dev = ip.add_veth(tap_name,
device_name,
#.........这里部分代码省略.........
示例9: interface_register
# 需要导入模块: from contrail_vrouter_api.vrouter_api import ContrailVRouterApi [as 别名]
# 或者: from contrail_vrouter_api.vrouter_api.ContrailVRouterApi import add_port [as 别名]
def interface_register(vm, vmi, iface_name):
api = ContrailVRouterApi()
mac = vmi.virtual_machine_interface_mac_addresses.mac_address[0]
api.add_port(vm.uuid, vmi.uuid, iface_name, mac)
示例10: OpenContrailVIFDriver
# 需要导入模块: from contrail_vrouter_api.vrouter_api import ContrailVRouterApi [as 别名]
# 或者: from contrail_vrouter_api.vrouter_api.ContrailVRouterApi import add_port [as 别名]
class OpenContrailVIFDriver(object):
def __init__(self):
self._vrouter_client = ContrailVRouterApi(doconnect=True)
def plug(self, instance, vif):
if_local_name = 'veth%s' % vif['id'][:8]
if_remote_name = 'ns%s' % vif['id'][:8]
# Device already exists so return.
if linux_net.device_exists(if_local_name):
return
undo_mgr = utils.UndoManager()
try:
utils.execute('ip', 'link', 'add', if_local_name, 'type', 'veth',
'peer', 'name', if_remote_name, run_as_root=True)
undo_mgr.undo_with(lambda: utils.execute(
'ip', 'link', 'delete', if_local_name, run_as_root=True))
utils.execute('ip', 'link', 'set', if_remote_name, 'address',
vif['address'], run_as_root=True)
except Exception:
LOG.exception("Failed to configure network")
msg = _('Failed to setup the network, rolling back')
undo_mgr.rollback_and_reraise(msg=msg, instance=instance)
def attach(self, instance, vif, container_id):
if_local_name = 'veth%s' % vif['id'][:8]
if_remote_name = 'ns%s' % vif['id'][:8]
undo_mgr = utils.UndoManager()
ipv4_address = '0.0.0.0'
ipv6_address = None
if 'subnets' in vif['network']:
subnets = vif['network']['subnets']
for subnet in subnets:
ips = subnet['ips'][0]
if (ips['version'] == 4):
if ips['address'] is not None:
ipv4_address = ips['address']
if (ips['version'] == 6):
if ips['address'] is not None:
ipv6_address = ips['address']
params = {
'ip_address': ipv4_address,
'vn_id': vif['network']['id'],
'display_name': instance['display_name'],
'hostname': instance['hostname'],
'host': instance['host'],
'vm_project_id': instance['project_id'],
'port_type': 'NovaVMPort',
'ip6_address': ipv6_address,
}
try:
utils.execute('ip', 'link', 'set', if_remote_name, 'netns',
container_id, run_as_root=True)
result = self._vrouter_client.add_port(
instance['uuid'], vif['id'],
if_local_name, vif['address'], **params)
if not result:
# follow the exception path
raise RuntimeError('add_port returned %s' % str(result))
utils.execute('ip', 'link', 'set', if_local_name, 'up',
run_as_root=True)
except Exception:
LOG.exception("Failed to attach the network")
msg = _('Failed to attach the network, rolling back')
undo_mgr.rollback_and_reraise(msg=msg, instance=instance)
# TODO(NetNS): attempt DHCP client; fallback to manual config if the
# container doesn't have an working dhcpclient
utils.execute('ip', 'netns', 'exec', container_id, 'dhclient',
if_remote_name, run_as_root=True)
def unplug(self, instance, vif):
try:
self._vrouter_client.delete_port(vif['id'])
except Exception:
LOG.exception(_("Delete port failed"), instance=instance)
if_local_name = 'veth%s' % vif['id'][:8]
utils.execute('ip', 'link', 'delete', if_local_name, run_as_root=True)
示例11: VRouterVIFDriver
# 需要导入模块: from contrail_vrouter_api.vrouter_api import ContrailVRouterApi [as 别名]
# 或者: from contrail_vrouter_api.vrouter_api.ContrailVRouterApi import add_port [as 别名]
#.........这里部分代码省略.........
try:
if not CONF.contrail.use_userspace_vhost:
linux_net.create_tap_dev(dev)
except processutils.ProcessExecutionError:
LOG.exception(_LE("Failed while plugging vif"), instance=instance)
try:
virt_type = cfg.CONF.libvirt.virt_type
except cfg.NoSuchOptError:
virt_type = cfg.CONF.libvirt_type
if virt_type == 'lxc':
dev = self._create_bridge(dev, instance)
ipv4_address = '0.0.0.0'
ipv6_address = None
subnets = vif['network']['subnets']
for subnet in subnets:
ips = subnet['ips'][0]
if (ips['version'] == 4):
if ips['address'] is not None:
ipv4_address = ips['address']
if (ips['version'] == 6):
if ips['address'] is not None:
ipv6_address = ips['address']
kwargs = {
'ip_address': ipv4_address,
'vn_id': vif['network']['id'],
'display_name': instance['display_name'],
'hostname': instance['hostname'],
'host': instance['host'],
'vm_project_id': instance['project_id'],
'port_type': self.PORT_TYPE,
'ip6_address': ipv6_address,
}
try:
result = self._vrouter_client.add_port(instance['uuid'],
vif['id'],
dev,
vif['address'],
**kwargs)
if not result:
LOG.exception(_LE("Failed while plugging vif"),
instance=instance)
except TApplicationException:
LOG.exception(_LE("Failed while plugging vif"), instance=instance)
except Exception as e:
from pprint import pformat
LOG.error(_("Error in plug: %s locals: %s instance %s"
%(str(e), pformat(locals()),
pformat(instance) if isinstance(instance, dict) else pformat(instance.__dict__))))
def unplug(self, instance, vif):
try:
dev = self.get_vif_devname(vif)
if isinstance(instance, dict):
task_state = instance['task_state']
else:
task_state = instance._task_state
try:
self._vrouter_client.delete_port(vif['id'])
if task_state == 'rebuilding':
self.delete_device(dev)
else:
# delegate the deletion of tap device to a deffered thread
worker_thread = threading.Thread(
target=self.delete_device,
name='contrailvif',
args=(dev,), kwargs={'timeout': 2})
worker_thread.start()
except (TApplicationException, processutils.ProcessExecutionError,
RuntimeError):
LOG.exception(_LE("Failed while unplugging vif"),
instance=instance)
except Exception as e:
from pprint import pformat
LOG.error(_("Error in unplug: %s locals: %s instance %s"
%(str(e), pformat(locals()),
pformat(instance) if isinstance(instance, dict) else pformat(instance.__dict__))))
def delete_device(self, dev, timeout=None):
if timeout is not None:
time.sleep(timeout)
LOG.debug(dev)
try:
virt_type = cfg.CONF.libvirt.virt_type
except cfg.NoSuchOptError:
virt_type = cfg.CONF.libvirt_type
if virt_type == 'lxc':
linux_net.LinuxBridgeInterfaceDriver.remove_bridge(
self._get_br_name(dev))
if not CONF.contrail.use_userspace_vhost:
linux_net.delete_net_dev(dev)
示例12: VRouterVIFDriver
# 需要导入模块: from contrail_vrouter_api.vrouter_api import ContrailVRouterApi [as 别名]
# 或者: from contrail_vrouter_api.vrouter_api.ContrailVRouterApi import add_port [as 别名]
class VRouterVIFDriver(LibvirtBaseVIFDriver):
"""VIF driver for VRouter when running Neutron."""
PORT_TYPE = 'NovaVMPort'
def __init__(self, get_connection):
super(VRouterVIFDriver, self).__init__(get_connection)
self._vrouter_client = ContrailVRouterApi()
timer = loopingcall.FixedIntervalLoopingCall(self._keep_alive)
timer.start(interval=2)
def _keep_alive(self):
self._vrouter_client.periodic_connection_check()
@staticmethod
def _get_br_name(dev):
"""Returns the bridge name for a tap device.
This is lxc related stuff. To work around the fact, that libvirt does
not support direct passthrough of devices to LXC."""
return 'br%s' % dev[3:]
def _create_bridge(self, dev, instance):
"""Creating a bridge and returning its name"""
br_name = self._get_br_name(dev)
try:
linux_net.LinuxBridgeInterfaceDriver.ensure_bridge(br_name, dev)
linux_net._execute('ip', 'link', 'set', br_name, 'promisc', 'on',
run_as_root=True)
except processutils.ProcessExecutionError:
LOG.exception(_LE("Failed while plugging vif"), instance=instance)
return br_name
def get_config(self, instance, vif, image_meta, inst_type):
conf = super(VRouterVIFDriver, self).get_config(instance, vif,
image_meta, inst_type)
dev = self.get_vif_devname(vif)
if cfg.CONF.libvirt.virt_type == 'lxc':
# for lxc we need to pass a bridge to libvirt
br_name = self._get_br_name(dev)
designer.set_vif_host_backend_bridge_config(conf, br_name)
else:
designer.set_vif_host_backend_ethernet_config(conf, dev)
designer.set_vif_bandwidth_config(conf, inst_type)
return conf
def plug(self, instance, vif):
dev = self.get_vif_devname(vif)
try:
linux_net.create_tap_dev(dev)
except processutils.ProcessExecutionError:
LOG.exception(_LE("Failed while plugging vif"), instance=instance)
if cfg.CONF.libvirt.virt_type == 'lxc':
dev = self._create_bridge(dev, instance)
kwargs = {
'ip_address': vif['network']['subnets'][0]['ips'][0]['address'],
'vn_id': vif['network']['id'],
'display_name': instance['display_name'],
'hostname': instance['hostname'],
'host': instance['host'],
'vm_project_id': instance['project_id'],
'port_type': self.PORT_TYPE,
}
try:
result = self._vrouter_client.add_port(instance['uuid'],
vif['id'],
dev,
vif['address'],
**kwargs)
if not result:
LOG.exception(_LE("Failed while plugging vif"),
instance=instance)
except TApplicationException:
LOG.exception(_LE("Failed while plugging vif"), instance=instance)
def unplug(self, instance, vif):
dev = self.get_vif_devname(vif)
try:
self._vrouter_client.delete_port(vif['id'])
#delegate the deletion of tap device to a deffered thread
worker_thread = threading.Thread(target=self.delete_device, \
name='contrailvif', args=(dev,))
worker_thread.start()
except (TApplicationException, processutils.ProcessExecutionError,\
RuntimeError):
LOG.exception(_LE("Failed while unplugging vif"),
instance=instance)
def delete_device(self, dev):
time.sleep(2)
LOG.debug(dev)
if cfg.CONF.libvirt.virt_type == 'lxc':
linux_net.LinuxBridgeInterfaceDriver.remove_bridge(
self._get_br_name(dev))
#.........这里部分代码省略.........
示例13: NetnsManager
# 需要导入模块: from contrail_vrouter_api.vrouter_api import ContrailVRouterApi [as 别名]
# 或者: from contrail_vrouter_api.vrouter_api.ContrailVRouterApi import add_port [as 别名]
#.........这里部分代码省略.........
self.ip_ns.netns.execute([self.LBAAS_PROCESS, '-f', self.cfg_file, '-D',
'-p', pid_file])
self.ip_ns.netns.execute(['route', 'add', 'default', 'gw', self.gw_ip])
else:
if pid is not None:
self.ip_ns.netns.execute([self.LBAAS_PROCESS, '-f', self.cfg_file, '-D', '-p', pid_file, '-sf', pid])
else:
self.ip_ns.netns.execute([self.LBAAS_PROCESS, '-f', self.cfg_file, '-D',
'-p', pid_file])
try:
self.ip_ns.netns.execute(['route', 'add', 'default', 'gw', self.gw_ip])
except RuntimeError:
pass
def release_lbaas(self):
if not self.ip_ns.netns.exists(self.namespace):
raise ValueError('Need to create the network namespace before '
'relasing lbaas')
pid = self._get_lbaas_pid()
if pid is not None:
cmd = """kill -9 %(pid)s""" % {'pid':pid}
try:
if "check_output" not in dir(subprocess):
s = _check_output(cmd)
else:
s = subprocess.check_output(cmd, shell=True)
print ("Haproxy process with pid %d config file %s killed" %(pid, self.cfg_file), file=sys.stderr)
except subprocess.CalledProcessError:
print ("SIGKILL Error for pid %d %s" %(pid, self.cfg_file), file=sys.stderr)
try:
self.ip_ns.netns.execute(['route', 'del', 'default'])
except RuntimeError:
pass
def destroy(self):
if not self.ip_ns.netns.exists(self.namespace):
raise ValueError('Namespace %s does not exist' % self.namespace)
for device in self.ip_ns.get_devices(exclude_loopback=True):
ip_lib.IPDevice(device.name,
self.root_helper,
self.namespace).link.delete()
self.ip_ns.netns.delete(self.namespace)
def plug_namespace_interface(self):
for nic in self.nics:
self._add_port_to_agent(nic,
display_name='NetNS %s %s interface'
% (self.vm_uuid, nic['name']))
def unplug_namespace_interface(self):
for nic in self.nics:
self._delete_port_to_agent(nic)
def _create_interfaces(self, ip, nic):
if ip_lib.device_exists(nic['name'],
self.root_helper,
namespace=self.namespace):
ip_lib.IPDevice(nic['name'],
self.root_helper,
self.namespace).link.delete()
root_dev, ns_dev = ip.add_veth(self._get_tap_name(nic['uuid']),
nic['name'],
namespace2=self.namespace)
if nic['mac']:
ns_dev.link.set_address(str(nic['mac']))
ns_dev.link.set_up()
root_dev.link.set_up()
if nic['ip']:
ip = nic['ip']
ns_dev.addr.flush()
ns_dev.addr.add(ip.version, str(ip), str(ip.broadcast))
else:
#TODO(ethuleau): start DHCP client
raise NotImplementedError
# disable reverse path filtering
self.ip_ns.netns.execute(['sysctl', '-w',
'net.ipv4.conf.%s.rp_filter=2' % nic['name']]
)
def _add_port_to_agent(self, nic, display_name=None):
kwargs = {}
kwargs['port_type'] = self.PORT_TYPE
kwargs['ip_address'] = str(nic['ip'].ip)
if display_name:
kwargs['display_name'] = display_name
if not (self.vrouter_client.add_port(self.vm_uuid, nic['uuid'],
self._get_tap_name(nic['uuid']),
str(nic['mac']), **kwargs)):
raise ValueError('Cannot add interface %s on the vrouter' %
nic['uuid'])
def _delete_port_to_agent(self, nic):
self.vrouter_client.delete_port(nic['uuid'])
示例14: VRouterApiTest
# 需要导入模块: from contrail_vrouter_api.vrouter_api import ContrailVRouterApi [as 别名]
# 或者: from contrail_vrouter_api.vrouter_api.ContrailVRouterApi import add_port [as 别名]
class VRouterApiTest(unittest.TestCase):
def setUp(self):
self._api = ContrailVRouterApi()
def test_create_port(self):
mock_client = mock.Mock()
self._api._rpc_client_instance = mock.MagicMock(
name='rpc_client_instance')
self._api._rpc_client_instance.return_value = mock_client
self._api.add_port(str(uuid.uuid1()), str(uuid.uuid1()), 'tapX',
'aa:bb:cc:ee:ff:00')
self.assertTrue(mock_client.AddPort.called)
def test_delete_port(self):
mock_client = mock.Mock()
self._api._rpc_client_instance = mock.MagicMock(
name='rpc_client_instance')
self._api._rpc_client_instance.return_value = mock_client
vm_uuid = uuid.uuid1()
vif_uuid = uuid.uuid1()
self._api.add_port(str(vm_uuid), str(vif_uuid), 'tapX',
'aa:bb:cc:ee:ff:00')
self.assertTrue(mock_client.AddPort.called)
self.assertTrue(self._api._ports[vif_uuid])
self._api.delete_port(str(vif_uuid))
self.assertTrue(mock_client.DeletePort.called)
def test_resynchronize(self):
self._api._rpc_client_instance = mock.MagicMock(
name='rpc_client_instance')
self._api._rpc_client_instance.return_value = None
vm_uuid = str(uuid.uuid1())
vif_uuid = str(uuid.uuid1())
self._api.add_port(vm_uuid, vif_uuid, 'tapX', 'aa:bb:cc:ee:ff:00')
mock_client = mock.Mock()
self._api._rpc_client_instance.return_value = mock_client
self._api.periodic_connection_check()
self.assertTrue(mock_client.AddPort.called)
def test_additional_arguments(self):
mock_client = mock.Mock()
self._api._rpc_client_instance = mock.MagicMock(
name='rpc_client_instance')
self._api._rpc_client_instance.return_value = mock_client
vif_uuid = uuid.uuid1()
network_uuid = uuid.uuid1()
project_uuid = uuid.uuid1()
self._api.add_port(str(uuid.uuid1()), str(vif_uuid), 'tapX',
'aa:bb:cc:ee:ff:00',
network_uuid=str(network_uuid),
vm_project_uuid=str(project_uuid))
self.assertTrue(mock_client.AddPort.called)
port = self._api._ports[vif_uuid]
self.assertEqual(self._api._uuid_to_hex(network_uuid),
port.vn_id)
self.assertEqual(self._api._uuid_to_hex(project_uuid),
port.vm_project_uuid)
示例15: setup
# 需要导入模块: from contrail_vrouter_api.vrouter_api import ContrailVRouterApi [as 别名]
# 或者: from contrail_vrouter_api.vrouter_api.ContrailVRouterApi import add_port [as 别名]
def setup(pod_namespace, pod_name, docker_id):
"""
project: pod_namespace
network: pod_name
netns: docker_id{12}
"""
client = ContrailClient()
# Kubelet::createPodInfraContainer ensures that State.Pid is set
pid = docker_get_pid(docker_id)
if pid == 0:
raise Exception('Unable to read State.Pid')
short_id = docker_id[0:11]
if not os.path.exists('/var/run/netns'):
os.mkdir('/var/run/netns')
Shell.run('ln -sf /proc/%d/ns/net /var/run/netns/%s' % (pid, short_id))
manager = LxcManager()
if client._net_mode == 'none':
instance_ifname = 'veth0'
else:
instance_ifname = 'eth0'
uid, podName = getDockerPod(docker_id)
podInfo = None
for i in range(0, 120):
podInfo = getPodInfo(podName)
if 'annotations' in podInfo["metadata"] and \
'nic_uuid' in podInfo["metadata"]["annotations"]:
break
time.sleep(1)
# The lxc_manager uses the mac_address to setup the container interface.
# Additionally the ip-address, prefixlen and gateway are also used.
if not 'annotations' in podInfo["metadata"] or not 'nic_uuid' in podInfo["metadata"]["annotations"]:
logging.error('No annotations in pod %s', podInfo["metadata"]["name"])
sys.exit(1)
podAnnotations = podInfo["metadata"]["annotations"]
nic_uuid = podAnnotations["nic_uuid"]
mac_address = podAnnotations["mac_address"]
if client._net_mode == 'none':
ifname = manager.create_interface(short_id, instance_ifname,
mac_address)
else:
ifname = manager.move_interface(short_id, pid, instance_ifname,
mac_address)
api = ContrailVRouterApi()
api.add_port(uid, nic_uuid, ifname, mac_address,
port_type='NovaVMPort',
display_name=podName,
hostname=podName+'.'+pod_namespace)
ip_address = podAnnotations["ip_address"]
gateway = podAnnotations["gateway"]
Shell.run('ip netns exec %s ip addr add %s/32 peer %s dev %s' % \
(short_id, ip_address, gateway, instance_ifname))
Shell.run('ip netns exec %s ip route add default via %s' % \
(short_id, gateway))
Shell.run('ip netns exec %s ip link set %s up' %
(short_id, instance_ifname))