Junos PyEZ is a Python library to remotely manage/automate Junos devices.

Overview

PyPi Version Documentation Status Coverage Status UnitTest Status

The repo is under active development. If you take a clone, you are getting the latest, and perhaps not entirely stable code.

DOCUMENTATION

Official Documentation with examples, here

API Documentation hosted by readthedocs

Junos PyEZ wiki page, here.

ABOUT

PyEZ logo

Junos PyEZ is a Python library to remotely manage/automate Junos devices. The user is NOT required: (a) to be a "Software Programmer™", (b) have sophisticated knowledge of Junos, or (b) have a complex understanding of the Junos XML API.

This library was built for two types of users:

For "Non-Programmers" - Python as a Power Shell

This means that "non-programmers", for example the Network Engineer, can use the native Python shell on their management server (laptop, tablet, phone, etc.) as their point-of-control for remotely managing Junos devices. The Python shell is an interactive environment that provides the necessary means to perform common automation tasks, such as conditional testing, for-loops, macros, and templates. These building blocks are similar enough to other "shell" environments, like Bash, to enable the non-programmer to use the Python shell as a power-tool, rather than a programming language. From the Python shell a user can manage Junos devices using native hash tables, arrays, etc. rather than device-specific Junos XML or resorting to 'screen scraping' the actual Junos CLI.

For "Programmers" - Open and Extensible

There is a growing interest and need to automate the network infrastructure into larger IT systems. To do so, traditional software programmers, DevOps, "hackers", etc. need an abstraction library of code to further those activities. Junos PyEZ is designed for extensibility so that the programmer can quickly and easily add new widgets to the library in support of their specific project requirements. There is no need to "wait on the vendor" to provide new functionality. Junos PyEZ is not specifically tied to any version of Junos or any Junos product family.

SUPPORT

For questions and general support, please visit our Google Group

You can also post your query on stackoverflow with pyez tag

For documentation and more usage examples, please visit the Junos PyEZ project page, here.

Issues and bugs can be opened in the repository.

FEATURES

Junos PyEZ is designed to provide the same capabilities as a user would have on the Junos CLI, but in an environment built for automation tasks. These capabilities include, but are not limited to:

  • Remote connectivity and management of Junos devices via NETCONF
  • Provide "facts" about the device such as software-version, serial-number, etc.
  • Retrieve "operational" or "run-state" information as Tables/Views
  • Retrieve configuration information as Tables/Views
  • Make configuration changes in unstructured and structured ways
  • Provide common utilities for tasks such as secure copy of files and software updates

NOTICES

  • As of release 2.0.0, Junos PyEZ requires ncclient version 0.5.2 or later.
  • When using the ssh_private_key_file argument of the Device constructor on MacOS Mojave and higher, ensure that the SSH keys are in the RSA format, and not the newer OPENSSH format.
    • New key: ssh-keygen -p -m PEM -f ~/.ssh/id_rsa
    • Convert an existing OPENSSH key: ``ssh-keygen -p -m PEM -f ~/.ssh/private_key`
    • Check if a given key is RSA or OPENSSH format: head -n1 ~/.ssh/private_key
      • RSA: -----BEGIN RSA PRIVATE KEY-----
      • OPENSSH: -----BEGIN OPENSSH PRIVATE KEY-----

INSTALLATION

PIP

Installation requires Python >=3.5 and associated pip tool

pip install junos-eznc

Installing from Git is also supported (OS must have git installed).

To install the latest MASTER code
pip install git+https://github.com/Juniper/py-junos-eznc.git
-or-
To install a specific version, branch, tag, etc.
pip install git+https://github.com/Juniper/py-junos-eznc.git@
   

   

Docker

Interactive Docker Usage

Move to the local directory which contains your script(s) and run the container. Running the container in this manner will put you into an interactive Bash session.

docker run -it [ --rm ] [ --name pyez ] -v $PWD:/scripts juniper/pyez

Your local scripts will be mounted to /scripts in the container.

Microservice Usage

This image can also be used as a Python "executable" with the required Python PyEZ libraries pre-installed. To use the image in this way, mount the volume which contains the Python script and pass the script name as an argument to docker run. Optionally, you may also pass in a requirements.txt file to install additional python packages via pip. To add OS packages (Alpine Linux), provide a file with a list of packages --one per line-- and either reference it as an env var ($APK) or mount it to the container /extras/apk.txt. To add additional Python packages (via pip), provide a requirements.txt file and pass it in as an env var ($REQ) or mount it to the container at /extras/requirements.txt.

Usage: docker run -it [ --rm ] -v some/dir:/scripts juniper/pyez [ myscript.py ]`

Example:

