Automation
Automation

Scripting How-To: Connect to devices remotely

by on ‎08-05-2015 07:22 PM - edited on ‎09-11-2017 05:13 PM by Administrator Administrator (4,533 Views)

Connect to Devices Remotely

 

Each managed Junos OS device is modeled as a jnpr.junos.Device variable (aka "instance"). The general process is you create a variable for each device, providing at least the hostname. You can optionally provide a username (the default is $USER) and a password (the default is using ssh-keys).
 
You then open a connection to the device, perform automation activities on it, and finally close the connection.Each managed Junos OS instance maintains a collection of "facts". These facts are loaded when you open a connection to the device. Facts are generally static pieces of information, such as the software version or serial number. These facts form the basis for other modules when creating abstractions.
 
For example, configuring VLANs on one Junos OS product family might actually be different from another at the XML API level. The purpose of Junos PyEZ is to abstract those differences so the user has a consistent automation interface.

 

To remotely access a Junos OS device (physical or virtual), you must import the Device type:

 

1 from jnpr.junos import Device

 

You can obtain help from the Python shell using: help(Device).

 

Opening a Connection

 

To create a Device variable, you must provide at least the target hostname. You can optionally provide the username; if omitted, this will default to the $USER environment value. You can optionally provide a password; if omitted, this will assume that ssh-keys are active. The following code illustrates three ways to access the same device:

 

1 from jnpr.junos import Device
2 dev = Device('jnpr-dc-fw')                         
3 dev = Device('jnpr-dc-fw', user='jeremy')          
4 dev = Device('jnpr-dc-fw', user='jeremy', password='logmein')

 

Once you've created the Device, you then open a connection:

 

1 dev.open()

 

If an error occurs in the process, an Exception is raised.

 

You can call-chain the Device create and connection open together:

 

1 dev = Device('jnpr-dc-fw').open()

 

 

Changing the RPC Timeout

 

The default timeout for an RPC to transaction is 30 seconds. You might need to change this value for long running requests. Specifically, if you perform a software upgrade you MUST change this value. You can read or write the timeout value as a Device property:

 

1 # read the value
2 >>> dev.timeout
3 30
4 # change the value to 10 minutes
5 >>> dev.timeout = 10*60

 

 

Closing a Device Connection

 

You should explicitly close the Device connection when you are finished.

Feedback