the juniper-helpers library - a tcl/expect library for managing, testing, and deploying a juniper...
TRANSCRIPT
THE JUNIPER-HELPERS LIBRARY
A TCL/EXPECT LIBRARY FOR MANAGING, TESTING, AND DEPLOYING A JUNIPER NETWORK BY @FRANCISLUONG
ABOUT THE AUTHOR: @FRANCISLUONG (FRANCO)HTTP://ABOUT.ME/FRANCISLUONG - HTTPS://GITHUB.COM/FRANCISLUONG • I AM A NETWORK ENGINEER WHO FOUND AND FILLED A NEED FOR
AUTOMATION
• PERFORMED NETWORK TESTING FOR VERIZON (UUNET) FOR MORE THAN A DECADE
• WROTE A LARGE NUMBER OF AD-HOC TCL/EXPECT TEST CASES AND A VERY CRUDE LIBRARY
• CRUDE AS IT WAS, IT WAS MUCH MORE EFFICIENT THAN TESTING MANUALLY
• THEN AS A RESIDENT ENGINEER FOR JUNIPER, I PUT MY SKILLS TO WORK FOR CLIENTS SUCH AS ABOVENET AND SPRINT
• STARTED USING AUTOMATION TOOLS FOR SUPPORT AND DEPLOYMENT
• …IN ADDITION TO LAB TESTING
• STARTED PUBLISHING THESE TOOLS AS AN OPEN-SOURCE GITHUB
IN THE BEGINNING…
• THIS EFFORT STARTED AS A SORT OF SWAN SONG FOR MY RELATIONSHIP WITH TCL/EXPECT
• IT WAS MY WAY OF RESPONDING TO INTERNAL JUNIPER INQUIRIES TO THE EFFECT OF “DO WE HAVE A SCRIPT THAT CAN DO THIS QUICKLY?”
• BUT I WANTED IT TO BE USEFUL… SO I KEPT ADDING TO IT
• NETCONF/XML
• CONCURRENCY
• TESTING
• CONFIG GENERATION
WHY TCL?
• I’M GOING TO GET THIS QUESTION A LOT… I KNOW. WHY DID I WRITE IT IN TCL? TCL IS A DINOSAUR!
• THE SHORT ANSWER: BEGIN WITH WHAT YOU KNOW. I KNEW TCL.
• ULTIMATELY, I AM HOPING THERE ARE ENOUGH OTHER NETWORK ENGINEERS THAT HAVE LEARNED ENOUGH TCL TO BENEFIT FROM IT.
PHOTO CREDIT: HTTPS://FLIC.KR/P/7TB5U3
THINGS I HAVE DONE USING JUNIPER-HELPERS
• GENERATE ROUTER CONFIGURATION
• PERFORM LAB TESTING
• USE THE SAME TESTING SUITE TO DO DEPLOYMENT VERIFICATION
• TEST DRIVEN DEPLOYMENTS !!!
• COLLECT OUTPUTS FROM ALL NETWORK DEVICES PERIODICALLY FOR AUDITS, SANITY CHECKING, OR DATABASING
• CONCURRENTLY PERFORM ACTIONS OR COLLECT OUTPUTS FROM A LARGE NUMBER OF NETWORK DEVICES
• GENERATE AND E-MAIL REPORTS ON NETWORK HEALTH OR CONFORMANCE
HELLO WORLD!
• MY VERSION OF HELLO WORLD! FOR ROUTERS IS TO LOGIN AND GET THE VERSION INFORMATION.
#!/usr/bin/env tclsh
package require JuniperConnect
import_userpass “~/userpass”
set router 192.168.1.31
connectssh $router
send_textblock $router “show version“
HELLO WORLD - OUTPUT
<HELLO>WORLD!</HELLO>
• I ALSO PROVIDED FOR NETCONF INTERACTION WITH THE DEVICES.
#!/usr/bin/env tclsh
package require JuniperConnect
import_userpass “~/userpass”
set router 192.168.1.31
connectssh $router “netconf”
send_rpc $router [build_rpc “get-software-information”]
NETCONF OUTPUT
TESTING IS A SEQUENCE OF ACTIONS AND ASSERTIONS
#!/usr/bin/env tclsh
package require test
init_logfile “results.txt”
import_userpass “~/userpass”
set router 192.168.1.31
test::start “Sample Test”
test::subcase “Verify FPC 0 is Present”
test::analyze_output $router “show chassis hardware”
test::assert “FPC 0”
test::end_analyze
test::finish
TESTING OUTPUT
ABOUT THE TESTING PACKAGE
• PRIMARY GOAL WAS FOR THE CODE TO BE AS READABLE AS A TEST PLAN
• SECONDARY GOAL WAS THAT EVERY ACTION CONTRIBUTES TO DOCUMENTATION WITHOUT HAVING TO CALL SEPARATE ACTIONS TO LOG DATA
HOW TO GET AND INSTALL IT
PREREQUISITE SOFTWARE
• LINUX/UNIX (I’VE NEVER RUN IT ON WINDOWS… IT MIGHT WORK)
• TCL 8.5 OR GREATER• TCLLIB – THE TCL STANDARD LIBRARY
• TDOM – FOR XML HANDLING
• EXPECT – TO DRIVE SESSIONS
• OPENSSH
• UBUNTU INSTALL EXAMPLE SUDO APT-GET INSTALL -Y TCL EXPECT TCLLIB TDOM OPENSSH-CLIENT
GETTING JUNIPER-HELPERS
• DOWNLOAD THE JUNIPER-HELPERS LIBRARY• USING GIT
• GIT CLONE HTTPS://GITHUB.COM/FRANCISLUONG/JUNIPER-HELPERS.GIT
• OR… ZIP FILE• HTTPS://GITHUB.COM/FRANCISLUONG/JUNIPER-HELPERS/ARCHIVE/MASTER.ZIP
• THEN UNPACK IT USING UNZIP
A FEW WORDS ON TCL PACKAGE PATH
• TCL PACKAGE PATH ($TCL_PKGPATH)
• DETERMINES WHAT FOLDERS ARE CHECKED FOR LIBRARY FILES WHEN DOING A “PACKAGE REQUIRE”.
• VARIES PLATFORM TO PLATFORM
• CAN BE INFLUENCED BY SETTING ENVIRONMENT VARIABLE “TCLLIBPATH”
• Add to your .bashrc to set it and forget it: export TCLLIBPATH=/home/fluong/lib
THEN TEST THE INSTALLATION
• TEST THE INSTALLATION BY RUNNING 000_TEST_INSTALL.TCL IN THE EXAMPLES FOLDER• IT WILL OUTPUT YOUR TCL VERSION, $TCL_PKGPATH, AND
ATTEMPT TO CALL ALL REQUIRED PACKAGES
USE THE EXAMPLES
• USE THE EXAMPLES PROVIDED IN THE EXAMPLES SUBFOLDER AND ALTER TO TASTE
HAPPY AUTOMATING!