예제 #1
0
 def setUp(self):
     super(BaseOvnIdlTest, self).setUp()
     ovn_conf.register_opts()
     self.api = impl.OvsdbSbOvnIdl(self.connection['OVN_Southbound'])
     self.nbapi = impl.OvsdbNbOvnIdl(self.connection['OVN_Northbound'])
     self.handler = ovsdb_event.RowEventHandler()
     self.api.idl.notify = self.handler.notify
예제 #2
0
 def setUp(self):
     super(TestSbApi, self).setUp()
     self.data = {
         'chassis': [
             {
                 'external_ids': {
                     'ovn-bridge-mappings': 'public:br-ex,private:br-0'
                 }
             },
             {
                 'external_ids': {
                     'ovn-bridge-mappings': 'public:br-ex,public2:br-ex'
                 }
             },
             {
                 'external_ids': {
                     'ovn-bridge-mappings': 'public:br-ex'
                 }
             },
         ]
     }
     self.api = impl.OvsdbSbOvnIdl(self.connection['OVN_Southbound'])
     self.nbapi = impl.OvsdbNbOvnIdl(self.connection['OVN_Northbound'])
     self.load_test_data()
     self.handler = ovsdb_event.RowEventHandler()
     self.api.idl.notify = self.handler.notify
예제 #3
0
    def setUp(self):
        super(TestSBImplIdlOvn, self).setUp()

        self.chassis_table = fakes.FakeOvsdbTable.create_one_ovsdb_table()
        self._tables = {}
        self._tables['Chassis'] = self.chassis_table

        with mock.patch.object(impl_idl_ovn, 'get_connection',
                               return_value=mock.Mock()):
            impl_idl_ovn.OvsdbSbOvnIdl.ovsdb_connection = None
            self.sb_ovn_idl = impl_idl_ovn.OvsdbSbOvnIdl(mock.Mock())

        self.sb_ovn_idl.idl.tables = self._tables
예제 #4
0
    def setUp(self):
        super(TestSBImplIdlOvn, self).setUp()
        self.chassis_table = fakes.FakeOvsdbTable.create_one_ovsdb_table()

        self._tables = {}
        self._tables['Chassis'] = self.chassis_table

        with mock.patch.object(impl_idl_ovn.OvsdbSbOvnIdl,
                               'from_worker',
                               return_value=mock.Mock()):
            with mock.patch.object(ovs_idl.Backend,
                                   'autocreate_indices',
                                   create=True):
                impl_idl_ovn.OvsdbSbOvnIdl.ovsdb_connection = None
                self.sb_ovn_idl = impl_idl_ovn.OvsdbSbOvnIdl(mock.MagicMock())

        self.sb_ovn_idl.idl.tables = self._tables
예제 #5
0
 def test_setting_ovsdb_probe_timeout(self, mock_get_probe_interval):
     mock_get_probe_interval.return_value = 5000
     inst = impl_idl_ovn.OvsdbSbOvnIdl(mock.Mock())
     inst.idl._session.reconnect.set_probe_interval.assert_called_with(5000)
예제 #6
0
 def test_setting_ovsdb_probe_timeout_default_value(self):
     inst = impl_idl_ovn.OvsdbSbOvnIdl(mock.Mock())
     inst.idl._session.reconnect.set_probe_interval.assert_called_with(
         60000)
예제 #7
0
파일: ovsdb.py 프로젝트: stackhpc/neutron
 def start(self):
     LOG.info('Getting OvsdbSbOvnIdl for MetadataAgent with retry')
     conn = connection.Connection(self,
                                  timeout=config.get_ovn_ovsdb_timeout())
     return impl_idl_ovn.OvsdbSbOvnIdl(conn)
