the juniper-helpers library - a tcl/expect library for managing, testing, and deploying a juniper...

19
THE JUNIPER-HELPERS LIBRARY A TCL/EXPECT LIBRARY FOR MANAGING, TESTING, AND DEPLOYING A JUNIPER NETWORK BY @FRANCISLUONG

Upload: francis-luong

Post on 11-Aug-2015

128 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: The Juniper-Helpers Library - A TCL/EXPECT Library for managing, testing, and deploying a Juniper Network by @FrancisLuong

THE JUNIPER-HELPERS LIBRARY

A TCL/EXPECT LIBRARY FOR MANAGING, TESTING, AND DEPLOYING A JUNIPER NETWORK BY @FRANCISLUONG

Page 2: 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

Page 3: The Juniper-Helpers Library - A TCL/EXPECT Library for managing, testing, and deploying a Juniper Network by @FrancisLuong

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

Page 4: The Juniper-Helpers Library - A TCL/EXPECT Library for managing, testing, and deploying a Juniper Network by @FrancisLuong

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

Page 5: The Juniper-Helpers Library - A TCL/EXPECT Library for managing, testing, and deploying a Juniper Network by @FrancisLuong

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

Page 6: The Juniper-Helpers Library - A TCL/EXPECT Library for managing, testing, and deploying a Juniper Network by @FrancisLuong

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“

Page 7: The Juniper-Helpers Library - A TCL/EXPECT Library for managing, testing, and deploying a Juniper Network by @FrancisLuong

HELLO WORLD - OUTPUT

Page 8: The Juniper-Helpers Library - A TCL/EXPECT Library for managing, testing, and deploying a Juniper Network by @FrancisLuong

<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”]

Page 9: The Juniper-Helpers Library - A TCL/EXPECT Library for managing, testing, and deploying a Juniper Network by @FrancisLuong

NETCONF OUTPUT

Page 10: The Juniper-Helpers Library - A TCL/EXPECT Library for managing, testing, and deploying a Juniper Network by @FrancisLuong

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

Page 11: The Juniper-Helpers Library - A TCL/EXPECT Library for managing, testing, and deploying a Juniper Network by @FrancisLuong

TESTING OUTPUT

Page 12: The Juniper-Helpers Library - A TCL/EXPECT Library for managing, testing, and deploying a Juniper Network by @FrancisLuong

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

Page 13: The Juniper-Helpers Library - A TCL/EXPECT Library for managing, testing, and deploying a Juniper Network by @FrancisLuong

HOW TO GET AND INSTALL IT

Page 14: The Juniper-Helpers Library - A TCL/EXPECT Library for managing, testing, and deploying a Juniper Network by @FrancisLuong

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

Page 15: The Juniper-Helpers Library - A TCL/EXPECT Library for managing, testing, and deploying a Juniper Network by @FrancisLuong

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

Page 16: The Juniper-Helpers Library - A TCL/EXPECT Library for managing, testing, and deploying a Juniper Network by @FrancisLuong

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

Page 17: The Juniper-Helpers Library - A TCL/EXPECT Library for managing, testing, and deploying a Juniper Network by @FrancisLuong

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

Page 18: The Juniper-Helpers Library - A TCL/EXPECT Library for managing, testing, and deploying a Juniper Network by @FrancisLuong

USE THE EXAMPLES

• USE THE EXAMPLES PROVIDED IN THE EXAMPLES SUBFOLDER AND ALTER TO TASTE

Page 19: The Juniper-Helpers Library - A TCL/EXPECT Library for managing, testing, and deploying a Juniper Network by @FrancisLuong

HAPPY AUTOMATING!