Beispiel #1
0
    def test_add_manager_appends(self):
        ovs = ovs_lib.BaseOVS()
        ovsdb_cfg_connections = []
        manager_connections = []
        manager_removal = []

        for _ in range(5):
            _port = self.useFixture(
                port.ExclusivePort(
                    const.PROTO_NAME_TCP,
                    start=net_helpers.OVS_MANAGER_TEST_PORT_FIRST,
                    end=net_helpers.OVS_MANAGER_TEST_PORT_LAST)).port
            ovsdb_cfg_connections.append('tcp:127.0.0.1:%s' % _port)
            manager_connections.append('ptcp:%s:127.0.0.1' % _port)

        for index, conn_uri in enumerate(ovsdb_cfg_connections):
            helpers.enable_connection_uri(conn_uri)
            manager_removal.append(
                ovs.ovsdb.remove_manager(manager_connections[index]))
            self.addCleanup(manager_removal[index].execute)
            self.assertIn(manager_connections[index],
                          ovs.ovsdb.get_manager().execute())

        for remove in manager_removal:
            remove.execute()

        for connection in manager_connections:
            self.assertNotIn(connection, ovs.ovsdb.get_manager().execute())
Beispiel #2
0
 def assert_dhcp_resources(self, network, dhcp_enabled):
     ovs = ovs_lib.BaseOVS()
     port = network.ports[0]
     iface_name = self.get_interface_name(network, port)
     self.assertEqual(dhcp_enabled, ovs.port_exists(iface_name))
     self.assert_dhcp_namespace(network.namespace, dhcp_enabled)
     self.assert_dhcp_device(network.namespace, iface_name, dhcp_enabled)
Beispiel #3
0
    def _setup_isoflat_bridge(self, phy_br_name, iso_br_name):
        ovs = ovs_lib.BaseOVS()
        ip_wrapper = ip_lib.IPWrapper()
        phy_br = bridge_lib.BridgeDevice(phy_br_name)

        iso_br = ovs.add_bridge(iso_br_name)
        iso_br_link = ip_lib.IPDevice(iso_br_name)
        iso_br_link.link.set_up()

        phy_if_name = self._get_phy_if_name(iso_br_name)
        iso_if_name = self._get_iso_if_name(iso_br_name)
        device = ip_lib.IPDevice(iso_if_name)
        if device.exists():
            device.link.delete()
            # Give udev a chance to process its rules here, to avoid
            # race conditions between commands launched by udev rules
            # and the subsequent call to ip_wrapper.add_veth
            utils.execute(['udevadm', 'settle', '--timeout=10'])
        phy_veth, iso_veth = ip_wrapper.add_veth(phy_if_name, iso_if_name)
        iso_br.add_port(iso_if_name)
        phy_br.addif(phy_veth)
        LOG.info("Added OVS Isoflat bridge %s and veth port pair "
                 "(%s, %s)" % (iso_br_name, phy_if_name, iso_if_name))
        # enable veth to pass traffic
        phy_veth.link.set_up()
        iso_veth.link.set_up()
Beispiel #4
0
def do_main(conf):
    configuration_bridges = set(
        [conf.ovs_integration_bridge, conf.external_network_bridge])
    ovs = ovs_lib.BaseOVS()
    ovs_bridges = set(ovs.get_bridges())
    available_configuration_bridges = configuration_bridges & ovs_bridges

    if conf.ovs_all_ports:
        bridges = ovs_bridges
    else:
        bridges = available_configuration_bridges

    try:
        # The ovs_cleanup method not added to the deprecated vsctl backend
        for bridge in bridges:
            LOG.info(_LI("Cleaning bridge: %s"), bridge)
            ovs.ovsdb.ovs_cleanup(bridge,
                                  conf.ovs_all_ports).execute(check_error=True)
    except AttributeError:

        # Collect existing ports created by Neutron on configuration bridges.
        # After deleting ports from OVS bridges, we cannot determine which
        # ports were created by Neutron, so port information is collected now.
        ports = collect_neutron_ports(available_configuration_bridges)

        for bridge in bridges:
            LOG.info(_LI("Cleaning bridge: %s"), bridge)
            ovs = ovs_lib.OVSBridge(bridge)
            ovs.delete_ports(all_ports=conf.ovs_all_ports)

        # Remove remaining ports created by Neutron (usually veth pair)
        delete_neutron_ports(ports)

    LOG.info(_LI("OVS cleanup completed successfully"))
