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)

A prototype COG-based tile server for sparse Mars datasets

Mars tiler Mars Tiler is a prototype web application that serves tiles from cloud-optimized GeoTIFFs, with an emphasis on supporting planetary dataset

Daven Quinn 3 Mar 23, 2022
Simple module with some functions such as generate password (get_random_string)

Simple module with some functions such as generate password (get_random_string), fix unicode strings, size converter, dynamic console, read/write speed checker, etc.

Dmitry 2 Dec 03, 2022
An open source recipe book from the awesome staff of Clinical Genomics

meatballs An open source recipe book from the awesome staff of Clinical Genomics.

Clinical Genomics 2 Dec 07, 2021
All kinds of programs are accepted here, raise a genuine PR, and claim a PR, Make 4 successful PR's and get the Stickers and T-Shirt from hacktoberfest 2021

this repository is excluded from hacktoberfest Hacktoberfest-2021 This repository aims to help code beginners with their first successful pull request

34 Sep 11, 2022
Bootcamp de Introducción a la Programación. Módulo 6: Matemáticas Discretas

Módulo 6: Matemáticas Discretas Última actualización: 12 de marzo Irónicamente, las matemáticas discretas son las matemáticas que lo cuentan todo. Si

Cynthia Castillo 34 Sep 29, 2022
Async-first dependency injection library based on python type hints

Dependency Depression Async-first dependency injection library based on python type hints Quickstart First let's create a class we would be injecting:

Doctor 8 Oct 10, 2022
GWCelery is a simple and reliable package for annotating and orchestrating LIGO/Virgo alerts

GWCelery is a simple and reliable package for annotating and orchestrating LIGO/Virgo alerts, built from widely used open source components.

Min-A Cho Zeno 1 Nov 02, 2021
🎅🏻 Helping santa understand ✨ python ✨

☃️ Advent of code 2021 ☃️ Helping santa understand ✨ python ✨

Fluffy 2 Dec 25, 2021
Aim of the project is to reduce phishing victims. 😇

Sites: For more details visit our Blog. How to use 😀 : You just have to paste the url in the ENTER THE SUSPECTED URL section and SELECT THE RESEMBELI

0 May 19, 2022
Xkcd.py - Script to generate wallpapers based on XKCD comics

xkcd.py Script to generate wallpapers based on XKCD comics Usage python3 xkcd.py

Gideon Wolfe 11 Sep 06, 2022
This is a fork of the BakeTool with some improvements that I did to have better workflow.

blender-bake-tool This is a fork of the BakeTool with some improvements that I did to have better workflow. 99.99% of work was done by BakeTool team.

Acvarium 3 Oct 04, 2022
A tool for study using pomodoro methodology, while study mode spotify or any other .exe app is opened and while resting is closed.

Pomodoro-Timer-With-Spotify-Connection A tool for study using pomodoro methodology, while study mode spotify or any other .exe app is opened and while

2 Oct 23, 2022
Exploiting Linksys WRT54G using a vulnerability I found.

Exploiting Linksys WRT54G Exploit # Install the requirements. pip install -r requirements.txt ROUTER_HOST=192.169.1.1 ROUTER_USERNAME=admin ROUTER_P

Elon Gliksberg 31 May 29, 2022
适用于HoshinoBot下的人生重来模拟器插件

LifeRestart for HoshinoBot 原作地址 python版原地址 本项目地址 安装方法 这是一个HoshinoBot的人生重来模拟器插件 这个项目使用的HoshinoBot的消息触发器,如果你了解其他机器人框架的api(比如nonebot)可以只修改消息触发器就将本项目移植到其他

黛笙笙 16 Sep 03, 2022
Boot.img patcher for Tolino ebook readers to enable ADB and root.

I'm not responsible for any damage to your devices by running this tool. Please note that you may loose warranty when using this, although (This is no

Aaron Dewes 9 Nov 13, 2022
An implementation of Ray Tracing in One Weekend using Taichi

又一个Taichi语言的Ray Tracer 背景简介 这个Ray Tracer基本上是照搬了Peter Shirley的第一本小书Ray Tracing in One Weekend,在我写的时候参考的是Version 3.2.3这个版本。应该比其他中文博客删改了不少内容。果然Peter Shir

张皓 30 Nov 21, 2022
📽 Streamlit application powered by a PyScaffold project setup

streamlit-demo Streamlit application powered by a PyScaffold project setup. Work in progress: The idea of this repo is to demonstrate how to package a

PyScaffold 2 Oct 10, 2022
Python framework to build apps with the GASP metaphor

Gaspium Python framework to build apps with the GASP metaphor This project is part of the Pyrustic Open Ecosystem. Installation | Documentation | Late

5 Jan 01, 2023
monster hunter world randomizer project

mhw_randomizer monster hunter world randomizer project Settings are in rando_config.py Current script for attack randomization is n mytest.py There ar

2 Jan 24, 2022
Consulta cpf fds

Consulta-cpf Consulta cpf fds Instalação: apt-get update -y

Moleey 1 Nov 24, 2021