OVSDB library¶
Path: os_ken.lib.ovs
Similar to the OVSDB Manager library, this library enables your application to speak the OVSDB protocol (RFC7047), but differ from the OVSDB Manager library, this library will initiate connections from controller side as ovs-vsctl command does. Please make sure that your devices are listening on either the Unix domain socket or TCP/SSL port before calling the APIs of this library.
# Show current configuration
$ ovs-vsctl get-manager
# Set TCP listen address
$ ovs-vsctl set-manager "ptcp:6640"
See manpage of ovs-vsctl command for more details.
Basic Usage¶
Instantiate
os_ken.lib.ovs.vsctl.VSCtl.Construct commands with
os_ken.lib.ovs.vsctl.VSCtlCommand. The syntax is almost the same as ovs-vsctl command.Execute commands via
os_ken.lib.ovs.vsctl.VSCtl.run_command.
Example¶
from os_ken.lib.ovs import vsctl
OVSDB_ADDR = 'tcp:127.0.0.1:6640'
ovs_vsctl = vsctl.VSCtl(OVSDB_ADDR)
# Equivalent to
# $ ovs-vsctl show
command = vsctl.VSCtlCommand('show')
ovs_vsctl.run_command([command])
print(command)
# >>> VSCtlCommand(args=[],command='show',options=[],result='830d781f-c3c8-4b4f-837e-106e1b33d058\n ovs_version: "2.8.90"\n')
# Equivalent to
# $ ovs-vsctl list Port s1-eth1
command = vsctl.VSCtlCommand('list', ('Port', 's1-eth1'))
ovs_vsctl.run_command([command])
print(command)
# >>> VSCtlCommand(args=('Port', 's1-eth1'),command='list',options=[],result=[<ovs.db.idl.Row object at 0x7f525fb682e8>])
print(command.result[0].name)
# >>> s1-eth1
API Reference¶
os_ken.lib.ovs.vsctl¶
ovs-vsctl command like library to speak OVSDB protocol
- class os_ken.lib.ovs.vsctl.VSCtl(remote)¶
A class to describe an Open vSwitch instance.
remotespecifies the address of the OVS instance.os_ken.lib.ovs.vsctl.valid_ovsdb_addris a convenient function to validate this address.- run_command(commands, timeout_sec=None, exception=None)¶
Executes the given commands and sends OVSDB messages.
commandsmust be a list ofos_ken.lib.ovs.vsctl.VSCtlCommand.If
timeout_secis specified, raises exception after the given timeout [sec]. Additionally, ifexceptionis specified, this function will wraps exception using the given exception class.Retruns
Nonebut fillsresultattribute for each command instance.
- class os_ken.lib.ovs.vsctl.VSCtlCommand(command, args=None, options=None)¶
Class to describe artgumens similar to those of
ovs-vsctlcommand.commandspecifies the command ofovs-vsctl.argsspecifies a list or tuple of arguments for the given command.optionsspecifies a list or tuple of options for the given command. Please note that NOT all options ofovs-vsctlare supported. For example,--idoption is not yet supported. This class supports the followings.Option
Description
--may-existDoes nothing when the given port already exists. The supported commands are
add-portandadd-bond.--fake-ifaceCreates a port as a fake interface. The supported command is
add-bond.--must-existRaises exception if the given port does not exist. The supported command is
del-port.--with-ifaceTakes effect to the interface which has the same name. The supported command is
del-port.--if-existsIgnores exception when not found. The supported command is
get.
- os_ken.lib.ovs.vsctl.valid_ovsdb_addr(addr)¶
Returns True if the given addr is valid OVSDB server address, otherwise False.
The valid formats are:
unix:filetcp:ip:portssl:ip:port
If ip is IPv6 address, wrap ip with brackets (e.g., ssl:[::1]:6640).
- Parameters
addr -- str value of OVSDB server address.
- Returns
True if valid, otherwise False.
os_ken.lib.ovs.bridge¶
Wrapper utility library of os_ken.lib.ovs.vsctl
- class os_ken.lib.ovs.bridge.OVSBridge(CONF, datapath_id, ovsdb_addr, timeout=None, exception=None)¶
Class to provide wrapper utilities of
os_ken.lib.ovs.vsctl.VSCtlCONFis a instance ofoslo_config.cfg.ConfigOpts. Mostlyself.CONFis sufficient to instantiate this class from your OSKen application.datapath_idspecifies Datapath ID of the target OVS instance.ovsdb_addrspecifies the address of the OVS instance. Automatically validated when you callinit()method. Refer toos_ken.lib.ovs.vsctl.valid_ovsdb_addrfor the format of this address.if
timeoutis omitted,CONF.ovsdb_timeoutwill be used as the default value.Usage of
timeoutandexceptionis the same withtimeout_secandexceptionofos_ken.lib.ovs.vsctl.VSCtl.run_command.- add_bond(name, ifaces, bond_mode=None, lacp=None)¶
Creates a bonded port.
- Parameters
name -- Port name to be created
ifaces -- List of interfaces containing at least 2 interfaces
bond_mode -- Bonding mode (active-backup, balance-tcp or balance-slb)
lacp -- LACP mode (active, passive or off)
- add_db_attribute(table, record, column, value, key=None)¶
Adds ('key'=)'value' into 'column' in 'record' in 'table'.
This method is corresponding to the following ovs-vsctl command:
$ ovs-vsctl add TBL REC COL [KEY=]VALUE
- add_gre_port(name, remote_ip, local_ip=None, key=None, ofport=None)¶
Creates a GRE tunnel port.
See the description of
add_tunnel_port().
- add_tunnel_port(name, tunnel_type, remote_ip, local_ip=None, key=None, ofport=None)¶
Creates a tunnel port.
- Parameters
name -- Port name to be created
tunnel_type -- Type of tunnel (gre or vxlan)
remote_ip -- Remote IP address of tunnel
local_ip -- Local IP address of tunnel
key -- Key of GRE or VNI of VxLAN
ofport -- Requested OpenFlow port number
- add_vxlan_port(name, remote_ip, local_ip=None, key=None, ofport=None)¶
Creates a VxLAN tunnel port.
See the description of
add_tunnel_port().
- clear_db_attribute(table, record, column)¶
Clears values from 'column' in 'record' in 'table'.
This method is corresponding to the following ovs-vsctl command:
$ ovs-vsctl clear TBL REC COL
- db_get_map(table, record, column)¶
Gets dict type value of 'column' in 'record' in 'table'.
This method is corresponding to the following ovs-vsctl command:
$ ovs-vsctl get TBL REC COL
- db_get_val(table, record, column)¶
Gets values of 'column' in 'record' in 'table'.
This method is corresponding to the following ovs-vsctl command:
$ ovs-vsctl get TBL REC COL
- del_controller()¶
Deletes the configured OpenFlow controller address.
This method is corresponding to the following ovs-vsctl command:
$ ovs-vsctl del-controller <bridge>
- del_port(port_name)¶
Deletes a port on OVS instance.
This method is corresponding to the following ovs-vsctl command:
$ ovs-vsctl del-port <bridge> <port>
- del_qos(port_name)¶
Deletes the Qos rule on the given port.
- delete_port(port_name)¶
Deletes a port on the OVS instance.
This method is corresponding to the following ovs-vsctl command:
$ ovs-vsctl --if-exists del-port <bridge> <port>
- find_db_attributes(table, *conditions)¶
Lists records satisfying 'conditions' in 'table'.
This method is corresponding to the following ovs-vsctl command:
$ ovs-vsctl find TBL CONDITION...
Note
Currently, only '=' condition is supported. To support other condition is TODO.
- get_controller()¶
Gets the configured OpenFlow controller address.
This method is corresponding to the following ovs-vsctl command:
$ ovs-vsctl get-controller <bridge>
- get_datapath_id()¶
Gets Datapath ID of OVS instance.
This method is corresponding to the following ovs-vsctl command:
$ ovs-vsctl get Bridge <bridge> datapath_id
- get_db_attribute(table, record, column, key=None)¶
Gets values of 'column' in 'record' in 'table'.
This method is corresponding to the following ovs-vsctl command:
$ ovs-vsctl get TBL REC COL[:KEY]
- get_ofport(port_name)¶
Gets the OpenFlow port number.
This method is corresponding to the following ovs-vsctl command:
$ ovs-vsctl get Interface <port> ofport
- get_port_name_list()¶
Gets a list of all ports on OVS instance.
This method is corresponding to the following ovs-vsctl command:
$ ovs-vsctl list-ports <bridge>
- get_vif_ports()¶
Returns a VIF object for each VIF port
- init()¶
Validates the given
ovsdb_addrand connects to OVS instance.If failed to connect to OVS instance or the given
datapath_iddoes not match with the Datapath ID of the connected OVS instance, raisesos_ken.lib.ovs.bridge.OVSBridgeNotFoundexception.
- list_db_attributes(table, record=None)¶
Lists 'record' (or all records) in 'table'.
This method is corresponding to the following ovs-vsctl command:
$ ovs-vsctl list TBL [REC]
- remove_db_attribute(table, record, column, value, key=None)¶
Removes ('key'=)'value' into 'column' in 'record' in 'table'.
This method is corresponding to the following ovs-vsctl command:
$ ovs-vsctl remove TBL REC COL [KEY=]VALUE
- run_command(commands)¶
Executes the given commands and sends OVSDB messages.
commandsmust be a list ofos_ken.lib.ovs.vsctl.VSCtlCommand.The given
timeoutandexceptionwhen instantiation will be used to callos_ken.lib.ovs.vsctl.VSCtl.run_command.
- set_controller(controllers)¶
Sets the OpenFlow controller address.
This method is corresponding to the following ovs-vsctl command:
$ ovs-vsctl set-controller <bridge> <target>...
- set_db_attribute(table, record, column, value, key=None)¶
Sets 'value' into 'column' in 'record' in 'table'.
This method is corresponding to the following ovs-vsctl command:
$ ovs-vsctl set TBL REC COL[:KEY]=VALUE
- set_qos(port_name, type='linux-htb', max_rate=None, queues=None)¶
Sets a Qos rule and creates Queues on the given port.
- exception os_ken.lib.ovs.bridge.OVSBridgeNotFound(msg=None, **kwargs)¶