def main():
    """Main method for syncing neutron networks and ports with ovn nb db.

    This script provides a utility for syncing the OVN Northbound Database
    with the Neutron database.

    This script is used for the migration from ML2/OVS to ML2/OVN.
    """
    conf = setup_conf()

    # if no config file is passed or no configuration options are passed
    # then load configuration from /etc/neutron/neutron.conf
    try:
        conf(project='neutron')
    except TypeError:
        LOG.error('Error parsing the configuration values. Please verify.')
        return

    logging.setup(conf, 'neutron_ovn_db_sync_util')
    LOG.info('Started Neutron OVN db sync')
    mode = ovn_conf.get_ovn_neutron_sync_mode()
    if mode not in [ovn_db_sync.SYNC_MODE_LOG, ovn_db_sync.SYNC_MODE_REPAIR]:
        LOG.error('Invalid sync mode : ["%s"]. Should be "log" or "repair"',
                  mode)
        return

    # Validate and modify core plugin and ML2 mechanism drivers for syncing.
    if (cfg.CONF.core_plugin.endswith('.Ml2Plugin')
            or cfg.CONF.core_plugin == 'ml2'):
        cfg.CONF.core_plugin = (
            'neutron.cmd.ovn.neutron_ovn_db_sync_util.Ml2Plugin')
        if not cfg.CONF.ml2.mechanism_drivers:
            LOG.error('please use --config-file to specify '
                      'neutron and ml2 configuration file.')
            return
        if 'ovn' not in cfg.CONF.ml2.mechanism_drivers:
            LOG.error('No "ovn" mechanism driver found : "%s".',
                      cfg.CONF.ml2.mechanism_drivers)
            return
        cfg.CONF.set_override('mechanism_drivers', ['ovn-sync'], 'ml2')
        conf.service_plugins = [
            'neutron.services.ovn_l3.plugin.OVNL3RouterPlugin',
            'neutron.services.segments.plugin.Plugin',
            'port_forwarding',
        ]
    else:
        LOG.error('Invalid core plugin : ["%s"].', cfg.CONF.core_plugin)
        return

    try:
        conn = impl_idl_ovn.get_connection(impl_idl_ovn.OvsdbNbOvnIdl)
        ovn_api = impl_idl_ovn.OvsdbNbOvnIdl(conn)
    except RuntimeError:
        LOG.error('Invalid --ovn-ovn_nb_connection parameter provided.')
        return

    try:
        sb_conn = impl_idl_ovn.get_connection(impl_idl_ovn.OvsdbSbOvnIdl)
        ovn_sb_api = impl_idl_ovn.OvsdbSbOvnIdl(sb_conn)
    except RuntimeError:
        LOG.error('Invalid --ovn-ovn_sb_connection parameter provided.')
        return

    manager.init()
    core_plugin = directory.get_plugin()
    driver = core_plugin.mechanism_manager.mech_drivers['ovn-sync']
    # The L3 code looks for the OVSDB connection on the 'ovn' driver
    # and will fail with a KeyError if it isn't there
    core_plugin.mechanism_manager.mech_drivers['ovn'] = driver
    ovn_driver = driver.obj
    ovn_driver._nb_ovn = ovn_api
    ovn_driver._sb_ovn = ovn_sb_api

    synchronizer = ovn_db_sync.OvnNbSynchronizer(core_plugin, ovn_api,
                                                 ovn_sb_api, mode, ovn_driver)

    LOG.info('Sync for Northbound db started with mode : %s', mode)
    synchronizer.do_sync()
    LOG.info('Sync completed for Northbound db')

    sb_synchronizer = ovn_db_sync.OvnSbSynchronizer(core_plugin, ovn_sb_api,
                                                    ovn_driver)

    LOG.info('Sync for Southbound db started with mode : %s', mode)
    sb_synchronizer.do_sync()
    LOG.info('Sync completed for Southbound db')
예제 #9
0
파일: plugin.py 프로젝트: jahau/neutron
 def _sb_ovn(self):
     if self._sb_ovn_idl is None:
         LOG.info("Getting OvsdbSbOvnIdl")
         conn = impl_idl_ovn.get_connection(impl_idl_ovn.OvsdbSbOvnIdl)
         self._sb_ovn_idl = impl_idl_ovn.OvsdbSbOvnIdl(conn)
     return self._sb_ovn_idl
예제 #10
0
 def start(self):
     conn = connection.Connection(self,
                                  timeout=config.get_ovn_ovsdb_timeout())
     return impl_idl_ovn.OvsdbSbOvnIdl(conn)