It's no joke - Antidote v0.3.1 is here!

by Matt Oswalt - - 4 minutes read - 829 words

On a day like today, you might expect that this post is going to contain some kind of fun prank or joke. Indeed, we did have some April 1st plans for today that ended up being a little more ambitious than we had time to execute, and we did have some good, real content to share, so that takes priority. We’ll have to save the April Fools stuff for next year! :)

In the meantime, v0.3.1 of Antidote was released, and with it, some new NRE Labs content.

New Lesson - Terraform and Junos!

David Gee put together an amazing lesson on using Terraform to control Junos, using a new Terraform provider he’s written. This is an exciting new introduction to declarative Infrastructure-as-Code, and a very powerful new way to control Junos.

This lesson is now live on the site, please check it out!

Two New Lessons on Deck - OpenConfig and JET

We actually had two other lessons planned for this release - JET and OpenConfig. Both pull requests are merged and part of the curriculum, but we’re not quite showing it on the main site yet because we have some wrinkles to iron out with the vQFX image they need to run.

Once we get those issues ironed out, we’re expecting to get those lessons published very soon. The content is done and merged, so once we get the final vQFX image finished, this will have a very quick turnaround.


The existing vQFX image used NAT to connect to the outside world. This meant that we could hard-code the management IP address into the configuration and the outer networking plugin for Kubernetes would assign its own IP address on top and it wouldn’t matter.

However, some upcoming lessons like JET, or streaming telemetry, require more direct connectivity. So, the new vqfx-full image we’ll be using in some upcoming lessons, instead binds the container’s eth0 interface to the vQFX’s management interface em0. This means that they share the IP address that’s configured. However, in order to preserve atomicity, we need to provide a full config overwrite between labs of a lesson, which means we need to be able to write the correct management address every time. How do we do this?

To that end, we’ve created a new image called configurator which takes what we were previously doing with a NAPALM CLI command and makes it a bit more flexible. We’re still using NAPALM, since we are very strictly ensuring multi-vendor capabilities, but the new configurator image uses a Python script that uses NAPALM to first get the management IP address, and then before writing the full config change, it uses Jinja to ensure this same management address is used in the new configuration. That’s why you’ll start to see network configurations in the curriculum contain Jinja snippets.

This is a mostly behind-the-scenes change, but one that is necessary to increase the flexibility of the platform.

Lesson CI enhancements

We’re adding tooling to the CI pipeline for the lesson curriculum to make reviews even easier. In a previous release (and discussed on a recent livestream), the syrctl validate tool allows you to check to ensure that a lesson is structured correctly.

We’ve added this tool as a step for the Travis CI build process for the curriculum. This means that if you have a structural problem with your lesson, you can see it right in the commit history for your Pull Requests. You can (and should) still download syringe and run these tests yourself, but this is just one more way to make PR reviews go by more quickly.

Soon, we’ll also incorporate other tooling like linters for lesson guides, to help you have confidence that your lesson guide is going to show up and work properly.

Full v0.3.1 Changelog

That’s it for the overview - here’s the full changelog for v0.3.1, and we’ve pushed this version to production, so you can check it out now!

Note that the CHANGELOG includes the OpenConfig and JET lesson since that’s when they were merged, but they won’t go live on the site until at least the next release.




  • Added new community page, in place of the much lighter ‘resources’ page #199
  • Removed unneeded subnet declarations from connections list #200
  • Introduce new “configurator” for configuring devices, and templatize mgmt interface configuration #207


  • Introduce better-looking icons for navigation #41


  • Fixed influxdb bug #72
  • Add ability to use host directory for lesson content #75
  • Provide unit test framework for scheduler #79
  • Clarify difference between confusing config variables #87
  • Removed subnet requirement in lesson defs #88
  • Added validation for making sure configs are present for each stage and device #89
  • Add version to build info, share with syrctl #90
  • Setting proper permissions on copied lesson dir, using config’d location #92
  • Provide greater device configuration flexibility #93