$ docker run -it --rm -v $PWD:/scripts juniper/pyez tmp.py
tmp.py
{'2RE': False, 'HOME': '/var/home/lab', 'RE0': {'mastership_state': 'master', 'status': 'OK', 'model': 'RE-SRX210H-POE', 'last_reboot_reason': '0x1:power cycle/failure', 'up_time': '36 days, 11 hours, 49 minutes, 59 seconds'}, 'RE1': None, 'RE_hw_mi': False, 'current_re': ['master', 'node', 'fwdd', 'member', 'pfem', 'backup', 're0', 'fpc0.pic0'], 'domain': None, 'fqdn': 'fw1.localdomain', 'hostname': 'fw1.localdomain', 'hostname_info': {'re0': 'fw1.localdomain'}, 'ifd_style': 'CLASSIC', 'junos_info': {'re0': {'text': '12.1X44-D40.2', 'object': junos.version_info(major=(12, 1), type=X, minor=(44, 'D', 40), build=2)}}, 'master': 'RE0', 'model': 'SRX210H-POE', 'model_info': {'re0': 'SRX210H-POE'}, 'personality': 'SRX_BRANCH', 're_info': {'default': {'0': {'mastership_state': 'master', 'status': 'OK', 'model': 'RE-SRX210H-POE', 'last_reboot_reason': '0x1:power cycle/failure'}, 'default': {'mastership_state': 'master', 'status': 'OK', 'model': 'RE-SRX210H-POE', 'last_reboot_reason': '0x1:power cycle/failure'}}}, 're_master': {'default': '0'}, 'serialnumber': 'AE3009AA0101', 'srx_cluster': False, 'srx_cluster_id': None, 'srx_cluster_redundancy_group': None, 'switch_style': 'VLAN', 'vc_capable': False, 'vc_fabric': None, 'vc_master': None, 'vc_mode': None, 'version': '12.1X44-D40.2', 'version_RE0': '12.1X44-D40.2', 'version_RE1': None, 'version_info': junos.version_info(major=(12, 1), type=X, minor=(44, 'D', 40), build=2), 'virtual': False}
done

See DOCKER-EXAMPLES.md for some example usage.

Upgrade

Upgrading has the same requirements as installation and has the same format with the addition of -UPGRADE

pip install -U junos-eznc

HELLO, WORLD

The following is a quick "hello, world" example to ensure that the software was installed correctly. This code will simply connect to a device and display the known facts of the device, like serial-number, model, etc.

from pprint import pprint
from jnpr.junos import Device

with Device(host='my_host_or_ipaddr', user='jeremy', password='jeremy123' ) as dev:
    pprint( dev.facts )

Example output for an SRX-210 device:

>>> pprint(dev.facts)
{'2RE': False,
 'RE0': {'last_reboot_reason': '0x20:power-button soft power off',
         'model': 'RE-SRX210H',
         'status': 'OK',
         'up_time': '10 minutes, 3 seconds'},
 'domain': 'workflowsherpas.com'         
 'fqdn': 'srx210.workflowsherpas.com',
 'hostname': 'srx210',
 'ifd_style': 'CLASSIC',
 'model': 'SRX210H',
 'personality': 'SRX_BRANCH',
 'serialnumber': 'AD2909AA0096',
 'switch_style': 'VLAN',
 'version': '12.1X44-D10.4',
 'version_info': junos.versino_info(major=(12, 1), type=X, minor=(44, 'D', 10), build=4)}

LICENSE

Apache 2.0

CONTRIBUTORS

Juniper Networks is actively contributing to and maintaining this repo. Please contact [email protected] for any queries.

Contributors:

Nitin Kumar, Stacy Smith, Stephen Steiner

Former Contributors:

Jeremy Schulman, Rick Sherman, Edward Arcuri

