Skip to main content

An OVSDB Library written in python.

Project description

An OVSDB Library written in python.

1. Introduction

OVSDB is the Open vSwitch Database Protocol. It’s defined in RFC 7047 It’s used mainly but not limited for managing the configuration of Open vSwitch and OVN. Recently vendors have begun implementing OVSDB in their Ethernet switches firmware. Some of those vendor data plane implementations are already running OVS under the hood so the implementation should be relatively painless.

This is for operation on ovsdb protocol, not only for Open vSwitch and OVN. Any project with ovsdb protocol can leverage this library.

To use this lib, only need the ovsdb-server running. Take OVS as exampne, if you’re running OVS version 1.10 or later, you can do this using ovs-appctl:

ovs-appctl -t ovsdb-server ovsdb-server/add-remote ptcp:6632

Quick API Examples

Connect to the ovsdb server:

#from libovsdb import libovsdb
#ovsdb_server = 'tcp:192.168.1.11:6641'
ovsdb_server = 'unix:/usr/local/var/run/ovn/ovnnb_db.sock'
db = libovsdb.OVSDBConnection(ovsdb_server, "OVN_Northbound")
print(db.list_dbs())

The result is:

{'id': 0, 'result': ['OVN_Northbound', '_Server'], 'error': None}

Basic transaction

insert a row, create a transaction and add op into it,then commit:

#from libovsdb import libovsdb
#ovsdb_server = 'tcp:192.168.1.11:6641'
ovsdb_server = 'unix:/usr/local/var/run/ovn/ovnnb_db.sock'
db = libovsdb.OVSDBConnection(ovsdb_server, "OVN_Northbound")
tx = db.transact()

name = tx.insert(table = "Logical_Switch_Port",
                row = {"name":"ls1-lsp0"})
tx.mutate(table = "Logical_Switch",
          where = [["name", "==", "ls1"]],
          mutations = [tx.make_mutations("ports", "insert", {"named-uuid": name})])
response = tx.commit()

print("%s" %(response["result"]))

delete a row, create a transaction and add op into it,then commit:

# Get the uuid in other way, since it's needed in mutate op.
uuid = 03934fdf-6087-48e7-b5ce-54d4d76e4368
tx.delete(table = "Logical_Switch_Port",
        where = [["uuid", "==", uuid]])
tx.mutate(table = "Logical_Switch",
          where = [["name", "==", "ls1"]],
          mutations = [tx.make_mutations("ports", "delete", {"uuid": uuid})])
response = tx.commit()

print("%s" %(response["result"]))

update a row, create a transaction and add op into it,then commit:

#from libovsdb import libovsdb
#ovsdb_server = 'tcp:192.168.1.11:6641'
ovsdb_server = 'unix:/usr/local/var/run/ovn/ovnnb_db.sock'
db = libovsdb.OVSDBConnection(ovsdb_server, "OVN_Northbound")
tx = db.transact()

tx.update(table = "Logical_Switch_Port",
        row = {"addresses": "00:00:00:00:00:05"},
        where = [["name", "==", "ls1-lsp0"]])
response = tx.commit()

print("%s" %(response["result"]))

query some rows, create a transaction and add op into it,then commit:

#from libovsdb import libovsdb
#ovsdb_server = 'tcp:192.168.1.11:6641'
ovsdb_server = 'unix:/usr/local/var/run/ovn/ovnnb_db.sock'
db = libovsdb.OVSDBConnection(ovsdb_server, "OVN_Northbound")
tx = db.transact()

response = tx.row_select(table = "Logical_Switch",
columns = ["_uuid", "name"],
where = [["name", "==", "ls1"]])
response = tx.commit()

print("%s" %(response["result"]))

Easy wapper

for easy use, I give some wrapper for quick test, for example:

#from libovsdb import libovsdb
#ovsdb_server = 'tcp:192.168.1.11:6641'
ovsdb_server = 'unix:/usr/local/var/run/ovn/ovnnb_db.sock'
db = libovsdb.OVSDBConnection(ovsdb_server, "OVN_Northbound")
tx = db.transact()

tx.row_insert(table = "Logical_Switch", row = {"name":"ls1"})
tx.row_insert(table = "Logical_Switch_Port",
        row = {"name":"ls1-lsp0"},
        referby = ["Logical_Switch", "ls1", "ports"])
tx.row_update(table = "Logical_Switch_Port",
        row = {"addresses": "00:00:00:00:00:05"},
        where = [["name", "==", "ls1-lsp0"]])
tx.row_select(table = "Logical_Switch",
        columns = ["_uuid", "name"],
        where = [["name", "==", "ls1"]])
response = tx.commit()
print("%s" %(response["result"]))

tx.row_delete(table = "Logical_Switch_Port",
        where = [["name", "==", "ls1-lsp0"]],
        referby = ["Logical_Switch", "ls1", "ports"])
tx.commit()

Release Notes

1.0.8: Add dryrun option: Don’t really run the ovsdb command, just print it. 1.0.9: Add new API:

OVSDBConnection().insert (self, table, row, **kwargs)
OVSDBConnection().delete (self, table, where, **kwargs)
OVSDBConnection().update (self, table, row, where, **kwargs)
OVSDBConnection().update (self, table, row, where, **kwargs)
OVSDBConnection().select (self, table, where, **kwargs):

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

libovsdb-1.0.9.tar.gz (8.6 kB view details)

Uploaded Source

File details

Details for the file libovsdb-1.0.9.tar.gz.

File metadata

  • Download URL: libovsdb-1.0.9.tar.gz
  • Upload date:
  • Size: 8.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.0 CPython/3.8.8

File hashes

Hashes for libovsdb-1.0.9.tar.gz
Algorithm Hash digest
SHA256 561da79be405d1701a6e0ad56a60c8fa42e48d3c1263e75be485b74bc3ddfece
MD5 7a522231960c3146676d2b7e795d0582
BLAKE2b-256 112909a5d120125363e51bc26807fdc79a4623d87a488f8de70bade3b5be9b0c

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page