A Special Automated Valentine - NRE Labs v0.3.0

by Matt Oswalt - - 8 minutes read - 1515 words

The next minor version for NRE Labs is OUT! But wait - wasn’t v0.2.0 just a few weeks ago? Already with another minor release? Why yes my loyal reader, already with another minor release. The lab mice were working overtime over the past ten days or so bringing some really cool new content and platform features, so much that it warranted a full minor release version bump.

We’re excited to get you this new release just in time for Valentine’s Day, but even more excited that this content is available in time for a live demo at Networking Field Day 20, which is taking place in just under five hours!! (Actually I really need to finish this post and drive over there.)

Without further ado, let’s get into the new stuff.

Highlights of NRE Labs v0.3.0

New Categories and Two New Lessons

With v0.3.0 came a re-vamp of the lesson categories. The previous format was a good first attempt, but even before launch back in October ‘18, we’ve been trying to figure out a way to promote the idea that workflows are king in NRE Labs. It’s important to learn about the fundamental skills, technologies and tools we need to do our jobs, but they don’t solve problems on their own - the way they’re applied does. So we now have three new categories, replacing the old hierarchy.

  • Fundamentals - These are the fundamental skills needed by modern automation tools and practices. Things like data modeling, and scripting will be found here.
  • Tools - These are lessons focused at introducing you to a specific tool like Ansible, JSNAPy or NAPALM.
  • Workflows - Tools don’t solve problems, people who apply those tools solve problems. We wanted a home for lessons about the various ways that the tools we learned about in the previous category are being applied against problems, like ensuring compliance with regulatory standards.

Within these categories, we’ve introduced two new lessons - and one might sound a little familiar; we’ve totally re-vamped the NAPALM 101 lesson. Not only are there a total of four new labs within this lesson, we’re also using a new functionality that allows lesson authors to use Jupyter notebooks as the actual lab guide, in lieu of a markdown file. More on that later.

We’ve also created a new workflow lesson that shows NAPALM and JSNAPy used to solve one of the most tedious challenges of working on military networks - compliance with STIG, which is a set of guidelines aimed at decreasing the attack surface on infrastructure elements. Automation can greatly help with the ongoing task of making sure your infrastructure is compliant, and in this lesson we see two ways this can be accomplished.

Introducing “The NRE Labs Advisor”

Easily one of the biggest challenges with learning automation is not knowing where to start. Often, we get advice that the fundamentals are important (totally good advice), but we quickly run into the typical problem that “Hello World” examples aren’t very compelling. Sometimes we go the other direction and focus on a use case, and try to use what we know to solve those problems. However, without a grasp of the fundamentals, this can be fraught with danger.

What’s needed is a way for us to start with a workflow, a use case, a problem we want to solve, and then get a mapping of the full path to get there, starting with the fundamentals. Those of us that have done automation for a living can, at times, take the discrete steps in this journey for granted - but they’re significant land mines for those that haven’t gone down the path.

For instance, learning how to apply automation to solve configuration management sounds great, but we know there a number of layers of prerequisite experiences that we need to go through in order to get there. It actually ends up looking something like this:

NRE Labs has changed the way we think about writing learning materials, but standalone lessons aren’t enough. In reality, these concepts are connected in an infinite number of ways, and we need to be able to represent that somehow. So, by adding a little metadata to each lesson, we can build a dependency tree similar to the diagram above, and advise on how to get to any point you wish.

Let’s say you want to learn how to apply automation to solve the ongoing challenge of compliance validation. The new Advisor page contains a search box you can use to find content based on keywords:

Select the lesson you want, and behind the scenes, we’ll go get all possible prerequisite lessons for the one you’ve selected. Based on the skills involved in each, we’ll construct a quick strengths assessment, where you rate your existing knowledge of the subjects involved:

Based on this, we’ll curate a full list of courseware that will get you every piece of content that will feed up into the ultimate goal you entered.

Also, note you can customize the final report and print it out. Put it on your cube wall!

Rather than just throwing you into a lesson that uses tools and terms you haven’t heard, we curate a path starting with the basics, and travel up the stack until you meet the goal you set out to reach. We’re really excited about the Advisor and how it can help you better understand the full path to Network Reliability Engineering.


Much of the content in NRE Labs to-date has been fairly straightforward. You go through the lab guide, either clicking on or typing out the examples given, and hopefully you learn something. However, this can feel a bit too much like “autopilot”. It would be nice to have some lessons where a certain goal needs to be reached, like an objective. For instance, “configure EVPN on this fabric using nothing but an Ansible playbook” rather than having the fabric already configured for you.

The problem thus far for introducing this was there was no automated way to check to see if those parameters have been met. UNTIL NOW. Now, a lesson author is able to provide a verification script for each stage in a lesson that they wish to offer this functionality.

For the learner, they’re presented with an “objective” button that describes the task they’re to perform. The “verify” button to the right of that allows them to initiate the defined scripts to be executed on the back-end, and within a few seconds they’ll be presented with a message that indicates if they’ve satisfied the requirements for the lab.

Currently, this feature is rolled out in a very limited capacity - only on a single lab within the NAPALM lesson. However, we’re planning on investing a lot into this feature, as it’s going to fill a critical role in the long-term plan for NRE Labs.

Jupyter Notebooks as Lab Guide

One of the great things about NRE Labs is it’s designed to amplify existing content as much as possible, rather than re-inventing the wheel. That’s why lab guides are designed to be written in standard formats like Markdown, so that anyone with existing content needs to spend as little time as possible getting it into NRE Labs.

In v0.3.0 we’re taking this one step further and making it easier to use Jupyter notebooks. The platform already allows jupyter notebooks as a separate tab to the left of the screen, alongside the rest of the terminal windows, but this made things awkward if you wanted to use that notebook as a lab guide with interactive examples, becuase the user would have to alternate tabs frequently, and the actual lab guide was often left blank since it’s pointless to have two competing lab guides.

With this new change, you can specify - on an individual lab basis - that a jupyter notebook fill this role. The front-end will render this lab guide to the left, replacing the traditional markdown-powered format.

Lots of automation content already exists in this format, and we’re excited to bring a feature into NRE Labs that makes it that much easier to re-use this content, rather than force lesson authors to rewrite their material to be compatible.


This one was a long time coming. Since we’re using the guacamole javascript library directly, we had to implement some of the basics ourselves. For the longest time, basic things like copy and paste weren’t working.

Now, there are copy and paste buttons that allow you to do this.

Full Changelog

That’s it for the big features. Full changelog is below:



  • Adding more metadata to all lessons for Advisor functionality #172
  • Greatly improve and expand the NAPALM lesson #175
  • Modify NAPALM lesson to use new verification capabilities #178
  • Add lesson for STIG validation using JSNAPY and NAPALM #181


  • Remove LLDP configurations globally for now #182


  • Fixed GC goroutine; make GC interval configurable #63
  • Add jupyter notebook as lab guide functionality #67
  • Added ability to perform completion verifications on livelessons #69
  • Re-vamp internal state systems and add external observability functions for livelessons and kubelabs #68