Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-junos-eznc for openSUSE:Factory checked in at 2024-04-21 20:26:15 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-junos-eznc (Old) and /work/SRC/openSUSE:Factory/.python-junos-eznc.new.26366 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-junos-eznc" Sun Apr 21 20:26:15 2024 rev:16 rq:1169283 version:2.7.1 Changes: -------- --- /work/SRC/openSUSE:Factory/python-junos-eznc/python-junos-eznc.changes 2024-02-12 18:55:45.414184083 +0100 +++ /work/SRC/openSUSE:Factory/.python-junos-eznc.new.26366/python-junos-eznc.changes 2024-04-21 20:27:27.518312271 +0200 @@ -1,0 +2,8 @@ +Wed Apr 17 12:37:53 UTC 2024 - Markéta Machová <[email protected]> + +- Update to 2.7.1 + * Added customer juniper paramiko module as a dependency which + supported aes128 and aes257 cipher #1299 +- Create no-six.patch to get rid of six dependency. + +------------------------------------------------------------------- Old: ---- python-junos-eznc-2.7.0.tar.gz New: ---- no-six.patch python-junos-eznc-2.7.1.tar.gz BETA DEBUG BEGIN: New: supported aes128 and aes257 cipher #1299 - Create no-six.patch to get rid of six dependency. BETA DEBUG END: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-junos-eznc.spec ++++++ --- /var/tmp/diff_new_pack.wRpYDx/_old 2024-04-21 20:27:28.278340162 +0200 +++ /var/tmp/diff_new_pack.wRpYDx/_new 2024-04-21 20:27:28.282340309 +0200 @@ -19,7 +19,7 @@ %define skip_python2 1 Name: python-junos-eznc -Version: 2.7.0 +Version: 2.7.1 Release: 0 Summary: Junos 'EZ' automation for non-programmers License: Apache-2.0 @@ -32,6 +32,8 @@ Patch3: python-junos-eznc-no-mock.patch # PATCH-FIX-OPENSUSE python-311.patch gh#Juniper/py-junos-eznc#1236 Patch4: python-311.patch +# PATCH-FIX-UPSTREAM gh#Juniper/py-junos-eznc#1307 Don't require six +Patch5: no-six.patch BuildRequires: %{python_module Jinja2 >= 2.7.1} BuildRequires: %{python_module PyYAML >= 5.1} BuildRequires: %{python_module lxml >= 3.2.4} @@ -45,7 +47,6 @@ BuildRequires: %{python_module pytest} BuildRequires: %{python_module scp >= 0.7.0} BuildRequires: %{python_module setuptools} -BuildRequires: %{python_module six} BuildRequires: %{python_module transitions} BuildRequires: %{python_module yamlloader} BuildRequires: fdupes @@ -58,7 +59,6 @@ Requires: python-pyparsing Requires: python-pyserial Requires: python-scp >= 0.7.0 -Requires: python-six Requires: python-transitions BuildArch: noarch %python_subpackages ++++++ no-six.patch ++++++ Index: py-junos-eznc-2.7.1/lib/jnpr/junos/jxml.py =================================================================== --- py-junos-eznc-2.7.1.orig/lib/jnpr/junos/jxml.py +++ py-junos-eznc-2.7.1/lib/jnpr/junos/jxml.py @@ -1,7 +1,6 @@ from ncclient import manager from ncclient.xml_ import NCElement from lxml import etree -import six """ These are Junos XML 'helper' definitions use for generic XML processing @@ -226,8 +225,7 @@ def cscript_conf(reply): # xslt to remove prefix like junos:ns -strip_namespaces_prefix = six.b( - """<?xml version="1.0" encoding="UTF-8" ?> +strip_namespaces_prefix = b"""<?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="no" omit-xml-declaration="no" /> @@ -249,4 +247,3 @@ strip_namespaces_prefix = six.b( </xsl:attribute> </xsl:template> </xsl:stylesheet>""" -) Index: py-junos-eznc-2.7.1/lib/jnpr/junos/transport/tty_netconf.py =================================================================== --- py-junos-eznc-2.7.1.orig/lib/jnpr/junos/transport/tty_netconf.py +++ py-junos-eznc-2.7.1/lib/jnpr/junos/transport/tty_netconf.py @@ -11,23 +11,22 @@ from lxml.etree import XMLSyntaxError from datetime import datetime, timedelta from ncclient.operations.rpc import RPCReply, RPCError from ncclient.xml_ import to_ele -import six from ncclient.transport.session import HelloHandler class PY6: - NEW_LINE = six.b("\n") - EMPTY_STR = six.b("") - NETCONF_EOM = six.b("]]>]]>") - STARTS_WITH = six.b("<!--") + NEW_LINE = b"\n" + EMPTY_STR = b"" + NETCONF_EOM = b"]]>]]>" + STARTS_WITH = b"<!--" __all__ = ["xmlmode_netconf"] -_NETCONF_EOM = six.b("]]>]]>") -_xmlns = re.compile(six.b("xmlns=[^>]+")) +_NETCONF_EOM = b"]]>]]>" +_xmlns = re.compile(b"xmlns=[^>]+") _xmlns_strip = lambda text: _xmlns.sub(PY6.EMPTY_STR, text) -_junosns = re.compile(six.b("junos:")) +_junosns = re.compile(b"junos:") _junosns_strip = lambda text: _junosns.sub(PY6.EMPTY_STR, text) logger = logging.getLogger("jnpr.junos.tty_netconf") @@ -116,7 +115,7 @@ class tty_netconf(object): """ if not cmd.startswith("<"): cmd = "<{}/>".format(cmd) - rpc = six.b("<rpc>{}</rpc>".format(cmd)) + rpc = "<rpc>{}</rpc>".format(cmd).encode('utf-8') logger.info("Calling rpc: %s" % rpc) self._tty.rawwrite(rpc) Index: py-junos-eznc-2.7.1/lib/jnpr/junos/transport/tty_ssh.py =================================================================== --- py-junos-eznc-2.7.1.orig/lib/jnpr/junos/transport/tty_ssh.py +++ py-junos-eznc-2.7.1/lib/jnpr/junos/transport/tty_ssh.py @@ -6,7 +6,6 @@ import sys from time import sleep, time import paramiko -import six from jnpr.junos.transport.tty import Terminal @@ -15,14 +14,14 @@ logger = logging.getLogger("jnpr.junos.t # ------------------------------------------------------------------------- # Terminal connection over SSH CONSOLE # ------------------------------------------------------------------------- -_PROMPT = re.compile(six.b("|").join([six.b(i) for i in Terminal._RE_PAT])) +_PROMPT = re.compile(b"|".join([i.encode('utf-8') for i in Terminal._RE_PAT])) class PY6: - NEW_LINE = six.b("\n") - EMPTY_STR = six.b("") - NETCONF_EOM = six.b("]]>]]>") - IN_USE = six.b("in use") + NEW_LINE = b"\n" + EMPTY_STR = b"" + NETCONF_EOM = b"]]>]]>" + IN_USE = b"in use" class SSH(Terminal): @@ -136,7 +135,7 @@ class SSH(Terminal): def write(self, content): """write content + <ENTER>""" logger.debug("Write: %s" % content) - self._ssh.sendall(six.b((content + "\n"))) + self._ssh.sendall(bytes(content + "\n", 'utf-8')) def rawwrite(self, content): """write content as-is""" @@ -152,13 +151,13 @@ class SSH(Terminal): if sys.version >= "3": content = content.decode("utf-8") for char in content: - self._ssh.sendall(six.b(char)) + self._ssh.sendall(bchar) wtime = 10 / float(self.baud) sleep(wtime) # do not remove def read(self): """read a single line""" - rxb = six.b("") + rxb = b"" while True: data = self._ssh.recv(self.RECVSZ) if data is None or len(data) <= 0: @@ -180,7 +179,7 @@ class SSH(Terminal): regular-expression group. If a timeout occurs, then return the tuple(None,None). """ - rxb = six.b("") + rxb = b"" timeout = time() + self.READ_PROMPT_DELAY while time() < timeout: @@ -199,7 +198,7 @@ class SSH(Terminal): return rxb, found.lastgroup def _read_until(self, match, timeout=None): - rxb = six.b("") + rxb = b"" timeout = time() + self.READ_PROMPT_DELAY while time() < timeout: Index: py-junos-eznc-2.7.1/lib/jnpr/junos/transport/tty_telnet.py =================================================================== --- py-junos-eznc-2.7.1.orig/lib/jnpr/junos/transport/tty_telnet.py +++ py-junos-eznc-2.7.1/lib/jnpr/junos/transport/tty_telnet.py @@ -2,7 +2,6 @@ from time import sleep import telnetlib import logging import sys -import six from jnpr.junos.transport.tty import Terminal @@ -14,10 +13,10 @@ logger = logging.getLogger("jnpr.junos.t class PY6: - NEW_LINE = six.b("\n") - EMPTY_STR = six.b("") - NETCONF_EOM = six.b("]]>]]>") - IN_USE = six.b("in use") + NEW_LINE = b"\n" + EMPTY_STR = b"" + NETCONF_EOM = b"]]>]]>" + IN_USE = b"in use" class Telnet(Terminal): @@ -81,7 +80,7 @@ class Telnet(Terminal): def write(self, content): """write content + <ENTER>""" logger.debug("Write: %s" % content) - self._tn.write(six.b((content + "\n"))) + self._tn.write(bytes(content + "\n", 'utf-8')) def rawwrite(self, content): """write content as-is""" @@ -97,7 +96,7 @@ class Telnet(Terminal): if sys.version >= "3": content = content.decode("utf-8") for char in content: - self._tn.write(six.b(char)) + self._tn.write(char.encode("utf-8")) wtime = 10 / float(self.baud) sleep(wtime) # do not remove @@ -106,7 +105,7 @@ class Telnet(Terminal): return self._tn.read_until(PY6.NEW_LINE, self.EXPECT_TIMEOUT) def read_prompt(self): - _RE_PAT = [six.b(i) for i in Terminal._RE_PAT] + _RE_PAT = [i.encode('utf-8') for i in Terminal._RE_PAT] got = self._tn.expect(_RE_PAT, self.EXPECT_TIMEOUT) if PY6.IN_USE in got[2]: raise RuntimeError("open_fail: port already in use") Index: py-junos-eznc-2.7.1/lib/jnpr/junos/transport/tty_serial.py =================================================================== --- py-junos-eznc-2.7.1.orig/lib/jnpr/junos/transport/tty_serial.py +++ py-junos-eznc-2.7.1/lib/jnpr/junos/transport/tty_serial.py @@ -1,6 +1,5 @@ import serial import re -import six from time import sleep from datetime import datetime, timedelta @@ -10,7 +9,7 @@ from jnpr.junos.transport.tty import Ter # Terminal connection over SERIAL CONSOLE # ------------------------------------------------------------------------- -_PROMPT = re.compile(six.b("|").join([six.b(i) for i in Terminal._RE_PAT])) +_PROMPT = re.compile(b"|".join([i.encode('utf-8') for i in Terminal._RE_PAT])) class Serial(Terminal): @@ -56,7 +55,7 @@ class Serial(Terminal): def write(self, content): """write content + <RETURN>""" - self._ser.write(six.b(content + "\n")) + self._ser.write(bytes(content + "\n", 'utf-8')) self._ser.flush() def rawwrite(self, content): @@ -75,7 +74,7 @@ class Serial(Terminal): regular-expression group. If a timeout occurs, then return the tuple(None,None). """ - rxb = six.b("") + rxb = b"" mark_start = datetime.now() mark_end = mark_start + timedelta(seconds=self.EXPECT_TIMEOUT) Index: py-junos-eznc-2.7.1/tests/unit/test_console.py =================================================================== --- py-junos-eznc-2.7.1.orig/tests/unit/test_console.py +++ py-junos-eznc-2.7.1/tests/unit/test_console.py @@ -9,7 +9,6 @@ import re import sys import os from lxml import etree -import six import socket from jnpr.junos.console import Console @@ -40,16 +39,16 @@ class TestConsole(unittest.TestCase): def setUp(self, mock_write, mock_expect, mock_open): tty_netconf.open = MagicMock() mock_expect.side_effect = [ - (1, re.search("(?P<login>ogin:\s*$)", "login: "), six.b("\r\r\n ogin:")), + (1, re.search("(?P<login>ogin:\s*$)", "login: "), b"\r\r\n ogin:"), ( 2, re.search("(?P<passwd>assword:\s*$)", "password: "), - six.b("\r\r\n password:"), + b"\r\r\n password:", ), ( 3, re.search("(?P<shell>%|#\s*$)", "junos % "), - six.b("\r\r\nroot@device:~ # "), + b"\r\r\nroot@device:~ # ", ), ] self.dev = Console(host="1.1.1.1", user="lab", password="lab123", mode="Telnet") @@ -87,16 +86,16 @@ class TestConsole(unittest.TestCase): def test_login_bad_password(self, mock_write, mock_expect, mock_open): tty_netconf.open = MagicMock() mock_expect.side_effect = [ - (1, re.search("(?P<login>ogin:\s*$)", "login: "), six.b("\r\r\n ogin:")), + (1, re.search("(?P<login>ogin:\s*$)", "login: "), b"\r\r\n ogin:"), ( 2, re.search("(?P<passwd>assword:\s*$)", "password: "), - six.b("\r\r\n password:"), + b"\r\r\n password:", ), ( 3, re.search("(?P<badpasswd>ogin incorrect)", "login incorrect"), - six.b("\r\r\nlogin incorrect"), + b"\r\r\nlogin incorrect", ), ] self.dev = Console(host="1.1.1.1", user="lab", password="lab123", mode="Telnet") @@ -110,16 +109,16 @@ class TestConsole(unittest.TestCase): tty_netconf.open = MagicMock() mock_expect.side_effect = [ - (1, re.search("(?P<login>ogin:\s*$)", "login: "), six.b("\r\r\n ogin:")), + (1, re.search("(?P<login>ogin:\s*$)", "login: "), b"\r\r\n ogin:"), ( 2, re.search("(?P<passwd>assword:\s*$)", "password: "), - six.b("\r\r\n password:"), + b"\r\r\n password:", ), ( 3, re.search("(?P<shell>%|#\s*$)", "junos % "), - six.b("\r\r\nroot@device:~ # "), + b"\r\r\nroot@device:~ # ", ), ] with Console( @@ -175,9 +174,9 @@ class TestConsole(unittest.TestCase): def test_console_serial(self, mock_write, mock_expect, mock_open): tty_netconf.open = MagicMock() mock_expect.side_effect = [ - six.b("\r\r\n Login:"), - six.b("\r\r\n password:"), - six.b("\r\r\nroot@device:~ # "), + b"\r\r\n Login:", + b"\r\r\n password:", + b"\r\r\nroot@device:~ # ", ] self.dev = Console(host="1.1.1.1", user="lab", password="lab123", mode="serial") self.dev.open() @@ -258,15 +257,13 @@ class TestConsole(unittest.TestCase): </policy-statement> </policy-options>""" - mock_read_until.return_value = six.b( - """ + mock_read_until.return_value = b""" <rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:junos="http://xml.juniper.net/junos/15.2I0/junos"> <load-configuration-results> <ok/> </load-configuration-results> </rpc-reply> ]]>]]>""" - ) cu = Config(self.dev) op = cu.load(xml, format="xml") cu.commit() Index: py-junos-eznc-2.7.1/tests/unit/transport/test_serial.py =================================================================== --- py-junos-eznc-2.7.1.orig/tests/unit/transport/test_serial.py +++ py-junos-eznc-2.7.1/tests/unit/transport/test_serial.py @@ -5,7 +5,6 @@ except ImportError: import nose2 from unittest.mock import MagicMock, patch import sys -import six from jnpr.junos.console import Console @@ -90,12 +89,9 @@ class TestSerialWin(unittest.TestCase): ("shell", "shell"), ] mock_serial_read.side_effect = [ - six.b( - "<!-- No zombies were killed during the creation of this user interface -->" - ), - six.b(""), - six.b( - """<!-- user root, class super-user --> + b"<!-- No zombies were killed during the creation of this user interface -->", + b"", + b"""<!-- user root, class super-user --> <hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <capabilities> <capability>urn:ietf:params:netconf:base:1.0</capability> @@ -114,9 +110,8 @@ class TestSerialWin(unittest.TestCase): </capabilities> <session-id>7478</session-id> </hello> -]]>]]>""" - ), - six.b(""), +]]>]]>""", + b"", ] self.dev.open() @@ -144,7 +139,7 @@ class TestSerialWin(unittest.TestCase): self.dev._tty.read = MagicMock() self.dev._tty.rawwrite = MagicMock() self.dev._tty.read.side_effect = [ - six.b( + bytes( '<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"' ' xmlns:junos="http://xml.juniper.net/junos/15.1X49/junos">' '<route-engine-information xmlns="http://xml.juniper.net/ju' @@ -170,7 +165,8 @@ class TestSerialWin(unittest.TestCase): "-reason><load-average-one>0.12</load-average-one><load-ave" "rage-five>0.08</load-average-five><load-average-fifteen>0." "06</load-average-fifteen></route-engine></route-engine-inf" - "ormation></rpc-reply>]]>]]>" + "ormation></rpc-reply>]]>]]>", + 'utf-8' ) ] res = self.dev.rpc.get_route_engine_information() Index: py-junos-eznc-2.7.1/tests/unit/transport/test_tty_netconf.py =================================================================== --- py-junos-eznc-2.7.1.orig/tests/unit/transport/test_tty_netconf.py +++ py-junos-eznc-2.7.1/tests/unit/transport/test_tty_netconf.py @@ -7,7 +7,6 @@ from unittest.mock import MagicMock, pat from jnpr.junos.transport.tty_netconf import tty_netconf -import six import os import select import socket @@ -43,7 +42,7 @@ class TestTTYNetconf(unittest.TestCase): @patch("jnpr.junos.transport.tty_netconf.timedelta") def test_open_RuntimeError(self, mock_delta, mock_rcv): mock_rcv.return_value = "]]>]]>" - self.tty_net._tty.read.return_value = six.b("testing") + self.tty_net._tty.read.return_value = b"testing" from datetime import timedelta mock_delta.return_value = timedelta(seconds=0.5) @@ -56,7 +55,7 @@ class TestTTYNetconf(unittest.TestCase): mock_rcv.return_value = "]]>]]>" self.tty_net.rpc("get-interface-information") self.tty_net._tty.rawwrite.assert_called_with( - six.b("<rpc><get-interface-information/></rpc>") + b"<rpc><get-interface-information/></rpc>" ) @patch("jnpr.junos.transport.tty_netconf.tty_netconf._receive") @@ -103,7 +102,7 @@ class TestTTYNetconf(unittest.TestCase): @patch("jnpr.junos.transport.tty_netconf.select.select") def test_tty_netconf_receive_empty_line(self, mock_select): rx = MagicMock() - rx.read_until.side_effect = iter([six.b(""), six.b("]]>]]>")]) + rx.read_until.side_effect = iter([b"", b"]]>]]>"]) mock_select.return_value = ([rx], [], []) self.assertEqual(self.tty_net._receive().tag, "error-in-receive") @@ -117,7 +116,7 @@ class TestTTYNetconf(unittest.TestCase): @patch("jnpr.junos.transport.tty_netconf.select.select") def test_tty_netconf_receive_splited_eom(self, mock_select): rx = MagicMock() - rx.read_until.side_effect = iter([six.b(i) for i in ["testing]", "]>", "]]>"]]) + rx.read_until.side_effect = iter([i.encode('utf-8') for i in ["testing]", "]>", "]]>"]]) mock_select.return_value = ([rx], [], []) self.assertEqual(self.tty_net._receive().tag, "error-in-receive") @@ -126,30 +125,30 @@ class TestTTYNetconf(unittest.TestCase): rx = MagicMock() rx.read_until.side_effect = iter( - [six.b("<rpc-reply>ok<dummy></rpc-reply>"), six.b("\n]]>]]>")] + [b"<rpc-reply>ok<dummy></rpc-reply>", b"\n]]>]]>"] ) mock_select.return_value = ([rx], [], []) self.assertEqual( - self.tty_net._receive(), six.b("<rpc-reply>ok<dummy/></rpc-reply>") + self.tty_net._receive(), b"<rpc-reply>ok<dummy/></rpc-reply>" ) @patch("jnpr.junos.transport.tty_netconf.select.select") def test_tty_netconf_receive_XMLSyntaxError_eom_in_center(self, mock_select): rx = MagicMock() rx.read_until.side_effect = iter( - [six.b("<rpc-reply>ok</rpc-reply>"), six.b("]]>]]>\ndummy")] + [b"<rpc-reply>ok</rpc-reply>", b"]]>]]>\ndummy"] ) mock_select.return_value = ([rx], [], []) - self.assertEqual(self.tty_net._receive(), six.b("<rpc-reply>ok</rpc-reply>")) + self.assertEqual(self.tty_net._receive(), b"<rpc-reply>ok</rpc-reply>") @patch("jnpr.junos.transport.tty_netconf.select.select") def test_tty_netconf_receive_xmn_error(self, mock_select): rx = MagicMock() rx.read_until.side_effect = iter( [ - six.b("<message>ok</message>"), - six.b("\n</xnm:error>\n"), - six.b("]]>]]>\ndummy"), + b"<message>ok</message>", + b"\n</xnm:error>\n", + b"]]>]]>\ndummy", ] ) mock_select.return_value = ([rx], [], []) Index: py-junos-eznc-2.7.1/tests/unit/transport/test_tty_telnet.py =================================================================== --- py-junos-eznc-2.7.1.orig/tests/unit/transport/test_tty_telnet.py +++ py-junos-eznc-2.7.1/tests/unit/transport/test_tty_telnet.py @@ -7,7 +7,6 @@ except ImportError: import nose2 from unittest.mock import MagicMock, patch from jnpr.junos.transport.tty_telnet import Telnet -import six class TestTTYTelnet(unittest.TestCase): @@ -62,7 +61,7 @@ class TestTTYTelnet(unittest.TestCase): self.tel_conn._tn.expect.return_value = ( None, None, - six.b("port already in use"), + b"port already in use", ) self.assertRaises(RuntimeError, self.tel_conn._login_state_machine) Index: py-junos-eznc-2.7.1/lib/jnpr/junos/device.py =================================================================== --- py-junos-eznc-2.7.1.orig/lib/jnpr/junos/device.py +++ py-junos-eznc-2.7.1/lib/jnpr/junos/device.py @@ -1,6 +1,5 @@ # stdlib import os -import six import types import platform import warnings @@ -665,7 +664,7 @@ class _Connection(object): command = command.strip() # Get the equivalent RPC rpc = self.display_xml_rpc(command) - if isinstance(rpc, six.string_types): + if isinstance(rpc, str): # No RPC is available. return None rpc_string = "rpc.%s(" % (rpc.tag.replace("-", "_")) Index: py-junos-eznc-2.7.1/lib/jnpr/junos/utils/start_shell.py =================================================================== --- py-junos-eznc-2.7.1.orig/lib/jnpr/junos/utils/start_shell.py +++ py-junos-eznc-2.7.1/lib/jnpr/junos/utils/start_shell.py @@ -3,7 +3,6 @@ import re import datetime from jnpr.junos.utils.ssh_client import open_ssh_client import subprocess -import six from threading import Thread import time Index: py-junos-eznc-2.7.1/requirements.txt =================================================================== --- py-junos-eznc-2.7.1.orig/requirements.txt +++ py-junos-eznc-2.7.1/requirements.txt @@ -4,7 +4,6 @@ ncclient>=0.6.15 scp>=0.7.0 jinja2>=2.7.1 PyYAML>=5.1 -six pyserial yamlordereddictloader pyparsing Index: py-junos-eznc-2.7.1/tests/unit/facts/test_swver.py =================================================================== --- py-junos-eznc-2.7.1.orig/tests/unit/facts/test_swver.py +++ py-junos-eznc-2.7.1/tests/unit/facts/test_swver.py @@ -1,8 +1,6 @@ __author__ = "Stacy Smith" __credits__ = "Jeremy Schulman, Nitin Kumar" -import six - try: import unittest2 as unittest except: @@ -13,9 +11,6 @@ from jnpr.junos.facts.swver import versi class TestVersionInfo(unittest.TestCase): - if six.PY2: - assertCountEqual = unittest.TestCase.assertItemsEqual - def test_version_info_after_type_len_else(self): self.assertEqual(version_info("12.1X46-D10").build, None) Index: py-junos-eznc-2.7.1/tests/unit/utils/test_scp.py =================================================================== --- py-junos-eznc-2.7.1.orig/tests/unit/utils/test_scp.py +++ py-junos-eznc-2.7.1/tests/unit/utils/test_scp.py @@ -1,5 +1,5 @@ import sys -from six import StringIO +from io import StringIO from contextlib import contextmanager import unittest Index: py-junos-eznc-2.7.1/tests/unit/utils/test_sw.py =================================================================== --- py-junos-eznc-2.7.1.orig/tests/unit/utils/test_sw.py +++ py-junos-eznc-2.7.1/tests/unit/utils/test_sw.py @@ -1,7 +1,7 @@ from __future__ import print_function import os import sys -from six import StringIO +from io import StringIO try: import unittest2 as unittest ++++++ python-junos-eznc-2.7.0.tar.gz -> python-junos-eznc-2.7.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-junos-eznc-2.7.0/RELEASE-NOTES.md new/py-junos-eznc-2.7.1/RELEASE-NOTES.md --- old/py-junos-eznc-2.7.0/RELEASE-NOTES.md 2024-01-12 07:52:30.000000000 +0100 +++ new/py-junos-eznc-2.7.1/RELEASE-NOTES.md 2024-04-12 07:38:33.000000000 +0200 @@ -1,3 +1,8 @@ +## Release 2.7.1 - 12 APR 2024 +## Features Added +- Added customer juniper paramiko module as a dependency which supported aes128 and aes257 cipher #1299 +## Bugs Fixed + ## Release 2.7.0 - 12 JAN 2024 ## Features Added - Support added for Python 3.10 and above version diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-junos-eznc-2.7.0/lib/jnpr/junos/_version.py new/py-junos-eznc-2.7.1/lib/jnpr/junos/_version.py --- old/py-junos-eznc-2.7.0/lib/jnpr/junos/_version.py 2024-01-12 07:52:30.000000000 +0100 +++ new/py-junos-eznc-2.7.1/lib/jnpr/junos/_version.py 2024-04-12 07:38:33.000000000 +0200 @@ -25,9 +25,9 @@ # setup.py/versioneer.py will grep for the variable names, so they must # each be defined on a line of their own. _version.py will just call # get_keywords(). - git_refnames = " (tag: 2.7.0)" - git_full = "0ef907116a035a84520a711ef09123076fe9ace0" - git_date = "2024-01-12 12:22:30 +0530" + git_refnames = " (HEAD -> master, tag: 2.7.1)" + git_full = "32b16cd249e174f5319d554536896c50192b4420" + git_date = "2024-04-12 11:08:33 +0530" keywords = {"refnames": git_refnames, "full": git_full, "date": git_date} return keywords diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-junos-eznc-2.7.0/lib/jnpr/junos/cfg/phyport/base.py new/py-junos-eznc-2.7.1/lib/jnpr/junos/cfg/phyport/base.py --- old/py-junos-eznc-2.7.0/lib/jnpr/junos/cfg/phyport/base.py 2024-01-12 07:52:30.000000000 +0100 +++ new/py-junos-eznc-2.7.1/lib/jnpr/junos/cfg/phyport/base.py 2024-04-12 07:38:33.000000000 +0200 @@ -6,7 +6,6 @@ class PhyPortBase(Resource): - """ [edit interfaces <name>] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-junos-eznc-2.7.0/lib/jnpr/junos/cfg/user.py new/py-junos-eznc-2.7.1/lib/jnpr/junos/cfg/user.py --- old/py-junos-eznc-2.7.0/lib/jnpr/junos/cfg/user.py 2024-01-12 07:52:30.000000000 +0100 +++ new/py-junos-eznc-2.7.1/lib/jnpr/junos/cfg/user.py 2024-04-12 07:38:33.000000000 +0200 @@ -8,7 +8,6 @@ class User(Resource): - """ [edit system login user <name>] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-junos-eznc-2.7.0/lib/jnpr/junos/cfg/user_ssh_key.py new/py-junos-eznc-2.7.1/lib/jnpr/junos/cfg/user_ssh_key.py --- old/py-junos-eznc-2.7.0/lib/jnpr/junos/cfg/user_ssh_key.py 2024-01-12 07:52:30.000000000 +0100 +++ new/py-junos-eznc-2.7.1/lib/jnpr/junos/cfg/user_ssh_key.py 2024-04-12 07:38:33.000000000 +0200 @@ -7,7 +7,6 @@ class UserSSHKey(Resource): - """ [edit system login user <name> authentication <key-type> <key-value> ] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-junos-eznc-2.7.0/lib/jnpr/junos/device.py new/py-junos-eznc-2.7.1/lib/jnpr/junos/device.py --- old/py-junos-eznc-2.7.0/lib/jnpr/junos/device.py 2024-01-12 07:52:30.000000000 +0100 +++ new/py-junos-eznc-2.7.1/lib/jnpr/junos/device.py 2024-04-12 07:38:33.000000000 +0200 @@ -54,7 +54,6 @@ class _MyTemplateLoader(jinja2.BaseLoader): - """ Create a jinja2 template loader class that can be used to load templates from all over the filesystem, but defaults @@ -1023,7 +1022,6 @@ class DeviceSessionListener(SessionListener): - """ Listens to Session class of Netconf Transport and detects errors in the transport. @@ -1045,7 +1043,6 @@ class Device(_Connection): - """ Junos Device class. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-junos-eznc-2.7.0/lib/jnpr/junos/exception.py new/py-junos-eznc-2.7.1/lib/jnpr/junos/exception.py --- old/py-junos-eznc-2.7.0/lib/jnpr/junos/exception.py 2024-01-12 07:52:30.000000000 +0100 +++ new/py-junos-eznc-2.7.1/lib/jnpr/junos/exception.py 2024-04-12 07:38:33.000000000 +0200 @@ -14,7 +14,6 @@ class RpcError(Exception): - """ Parent class for all junos-pyez RPC Exceptions """ @@ -87,7 +86,6 @@ class CommitError(RpcError): - """ Generated in response to a commit-check or a commit action. """ @@ -107,7 +105,6 @@ class ConfigLoadError(RpcError): - """ Generated in response to a failure when loading a configuration. """ @@ -127,7 +124,6 @@ class LockError(RpcError): - """ Generated in response to attempting to take an exclusive lock on the configuration database. @@ -138,7 +134,6 @@ class UnlockError(RpcError): - """ Generated in response to attempting to unlock the configuration database. @@ -149,7 +144,6 @@ class PermissionError(RpcError): - """ Generated in response to invoking an RPC for which the auth user does not have user-class permissions. @@ -164,7 +158,6 @@ class RpcTimeoutError(RpcError): - """ Generated in response to a RPC execution timeout. """ @@ -181,7 +174,6 @@ class SwRollbackError(RpcError): - """ Generated in response to a SW rollback error. """ @@ -208,7 +200,6 @@ class ConnectError(Exception): - """ Parent class for all connection related exceptions """ @@ -249,7 +240,6 @@ class ProbeError(ConnectError): - """ Generated if auto_probe is enabled and the probe action fails """ @@ -258,7 +248,6 @@ class ConnectAuthError(ConnectError): - """ Generated if the user-name, password is invalid """ @@ -267,7 +256,6 @@ class ConnectTimeoutError(ConnectError): - """ Generated if the NETCONF session fails to connect, could be due to the fact the device is not ip reachable; bad @@ -278,7 +266,6 @@ class ConnectUnknownHostError(ConnectError): - """ Generated if the specific hostname does not DNS resolve """ @@ -287,7 +274,6 @@ class ConnectRefusedError(ConnectError): - """ Generated if the specified host denies the NETCONF; could be that the services is not enabled, or the host has @@ -298,7 +284,6 @@ class ConnectNotMasterError(ConnectError): - """ Generated if the connection is made to a non-master routing-engine. This could be a backup RE on an MX @@ -309,7 +294,6 @@ class ConnectClosedError(ConnectError): - """ Generated if connection unexpectedly closed """ @@ -320,7 +304,6 @@ class JSONLoadError(Exception): - """ Generated if json content of rpc reply fails to load """ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-junos-eznc-2.7.0/lib/jnpr/junos/factory/cmdview.py new/py-junos-eznc-2.7.1/lib/jnpr/junos/factory/cmdview.py --- old/py-junos-eznc-2.7.0/lib/jnpr/junos/factory/cmdview.py 2024-01-12 07:52:30.000000000 +0100 +++ new/py-junos-eznc-2.7.1/lib/jnpr/junos/factory/cmdview.py 2024-04-12 07:38:33.000000000 +0200 @@ -1,5 +1,4 @@ class CMDView(object): - """ View is the base-class that makes extracting values from XML data appear as objects with attributes. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-junos-eznc-2.7.0/lib/jnpr/junos/factory/factory_loader.py new/py-junos-eznc-2.7.1/lib/jnpr/junos/factory/factory_loader.py --- old/py-junos-eznc-2.7.0/lib/jnpr/junos/factory/factory_loader.py 2024-01-12 07:52:30.000000000 +0100 +++ new/py-junos-eznc-2.7.1/lib/jnpr/junos/factory/factory_loader.py 2024-04-12 07:38:33.000000000 +0200 @@ -4,6 +4,7 @@ originate from any kind of source: YAML, JSON, program. For examples of YAML refer to the .yml files in this jnpr.junos.op directory. """ + # stdlib from copy import deepcopy import re @@ -29,7 +30,6 @@ class FactoryLoader(object): - """ Used to load a <dict> of data that contains Table and View definitions. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-junos-eznc-2.7.0/lib/jnpr/junos/factory/state_machine.py new/py-junos-eznc-2.7.1/lib/jnpr/junos/factory/state_machine.py --- old/py-junos-eznc-2.7.0/lib/jnpr/junos/factory/state_machine.py 2024-01-12 07:52:30.000000000 +0100 +++ new/py-junos-eznc-2.7.1/lib/jnpr/junos/factory/state_machine.py 2024-04-12 07:38:33.000000000 +0200 @@ -810,9 +810,9 @@ val, result[list(self._view.REGEX.keys()).index(key)], re.I ) if obj and len(obj.groups()) >= 1: - result[ - list(self._view.REGEX.keys()).index(key) - ] = obj.groups()[0] + result[list(self._view.REGEX.keys()).index(key)] = ( + obj.groups()[0] + ) items = convert_to_data_type(result) tmp_dict = dict(zip(self._view.REGEX.keys(), items)) if len(tmp_dict) > 0: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-junos-eznc-2.7.0/lib/jnpr/junos/factory/view.py new/py-junos-eznc-2.7.1/lib/jnpr/junos/factory/view.py --- old/py-junos-eznc-2.7.0/lib/jnpr/junos/factory/view.py 2024-01-12 07:52:30.000000000 +0100 +++ new/py-junos-eznc-2.7.1/lib/jnpr/junos/factory/view.py 2024-04-12 07:38:33.000000000 +0200 @@ -11,7 +11,6 @@ class View(object): - """ View is the base-class that makes extracting values from XML data appear as objects with attributes. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-junos-eznc-2.7.0/lib/jnpr/junos/factory/viewfields.py new/py-junos-eznc-2.7.1/lib/jnpr/junos/factory/viewfields.py --- old/py-junos-eznc-2.7.0/lib/jnpr/junos/factory/viewfields.py 2024-01-12 07:52:30.000000000 +0100 +++ new/py-junos-eznc-2.7.1/lib/jnpr/junos/factory/viewfields.py 2024-04-12 07:38:33.000000000 +0200 @@ -1,5 +1,4 @@ class ViewFields(object): - """ Used to dynamically create a field dictionary used with the RunstatView class diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-junos-eznc-2.7.0/lib/jnpr/junos/facts/__init__.py new/py-junos-eznc-2.7.1/lib/jnpr/junos/facts/__init__.py --- old/py-junos-eznc-2.7.0/lib/jnpr/junos/facts/__init__.py 2024-01-12 07:52:30.000000000 +0100 +++ new/py-junos-eznc-2.7.1/lib/jnpr/junos/facts/__init__.py 2024-04-12 07:38:33.000000000 +0200 @@ -31,6 +31,7 @@ The following dictionary keys represent the available facts and their meaning: """ + import sys import jnpr.junos.facts.current_re diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-junos-eznc-2.7.0/lib/jnpr/junos/ofacts/session.py new/py-junos-eznc-2.7.1/lib/jnpr/junos/ofacts/session.py --- old/py-junos-eznc-2.7.0/lib/jnpr/junos/ofacts/session.py 2024-01-12 07:52:30.000000000 +0100 +++ new/py-junos-eznc-2.7.1/lib/jnpr/junos/ofacts/session.py 2024-04-12 07:38:33.000000000 +0200 @@ -1,6 +1,7 @@ """ facts['HOME'] = login home directory """ + from lxml.builder import E diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-junos-eznc-2.7.0/lib/jnpr/junos/op/phyport.yml new/py-junos-eznc-2.7.1/lib/jnpr/junos/op/phyport.yml --- old/py-junos-eznc-2.7.0/lib/jnpr/junos/op/phyport.yml 2024-01-12 07:52:30.000000000 +0100 +++ new/py-junos-eznc-2.7.1/lib/jnpr/junos/op/phyport.yml 2024-04-12 07:38:33.000000000 +0200 @@ -42,8 +42,12 @@ fields_ts: rx_bytes: { input-bytes: int } rx_packets: { input-packets: int } + rx_bps: { input-bps: int } + rx_pps: { input-pps: int } tx_bytes: { output-bytes: int } tx_packets: { output-packets: int } + tx_bps: { output-bps: int } + tx_pps: { output-pps: int } fields_rxerrs: rx_err_input: { input-errors: int } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-junos-eznc-2.7.0/lib/jnpr/junos/resources/autosys.py new/py-junos-eznc-2.7.1/lib/jnpr/junos/resources/autosys.py --- old/py-junos-eznc-2.7.0/lib/jnpr/junos/resources/autosys.py 2024-01-12 07:52:30.000000000 +0100 +++ new/py-junos-eznc-2.7.1/lib/jnpr/junos/resources/autosys.py 2024-04-12 07:38:33.000000000 +0200 @@ -1,6 +1,7 @@ """ Pythonifier for AutoSys Table/View """ + from jnpr.junos.factory import loadyaml from os.path import splitext diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-junos-eznc-2.7.0/lib/jnpr/junos/resources/bgp.py new/py-junos-eznc-2.7.1/lib/jnpr/junos/resources/bgp.py --- old/py-junos-eznc-2.7.0/lib/jnpr/junos/resources/bgp.py 2024-01-12 07:52:30.000000000 +0100 +++ new/py-junos-eznc-2.7.1/lib/jnpr/junos/resources/bgp.py 2024-04-12 07:38:33.000000000 +0200 @@ -1,6 +1,7 @@ """ Pythonifier for BGP Table/View """ + from jnpr.junos.factory import loadyaml from os.path import splitext diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-junos-eznc-2.7.0/lib/jnpr/junos/resources/interface.py new/py-junos-eznc-2.7.1/lib/jnpr/junos/resources/interface.py --- old/py-junos-eznc-2.7.0/lib/jnpr/junos/resources/interface.py 2024-01-12 07:52:30.000000000 +0100 +++ new/py-junos-eznc-2.7.1/lib/jnpr/junos/resources/interface.py 2024-04-12 07:38:33.000000000 +0200 @@ -1,6 +1,7 @@ """ Pythonifier for interface table/view """ + from jnpr.junos.factory import loadyaml from os.path import splitext diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-junos-eznc-2.7.0/lib/jnpr/junos/resources/staticroutes.py new/py-junos-eznc-2.7.1/lib/jnpr/junos/resources/staticroutes.py --- old/py-junos-eznc-2.7.0/lib/jnpr/junos/resources/staticroutes.py 2024-01-12 07:52:30.000000000 +0100 +++ new/py-junos-eznc-2.7.1/lib/jnpr/junos/resources/staticroutes.py 2024-04-12 07:38:33.000000000 +0200 @@ -1,6 +1,7 @@ """ Pythonifier for Static route Table/View """ + from jnpr.junos.factory import loadyaml from os.path import splitext diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-junos-eznc-2.7.0/lib/jnpr/junos/resources/syslog.py new/py-junos-eznc-2.7.1/lib/jnpr/junos/resources/syslog.py --- old/py-junos-eznc-2.7.0/lib/jnpr/junos/resources/syslog.py 2024-01-12 07:52:30.000000000 +0100 +++ new/py-junos-eznc-2.7.1/lib/jnpr/junos/resources/syslog.py 2024-04-12 07:38:33.000000000 +0200 @@ -1,6 +1,7 @@ """ Pythonifier for Syslog Table/View """ + from jnpr.junos.factory import loadyaml from os.path import splitext diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-junos-eznc-2.7.0/lib/jnpr/junos/resources/user.py new/py-junos-eznc-2.7.1/lib/jnpr/junos/resources/user.py --- old/py-junos-eznc-2.7.0/lib/jnpr/junos/resources/user.py 2024-01-12 07:52:30.000000000 +0100 +++ new/py-junos-eznc-2.7.1/lib/jnpr/junos/resources/user.py 2024-04-12 07:38:33.000000000 +0200 @@ -1,6 +1,7 @@ """ Pythonifier for User Table/View """ + from jnpr.junos.factory import loadyaml from os.path import splitext diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-junos-eznc-2.7.0/lib/jnpr/junos/transport/tty.py new/py-junos-eznc-2.7.1/lib/jnpr/junos/transport/tty.py --- old/py-junos-eznc-2.7.0/lib/jnpr/junos/transport/tty.py 2024-01-12 07:52:30.000000000 +0100 +++ new/py-junos-eznc-2.7.1/lib/jnpr/junos/transport/tty.py 2024-04-12 07:38:33.000000000 +0200 @@ -14,7 +14,6 @@ class Terminal(object): - """ Terminal is used to bootstrap Junos New Out of the Box (NOOB) device over the CONSOLE port. The general use-case is to setup the minimal diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-junos-eznc-2.7.0/lib/jnpr/junos/transport/tty_netconf.py new/py-junos-eznc-2.7.1/lib/jnpr/junos/transport/tty_netconf.py --- old/py-junos-eznc-2.7.0/lib/jnpr/junos/transport/tty_netconf.py 2024-01-12 07:52:30.000000000 +0100 +++ new/py-junos-eznc-2.7.1/lib/jnpr/junos/transport/tty_netconf.py 2024-04-12 07:38:33.000000000 +0200 @@ -38,7 +38,6 @@ class tty_netconf(object): - """ Basic Junos XML API for bootstraping through the TTY """ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-junos-eznc-2.7.0/lib/jnpr/junos/utils/fs.py new/py-junos-eznc-2.7.1/lib/jnpr/junos/utils/fs.py --- old/py-junos-eznc-2.7.0/lib/jnpr/junos/utils/fs.py 2024-01-12 07:52:30.000000000 +0100 +++ new/py-junos-eznc-2.7.1/lib/jnpr/junos/utils/fs.py 2024-04-12 07:38:33.000000000 +0200 @@ -7,7 +7,6 @@ class FS(Util): - """ Filesystem (FS) utilities: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-junos-eznc-2.7.0/lib/jnpr/junos/utils/start_shell.py new/py-junos-eznc-2.7.1/lib/jnpr/junos/utils/start_shell.py --- old/py-junos-eznc-2.7.0/lib/jnpr/junos/utils/start_shell.py 2024-01-12 07:52:30.000000000 +0100 +++ new/py-junos-eznc-2.7.1/lib/jnpr/junos/utils/start_shell.py 2024-04-12 07:38:33.000000000 +0200 @@ -14,7 +14,6 @@ class StartShell(object): - """ Junos shell execution utility. This utility is written to support the "context manager" design pattern. For example:: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-junos-eznc-2.7.0/lib/jnpr/junos/utils/sw.py new/py-junos-eznc-2.7.1/lib/jnpr/junos/utils/sw.py --- old/py-junos-eznc-2.7.0/lib/jnpr/junos/utils/sw.py 2024-01-12 07:52:30.000000000 +0100 +++ new/py-junos-eznc-2.7.1/lib/jnpr/junos/utils/sw.py 2024-04-12 07:38:33.000000000 +0200 @@ -1131,13 +1131,12 @@ elif self._mixed_VC is True: cmd.append(E("all-members")) elif ( - self._multi_VC_nsync is True - or self._multi_VC is True - and member_id is not None - ): + self._multi_VC_nsync is True or self._multi_VC is True + ) and member_id is not None: cmd.append(E("member", str(member_id))) if in_min >= 0 and at is None: - cmd.append(E("in", str(in_min))) + if vmhost is not True: + cmd.append(E("in", str(in_min))) elif at is not None: cmd.append(E("at", str(at))) try: @@ -1232,7 +1231,9 @@ # ------------------------------------------------------------------------- # poweroff - system shutdown # ------------------------------------------------------------------------- - def poweroff(self, in_min=0, at=None, on_node=None, all_re=True, other_re=False): + def poweroff( + self, in_min=0, at=None, on_node=None, all_re=True, other_re=False, vmhost=False + ): """ Perform a system shutdown, with optional delay (in minutes) . @@ -1254,6 +1255,8 @@ :param str other_re: If the system has dual Routing Engines and this option is C(true), then the action is performed on the other REs in the system. + :param str vmhost: If the device is vmhost device then the shutdown will be performed on the device + :returns: * power-off message (string) if command successful @@ -1267,12 +1270,13 @@ else: cmd = E("request-node-power-off") cmd.append(E("node", on_node)) + elif vmhost is True: + cmd = E("request-vmhost-poweroff") + all_re = False else: cmd = E("request-power-off") try: - return self._system_operation( - cmd, in_min, at, all_re, other_re, vmhost=False - ) + return self._system_operation(cmd, in_min, at, all_re, other_re, vmhost) except Exception as err: if err.rsp.findtext(".//error-severity") != "warning": raise err diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-junos-eznc-2.7.0/lib/jnpr/junos/version.py new/py-junos-eznc-2.7.1/lib/jnpr/junos/version.py --- old/py-junos-eznc-2.7.0/lib/jnpr/junos/version.py 2024-01-12 07:52:30.000000000 +0100 +++ new/py-junos-eznc-2.7.1/lib/jnpr/junos/version.py 2024-04-12 07:38:33.000000000 +0200 @@ -1,5 +1,5 @@ -VERSION = "2.7.0" -DATE = "2024-Jan-12" +VERSION = "2.7.1" +DATE = "2024-Apr-12" # Augment with the internal version if present try: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-junos-eznc-2.7.0/requirements.txt new/py-junos-eznc-2.7.1/requirements.txt --- old/py-junos-eznc-2.7.0/requirements.txt 2024-01-12 07:52:30.000000000 +0100 +++ new/py-junos-eznc-2.7.1/requirements.txt 2024-04-12 07:38:33.000000000 +0200 @@ -1,7 +1,6 @@ lxml>=3.2.4 # ncclient version 0.6.10 has issues with PyEZ(junos-eznc) and needs to be avoided ncclient>=0.6.15 -paramiko>=1.15.2 scp>=0.7.0 jinja2>=2.7.1 PyYAML>=5.1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/py-junos-eznc-2.7.0/setup.py new/py-junos-eznc-2.7.1/setup.py --- old/py-junos-eznc-2.7.0/setup.py 2024-01-12 07:52:30.000000000 +0100 +++ new/py-junos-eznc-2.7.1/setup.py 2024-04-12 07:38:33.000000000 +0200 @@ -1,6 +1,9 @@ from setuptools import setup, find_packages import versioneer +import os +# Install customer paramiko +os.system("pip install git+https://github.com/Juniper/[email protected]") # parse requirements req_lines = [line.strip() for line in open("requirements.txt").readlines()] install_reqs = list(filter(None, req_lines))
