github Juniper/py-junos-eznc 1.1.0
Release 1.1.0

latest releases: 2.7.1, 2.7.0, 2.6.8...
9 years ago

New Features

Enhanced Exception Handling

  • Default exception
    • Look for ncclient RPCError to process XML (ncclient 0.4.3 exception handling improved)
    • Otherwise will raise a generic
  • CommitError
    • Added information as to why the commit failed
  • ConfigLoadError
    • New exception – gives information on why loading a config failed.
  • RpcTimeoutError
    • New exception – displays device, rpc, and timeout value.

Per execution timeout

  • New feature adds the keyword argument dev_timeout with the value of seconds to the RPC on demand function. This will set the timeout for only that operation. (The device timeout is still globally updated automatically before and after execution).

    Example
    dev.rpc.get_route_information(table='inet.0', dev_timeout=55)

Serialization of Junos facts

  • Custom encoders added for the object in both YAML and JSON. Default encoders set to this custom version by default in the library.

    Example
    import yaml
    print yaml.dump(dev.facts['version_info'])
    build: 6
    major: !!python/tuple [14, 2]
    minor: '1'
    type: R
    
    import json
    print json.dumps(dev.facts['version_info'])
    {"major": [14, 2], "type": "R", "build": 6, "minor": "1"}

Composite table key support for missing XPATH

  • Table items are defined by a key, that is either a single element (such as name), or as a list of multiple XPATHs ('FPC 0', 'MIC 0', 'PIC 0'). In 1.0 if one of the XPATH elements was missing, an uncaught exception was thrown.

  • Updated the code to replace missing elements with None.

    Example
    PicHwTable:
        rpc: get-chassis-inventory
        item: .//name[starts-with(.,'PIC')]/parent::*
        key:
            - ancestor::*[starts-with(name,'FPC')]/name
            - ancestor::*[starts-with(name,'MIC')]/name
            - name
        view: _pic_hw_view
    pic.name: ('FPC 2', 'MIC 0', 'PIC 1')
    pic.pn:   BUILTIN
    pic.sn:   XXXX
    pic.desc: 10x 1GE(LAN) SFP
    pic.name: ('FPC 3', None, 'PIC 0')
    pic.pn:   BUILTIN
    pic.sn:   XXXX

Regex support for View boolean values

  • Values in views can be set to a Boolean based on the presence of a field.

  • Regex support was added to allow for easier matching and multiple values. This is done by setting the format to True/False=regex():

    Example
    no_absorb: { no-absorb: True=regex(no-absorb) }
    no_refresh: { no-refresh: True=regex(\dx\d) }
    no_refresh: { no-refresh: 'True=regex(Session ID: 0x0|no-refresh)' }

OS Install force-host

  • Added force_host to support QFX OS Install

    Example
    SW.install('file', no_copy=True, force_host=True)

Added display_xml_rpc command

  • To support the limiting of cli() a new function display_xml_rpc is introduced. By default it will return the XML element and text format is also supported.

    Example
    dev.display_xml_rpc('show system login lockout')
    <Element get-system-login-lockout-information at 0x37b4b48>
    
    dev.display_xml_rpc('show system login lockout', format='text')
    '<get-system-login-lockout-information>\n</get-system-login-lockout-information>\n'

ncclient proxycommand support

  • Updated to be compatible with the enhancements in ncclient 0.4.2 and added optional path variable for sshconfig file (by default ~/.ssh/config is queried).

    Example
    [rsherman@localhost ~]$ cat .ssh/config
    Host 192.168.74.31
    User juniper
    ProxyCommand ssh -l juniper 192.168.74.128 nc %h 22 2>/dev/null
    
    >>> dev = Device('192.168.74.31')
    >>> dev.open()
    Device(192.168.74.31)
    

Added support for pipe (union) operator in Table keys

  • Added the ability to use an XPATH pipe (union) operator for Table keys. This feature was already supported with View fields.

  • The syntax is ' | ' (space + pipe + space) between the values. The table will automatically append the item value + / to each element specified in the piped key.

  • The most common use case for this is the implicit "or"; there are situations where keys may have a different name between releases or types of configuration (as is the case with LLDP on ELS and non-ELS switches).

  • If there are multiple keys (of fields) listed with pipes that are found in the RPC reply they will be added to the list.

    Example
    key: lldp-local-interface | lldp-local-port-id
    
    lldp.keys()
    ['me0.0', 'me0.0', 'me0.0', 'me0.0', 'xe-0/1/0.0']
    

Format optional for configuration strings

  • When passing configuration data in as a string the library will attempt to automatically determine the format.

    Example
    config_string = "set interfaces ge-0/0/1 unit 10 family inet address 10.10.10.10/24"
    cu.load(config_string)

Bugs Fixed

JSON Output

  • Views that had compound keys failed to dump.

  • RPC command output failed to dump.

    Example
    pic = PicHwTable(dev)
    pic.get()
    PicHwTable:sprite.englab.juniper.net: 1 items
    pic.to_json()
    '{"(\'FPC 2\', \'MIC 0\', \'PIC 0\')": {"pn": "BUILTIN", "sn": "BUILTIN", "name": ["FPC 2", "MIC 0", "PIC 0"],   "desc": "4x 10GE(LAN) SFP+"}}'
    
    import json
    json.dumps(dev.rpc.get_system_uptime_information())
    '{"system-booted-time": {"time-length": "3w3d 01:44", "date-time": "2014-11-11 13:47:28 PST"}, "uptime-information": {"active-user-count": "\\n1\\n", "load-average-5": "\\n0.03\\n", "load-average-15": "\\n0.03\\n", "up-time": "\\n24 days,  1:44\\n", "load-average-1": "\\n0.00\\n", "date-time": "\\n3:31PM\\n"}, "protocols-started-time": {"time-length": "2d 04:10", "date-time": "2014-12-03 11:21:27 PST"}, "last-configured-time": {"time-length": "2d 00:58", "user": "regress", "date-time": "2014-12-03 14:33:27 PST"}, "current-time": {"date-time": "2014-12-05 15:31:35 PST"}}'

FutureWarning

  • Config utility would output a FutureWarning

Don't miss a new py-junos-eznc release

NewReleases is sending notifications on new releases.