Comments
  • AttributeError: 'TimeoutExpiredError' object has no attribute 'xml'

    AttributeError: 'TimeoutExpiredError' object has no attribute 'xml'

    Juniper Device Info Model: mx480 JUNOS Base OS boot [11.4R7.5] Configured as logical system Client side: OS: CentOS release 6.5 (64bit) Python ver: Python 2.7 Checking with ssh –s [email protected] –p 830 netconf Answer with Hello:

    urn:ietf:params:xml:ns:netconf:base:1.0 urn:ietf:params:xml:ns:netconf:capability:candidate:1.0 urn:ietf:params:xml:ns:netconf:capability:confirmed-commit:1.0 urn:ietf:params:xml:ns:netconf:capability:validate:1.0 urn:ietf:params:xml:ns:netconf:capability:url:1.0?protocol=http,ftp,file http://xml.juniper.net/netconf/junos/1.0 http://xml.juniper.net/dmi/system/1.0 65121 ]]>]]>

    But i have an error from python:

    python2.7

    Python 2.7.6 (default, Apr 16 2014, 15:28:57) [GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2 Type "help", "copyright", "credits" or "license" for more information.

    from pprint import pprint from jnpr.junos import Device dev = Device(host='mx480ip', user='mxuser', password='password') dev.open() Traceback (most recent call last): File "", line 1, in File "/usr/local/lib/python2.7/site-packages/jnpr/junos/device.py", line 247, in open self.facts_refresh() File "/usr/local/lib/python2.7/site-packages/jnpr/junos/device.py", line 412, in facts_refresh gather(self, self._facts) File "/usr/local/lib/python2.7/site-packages/jnpr/junos/facts/chassis.py", line 19, in chassis rsp = junos.rpc.get_chassis_inventory() File "/usr/local/lib/python2.7/site-packages/jnpr/junos/rpcmeta.py", line 126, in _exec_rpc return self._junos.execute(rpc) File "/usr/local/lib/python2.7/site-packages/jnpr/junos/device.py", line 289, in execute rsp = JXML.remove_namespaces( err.xml ) AttributeError: 'TimeoutExpiredError' object has no attribute 'xml'

    how to solve this problem?

    Thank you!

    opened by MaxatX 34
  • Enhanced fact gathering

    Enhanced fact gathering

    • Enhanced the fact gathering system to perform on-demand fact gathering.
    • Modified how some of the facts are gathered.
    • Added some new facts.

    The new-style on-demand fact gathering is the default. The old-style fact gathering can still be used (for now) by passing fact_style='old' to Device().

    opened by stacywsmith 21
  • IO Exception Over Serial On Windows

    IO Exception Over Serial On Windows

    I cannot get PyEZ to connect to my juniper switch on Windows using the serial port. For my application I cannot use SSH/telnet and I need it to work over the serial port.

    On login I get an error in tty_netconf._receive() with the usage of select.

    According to the official python docs the select operation is not supported on Windows for file objects (https://docs.python.org/3/library/select.html?highlight=select#select.select).

    Is there something else than the select than can be used to wait on the IO under Windows ?

    Thanks

    Here is the command and the output with the error.

    Using Windows 10 1809 Python 3.6.8 junos-eznc 2.2.1

    To Replicate

    import sys
    import logging
    import time
    from jnpr.junos import Device
    from jnpr.junos.utils.config import Config
    
    logging.basicConfig(level=logging.DEBUG)
    
    dev = Device(mode='serial', port='COM4', user='root', passwd=None)
    dev.open()
    

    Output

    INFO:jnpr.junos.tty:TTY: connecting to TTY:COM4 ...
    INFO:jnpr.junos.tty:TTY: OK.....starting NETCONF
    WRITExml-mode netconf need-trailer
    ERROR:jnpr.junos.console:Exception occurred: login:fileno
    
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "C:\Users\user\AppData\Local\Programs\Python\Python36\lib\site-packages\jnpr\junos\console.py", line 221, in open
        raise ex
      File "C:\Users\user\AppData\Local\Programs\Python\Python36\lib\site-packages\jnpr\junos\console.py", line 211, in open
        self._tty_login()
      File "C:\Users\user\AppData\Local\Programs\Python\Python36\lib\site-packages\jnpr\junos\console.py", line 316, in _tty_login
        self._tty.login()
      File "C:\Users\user\AppData\Local\Programs\Python\Python36\lib\site-packages\jnpr\junos\transport\tty.py", line 115, in login
        self.nc.open(at_shell=self.at_shell)
      File "C:\Users\uesr\AppData\Local\Programs\Python\Python36\lib\site-packages\jnpr\junos\transport\tty_netconf.py", line 68, in open
        self.hello = self._receive()
      File "C:\Users\user\AppData\Local\Programs\Python\Python36\lib\site-packages\jnpr\junos\transport\tty_netconf.py", line 142, in _receive
        raise err
      File "C:\Users\user\AppData\Local\Programs\Python\Python36\lib\site-packages\jnpr\junos\transport\tty_netconf.py", line 140, in _receive
        rd, wt, err = select.select([self._tty._rx], [], [], 0.1)
    io.UnsupportedOperation: fileno
    
    Type: Question Status: Need Info Priority: Low 
    opened by philippetrepanier 19
  • Console over SSH not working in 2.2.0

    Console over SSH not working in 2.2.0

    @vnitinv @mzbroch The SSH over console feature introduced in 2.2.0 is not working for me I wanted to do the integration with the juniper_junos ansible module but it looks broken in Pyez 2.2.0

    I did a bit of troubleshooting and I was able to make it work when I change the flag RECVSZ to 1, current value is 1024 (in file lib/jnpr/junos/transport/tty_ssh.py)

    @vnitinv, looks like you changed it from 1 to 1024 in #870, any specific raison for that ?

    Happy to send a PR to flip it back to 1 if we agreed it's the right fix

    opened by dgarros 17
  • PoC for piping the raw CLI output

    PoC for piping the raw CLI output

    Opening this PR for discussion around piping raw CLI outputs #616

    Implemented only match and count so far. In case the model proposed looks good, we can move on and implement the others:

    Possible completions:
      count                Count occurrences
      display              Show additional kinds of information
      except               Show only text that does not match a pattern
      find                 Search for first occurrence of pattern
      hold                 Hold text without exiting the --More-- prompt
      last                 Display end of output only
      match                Show only text that matches a pattern
      no-more              Don't paginate output
      refresh              Refresh a continuous display of the command
      request              Make system-level requests
      resolve              Resolve IP addresses
      save                 Save output text to file
      trim                 Trim specified number of columns from start of line
    

    Of course, except things such as no-more, as anyway it is provided the complete output, or refresh.

    opened by mirceaulinic 15
  • Auto reconnect

    Auto reconnect

    This branch adds autoreconnect to the Device class. It is built on the connected_property branch.

    An optional integer parameter autoreconnect is added to Device.__init__. This value is handled by a new property getter and setter of the same name.

    This value is used in the execute method. At the beginning of this method, it checks if connected is True. Previously it would raise an Exception if it were not true.

    With this branch, this method checks if autoreconnect is greater than 0, and if so, it attempts to run a self.open(), decrements autoreconnect, and then runs recursively runs self.execute with the same parameters. If it returns a result without throwing an exception, then autoreconnect is incremented, and the result is returned upwards.

    Type: Enhancement 
    opened by spidercensus 14
  • jnpr.junos.utils.config.load does not support replace

    jnpr.junos.utils.config.load does not support replace

    Similar to #118 except for the "replace" load method where conf sections marked with "replace" are replaced rather than overriding the entire config.

    Type: Bug 
    opened by hslabbert 13
  • Config Template Load Fails on SRX1400

    Config Template Load Fails on SRX1400

    SRX1400 running 12.1X44-D25.5 is failing to load a template that other devices (EX4200s running various 10.x and 11.x releases) load without issue. The session is opened without any problems. I can also send RPC calls, such as get_chassis_inventory, although they seem to have issues.

    Error message:

    >>> r.rtr.cu.load(template_path="user.conf", template_vars=uvars)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/local/lib/python2.7/dist-packages/jnpr/junos/utils/config.py", line 270, in load
        return self.rpc.load_config(rpc_contents, **rpc_xattrs)
      File "/usr/local/lib/python2.7/dist-packages/jnpr/junos/rpcmeta.py", line 76, in load_config
        return self._junos.execute(rpc)
      File "/usr/local/lib/python2.7/dist-packages/jnpr/junos/device.py", line 308, in execute
        rsp = JXML.remove_namespaces(err.xml)
    AttributeError: 'XMLSyntaxError' object has no attribute 'xml'
    >>> inv = r.rtr.rpc.get_chassis_inventory()
    >>> inv.find('chassis/description').text
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'NoneType' object has no attribute 'text'
    >>> inv.find('chassis/description').textinv
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'NoneType' object has no attribute 'textinv'
    >>> inv
    <Element multi-routing-engine-results at 0x7f35c802ba28>
    >>> inv.text
    '\n\n'
    
    Status: Completed 
    opened by supertylerc 13
  • Outbound ssh

    Outbound ssh

    This pull request brings outbound ssh support to PyEZ and depends on the recently merged outbound-ssh support in ncclient via pull request https://github.com/ncclient/ncclient/pull/196

    Unit test has been added to cover the new functionality.

    A functional test example is provided in tests/functional/test_outbound_ssh.py

    opened by mwiget 12
  • Added directory_usage to utils

    Added directory_usage to utils

    In PyEZ filesystem utils we were missing a method to see the size of the particular directory (together with all subdirectories). I added directory_usage util to do that.

    Unit test for this util added as well.

    opened by pklimai 12
  • Mapping boolean values in Views

    Mapping boolean values in Views

    I've noticed the boolean handling in lacp.yml

        expired: { lacp-expired: True=Yes }
    

    where a value of "Yes" is mapped to True. I'm trying to do the same thing for BFD but due to what seems to be a bug, the value I'm seeing is a string that contains space. From 'show bfd session | display xml';

                <no-absorb>, no-absorb</no-absorb>
                <no-refresh>no-refresh</no-refresh>
    

    By doing

        no_refresh: { no-refresh: True=no-refresh }
    

    I can get it to recognize the presence of 'no-refresh' to simply mean that no_refresh should be set to True. The problem comes with no-absorb. As you can see it contains a leading ', '. I suppose that is a bug in JUNOS but it's there in 11.4 and 12.1 at least.

        no_absorb: { no-absorb: True=", no-absorb" }
    

    simply does not work, my no_absorb variable will be False. Other variations seem to lead to syntax errors. Is it possible to match on a longer string with spaces?

    Secondly, is it possibly to match on multiple values or a regexp? If this is fixed (I'm assuming leading comma and space is a bug), then we should support matching multiple different values to "True".

    Type: Enhancement 
    opened by plajjan 12
  • Feature Request: PyEz official version compare function

    Feature Request: PyEz official version compare function

    I need a official version compare function.

    I am using distutils LooseVersion() in my PyEz based tools ( https://github.com/shigechika/junos-update ) But LooseVersion() has problems.

    • distutils Version classes are deprecated.
    • LooseVersion() can't compare JUNOS -S train. ex 20.4R3.8 vs 20.4R3-S4.8

    So, I use the following function. but It's not portable in the future.

    def compare_version(left, right):
        """compare version left and right
    
        :param left: version left string, ex 18.4R3-S9.2, 
        :param right: version right string, ex 18.4R3-S10
    
        :return:  1 if left  > right
                  0 if left == right
                 -1 if left  < right
        """
        if left is None or right is None:
            return None
        if LooseVersion(left.replace("-S", "00")) > LooseVersion(right.replace("-S", "00")):
    	return 1
        if LooseVersion(left.replace("-S", "00")) < LooseVersion(right.replace("-S", "00")):
            return -1
        return 0
    

    Could you create official version compare function? Thank you.

    opened by shigechika 0
  • Thread leak with PyEZ

    Thread leak with PyEZ

    This simple script will results in thread leak in junos device.

    from jnpr.junos import Device
    import time
    
    def get_server_detail():
        dev = Device(gather_facts=False)
        dev.open()
        dev.display_xml_rpc('show version', format='text')
        dev.close()
    
    
    while True:
        get_server_detail()
        time.sleep(60)
    
    

    Although we are closing the connection the thread count associated with the process will keep increasing after each sleep call.

    opened by samta93 3
  • Thread safety with eznc

    Thread safety with eznc

    I've authored a web service that is deployed via k8s to attain various information about our Juniper stack and often get this error

      File "/opt/venv/lib/python3.9/site-packages/jnpr/junos/device.py", line 1362, in open
        self._conn = netconf_ssh.connect(
      File "/opt/venv/lib/python3.9/site-packages/ncclient/manager.py", line 176, in connect
        return connect_ssh(*args, **kwds)
      File "/opt/venv/lib/python3.9/site-packages/ncclient/manager.py", line 143, in connect_ssh
        session.connect(*args, **kwds)
      File "/opt/venv/lib/python3.9/site-packages/ncclient/transport/ssh.py", line 401, in connect
        self._post_connect()
      File "/opt/venv/lib/python3.9/site-packages/ncclient/transport/session.py", line 116, in _post_connect
        raise error[0]
      File "/opt/venv/lib/python3.9/site-packages/ncclient/transport/ssh.py", line 499, in run
        events = s.select(timeout=TICK)
      File "/usr/local/lib/python3.9/selectors.py", line 324, in select
        r, w, _ = self._select(self._readers, self._writers, [], timeout)
      File "/opt/venv/lib/python3.9/site-packages/eventlet/green/select.py", line 76, in select
        listeners.append(hub.add(hub.READ, k, on_read, current.throw, lambda: None))
      File "/opt/venv/lib/python3.9/site-packages/eventlet/hubs/epolls.py", line 22, in add
        listener = hub.BaseHub.add(self, evtype, fileno, cb, tb, mac)
      File "/opt/venv/lib/python3.9/site-packages/eventlet/hubs/hub.py", line 176, in add
        raise RuntimeError(
    RuntimeError: Second simultaneous read on fileno 11 detected.  Unless you really know what you're doing, make sure that only one greenthread can read any particular socket.
    

    This is running inside of Falcon what is the recommend way to ensure that EzNc will establish a unique socket for each request and not attempt to reuse? It maybe of note that Falcon is noted as Thread Safe but I dont see any other documentation around NCClient or EZNC as being threadsafe

    opened by luckenbach 4
  • Fix issue calling dev.rpc.get() on JunOS 12.3R12.4 (Ref. EX2200-24P-4G)

    Fix issue calling dev.rpc.get() on JunOS 12.3R12.4 (Ref. EX2200-24P-4G)

    Without this change, the EX2200-24P-4G (running the last supported version for the hardware: 12.3R12.4) will return ncclient.operations.rpc.RPCError: syntax error, expecting <filter> or </get>

    opened by kosh271 0
  • cRPD JSON formatting doesn't work

    cRPD JSON formatting doesn't work

    Hi,

    This is less an issue with PyEz and more with cRPD, however I am only trial user so I do not think I can report issue to JTAC for cRPD.

    Problem is fairly simple. cRPD (I am using trial version 19.4R1.10) returns the following for facts.get("version_info"):

    junos.version_info(major=(0, 0), type=I, minor=0, build=0)
    

    This value is used by device.py here, to determine if the JunOS version is recent enough to support JSON formatting. Because crpd returns 0 for the version info the 'if' evaluates to false, so the JSON commands are skipped and we get this error:

    /usr/local/lib/python3.9/dist-packages/junos_eznc-2.6.5-py3.9.egg/jnpr/junos/device.py:886: RuntimeWarning: Native JSON support is only from 14.2 onwards
      warnings.warn(
    

    I'm just messing with this in the lab, so it's easy enough for make a small change to devices.py to force it to work. It might be worth incorporating such a work-around at this point for crpd, or possibly ask the crpd dev team to fix the problem whereby the version_info returns with zeros.

    opened by topranks 0
  • sw.install giving parse error when running on windows system

    sw.install giving parse error when running on windows system

    Getting this error when running this code on windows system but works on Linux system.

    ok, msg = sw.install(
                            package=firmware_file,
                            progress=True,
                            no_copy=False,
                            validate=False,
                            cleanfs=True,
                        )
    

    where firmware_file is file path to the firmware on the host system.

    fetch-secure: C:\Users\****\Desktop\****\network_switch_tool\ex2300-c\junos-arm-32-20.2R3-S3.6.tgz: parse error ERROR: Cannot fetch file: C:\Users\****\Desktop\****\network_switch_tool\ex2300-c\junos-arm-32-20.2R3-S3.6.tgz

    opened by Aaron-MJohn 2
Releases(2.6.6)
  • 2.6.6(Dec 9, 2022)

    Bugs Fixed

    • Fixed reboot failing on other RE #1199
    • Fixed passing 'sleep' arg to StartShell run() #1202
    • Fixed PyEZ get-facts support for ACX model #1209
    • Fixed EthPortTable regex pattern #1215
    • Fixed StartShell UnboundLocalError #1203 #1211
    Source code(tar.gz)
    Source code(zip)
  • 2.6.5(Jul 29, 2022)

    Enhancements done

    • Supported multi-gig ports for EthPortTable.yml #1177

    Bugs Fixed

    • Fixed on-box support for start shell types #1190 #1186
    • Fixed conn_open_timeout value was getting set None , changed it to default 30 seconds #1184
    Source code(tar.gz)
    Source code(zip)
  • 2.6.4(Jun 9, 2022)

    Enhancements done

    • Supported start_shell options to choose the shell types (sh or csh) #995
    • Supported for python 3.9

    Bugs Fixed

    • Fixed Device facts current_re returns the SRX cluster node0 and node1 details with cluster ID 16 #1135
    • Fixed upgrade ncclient version 0.6.13, updated requirements.txt to install ncclient==0.6.13 #1153
    • Fixed deprecation warning due to invalid escape sequences #1034
    • Fixed Unit tests test_sw_put_ftp failure #1165
    Source code(tar.gz)
    Source code(zip)
  • 2.6.3(Oct 5, 2021)

    Enhancements done

    • Adding ignore warning for rollback api #1131
    • Add escaped $ Bourne-style shell prompt support #868

    Bugs Fixed

    • Fix for junos versions returning a bool value for config diff if there are no changes #1093
    • Handle ncclient timeout exception at close. #787
    • Newer junos versions return a bool for config diff and not etree if there are no changes #1093
    Source code(tar.gz)
    Source code(zip)
  • 2.6.2(Jul 13, 2021)

  • 2.6.1(Jun 1, 2021)

    Enhancement Added

    • Flag for json.loads() for special character like newline was made false by default. #1029

    Bugs Fixed

    • Transform function modified only for the rpc and set back to original value. #1108
    • Skip the values returned in re-list without numbers during multi re software install #1099
    • getiterator() replaced with iter() as was deprecated in Python 3.2 and removed in Python 3.9 #1110
    Source code(tar.gz)
    Source code(zip)
  • 2.6.0(Apr 22, 2021)

    Enhancement Added

    • Python 2 support removed from this release.
    • Session-id variable added to support telnet based persistent connection in Juniper supported ansible collections.
    Source code(tar.gz)
    Source code(zip)
  • 2.5.4(Oct 29, 2020)

    Features Added

    • cRPD model check to be added for on-box junos #1084

    Bugs Fixed

    • support use-fast-diff in diff/pdff function #1088
    • Zeroize handling modified for scenario where only warning is returned in the rpc-reply #1087
    • ntc_template and textfsm module's installation made optional and to be done explicitly if one want to use PyEZ table/view for other vendors cli o/p parsing. #1085
    • Checksum algorithm argument to be passed during remote checksum in software installation. #1083
    • docstring initialized with empty string as it becomes empty if optimization flag is added. #1081
    Source code(tar.gz)
    Source code(zip)
  • 2.5.3(Aug 28, 2020)

  • 2.5.2(Aug 21, 2020)

    Bugs Fixed

    • juniper_junos_system fails when (vmhost) rebooting MX204 router #1068
    • Testcase failing in PyEZ after ncclient upgrade #1064
    • Wheel support for version integrated with versioneer. #1070
    • rpc-reply during reboot parsing gives error #1066
    Source code(tar.gz)
    Source code(zip)
  • v1.3.4-iAgent(Aug 11, 2020)

  • 2.5.1(Jul 30, 2020)

    Bugs Fixed

    • Adding monitor-failure information in juniper_junos_facts output #991
    • Raise exception when dev.cli fails with exception #925
    • Device version fix for srx when cluster id greater than 15 #1032 #819
    Source code(tar.gz)
    Source code(zip)
  • v1.3.3-iAgent(Jul 9, 2020)

  • 2.5.0(Jun 30, 2020)

    Features Added

    • Black tool integrated and checked in Travis.
    • Versioneer support added for the code.
    • Changes for ansible actions of the reboot, shutdown to be handled in PyEZ

    Bugs Fixed

    • sax parser filter generation generic logic #1047
    • Changes for the msg displayed in case of failure in software update #1030
    • fix for default ssh_config path in windows #1043
    • ntc_template latest version uses textfsm 1.1.0 #1042
    • drop hard dependency on unittest2 #1040

    Note:

    Due to changes in software install functionality, the return type has changed for the function sw.install. Now it will return tuple in place of Boolean, Tuple contains Success/Failure status and software install message (if any)

    Before:

    bool_ret = sw.install(...)
    

    Now:

    bool_ret, msg = sw.install(...)
    
    Source code(tar.gz)
    Source code(zip)
  • 2.4.1(Apr 29, 2020)

    Features Added

    • None

    Bugs fixed

    • Latest textfsm doesn’t support in windows. Hence, supporting textfsm 0.4.1 for windows user #1019
    • Convert port argument when passed as str to int data type #1020
    • Return type of sw.install function going to change in the upcoming major release. So, added a deprecation warning in sw.install #1025
    Source code(tar.gz)
    Source code(zip)
  • 2.4.0(Apr 1, 2020)

    Features Added

    • Added TableView Null Key support #983
    • Added timeout support for commit_check() #998
    • Added Win serial COM support #1000
    • Added load patch support #1001
    • Added textfsm support for table/view #1009

    Bugs fixed:

    • Fixed table/view issue w.r.t to get() call #981
    • Fixed documentation typo #986
    • Handled sax parser input for nested fields #997
    • Fixed outbound ssh issue #1007
    • Fixed xpath issue when defined with a string function #1008
    Source code(tar.gz)
    Source code(zip)
  • 2.3.2(Apr 1, 2020)

    Features Added

    • Added TableView Null Key support #983
    • Added timeout support for commit_check() #998
    • Added Win serial COM support #1000
    • Added load patch support #1001
    • Added textfsm support for table/view #1009

    Bugs fixed:

    • Fixed table/view issue w.r.t to get() call #981
    • Fixed documentation typo #986
    • Handled sax parser input for nested fields #997
    • Fixed outbound ssh issue #1007
    • Fixed xpath issue when defined with a string function #1008
    Source code(tar.gz)
    Source code(zip)
  • v1.3.2-iAgent(Mar 5, 2020)

  • v1.3.1-iAgent(Jan 13, 2020)

  • 2.3.1(Dec 10, 2019)

    Features Added

    • None

    Bugs fixed:

    • Handled a check for pending Junos OS or package installation #966
    • Fixed MetaPathLoader support only for jnpr.junos* modules #977
    • Fixed huge tree XML support #975
    • Fixed Junos sax parser issue for filter_xml broken #969
    Source code(tar.gz)
    Source code(zip)
  • v1.3.0-iAgent(Oct 24, 2019)

    Fixes:

    • filter_xml was broken when item was separated by multiple slashes #969
    • filter_xml creation when multiple fields got same parent path #968
    • string blob with new line in between where not parser till its end. #963
    Source code(tar.gz)
    Source code(zip)
  • 2.3.0(Sep 27, 2019)

    Features Added

    • TableView extended for vty/cli unstructured command #950
    • Added junos SAX parser feature #942 #955 #951
    • Added TableView Null Key support #910
    • Added command tables #958.
    • Added reboot support for junos vmhost platform #952
    • Added ElsEthernetSwitchingTable TableView #939
    • Added callback functionality to ftp get #932
    • Extended start shell support for Bourne shell #934
    • Added at option support for sw.reboot() and sw.poweroff() #916
    • Added generalized function for ssh-client #957

    Bugs Fixed

    • Updated fact collection for srx platform #935
    • Supports new ssh private key format #945
    • Handled exception in dev.close() #956
    • Updated file transfers to use context manager to open files #885
    • Fixed reboot and poweroff behavior #916
    Source code(tar.gz)
    Source code(zip)
  • v1.2.0-iAgent(Sep 13, 2019)

  • v1.1.0-iAgent(May 30, 2019)

  • 2.2.1(Apr 22, 2019)

    Features Added

    • None

    Bugs Fixed

    • Handle multiple package-result values from sw.install #864
    • Extended support to WR-Based Linux H/W #882 #883 #889
    • Fixed issues in Console over SSH #877
    • Optimized PyEZ docker image size and minor bug fixes #894 #911
    • Fixed JSON serialization for Junos facts #902
    • Updated securityzone.yml. Added item zone-security #909
    • Fixed runtime error while using Outbound-SSH #915
    • Fixed Pyyaml bugs #914 #917 #918
    Source code(tar.gz)
    Source code(zip)
  • v1.0.1-iAgent(Mar 19, 2019)

  • 2.2.0(Aug 27, 2018)

    Features Added:

    • Support for Node Slicing based platforms #856
    • Support for Linux based Juniper devices #862
    • Support SSH Connection through console server (having login credentials) #861 #870
    • Outbound SSH #732

    Bugs Fixed:

    Source code(tar.gz)
    Source code(zip)
  • 2.1.9(Aug 8, 2018)

    Features Added:

    • None

    Bugs Fixed

    • Added op tables and views for SRX security zones #855
    • Changed facts for DVATIA platform #856
    • Fixed issue in gathering facts when other RE is rebooting/off #852
    • Added and fixed existing unit test cases in PyEZ #838 #854 #840
    • Fixed RpcTimeoutError for pdiff() #839
    • Handled newer junos device #853
    Source code(tar.gz)
    Source code(zip)
  • 2.1.8(May 31, 2018)

    Features Added:

    • None

    Bug Fixed:

    • Correct PyEZ TechWiki link #813
    • Support active and inactive configuration options in config table/view #826
    • Upgraded alpine 3.6 to support docker in PyEZ #789 #828 #827
    • Support configuration table/view in telnet mode #829
    • Added new unit test cases in PyEZ #831
    • Detect set config format with all keywords like insert, activate, copy etc #791 #792
    Source code(tar.gz)
    Source code(zip)
  • 2.1.7(Sep 30, 2017)

Airbrake Python

airbrake-python Note. Python 3.4+ are advised to use new Airbrake Python notifier which supports async API and code hunks. Python 2.7 users should con

Airbrake 51 Dec 22, 2022
Python Excuse Generator

Excuse Generator Python Excuse Generator This project is an excuse generator that provides the user with an excuse as to why they weren't paying atten

Collin Sanders 5 Jul 07, 2022
A simple armature retargeting tool for Blender

Simple-Retarget-Tool-Blender A simple armature retargeting tool for Blender Update V2: Set Rest Pose to easily apply rest pose. Preset Import/Export.

Fahad Hasan Pathik 74 Jan 04, 2023
A Python script to parse Fortinet products serial numbers, and detect the associated model and version.

ParseFortinetSerialNumber A Python script to parse Fortinet products serial numbers, and detect the associated model and version. Example $ ./ParseFor

Podalirius 10 Oct 28, 2022
Convert text with ANSI color codes to HTML or to LaTeX.

Convert text with ANSI color codes to HTML or to LaTeX.

PyContribs 326 Dec 28, 2022
Manjaro CN Repository

Manjaro CN Repository Automatically built packages based on archlinuxcn/repo and manjarocn/docker. Install Add manjarocn to /etc/pacman.conf: Please m

Manjaro CN 28 Jun 26, 2022
DOP-Tuning(Domain-Oriented Prefix-tuning model)

DOP-Tuning DOP-Tuning(Domain-Oriented Prefix-tuning model)代码基于Prefix-Tuning改进. Files ├── seq2seq # Code for encoder-decoder arch

Andrew Zeng 5 Nov 02, 2022
Generate Gaussian 09 input files for the rotamers of an input compound.

Rotapy Purpose Generate Gaussian 09 input files for the rotamers of an input compound. Distance to the axis of rotation remains constant throughout th

1 Jul 16, 2021
Grimoire is a Python library for creating interactive fiction as hyperlinked html.

Grimoire Grimoire is a Python library for creating interactive fiction as hyperlinked html. Installation pip install grimoire-if Usage Check out the

Scott Russell 5 Oct 11, 2022
UF3: a python library for generating ultra-fast interatomic potentials

Ultra-Fast Force Fields (UF3) S. R. Xie, M. Rupp, and R. G. Hennig, "Ultra-fast interpretable machine-learning potentials", preprint arXiv:2110.00624

Ultra-Fast Force Fields 24 Nov 13, 2022
Performance monitoring and testing of OpenStack

Browbeat Browbeat is a performance tuning and analysis tool for OpenStack. Browbeat is free, Open Source software. Analyze and tune your Cloud for opt

cloud-bulldozer 83 Dec 14, 2022
For my Philips Airpurifier AC3259/10

Philips-Airpurifier For my Philips Airpurifier AC3259/10 I will try to keep this code

AcidSleeper 7 Feb 26, 2022
Python client library for the Databento API

Databento Python Library The Databento Python client library provides access to the Databento API for both live and historical data, from applications

Databento, Inc. 35 Dec 24, 2022
Catalogue CRUD Application

This Python program creates a relational SQL database hosted on the Snowflake platform, then opens a CRUD GUI to manipulate and view the data. In this application, it is used as a book catalogue. CUR

0 Dec 13, 2022
Pylexa - Artificial Assistant made with Python

Pylexa - Artificial Assistant made with Python Alexa is a famous artificial assistant used massively across the world. It is a substitute of Alexa whi

\_PROTIK_/ 4 Nov 03, 2021
A GUI love Calculator which saves all the User Data in text file(sql based script will be uploaded soon). Interative GUI. Even For Admin Panel

Love-Calculator A GUI love Calculator which saves all the User Data in text file(sql based script will be uploaded soon). Interative GUI, even For Adm

Adithya Krishnan 1 Mar 22, 2022
The third home of the bare Programming Language (1st there's my heart, the forest came second and then there's Github :)

The third home of the bare Programming Language (1st there's my heart, the forest came second and then there's Github :)

Garren Souza 7 Dec 24, 2022
decorator

Decorators for Humans The goal of the decorator module is to make it easy to define signature-preserving function decorators and decorator factories.

Michele Simionato 734 Dec 30, 2022
The LiberaPay archive module for the SeanPM life archive project.

By: Top README.md Read this article in a different language Sorted by: A-Z Sorting options unavailable ( af Afrikaans Afrikaans | sq Shqiptare Albania

Sean P. Myrick V19.1.7.2 1 Aug 26, 2022
A Trace Explorer for Reverse Engineers

Tenet - A Trace Explorer for Reverse Engineers Overview Tenet is an IDA Pro plugin for exploring execution traces. The goal of this plugin is to provi

1k Jan 02, 2023