Switch branches/tags
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
127 lines (95 sloc) 3 KB



Ry's Apparatus for Virtual Encodable Networks

Raven is a tool for rapidly designing, deploying and managing virtual networks. Raven networks are:

  • designed programatically through a javascript API
  • managed through a command line interface
  • materialized and deployed by a libvirt enabled backend

When you need more infrastructure level fidelity than a Kubernetes deployment and more programmability than a collection of Vagrantfiles, raven may be of use to you.

Here is an example of a network model

controller = {
  'name': 'control',
  'image': 'debian-stretch', 
  'os': 'linux',
  'mounts': [{ 'source': env.SWITCHDIR, 'point': '/opt/switch-drivers'}]

walrus = {
  'name': 'walrus',
  'image': 'debian-stretch',
  'os': 'linux',
  'mounts': [{ 'source': env.WALRUSDIR, 'point': '/opt/walrus'}]

zwitch = {
  'name': 'nimbus',
  'image': 'cumulusvx-3.5',
  'os': 'linux',
  'mounts': [{ 'source': env.AGXDIR, 'point': '/opt/agx' }]

nodes = Range(2).map(i => ({
  'name': `n${i}`,
  'image': 'debian-stretch',
  'os': 'linux',
  'mounts': [{ 'source': env.WALRUSDIR, 'point': '/opt/walrus'}]

links = [
  Link('walrus', 'eth0', 'nimbus', 'swp1'),
  Link('control', 'eth0', 'nimbus', 'swp2'),
  ...Range(2).map(i => Link(`n${i}`, 'eth0', 'nimbus', `swp${i+3}`)),

topo = {
  'name': '2net',
  'nodes':[controller, walrus, ...nodes],
  'switches': [zwitch],
  'links': links

Getting started

I have tested Raven on Debian-Stretch and Ubuntu 16.04. Contributions to support other distros welcome!


git clone
cd raven
ansible-playbook setup.yml


You will need at least Go 1.8 to build. Then from this directory

dep ensure


First start the raven application (you must be root due to the way we use libvirt)

sudo su
cd raven/models/2net

# grab the source code required for this model and set the mapping environment variables

# build the raven system (creates virtual machines and network descriptions)
rvn build

# deploy the virtual system
rvn deploy

# show the status of the virtual nodes
rvn status

# wait for the virtual nodes and switches to come up
rvn pingwait control walrus nimbus n0 n1

# show the status of the virtual nodes now that they are up (you will see IP addresses)
rvn status

# configure the virtual nodes and switches
rvn configure

# while configure is running, you can open up another shell window and type in
# rvn status to see how things are progressing

# run some ad-hoc config on a node
rvn ansible n1 config/n1.yml

# ssh into a node
eval $(rvn ssh walrus)

To run a full build, test deploy cycle run the following.


The script is fairly self explanatory and concretely shows many of the capabilities of raven.

Web Interface

Not functional at the moment until I get back to syncing the web code with the recent revamp.