Skip to main content

APIs to interact with SONiC NW

Project description

PyPI - Downloads Tests Status Issues GitHub Contributors GitHub pull requests GitHub License

ORCA Network Library

Note: If your intension is to just start using ORCA, you need not to get into ORCA Network Library details, instead consider installing ORCA Backend and ORCA UI directly.

ORCA Network Library is an open source python package to facilitate CRUD operations on SONiC devices using gNMI interface. orca_nw_lib maintains a graph database with the realtime device configurations and network topology. ORCA Network Library can be used to develop the orchestration solutions, NMS applications, network data analytics. ORCA Backend and ORCA UI are the application developed using APIs and Neo4j DB of ORCA Network Library.

Install orca_nw_lib using pip

Latest release of ORCA Network Library can be simply installed using pip as follows :

pip install orca_nw_lib

Prerequisite

After installing the orca_nw_lib package, orca_nw_lib can be used like any other python package in your application. But before using orca_nw_lib, it is required to install Neo4j and do some basic configurations.

Install Neo4j

orca_nw_lib uses neo4j to store the network topology. To install neo4j easiest is to run Neo4j Docker image in container with the following command :

docker run \
    --name testneo4j \
    -p7474:7474 -p7687:7687 \
    -d \
    -v $HOME/neo4j/data:/data \
    -v $HOME/neo4j/logs:/logs \
    -v $HOME/neo4j/import:/var/lib/neo4j/import \
    -v $HOME/neo4j/plugins:/plugins \
    --env NEO4J_AUTH=neo4j/password \
    neo4j:latest

Then open https://localhost:7474 with credentials neo4j/password to browse the database.

Configuration

There are Following 2 configuration files for orca_nw_lib-

orca_nw_lib.yml

File contains all required parameters required to perform device and Neo4j DB operations. Also all the config properties defined in the file can be overridden by setting the environment variables with same name.

In majority of the cases only setting "discover_networks" property is enough i.e.export discover_networks="10.10.229.50"

orca_nw_lib_logging.yml

File contains the standard logging configuration for ORCA Network Library.

By default above config files from the codebase are used, which is enough for most of the cases. Optionally user can use custom config files by setting the config files path in the environment variables ORCA_NW_LIB_CONFIG_FILE and ORCA_NW_LIB_LOGGING_CONFIG_FILE.

Build and Install orca_nw_lib from source

Optionally if user want to build and install orca_nw_lib from source, ORCA Network Library uses poetry to build the orca_nw_lib package. As a pre-requisite poetry must be installed in this case. Poetry can be easily installed using the following command :

pip install poetry

To build and install orca_nw_lib use the following commands :

git clone https://github.com/STORDIS/orca_nw_lib.git
cd orca_nw_lib
poetry build
pip install dist/orca_nw_lib-****.whl

Once installed the orca_nw_lib package, orca_nw_lib can be used like any other python package in your application.

Using the ORCA Network APIs

For normal usage following APIs in python modules in the package orca_nw_lib are useful -
utils.py - load_orca_config() function must be called before using any APIs of orca_nw_lib.
discovery.py - discover_all() function can be used to discover complete topology as per the network defined in orca.yml
bgp.py - BGP CRUD operations
device.py - Get device system info.
interface.py - Interfaces CRUD operations.
lldp.py - Read LLDP relation, useful while doing discovery.
mclag.py - MCLAG CRUD operations.
port_chnl.py - Port Channel CRUD operations.
portgroup.py - Read port group information.
vlan.py - VLAN CRUD operations.

There are modules having suffixes _db and _gnmi, they contain operations to be performed in db or on device using gNMI respectively.
e.g. interface.py have general operation on interfaces and users can achieve normal interface configurations by using functions present in interface.py, on the other hand interface_db.py has function to perform CRUD operations in graph DB and interface_gnmi.py has function to configure interfaces on device.

Test cases are a good starting point to know the usage of APIs in orca_nbw_lib.

Knowing API call status

Exception objects raised by APIs in the modules above can be caught to know the API status. Exception object has all necessary details about the error.

Keeping graph DB in sync with realtime Network state.

Any configuration done on the device via orca_nw_lib APIs automatically keeps the DB in sync with the realtime network state by triggering the discovery method for the network component although gNMI subscriptions would have been the best way to achieve this, but due lack of support for gNMI subscription for all openconfig models in SONiC currently only pull mechanism can be used to keep graph DB in sync with realtime network state.

NOTE : For changes done on the device out side of orca_nw_lib i.e. changes done directly on the device, Best way to keep graph DB in sync with realtime network state is to trigger full discovery at a pre-defined interval.

Graph DB Representation

BGP

BGP

Executing Tests

Tests are not only used for regular software testing but are a good example to know the usage of APIs in orca_nw_lib. When starting to use orca_nw_lib referring to tests can be a good starting point. Test cases are located under test directory. To execute tests a topology of 3 switches (1-spine, 2-leaves) is required. Prior to execute tests, leaves should be connected to spine and respective interfaces should be enabled, so that by providing one of the switch IP in orca.yml whole topology gets discovered.
For performing tests creating a topology in GNS3 can be a good starting point.

  • To execute tests

      pytest orca_nw_lib/test/test_network.py
    
  • To execute single test cases

      pytest orca_nw_lib/test/test_network.py -k test_remove_port_chnl_members
    
  • To print console messages from code

      pytest orca_nw_lib/test/test_interface.py -k test_remove_port_chnl_members -s
    

Releases of orca_nw_lib

orca_nw_lib releases are hosted at PyPI- https://pypi.org/project/orca_nw_lib/#history , To create a new release, increase the release number in pyproject.toml.

Supported SONiC versions

  • Broadcom Enterprise SONiC (Latest tested on >=4.0.5)

Contribute

You can contribute to the project by opening an issue or sending a pull request.

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

orca_nw_lib-1.3.38.tar.gz (84.0 kB view details)

Uploaded Source

Built Distribution

orca_nw_lib-1.3.38-py3-none-any.whl (106.1 kB view details)

Uploaded Python 3

File details

Details for the file orca_nw_lib-1.3.38.tar.gz.

File metadata

  • Download URL: orca_nw_lib-1.3.38.tar.gz
  • Upload date:
  • Size: 84.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.4 CPython/3.12.7 Linux/6.5.0-1025-azure

File hashes

Hashes for orca_nw_lib-1.3.38.tar.gz
Algorithm Hash digest
SHA256 19d69bdd2411d768f2af509b411de9a173b17d1a19b1bc03499988c35323b79b
MD5 ee61f99897b103e7021fcca53dfd3537
BLAKE2b-256 efe37412d312ab50b1ae65e5dd2f4e4957d45448121da031a6190fd276594b3f

See more details on using hashes here.

File details

Details for the file orca_nw_lib-1.3.38-py3-none-any.whl.

File metadata

  • Download URL: orca_nw_lib-1.3.38-py3-none-any.whl
  • Upload date:
  • Size: 106.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.4 CPython/3.12.7 Linux/6.5.0-1025-azure

File hashes

Hashes for orca_nw_lib-1.3.38-py3-none-any.whl
Algorithm Hash digest
SHA256 a152724089c5705035cdabb7883ed8559e725e1a144a8cd95445ce5ef4dbeccb
MD5 e16dd033b76eb278191de8ab9d025041
BLAKE2b-256 28336b7e608599115bd19856e1717f138acb9bd715733ae46fe4fcc5ae4651a4

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