Package: orca_nw_lib
ORCA Network LibraryORCA 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,  newtwork data analytics.ORCA Network LibraryInstall orca_nw_lib using pipPrerequisiteInstall Neo4jorca_nw_lib configurationBuild and Install orca_nw_lib from sourceUsing the ORCA Network APIsKnowing API call statusKeeping graph DB in sync with realtime Network state.Executing TestsReleases of orca_nw_libSupported SONiC versionsContributeInstall orca_nw_lib using pipLatest release of ORCA Network Library can be simply installed using pip as follows :pip install orca_nw_libPrerequisiteAfter 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 Neo4jorca_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:latestThen openhttps://localhost:7474with credentials neo4j/password to browse the database.orca_nw_lib configurationIn the application where orca_nw_lib is used,load_orca_configfunction inutils.pymust be called before using any APIs of orca_nw_lib. This function loads device and neo4j access information also the logging configuration by default fromorca.ymlandlogging.ymlfiles.
Although user can call load_orca_config with custom config files.
The parameter information is documented in orca.yml file and logging.yml is standard python logging configuration file.Build and Install orca_nw_lib from sourceOptionally 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 poetryTo build 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-****.whlOnce installed the orca_nw_lib package, orca_nw_lib can be used like any other python package in your application.Using the ORCA Network APIsFor normal usage following APIs in python modules in the packageorca_nw_libare 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.ymlbgp.py- BGP CRUD operationsdevice.py- Get device system info.interface.py- Interfaces CRUD operations.lldp.py- Read LLDP relation, usefull 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 casesare a good starting point to know the usage of APIs in orca_nbw_lib.Knowing API call statusException 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.Executing TestsTests 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 undertestdirectory. 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 inorca.ymlwhole topology gets discovered.For performing tests creating a topology in GNS3 can be a good starting point.To execute testspytest orca_nw_lib/test/test_network.pyTo execute single test casespytest orca_nw_lib/test/test_network.py -k test_remove_port_chnl_membersTo print console messages from codepytest orca_nw_lib/test/test_interface.py -k test_remove_port_chnl_members -sReleases of orca_nw_liborca_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 versionsBroadcom Enterprise SONiC (Latest tested on >=4.0.5)ContributeYou can contribute to the project by opening an issue or sending a pull request.