An Intro to Juniper’s JET Automation framework and how to use it
Dec 8, 2015
Automation is a game changer. Network and IT Operators are widely deploying automated solutions to save money and make money -- by improving service quality, time to market and introduce new services. This is nothing new. Our Service Provider and Enterprise customers are using automation to enhance DevOps methodologies they are adopting in their network and IT infrastructures. Whether these are Service Providers with large cloud or telco operations, or Enterprises with private and hybrid clouds, DevOps helps them Plan, Build and Run (PBR) customized service oriented solutions with consistent quality and reliability, meeting the demands of the strict service level agreements (SLAs) demanded by their end users.
There are multiple ways to integrate the network into automated solutions. There are vendor specific tools as well as third party frameworks that either run independently on a service platform and/or require client applications on the devices – Chef, Puppet, Ansible to name a few. Then there are vendor specific toolkits. Juniper’s latest addition to these automation tool kits, the Juniper Extension Toolkit (JET) is a good one. JET for Junos OS makes Junos more Open and Programmable in a simple, flexible and extensible fashion. JET enables 3rd party network application development with access to program the Junos Control Plane and the ability for developers to create customized controls (or knobs) for the network, with ease.
JET is based on four fundamental components – Python, JSON, the JET APIs and Fast Programmatic Configuration database.
Now with native support for Python in Junos OS, users can develop and execute Python scripts for operational, event, and configuration commit scripts on any specific device. Existing support for SLAX/XSLT to continues, but the modified Python EZ (PyEZ) for on-box programmability which enables Python scripts to perform network configuration operations on the device.
Since JSON has emerged as a popular data exchange format it has become a standard for simple and light weight communications between some devices and applications. To enrich native support in several programming languages, Junos OS operational commands can now emit output in JSON format, while Junos OS configuration input can also now be provided in JSON format.
A fast programmatic configuration database residing on Junos OS with ultra-low latency is useful for programmatic changes verified and monitored externally. Software Defined Networking (SDN) controllers and external applications alike can benefit from this fast channel to make configuration changes on the control and data planes of devices running Junos OS. With this database change Junos OS can process 1000s of configuration changes per second, with no configuration validation - assuming that the application or controller sending these configuration changes are capable of validating the integration of these configuration changes externally. This model also enables multiple instances of configuration databases to reside inside a device with simultaneous database access without contention and support for various persistency models.
Last but not least, JET offers a set of APIs that are consistent across any Junos OS supporting JET. JET APIs language agnostic – and can be accessed by any Language. Applications developed using JET APIs are also binary compatible and can be executed across any platform running Junos OS release supporting JET. This consistent API support across platforms is extended internally as well. All APIs exposed externally by JET are in fact used internally - they are the same.
With JET being based on Apache Thrift, any integrated Development Platform (IDE) of choice can be used for development for external application development. Extensive Documentation on JET as well as Apache Thrift is available.
A quick and easy way to get started with Automation scripting on Junos OS today is by installing Junos PyEZ as described here.