Beispiel #5
0
    def _process_router_if_compatible(self, router):
        if (self.conf.external_network_bridge and not ovs_lib.BaseOVS().
                bridge_exists(self.conf.external_network_bridge)):
            LOG.error(_("The external network bridge '%s' does not exist"),
                      self.conf.external_network_bridge)
            return

        # We don't support namespaces so only process the router associated
        # with the configured agent id.
        if (router['id'] != self.conf.router_id):
            raise n_exc.RouterNotCompatibleWithAgent(router_id=router['id'])

        # Either ex_net_id or handle_internal_only_routers must be set
        ex_net_id = (router['external_gateway_info'] or {}).get('network_id')
        if not ex_net_id and not self.conf.handle_internal_only_routers:
            raise n_exc.RouterNotCompatibleWithAgent(router_id=router['id'])

        # If target_ex_net_id and ex_net_id are set they must be equal
        target_ex_net_id = self._fetch_external_net_id()
        if (target_ex_net_id and ex_net_id and ex_net_id != target_ex_net_id):
            # Double check that our single external_net_id has not changed
            # by forcing a check by RPC.
            if ex_net_id != self._fetch_external_net_id(force=True):
                raise n_exc.RouterNotCompatibleWithAgent(
                    router_id=router['id'])

        if router['id'] not in self.router_info:
            self._process_added_router(router)
        else:
            self._process_updated_router(router)
Beispiel #6
0
def main():
    """Main method for cleaning up OVS bridges.

    The utility cleans up the integration bridges used by Neutron.
    """

    conf = setup_conf()
    conf()
    config.setup_logging()

    configuration_bridges = set([conf.ovs_integration_bridge,
                                 conf.external_network_bridge])
    ovs = ovs_lib.BaseOVS()
    ovs_bridges = set(ovs.get_bridges())
    available_configuration_bridges = configuration_bridges & ovs_bridges

    if conf.ovs_all_ports:
        bridges = ovs_bridges
    else:
        bridges = available_configuration_bridges

    # Collect existing ports created by Neutron on configuration bridges.
    # After deleting ports from OVS bridges, we cannot determine which
    # ports were created by Neutron, so port information is collected now.
    ports = collect_neutron_ports(available_configuration_bridges)

    for bridge in bridges:
        LOG.info(_LI("Cleaning bridge: %s"), bridge)
        ovs = ovs_lib.OVSBridge(bridge)
        ovs.delete_ports(all_ports=conf.ovs_all_ports)

    # Remove remaining ports created by Neutron (usually veth pair)
    delete_neutron_ports(ports)

    LOG.info(_LI("OVS cleanup completed successfully"))
Beispiel #7
0
 def check_ovs_and_skip(test):
     ovs = ovs_lib.BaseOVS()
     current_ovs_version = version.Version(ovs.config['ovs_version'])
     if current_ovs_version < version.Version(ovs_version):
         test.skipTest("This test requires OVS version %s or higher." %
                       ovs_version)
     return f(test)
Beispiel #8
0
 def setUp(self):
     super(ImplIdlTestCase, self).setUp()
     self.config(group='OVS', ovsdb_interface='native')
     self.ovs = ovs_lib.BaseOVS()
     self.brname = utils.get_rand_device_name(net_helpers.BR_PREFIX)
     # Make sure exceptions pass through by calling do_post_commit directly
     mock.patch.object(
         impl_idl.OvsVsctlTransaction, "post_commit",
         side_effect=impl_idl.OvsVsctlTransaction.do_post_commit,
         autospec=True).start()
