neutron/agent/ovsdb/api.py
这个模块里面定义的都是 ovs 操作的抽象类。我们一个个分析。
@six.add_metaclass(abc.ABCMeta)
class API(object):
def __init__(self, context):
self.context = context
这个方法用来导入真正的访问 ovs 的 API 接口
@staticmethod
def get(context, iface_name=None):
"""Return the configured OVSDB API implementation"""
iface = importutils.import_class(
interface_map[iface_name or cfg.CONF.OVS.ovsdb_interface])
return iface(context)
ovsdb_interface
就在本模块中定义,默认为 native
,对应的类为:neutron.agent.ovsdb.impl_idl.OvsdbIdl
,这个类正好是 API
的子类。
我们就直接分析这个类就可以了。
neutron/agent/ovsdb/impl_idl.py
ovsdb_connection = connection.Connection(cfg.CONF.OVS.ovsdb_connection,
cfg.CONF.ovs_vsctl_timeout,
'Open_vSwitch')
def __init__(self, context):
super(OvsdbIdl, self).__init__(context)
OvsdbIdl.ovsdb_connection.start()
self.idl = OvsdbIdl.ovsdb_connection.idl
ovsdb_connection
用于连接 ovsdb 数据库,在本模块中定义,默认为:tcp:127.0.0.1:6640
ovs_vsctl_timeout
ovs-vsctl 命令的超时时间,默认为 10
启动与 ovsdb server 的数据、命令交流
获取 ovsdb 的所有 table
获取数据库中 Open_vSwitch
表的第一行记录
构造一个 NeutronOVSDBTransaction
对象
def transaction(self, check_error=False, log_errors=True, **kwargs):
return NeutronOVSDBTransaction(self, OvsdbIdl.ovsdb_connection,
self.context.vsctl_timeout,
check_error, log_errors)
创建一个 AddManagerCommand
对象
创建一个 GetManagerCommand
对象
创建一个 RemoveManagerCommand
对象
创建一个 AddBridgeCommand
对象
创建一个 DelBridgeCommand
对象
创建一个 BridgeExistsCommand
对象
创建一个 PortToBridgeCommand
对象
创建一个 InterfaceToBridgeCommand
对象
创建一个 ListBridgesCommand
对象
创建一个 BrGetExternalIdCommand
对象
创建一个 BrSetExternalIdCommand
对象
创建一个 DbCreateCommand
对象
创建一个 DbDestroyCommand
对象
创建一个 DbSetCommand
对象
创建一个 DbClearCommand
对象
创建一个 DbGetCommand
对象
创建一个 DbListCommand
对象
创建一个 DbFindCommand
对象
创建一个 SetControllerCommand
对象
创建一个 DelControllerCommand
对象
创建一个 GetControllerCommand
对象
创建一个 SetFailModeCommand
对象
创建一个 AddPortCommand
对象
创建一个 DelPortCommand
对象
创建一个 ListPortsCommand
对象
创建一个 ListIfacesCommand
对象