← Back to portfolio
Creator

sdwancli

sdwancli wraps Cisco SD-WAN vManage's REST API in a command-line tool, mapping familiar vEdge CLI operations onto Python so operators can manage an SD-WAN fabric without hand-rolling API calls — published on Cisco DevNet CodeExchange.

Overview

Cisco SD-WAN's vManage controller exposes a REST API, but driving it directly means hand-building HTTP requests for every operation. sdwancli gives network operators a CLI they already know how to think in: commands map onto the vEdge operational vocabulary — devices, templates, control-plane state — instead of raw API endpoints, targeting vManage 20.3.1.

Architecture

A vmanage/ module owns all REST interaction and is organized by command domain rather than by endpoint: device management and monitoring, feature and device template CRUD, BFD session and control-plane connection tracking, IPsec and OMP overlay metrics, and SLA class definitions. Connection details and credentials live in vmanage/constants.py, kept separate from the command logic so the same CLI works against a local lab, Cisco's AlwaysOn Sandbox (read-only), or a Reservable Sandbox without code changes. The project installs as a proper Python package via pip install -e ..

PythonClickCisco vManage REST APIBFDOMPIPsecSLA Classes

Notable design decisions

Config and credentials separated from code

Environment details live in one constants module, not scattered through command logic — so pointing the same CLI at a different vManage instance (lab, sandbox, production) is a config change, not a code change.

Commands mirror vEdge vocabulary

Rather than exposing the REST API's own shape, commands map onto the operational terms a network engineer already uses on vEdge devices, so existing CLI fluency transfers directly instead of requiring a new mental model for the API.

Organized by network concern, not by endpoint

Command groups follow how operators reason about the fabric — devices, templates, control plane, overlay (IPsec/OMP), SLA — rather than mirroring vManage's internal API structure one-to-one.

Packaged, not scripted

Installable via pip install -e . rather than a folder of standalone scripts, so it drops into an operator's existing Python tooling and can be versioned like any other dependency.