Beispiel #9
0
def unplug_device(conf, device):
    try:
        device.link.delete()
    except RuntimeError:
        # Maybe the device is OVS port, so try to delete
        ovs = ovs_lib.BaseOVS()
        bridge_name = ovs.get_bridge_for_iface(device.name)
        if bridge_name:
            bridge = ovs_lib.OVSBridge(bridge_name)
            bridge.delete_port(device.name)
        else:
            LOG.debug('Unable to find bridge for device: %s', device.name)
 def test_create_bridges(self):
     bridges_to_monitor = ['br01', 'br02', 'br03']
     bridges_to_create = ['br01', 'br02', 'br03', 'br04', 'br05']
     self.ovs = ovs_lib.BaseOVS()
     self.ovs.ovsdb.idl_monitor.start_bridge_monitor(bridges_to_monitor)
     self.addCleanup(self._delete_bridges, bridges_to_create)
     event = WaitForBridgesEvent(bridges_to_monitor)
     self.ovs.ovsdb.idl_monitor.notify_handler.watch_event(event)
     for bridge in bridges_to_create:
         self.ovs.add_bridge(bridge)
     self.assertTrue(event.wait())
     self.assertEqual(bridges_to_monitor,
                      self.ovs.ovsdb.idl_monitor.bridges_added)
     self.assertEqual([], self.ovs.ovsdb.idl_monitor.bridges_added)
Beispiel #11
0
def ovsdb_native_supported():
    # Running the test should ensure we are configured for OVSDB native
    try:
        ovs = ovs_lib.BaseOVS()
        ovs.get_bridges()
        return True
    except ImportError as ex:
        LOG.error(_LE("Failed to import required modules. Ensure that the "
                      "python-openvswitch package is installed. Error: %s"),
                  ex.message)
    except Exception as ex:
        LOG.exception(six.text_type(ex))

    return False
Beispiel #12
0
def ovsdb_native_supported():
    # Running the test should ensure we are configured for OVSDB native
    try:
        ovs = ovs_lib.BaseOVS()
        ovs.get_bridges()
        return True
    except ImportError as ex:
        LOG.error(
            "Failed to import required modules. Ensure that the "
            "python-openvswitch package is installed. Error: %s", ex)
    except Exception:
        LOG.exception("Unexpected exception occurred.")

    return False
Beispiel #13
0
 def setUp(self):
     super(OVSAgentTestFramework, self).setUp()
     agent_rpc = ('neutron.plugins.ml2.drivers.openvswitch.agent.'
                  'ovs_neutron_agent.OVSPluginApi')
     mock.patch(agent_rpc).start()
     mock.patch('neutron.agent.rpc.PluginReportStateAPI').start()
     self.br_int = base.get_rand_name(n_const.DEVICE_NAME_MAX_LEN,
                                      prefix='br-int')
     self.br_tun = base.get_rand_name(n_const.DEVICE_NAME_MAX_LEN,
                                      prefix='br-tun')
     patch_name_len = n_const.DEVICE_NAME_MAX_LEN - len("-patch-tun")
     self.patch_tun = "%s-patch-tun" % self.br_int[patch_name_len:]
     self.patch_int = "%s-patch-int" % self.br_tun[patch_name_len:]
     self.ovs = ovs_lib.BaseOVS()
     self.config = self._configure_agent()
     self.driver = interface.OVSInterfaceDriver(self.config)
Beispiel #14
0
def unplug_device(conf, device):
    orig_log_fail_as_error = device.get_log_fail_as_error()
    device.set_log_fail_as_error(False)
    try:
        device.link.delete()
    except RuntimeError:
        device.set_log_fail_as_error(orig_log_fail_as_error)
        # Maybe the device is OVS port, so try to delete
        ovs = ovs_lib.BaseOVS()
        bridge_name = ovs.get_bridge_for_iface(device.name)
        if bridge_name:
            bridge = ovs_lib.OVSBridge(bridge_name)
            bridge.delete_port(device.name)
        else:
            LOG.debug('Unable to find bridge for device: %s', device.name)
    finally:
        device.set_log_fail_as_error(orig_log_fail_as_error)
Beispiel #15
0
def do_main(conf):
    configuration_bridges = set([conf.ovs_integration_bridge])
    ovs = ovs_lib.BaseOVS()
    ovs_bridges = set(ovs.get_bridges())
    available_configuration_bridges = configuration_bridges & ovs_bridges

    if conf.ovs_all_ports:
        bridges = ovs_bridges
    else:
        bridges = available_configuration_bridges

    for bridge in bridges:
        LOG.info("Cleaning bridge: %s", bridge)
        ovs.ovsdb.ovs_cleanup(bridge,
                              conf.ovs_all_ports).execute(check_error=True)

    LOG.info("OVS cleanup completed successfully")
Beispiel #16
0
    def test_create_bridges(self):
        bridges_added = []
        bridges_to_monitor = ['br01', 'br02', 'br03']
        bridges_to_create = ['br01', 'br02', 'br03', 'br04', 'br05']
        self.ovs = ovs_lib.BaseOVS()
        self.ovs.ovsdb.idl_monitor.start_bridge_monitor(bridges_to_monitor)
        self.addCleanup(self._delete_bridges, bridges_to_create)

        for bridge in bridges_to_create:
            self.ovs.add_bridge(bridge)

        def retrieve_bridges(bridges_added):
            bridges_added += self.ovs.ovsdb.idl_monitor.bridges_added
            return len(bridges_added)

        common_utils.wait_until_true(
            lambda: retrieve_bridges(bridges_added) == len(bridges_to_monitor),
            timeout=5)
        bridges_added.sort()
        self.assertEqual(bridges_to_monitor, bridges_added)
        self.assertEqual([], self.ovs.ovsdb.idl_monitor.bridges_added)
Beispiel #17
0
 def setUp(self):
     super(OVSLibTestCase, self).setUp()
     self.ovs = ovs_lib.BaseOVS()
Beispiel #18
0
 def setUp(self):
     super(OVSBridgeTestBase, self).setUp()
     self.ovs = ovs_lib.BaseOVS()
     self.br = self.useFixture(net_helpers.OVSBridgeFixture()).bridge
Beispiel #19
0
 def _setUp(self):
     ovs = ovs_lib.BaseOVS()
     self.bridge = common_base.create_resource(self.prefix, ovs.add_bridge)
     self.addCleanup(self.bridge.destroy)
Beispiel #20
0
 def _setUp(self):
     ovs = ovs_lib.BaseOVS()
     self.bridge = ovs.add_bridge(self.prefix)
     self.addCleanup(self.bridge.destroy)
Beispiel #21
0
 def _if_bridge_exists(bridge_name):
     ovs = ovs_lib.BaseOVS()
     if bridge_name in ovs.get_bridges() or bridge_lib.BridgeDevice(
             bridge_name).exists():
         return True
     return False
Beispiel #22
0
 def manages_this_trunk(self, trunk_id):
     """True if this OVSDB handler manages trunk based on given ID."""
     bridge_name = utils.gen_trunk_br_name(trunk_id)
     return ovs_lib.BaseOVS().bridge_exists(bridge_name)
Beispiel #23
0
 def setUp(self):
     super(OVSBridgeFixture, self).setUp()
     ovs = ovs_lib.BaseOVS()
     self.bridge = common_base.create_resource(self.prefix, ovs.add_bridge)
     self.addCleanup(self.bridge.destroy)
Beispiel #24
0
 def setUp(self):
     super(BaseOVSLinuxTestCase, self).setUp()
     self.config(group='OVS', ovsdb_interface=self.ovsdb_interface)
     self.ovs = ovs_lib.BaseOVS()
     self.ip = ip_lib.IPWrapper()