From 1051b2bb5311c6c0db78e10ac238c97b1e59e182 Mon Sep 17 00:00:00 2001 From: Elisa Jasinska Date: Mon, 28 Nov 2016 20:51:06 +0100 Subject: [PATCH 01/39] bump version --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 385aa29..9dbed54 100644 --- a/setup.py +++ b/setup.py @@ -28,7 +28,7 @@ # e.g. ['django==1.5.1', 'mezzanine==1.4.6'] reqs = [str(ir.req) for ir in install_reqs] -version = '0.26' +version = '0.27' setup( name='pyIOSXR', From 4f7c8db136d31421b2faff155b87e309cd8c1ade Mon Sep 17 00:00:00 2001 From: Elisa Jasinska Date: Mon, 28 Nov 2016 20:51:58 +0100 Subject: [PATCH 02/39] bump version --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 9dbed54..381ed88 100644 --- a/setup.py +++ b/setup.py @@ -28,7 +28,7 @@ # e.g. ['django==1.5.1', 'mezzanine==1.4.6'] reqs = [str(ir.req) for ir in install_reqs] -version = '0.27' +version = '0.29' setup( name='pyIOSXR', From d51cdd9fad5cc8f9580e95c0bc58cb387f2ca33a Mon Sep 17 00:00:00 2001 From: Elisa Jasinska Date: Mon, 28 Nov 2016 21:08:19 +0100 Subject: [PATCH 03/39] update passwd --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index d9c6d37..dad0c57 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,7 +12,7 @@ deploy: provider: pypi user: fooelisa password: - secure: EA+bz/sRqivLZsZXxKg2Wb1PxhgiXEbFAiDaw2yCfW/3q+nYlG2R1xPtqI6QNP0/5kuFAEef8dvx1yuCo34zcdNpD71Wg+jVbz8Xq2cS/Tsv0GwnH2KxwVM0VkfvXOh2eDquQt4nGP8yXa6AMAh6E3gOmdYUMyA7ZzeCPLDPii4ICGcCop32MU1I3w2X+vajlQWv3s0c/N3BuCP1Ol811bYPkiLlgAU9LDrZtz/nnoIHurPXuTlj3Gz6VzMjxBK5qiNcz+69cNmVAiQlnahJRHcCZae/NWg/wWIsMqdA0mS1njn8E7XTd4RqgAdWZbcuK/iVTfpVBp/FfFFwIXkbcxiNnjd/J3wzVDcVbDJHAPLcFgYnxyrpVogwIjW01HzjoVjzUHGSOtP1rBF4IKlZwzRvwQdc/Qk+TgZ2Z5fEtsk+1icLwxIN0x9YZhSemrvdDsnItdj9wVoxByaSX3iMpNDsbfBvV7gAvMkAqe1WO0lbIK4htZKJ5ueoWDLKJNKsfMVy0i7N6EEw5emY0JrBdB1k2OCJdih9cnU+fe3YDFq4Zm+/zwjkTy6kX4BrWwHr/RgqSWY11f0TrWoWfI5GzxTL67Qkq/6fjeg+Nf81ts+PUP5+rq71Xi60zxFJ2pMvNxPrFSc+5F2TQG/1x8hPUKGUayaA+YlZMRkM81QauNw= + secure: kai0vLh1/J8Ekg8nFS2qNi9wr8YnOL25A2YyStAdgU4BDV3oR8s5eRQRJB0oL//twDkmRtpLwp5J1OUAjOPeanNqItS3wJ1RCLwOYGhjqQP0aPRkvGJnky1klqsMxABaRr8ahI2WZKmM4eYr2/Z9J7VYLPq1u1sbNItmpVSAp5nUvhaxlxgl11mo+4it+/5z+LKQ15ivOTYwRI7FB0R3ZdqW6WgUC+GLt9+j3msFK/bXIQca85eye3sJlWZjIKMbdeUo3+n6af34D3IwkhlEdps2UCoGtjbB8FRnWOZPNIOi89nRgPFgjsCXhn4B1Gk8ncdLhfB2KnQwRE1pl8Q+iKkNku2x3XjxiSU7Lnym1cyd+J7LBcCHnX1UA90zDueFPkkP+hZr+PGdvacF1dFkspiggSNQ8trCEV3uDbly1+seZMWWInRmOYDDwvWIuEMiUwrMpFj7yY0h+eCv3lD2WVTeJwHAJmIzv/drr4/BZQaQlcZy9C2D3A8PY3ccSSJHwWTvOFHzrUXdiGuqGWmof5an/q5uaUFTA3UgzcHVRFXUKjKYGwtonwGbbv9tfDKU5fyXWr00I+b04Qvd4LAsZP1PM6pK50H6B3HKOqkif6O5MWXQW3pMsYDbSDIRbkFw0iYw2dX6XkAoHu8VKnDNKWTVXffGAP679XaEftI/U4I= on: tags: true branch: master From adb2b06fcf1a4e2a73db55f69549c4ec86934ea8 Mon Sep 17 00:00:00 2001 From: Mircea Ulinic Date: Wed, 30 Nov 2016 12:42:46 +0000 Subject: [PATCH 04/39] New error: 0xa367da00 --- pyIOSXR/iosxr.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/pyIOSXR/iosxr.py b/pyIOSXR/iosxr.py index ebf8385..1ac43f5 100644 --- a/pyIOSXR/iosxr.py +++ b/pyIOSXR/iosxr.py @@ -297,11 +297,16 @@ def _send_command(self, else: output += self._netmiko_recv() # try to read some more - if '0xa3679e00' in output: - # when multiple parallel request are made, the device throws the error: + if '0xa3679e00' in output or '0xa367da00' in output: + # when multiple parallel request are made, the device throws one of the the errors: + # --- # ERROR: 0xa3679e00 'XML Service Library' detected the 'fatal' condition # 'Multiple concurrent requests are not allowed over the same session. # A request is already in progress on this session.' + # + # ERROR: 0xa367da00 XML Service Library' detected the 'fatal' condition + # 'Sending multiple documents is not supported.' + # --- # we could use a mechanism similar to NETCONF and push the requests in queue and serve them sequentially # BUT we are not able to assign unique IDs and identify the request-reply map # so will throw an error that does not help too much :( From 6c7a6e970006bfa682c001453a5e80ea3b11f395 Mon Sep 17 00:00:00 2001 From: Mircea Ulinic Date: Wed, 30 Nov 2016 12:43:47 +0000 Subject: [PATCH 05/39] Release 0.30 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 381ed88..82a5dc7 100644 --- a/setup.py +++ b/setup.py @@ -28,7 +28,7 @@ # e.g. ['django==1.5.1', 'mezzanine==1.4.6'] reqs = [str(ir.req) for ir in install_reqs] -version = '0.29' +version = '0.30' setup( name='pyIOSXR', From 1fd7a1ef726c8cdc0a26d8baebb0de4a0dc3c08d Mon Sep 17 00:00:00 2001 From: Mircea Ulinic Date: Tue, 6 Dec 2016 11:38:32 +0000 Subject: [PATCH 06/39] Mark XML agent dead on TimeoutException --- pyIOSXR/exceptions.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pyIOSXR/exceptions.py b/pyIOSXR/exceptions.py index 62d3330..629ca25 100644 --- a/pyIOSXR/exceptions.py +++ b/pyIOSXR/exceptions.py @@ -89,10 +89,15 @@ class InvalidXMLResponse(IOSXRException): pass + class TimeoutError(IOSXRException): """TimeoutError Exception.""" - pass + def __init__(self, msg=None, dev=None): + super(TimeoutError, self).__init__(msg=msg, dev=dev) + if dev: + self._xr = dev + self._xr._xml_agent_alive = False class EOFError(IOSXRException): From 6606b53d8cde1ac0804643ce92eb1817940efac1 Mon Sep 17 00:00:00 2001 From: Mircea Ulinic Date: Tue, 6 Dec 2016 11:38:58 +0000 Subject: [PATCH 07/39] Reopen when not alive --- pyIOSXR/iosxr.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/pyIOSXR/iosxr.py b/pyIOSXR/iosxr.py index 1ac43f5..322a5ad 100644 --- a/pyIOSXR/iosxr.py +++ b/pyIOSXR/iosxr.py @@ -140,6 +140,11 @@ def make_rpc_call(self, rpc_command): :param rpc_command: (str) rpc command such as: """ + # ~~~ hack: ~~~ + if not self.is_alive(): + self.close() # force close for safety + self.open() # reopen + # ~~~ end hack ~~~ result = self._execute_rpc(rpc_command) return ET.tostring(result) @@ -163,14 +168,15 @@ def open(self): raise ConnectError(au_err.message) self._cli_prompt = self.device.find_prompt() # get the prompt - self._enter_xml_mode() def is_alive(self): """ - Returns the XML agent connection state. + Returns the XML agent connection state (and SSH connection state). """ - return self._xml_agent_alive + if hasattr(self.device, 'remote_conn'): + return self.device.remote_conn.transport.is_active() and self._xml_agent_alive + return False # remote_conn not there => connection not init => not alive def _timeout_exceeded(self, start=None, msg='Timeout exceeded!'): if not start: @@ -449,9 +455,10 @@ def close(self): Clean up after you are done and explicitly close the router connection. """ if self.lock_on_connect or self.locked: - self.unlock() - self._unlock_xml_agent() - self.device.remote_conn.close() + self.unlock() # this refers to the config DB + self._unlock_xml_agent() # this refers to the XML agent + if hasattr(self.device, 'remote_conn'): + self.device.remote_conn.close() # close the underlying SSH session def lock(self): """ From 9724958ca749491e06521ee4c865f3b99bac023d Mon Sep 17 00:00:00 2001 From: Mircea Ulinic Date: Tue, 6 Dec 2016 11:40:30 +0000 Subject: [PATCH 08/39] Version bump to 0.31 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 82a5dc7..dac55eb 100644 --- a/setup.py +++ b/setup.py @@ -28,7 +28,7 @@ # e.g. ['django==1.5.1', 'mezzanine==1.4.6'] reqs = [str(ir.req) for ir in install_reqs] -version = '0.30' +version = '0.31' setup( name='pyIOSXR', From b6397c9ef04d8f28f6d8105431b9a0dd12a0e170 Mon Sep 17 00:00:00 2001 From: Mircea Ulinic Date: Tue, 6 Dec 2016 12:06:49 +0000 Subject: [PATCH 09/39] Mock is_alive --- test/test.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/test.py b/test/test.py index 3ce6803..45e5cfa 100755 --- a/test/test.py +++ b/test/test.py @@ -102,6 +102,9 @@ def open(self): self._cli_prompt = self.device.find_prompt() self._enter_xml_mode() + def is_alive(self): + return True + class TestIOSXRDevice(unittest.TestCase): From 0b865d81351fae40ac4d711596c920d38d373bbb Mon Sep 17 00:00:00 2001 From: Mircea Ulinic Date: Tue, 6 Dec 2016 12:07:28 +0000 Subject: [PATCH 10/39] Bump version to 0.32 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index dac55eb..3e9731b 100644 --- a/setup.py +++ b/setup.py @@ -28,7 +28,7 @@ # e.g. ['django==1.5.1', 'mezzanine==1.4.6'] reqs = [str(ir.req) for ir in install_reqs] -version = '0.31' +version = '0.32' setup( name='pyIOSXR', From a662cd7439fd207a93a08c2ecfed34a7b75a46ca Mon Sep 17 00:00:00 2001 From: ogenstad Date: Wed, 7 Dec 2016 19:17:49 +0100 Subject: [PATCH 11/39] Work on Python 3 support --- .travis.yml | 3 +++ pyIOSXR/__init__.py | 2 +- pyIOSXR/iosxr.py | 4 ++-- requirements-dev.txt | 1 + test/test.py | 6 ++++-- 5 files changed, 11 insertions(+), 5 deletions(-) create mode 100644 requirements-dev.txt diff --git a/.travis.yml b/.travis.yml index dad0c57..4b384ba 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,10 @@ language: python python: - 2.7 +- 3.4 +- 3.5 install: +- pip install -r requirements-dev.txt - pip install -r requirements.txt - pip install . - pip install coveralls diff --git a/pyIOSXR/__init__.py b/pyIOSXR/__init__.py index a4f7af2..0daeefb 100644 --- a/pyIOSXR/__init__.py +++ b/pyIOSXR/__init__.py @@ -17,4 +17,4 @@ # License for the specific language governing permissions and limitations under # the License. -from iosxr import IOSXR +from pyIOSXR.iosxr import IOSXR diff --git a/pyIOSXR/iosxr.py b/pyIOSXR/iosxr.py index 322a5ad..0ee4980 100644 --- a/pyIOSXR/iosxr.py +++ b/pyIOSXR/iosxr.py @@ -361,7 +361,7 @@ def _execute_rpc(self, command_xml, delay_factor=.1): response = self._send_command(xml_rpc_command, delay_factor=delay_factor) try: - root = ET.fromstring(response) + root = ET.fromstring(str.encode(response)) except ET.XMLSyntaxError as xml_err: if 'IteratorID="' in response: raise IteratorIDError(self._ITERATOR_ID_ERROR_MSG, self) @@ -517,7 +517,7 @@ def load_candidate_config(self, filename=None, config=None): self._execute_rpc(rpc_command) except InvalidInputError as e: self.discard_config() - raise InvalidInputError(e.message, self) + raise InvalidInputError(e.args[0], self) def get_candidate_config(self, merge=False, formal=False): """ diff --git a/requirements-dev.txt b/requirements-dev.txt new file mode 100644 index 0000000..ffe2fce --- /dev/null +++ b/requirements-dev.txt @@ -0,0 +1 @@ +six diff --git a/test/test.py b/test/test.py index 45e5cfa..3227f1e 100755 --- a/test/test.py +++ b/test/test.py @@ -7,6 +7,7 @@ import time import unittest from lxml import etree as ET +from six import binary_type # ~~~ import pyIOSXR modules ~~~ from pyIOSXR import IOSXR @@ -59,7 +60,8 @@ def get_mock_file(command, format='xml'): fmt=format ) fullpath = os.path.join(curr_dir, 'mock', filename) - return open(fullpath).read() + with open(fullpath) as file_data: + return file_data.read() def find_prompt(self): return self.get_mock_file('\n', format='txt') @@ -271,7 +273,7 @@ def test_make_rpc_call_returns_XML(self): self.assertIsInstance( self.device.make_rpc_call(''), - str + binary_type ) def test_acquired_xml_agent(self): From d27b761fdd7d8cf14534e5e1e01e3bb8a592dc60 Mon Sep 17 00:00:00 2001 From: Mircea Ulinic Date: Wed, 7 Dec 2016 18:59:27 +0000 Subject: [PATCH 12/39] Release 0.40 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 3e9731b..84015b2 100644 --- a/setup.py +++ b/setup.py @@ -28,7 +28,7 @@ # e.g. ['django==1.5.1', 'mezzanine==1.4.6'] reqs = [str(ir.req) for ir in install_reqs] -version = '0.32' +version = '0.40' setup( name='pyIOSXR', From 1f7396a38b1de9965448c8d16af9f907a035462f Mon Sep 17 00:00:00 2001 From: ogenstad Date: Mon, 12 Dec 2016 12:54:08 +0100 Subject: [PATCH 13/39] Exception handling for Python 3 --- pyIOSXR/iosxr.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyIOSXR/iosxr.py b/pyIOSXR/iosxr.py index 0ee4980..2f43324 100644 --- a/pyIOSXR/iosxr.py +++ b/pyIOSXR/iosxr.py @@ -163,9 +163,9 @@ def open(self): self.device.timeout = self.timeout self._xml_agent_alive = True # successfully open thus alive except NetMikoTimeoutException as t_err: - raise ConnectError(t_err.message) + raise ConnectError(t_err.args[0]) except NetMikoAuthenticationException as au_err: - raise ConnectError(au_err.message) + raise ConnectError(au_err.args[0]) self._cli_prompt = self.device.find_prompt() # get the prompt self._enter_xml_mode() From 72b3de54e9c9c972154d4ccbcfcd9c1ef35833d0 Mon Sep 17 00:00:00 2001 From: Mircea Ulinic Date: Mon, 19 Dec 2016 10:02:11 +0800 Subject: [PATCH 14/39] Version bump: 0.41 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 84015b2..5ae34ad 100644 --- a/setup.py +++ b/setup.py @@ -28,7 +28,7 @@ # e.g. ['django==1.5.1', 'mezzanine==1.4.6'] reqs = [str(ir.req) for ir in install_reqs] -version = '0.40' +version = '0.41' setup( name='pyIOSXR', From ae688624b320f784c73b2184c8061e68716fd0b8 Mon Sep 17 00:00:00 2001 From: Thorko Date: Tue, 16 May 2017 17:24:05 +0200 Subject: [PATCH 15/39] use cli xml instead of xml tags --- pyIOSXR/iosxr.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/pyIOSXR/iosxr.py b/pyIOSXR/iosxr.py index 2f43324..601829a 100644 --- a/pyIOSXR/iosxr.py +++ b/pyIOSXR/iosxr.py @@ -578,17 +578,17 @@ def commit_config(self, label=None, comment=None, confirmed=None): :param comment: Commit label, displayed instead of the commit ID on the device. :param confirmed: Commit with auto-rollback if new commit is not made in 30 to 300 sec """ - rpc_command = ' Date: Wed, 17 May 2017 12:00:44 +0200 Subject: [PATCH 16/39] fixed testing --- ...it_.xml => CLI_Configuration_commitConfiguration_CLI_.xml} | 0 ...I_Configuration_commit_comment_emptyConfiguration_CLI_.xml | 3 +++ ...LI_Configuration_commit_comment_goodConfiguration_CLI_.xml | 3 +++ ...onfiguration_commit_comment_parallelConfiguration_CLI_.xml | 3 +++ ..._pyIOSXR-test_xml-agent-iteration-onConfiguration_CLI_.xml | 4 ++++ ...I_Configuration_commit_confirmed_60Configuration_CLI_.xml} | 0 ...CLI_Configuration_commit_label_testConfiguration_CLI_.xml} | 0 .../CLI_Configuration_commit_replaceConfiguarion_CLI_.xml | 3 +++ ...iguration_commit_replace_comment_goodConfiguarion_CLI_.xml | 3 +++ ...iguration_commit_replace_confirmed_60Configuarion_CLI_.xml | 3 +++ ...nfiguration_commit_replace_label_testConfiguarion_CLI_.xml | 3 +++ 11 files changed, 25 insertions(+) rename test/mock/{Commit_.xml => CLI_Configuration_commitConfiguration_CLI_.xml} (100%) create mode 100644 test/mock/CLI_Configuration_commit_comment_emptyConfiguration_CLI_.xml create mode 100644 test/mock/CLI_Configuration_commit_comment_goodConfiguration_CLI_.xml create mode 100644 test/mock/CLI_Configuration_commit_comment_parallelConfiguration_CLI_.xml create mode 100644 test/mock/CLI_Configuration_commit_comment_pyIOSXR-test_xml-agent-iteration-onConfiguration_CLI_.xml rename test/mock/{Commit_Confirmed__60__.xml => CLI_Configuration_commit_confirmed_60Configuration_CLI_.xml} (100%) rename test/mock/{Commit_Label__test__.xml => CLI_Configuration_commit_label_testConfiguration_CLI_.xml} (100%) create mode 100644 test/mock/CLI_Configuration_commit_replaceConfiguarion_CLI_.xml create mode 100644 test/mock/CLI_Configuration_commit_replace_comment_goodConfiguarion_CLI_.xml create mode 100644 test/mock/CLI_Configuration_commit_replace_confirmed_60Configuarion_CLI_.xml create mode 100644 test/mock/CLI_Configuration_commit_replace_label_testConfiguarion_CLI_.xml diff --git a/test/mock/Commit_.xml b/test/mock/CLI_Configuration_commitConfiguration_CLI_.xml similarity index 100% rename from test/mock/Commit_.xml rename to test/mock/CLI_Configuration_commitConfiguration_CLI_.xml diff --git a/test/mock/CLI_Configuration_commit_comment_emptyConfiguration_CLI_.xml b/test/mock/CLI_Configuration_commit_comment_emptyConfiguration_CLI_.xml new file mode 100644 index 0000000..dae23f0 --- /dev/null +++ b/test/mock/CLI_Configuration_commit_comment_emptyConfiguration_CLI_.xml @@ -0,0 +1,3 @@ + + +XML> diff --git a/test/mock/CLI_Configuration_commit_comment_goodConfiguration_CLI_.xml b/test/mock/CLI_Configuration_commit_comment_goodConfiguration_CLI_.xml new file mode 100644 index 0000000..fa48bcc --- /dev/null +++ b/test/mock/CLI_Configuration_commit_comment_goodConfiguration_CLI_.xml @@ -0,0 +1,3 @@ + + +XML> diff --git a/test/mock/CLI_Configuration_commit_comment_parallelConfiguration_CLI_.xml b/test/mock/CLI_Configuration_commit_comment_parallelConfiguration_CLI_.xml new file mode 100644 index 0000000..577dd13 --- /dev/null +++ b/test/mock/CLI_Configuration_commit_comment_parallelConfiguration_CLI_.xml @@ -0,0 +1,3 @@ + + +XML> diff --git a/test/mock/CLI_Configuration_commit_comment_pyIOSXR-test_xml-agent-iteration-onConfiguration_CLI_.xml b/test/mock/CLI_Configuration_commit_comment_pyIOSXR-test_xml-agent-iteration-onConfiguration_CLI_.xml new file mode 100644 index 0000000..3d07437 --- /dev/null +++ b/test/mock/CLI_Configuration_commit_comment_pyIOSXR-test_xml-agent-iteration-onConfiguration_CLI_.xml @@ -0,0 +1,4 @@ + + +XML> + diff --git a/test/mock/Commit_Confirmed__60__.xml b/test/mock/CLI_Configuration_commit_confirmed_60Configuration_CLI_.xml similarity index 100% rename from test/mock/Commit_Confirmed__60__.xml rename to test/mock/CLI_Configuration_commit_confirmed_60Configuration_CLI_.xml diff --git a/test/mock/Commit_Label__test__.xml b/test/mock/CLI_Configuration_commit_label_testConfiguration_CLI_.xml similarity index 100% rename from test/mock/Commit_Label__test__.xml rename to test/mock/CLI_Configuration_commit_label_testConfiguration_CLI_.xml diff --git a/test/mock/CLI_Configuration_commit_replaceConfiguarion_CLI_.xml b/test/mock/CLI_Configuration_commit_replaceConfiguarion_CLI_.xml new file mode 100644 index 0000000..066e651 --- /dev/null +++ b/test/mock/CLI_Configuration_commit_replaceConfiguarion_CLI_.xml @@ -0,0 +1,3 @@ + + +XML> diff --git a/test/mock/CLI_Configuration_commit_replace_comment_goodConfiguarion_CLI_.xml b/test/mock/CLI_Configuration_commit_replace_comment_goodConfiguarion_CLI_.xml new file mode 100644 index 0000000..fa48bcc --- /dev/null +++ b/test/mock/CLI_Configuration_commit_replace_comment_goodConfiguarion_CLI_.xml @@ -0,0 +1,3 @@ + + +XML> diff --git a/test/mock/CLI_Configuration_commit_replace_confirmed_60Configuarion_CLI_.xml b/test/mock/CLI_Configuration_commit_replace_confirmed_60Configuarion_CLI_.xml new file mode 100644 index 0000000..56e7768 --- /dev/null +++ b/test/mock/CLI_Configuration_commit_replace_confirmed_60Configuarion_CLI_.xml @@ -0,0 +1,3 @@ + + +XML> diff --git a/test/mock/CLI_Configuration_commit_replace_label_testConfiguarion_CLI_.xml b/test/mock/CLI_Configuration_commit_replace_label_testConfiguarion_CLI_.xml new file mode 100644 index 0000000..06d5346 --- /dev/null +++ b/test/mock/CLI_Configuration_commit_replace_label_testConfiguarion_CLI_.xml @@ -0,0 +1,3 @@ + + +XML> From 5d693ddb25c300a79f6f9505c818e8ff93d1a475 Mon Sep 17 00:00:00 2001 From: Mircea Ulinic Date: Wed, 31 May 2017 09:52:27 +0100 Subject: [PATCH 17/39] Forward rest of kwargs to netmiko --- pyIOSXR/iosxr.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pyIOSXR/iosxr.py b/pyIOSXR/iosxr.py index 601829a..be3244c 100644 --- a/pyIOSXR/iosxr.py +++ b/pyIOSXR/iosxr.py @@ -68,7 +68,8 @@ def __init__(self, port=22, timeout=60, logfile=None, - lock=True): + lock=True, + **netmiko_kwargs): """ IOS-XR device constructor. @@ -80,6 +81,7 @@ def __init__(self, :param logfile: File-like object to save device communication to or None to disable logging :param lock: (bool) Auto-lock config upon open() if set to True, connect without locking if False (default: True) + :netmiko_kwargs (kwargs) Key-value args to forward to Netmiko. """ self.hostname = str(hostname) self.username = str(username) @@ -89,6 +91,7 @@ def __init__(self, self.logfile = logfile self.lock_on_connect = lock self.locked = False + self.netmiko_kwargs = netmiko_kwargs self._cli_prompt = None self._xml_agent_locker = Lock() self._xml_agent_alive = False @@ -159,7 +162,8 @@ def open(self): ip=self.hostname, port=self.port, username=self.username, - password=self.password) + password=self.password, + **netmiko_kwargs) self.device.timeout = self.timeout self._xml_agent_alive = True # successfully open thus alive except NetMikoTimeoutException as t_err: From 7d71472417bb2f4ac6fe68170468d4f1ce2f30b9 Mon Sep 17 00:00:00 2001 From: Mircea Ulinic Date: Wed, 31 May 2017 09:53:42 +0100 Subject: [PATCH 18/39] Version 0.50 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 5ae34ad..0c05f89 100644 --- a/setup.py +++ b/setup.py @@ -28,7 +28,7 @@ # e.g. ['django==1.5.1', 'mezzanine==1.4.6'] reqs = [str(ir.req) for ir in install_reqs] -version = '0.41' +version = '0.50' setup( name='pyIOSXR', From b8f277a52abee1ce68976f1d67a321b3b7631b87 Mon Sep 17 00:00:00 2001 From: Mircea Ulinic Date: Wed, 31 May 2017 12:28:03 +0100 Subject: [PATCH 19/39] Revert "use cli xml instead of xml tags" --- pyIOSXR/iosxr.py | 20 +++++++++---------- ...commit_comment_emptyConfiguration_CLI_.xml | 3 --- ..._commit_comment_goodConfiguration_CLI_.xml | 3 --- ...mit_comment_parallelConfiguration_CLI_.xml | 3 --- ...l-agent-iteration-onConfiguration_CLI_.xml | 4 ---- ...ration_commit_replaceConfiguarion_CLI_.xml | 3 --- ..._replace_comment_goodConfiguarion_CLI_.xml | 3 --- ..._replace_confirmed_60Configuarion_CLI_.xml | 3 --- ...it_replace_label_testConfiguarion_CLI_.xml | 3 --- ...mmitConfiguration_CLI_.xml => Commit_.xml} | 0 ...on_CLI_.xml => Commit_Confirmed__60__.xml} | 0 ...tion_CLI_.xml => Commit_Label__test__.xml} | 0 12 files changed, 10 insertions(+), 35 deletions(-) delete mode 100644 test/mock/CLI_Configuration_commit_comment_emptyConfiguration_CLI_.xml delete mode 100644 test/mock/CLI_Configuration_commit_comment_goodConfiguration_CLI_.xml delete mode 100644 test/mock/CLI_Configuration_commit_comment_parallelConfiguration_CLI_.xml delete mode 100644 test/mock/CLI_Configuration_commit_comment_pyIOSXR-test_xml-agent-iteration-onConfiguration_CLI_.xml delete mode 100644 test/mock/CLI_Configuration_commit_replaceConfiguarion_CLI_.xml delete mode 100644 test/mock/CLI_Configuration_commit_replace_comment_goodConfiguarion_CLI_.xml delete mode 100644 test/mock/CLI_Configuration_commit_replace_confirmed_60Configuarion_CLI_.xml delete mode 100644 test/mock/CLI_Configuration_commit_replace_label_testConfiguarion_CLI_.xml rename test/mock/{CLI_Configuration_commitConfiguration_CLI_.xml => Commit_.xml} (100%) rename test/mock/{CLI_Configuration_commit_confirmed_60Configuration_CLI_.xml => Commit_Confirmed__60__.xml} (100%) rename test/mock/{CLI_Configuration_commit_label_testConfiguration_CLI_.xml => Commit_Label__test__.xml} (100%) diff --git a/pyIOSXR/iosxr.py b/pyIOSXR/iosxr.py index be3244c..bd82b7d 100644 --- a/pyIOSXR/iosxr.py +++ b/pyIOSXR/iosxr.py @@ -582,17 +582,17 @@ def commit_config(self, label=None, comment=None, confirmed=None): :param comment: Commit label, displayed instead of the commit ID on the device. :param confirmed: Commit with auto-rollback if new commit is not made in 30 to 300 sec """ - rpc_command = 'commit' + rpc_command = ' - -XML> diff --git a/test/mock/CLI_Configuration_commit_comment_goodConfiguration_CLI_.xml b/test/mock/CLI_Configuration_commit_comment_goodConfiguration_CLI_.xml deleted file mode 100644 index fa48bcc..0000000 --- a/test/mock/CLI_Configuration_commit_comment_goodConfiguration_CLI_.xml +++ /dev/null @@ -1,3 +0,0 @@ - - -XML> diff --git a/test/mock/CLI_Configuration_commit_comment_parallelConfiguration_CLI_.xml b/test/mock/CLI_Configuration_commit_comment_parallelConfiguration_CLI_.xml deleted file mode 100644 index 577dd13..0000000 --- a/test/mock/CLI_Configuration_commit_comment_parallelConfiguration_CLI_.xml +++ /dev/null @@ -1,3 +0,0 @@ - - -XML> diff --git a/test/mock/CLI_Configuration_commit_comment_pyIOSXR-test_xml-agent-iteration-onConfiguration_CLI_.xml b/test/mock/CLI_Configuration_commit_comment_pyIOSXR-test_xml-agent-iteration-onConfiguration_CLI_.xml deleted file mode 100644 index 3d07437..0000000 --- a/test/mock/CLI_Configuration_commit_comment_pyIOSXR-test_xml-agent-iteration-onConfiguration_CLI_.xml +++ /dev/null @@ -1,4 +0,0 @@ - - -XML> - diff --git a/test/mock/CLI_Configuration_commit_replaceConfiguarion_CLI_.xml b/test/mock/CLI_Configuration_commit_replaceConfiguarion_CLI_.xml deleted file mode 100644 index 066e651..0000000 --- a/test/mock/CLI_Configuration_commit_replaceConfiguarion_CLI_.xml +++ /dev/null @@ -1,3 +0,0 @@ - - -XML> diff --git a/test/mock/CLI_Configuration_commit_replace_comment_goodConfiguarion_CLI_.xml b/test/mock/CLI_Configuration_commit_replace_comment_goodConfiguarion_CLI_.xml deleted file mode 100644 index fa48bcc..0000000 --- a/test/mock/CLI_Configuration_commit_replace_comment_goodConfiguarion_CLI_.xml +++ /dev/null @@ -1,3 +0,0 @@ - - -XML> diff --git a/test/mock/CLI_Configuration_commit_replace_confirmed_60Configuarion_CLI_.xml b/test/mock/CLI_Configuration_commit_replace_confirmed_60Configuarion_CLI_.xml deleted file mode 100644 index 56e7768..0000000 --- a/test/mock/CLI_Configuration_commit_replace_confirmed_60Configuarion_CLI_.xml +++ /dev/null @@ -1,3 +0,0 @@ - - -XML> diff --git a/test/mock/CLI_Configuration_commit_replace_label_testConfiguarion_CLI_.xml b/test/mock/CLI_Configuration_commit_replace_label_testConfiguarion_CLI_.xml deleted file mode 100644 index 06d5346..0000000 --- a/test/mock/CLI_Configuration_commit_replace_label_testConfiguarion_CLI_.xml +++ /dev/null @@ -1,3 +0,0 @@ - - -XML> diff --git a/test/mock/CLI_Configuration_commitConfiguration_CLI_.xml b/test/mock/Commit_.xml similarity index 100% rename from test/mock/CLI_Configuration_commitConfiguration_CLI_.xml rename to test/mock/Commit_.xml diff --git a/test/mock/CLI_Configuration_commit_confirmed_60Configuration_CLI_.xml b/test/mock/Commit_Confirmed__60__.xml similarity index 100% rename from test/mock/CLI_Configuration_commit_confirmed_60Configuration_CLI_.xml rename to test/mock/Commit_Confirmed__60__.xml diff --git a/test/mock/CLI_Configuration_commit_label_testConfiguration_CLI_.xml b/test/mock/Commit_Label__test__.xml similarity index 100% rename from test/mock/CLI_Configuration_commit_label_testConfiguration_CLI_.xml rename to test/mock/Commit_Label__test__.xml From a9283fac28e1426e43ee9cdb6234194abb96412c Mon Sep 17 00:00:00 2001 From: Thorko Date: Thu, 1 Jun 2017 11:27:07 +0200 Subject: [PATCH 20/39] fixed syntax error --- pyIOSXR/iosxr.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyIOSXR/iosxr.py b/pyIOSXR/iosxr.py index 601829a..4135068 100644 --- a/pyIOSXR/iosxr.py +++ b/pyIOSXR/iosxr.py @@ -610,7 +610,7 @@ def commit_replace_config(self, label=None, comment=None, confirmed=None): rpc_command += ' confirmed %d' % int(confirmed) else: raise InvalidInputError('confirmed needs to be between 30 and 300 seconds', self) - rpc_command += '' + rpc_command += '' self._execute_rpc(rpc_command) def discard_config(self): From 684d3474da99d64fef83acd77baeb970ea50dbc7 Mon Sep 17 00:00:00 2001 From: Thorko Date: Thu, 1 Jun 2017 12:01:05 +0200 Subject: [PATCH 21/39] fixed syntax error --- pyIOSXR/iosxr.py | 8 ++++++-- test/mock/CLI_Configuration_commitConfiguration_CLI_.xml | 3 +++ ...nfiguration_commit_comment_emptyConfiguration_CLI_.xml | 3 +++ ...onfiguration_commit_comment_goodConfiguration_CLI_.xml | 3 +++ ...guration_commit_comment_parallelConfiguration_CLI_.xml | 3 +++ ...OSXR-test_xml-agent-iteration-onConfiguration_CLI_.xml | 4 ++++ ...onfiguration_commit_confirmed_60Configuration_CLI_.xml | 3 +++ ..._Configuration_commit_label_testConfiguration_CLI_.xml | 3 +++ .../CLI_Configuration_commit_replaceConfiguarion_CLI_.xml | 3 +++ ...ation_commit_replace_comment_goodConfiguarion_CLI_.xml | 3 +++ ...ation_commit_replace_confirmed_60Configuarion_CLI_.xml | 3 +++ ...uration_commit_replace_label_testConfiguarion_CLI_.xml | 3 +++ 12 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 test/mock/CLI_Configuration_commitConfiguration_CLI_.xml create mode 100644 test/mock/CLI_Configuration_commit_comment_emptyConfiguration_CLI_.xml create mode 100644 test/mock/CLI_Configuration_commit_comment_goodConfiguration_CLI_.xml create mode 100644 test/mock/CLI_Configuration_commit_comment_parallelConfiguration_CLI_.xml create mode 100644 test/mock/CLI_Configuration_commit_comment_pyIOSXR-test_xml-agent-iteration-onConfiguration_CLI_.xml create mode 100644 test/mock/CLI_Configuration_commit_confirmed_60Configuration_CLI_.xml create mode 100644 test/mock/CLI_Configuration_commit_label_testConfiguration_CLI_.xml create mode 100644 test/mock/CLI_Configuration_commit_replaceConfiguarion_CLI_.xml create mode 100644 test/mock/CLI_Configuration_commit_replace_comment_goodConfiguarion_CLI_.xml create mode 100644 test/mock/CLI_Configuration_commit_replace_confirmed_60Configuarion_CLI_.xml create mode 100644 test/mock/CLI_Configuration_commit_replace_label_testConfiguarion_CLI_.xml diff --git a/pyIOSXR/iosxr.py b/pyIOSXR/iosxr.py index 4135068..2945f39 100644 --- a/pyIOSXR/iosxr.py +++ b/pyIOSXR/iosxr.py @@ -68,7 +68,8 @@ def __init__(self, port=22, timeout=60, logfile=None, - lock=True): + lock=True, + **netmiko_kwargs): """ IOS-XR device constructor. @@ -80,6 +81,7 @@ def __init__(self, :param logfile: File-like object to save device communication to or None to disable logging :param lock: (bool) Auto-lock config upon open() if set to True, connect without locking if False (default: True) + :netmiko_kwargs (kwargs) Key-value args to forward to Netmiko. """ self.hostname = str(hostname) self.username = str(username) @@ -89,6 +91,7 @@ def __init__(self, self.logfile = logfile self.lock_on_connect = lock self.locked = False + self.netmiko_kwargs = netmiko_kwargs self._cli_prompt = None self._xml_agent_locker = Lock() self._xml_agent_alive = False @@ -159,7 +162,8 @@ def open(self): ip=self.hostname, port=self.port, username=self.username, - password=self.password) + password=self.password, + **netmiko_kwargs) self.device.timeout = self.timeout self._xml_agent_alive = True # successfully open thus alive except NetMikoTimeoutException as t_err: diff --git a/test/mock/CLI_Configuration_commitConfiguration_CLI_.xml b/test/mock/CLI_Configuration_commitConfiguration_CLI_.xml new file mode 100644 index 0000000..b1032a8 --- /dev/null +++ b/test/mock/CLI_Configuration_commitConfiguration_CLI_.xml @@ -0,0 +1,3 @@ + + +XML> diff --git a/test/mock/CLI_Configuration_commit_comment_emptyConfiguration_CLI_.xml b/test/mock/CLI_Configuration_commit_comment_emptyConfiguration_CLI_.xml new file mode 100644 index 0000000..dae23f0 --- /dev/null +++ b/test/mock/CLI_Configuration_commit_comment_emptyConfiguration_CLI_.xml @@ -0,0 +1,3 @@ + + +XML> diff --git a/test/mock/CLI_Configuration_commit_comment_goodConfiguration_CLI_.xml b/test/mock/CLI_Configuration_commit_comment_goodConfiguration_CLI_.xml new file mode 100644 index 0000000..fa48bcc --- /dev/null +++ b/test/mock/CLI_Configuration_commit_comment_goodConfiguration_CLI_.xml @@ -0,0 +1,3 @@ + + +XML> diff --git a/test/mock/CLI_Configuration_commit_comment_parallelConfiguration_CLI_.xml b/test/mock/CLI_Configuration_commit_comment_parallelConfiguration_CLI_.xml new file mode 100644 index 0000000..577dd13 --- /dev/null +++ b/test/mock/CLI_Configuration_commit_comment_parallelConfiguration_CLI_.xml @@ -0,0 +1,3 @@ + + +XML> diff --git a/test/mock/CLI_Configuration_commit_comment_pyIOSXR-test_xml-agent-iteration-onConfiguration_CLI_.xml b/test/mock/CLI_Configuration_commit_comment_pyIOSXR-test_xml-agent-iteration-onConfiguration_CLI_.xml new file mode 100644 index 0000000..3d07437 --- /dev/null +++ b/test/mock/CLI_Configuration_commit_comment_pyIOSXR-test_xml-agent-iteration-onConfiguration_CLI_.xml @@ -0,0 +1,4 @@ + + +XML> + diff --git a/test/mock/CLI_Configuration_commit_confirmed_60Configuration_CLI_.xml b/test/mock/CLI_Configuration_commit_confirmed_60Configuration_CLI_.xml new file mode 100644 index 0000000..56e7768 --- /dev/null +++ b/test/mock/CLI_Configuration_commit_confirmed_60Configuration_CLI_.xml @@ -0,0 +1,3 @@ + + +XML> diff --git a/test/mock/CLI_Configuration_commit_label_testConfiguration_CLI_.xml b/test/mock/CLI_Configuration_commit_label_testConfiguration_CLI_.xml new file mode 100644 index 0000000..06d5346 --- /dev/null +++ b/test/mock/CLI_Configuration_commit_label_testConfiguration_CLI_.xml @@ -0,0 +1,3 @@ + + +XML> diff --git a/test/mock/CLI_Configuration_commit_replaceConfiguarion_CLI_.xml b/test/mock/CLI_Configuration_commit_replaceConfiguarion_CLI_.xml new file mode 100644 index 0000000..066e651 --- /dev/null +++ b/test/mock/CLI_Configuration_commit_replaceConfiguarion_CLI_.xml @@ -0,0 +1,3 @@ + + +XML> diff --git a/test/mock/CLI_Configuration_commit_replace_comment_goodConfiguarion_CLI_.xml b/test/mock/CLI_Configuration_commit_replace_comment_goodConfiguarion_CLI_.xml new file mode 100644 index 0000000..fa48bcc --- /dev/null +++ b/test/mock/CLI_Configuration_commit_replace_comment_goodConfiguarion_CLI_.xml @@ -0,0 +1,3 @@ + + +XML> diff --git a/test/mock/CLI_Configuration_commit_replace_confirmed_60Configuarion_CLI_.xml b/test/mock/CLI_Configuration_commit_replace_confirmed_60Configuarion_CLI_.xml new file mode 100644 index 0000000..56e7768 --- /dev/null +++ b/test/mock/CLI_Configuration_commit_replace_confirmed_60Configuarion_CLI_.xml @@ -0,0 +1,3 @@ + + +XML> diff --git a/test/mock/CLI_Configuration_commit_replace_label_testConfiguarion_CLI_.xml b/test/mock/CLI_Configuration_commit_replace_label_testConfiguarion_CLI_.xml new file mode 100644 index 0000000..06d5346 --- /dev/null +++ b/test/mock/CLI_Configuration_commit_replace_label_testConfiguarion_CLI_.xml @@ -0,0 +1,3 @@ + + +XML> From a018523c9defba448861be026e882476dd8d6323 Mon Sep 17 00:00:00 2001 From: Thorko Date: Sat, 3 Jun 2017 09:38:20 +0200 Subject: [PATCH 22/39] fix testing --- ...nfiguration_commit_replace_confirmed_60Configuration_CLI_.xml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename test/mock/{CLI_Configuration_commit_replace_confirmed_60Configuarion_CLI_.xml => CLI_Configuration_commit_replace_confirmed_60Configuration_CLI_.xml} (100%) diff --git a/test/mock/CLI_Configuration_commit_replace_confirmed_60Configuarion_CLI_.xml b/test/mock/CLI_Configuration_commit_replace_confirmed_60Configuration_CLI_.xml similarity index 100% rename from test/mock/CLI_Configuration_commit_replace_confirmed_60Configuarion_CLI_.xml rename to test/mock/CLI_Configuration_commit_replace_confirmed_60Configuration_CLI_.xml From 89ab9be23074e5ef834da865d5f69eab1508eb96 Mon Sep 17 00:00:00 2001 From: Thorko Date: Sat, 3 Jun 2017 11:32:11 +0200 Subject: [PATCH 23/39] fixed testing --- .../CLI_Configuration_commit_replaceConfiguration_CLI_.xml | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 test/mock/CLI_Configuration_commit_replaceConfiguration_CLI_.xml diff --git a/test/mock/CLI_Configuration_commit_replaceConfiguration_CLI_.xml b/test/mock/CLI_Configuration_commit_replaceConfiguration_CLI_.xml new file mode 100644 index 0000000..066e651 --- /dev/null +++ b/test/mock/CLI_Configuration_commit_replaceConfiguration_CLI_.xml @@ -0,0 +1,3 @@ + + +XML> From 8af0dfcad9847a1ca6171f48ae2f21d9c2782e00 Mon Sep 17 00:00:00 2001 From: Thorko Date: Sat, 3 Jun 2017 11:32:25 +0200 Subject: [PATCH 24/39] fixed testing --- ...iguration_commit_replace_comment_goodConfiguration_CLI_.xml | 3 +++ ...nfiguration_commit_replace_label_testConfiguration_CLI_.xml | 3 +++ 2 files changed, 6 insertions(+) create mode 100644 test/mock/CLI_Configuration_commit_replace_comment_goodConfiguration_CLI_.xml create mode 100644 test/mock/CLI_Configuration_commit_replace_label_testConfiguration_CLI_.xml diff --git a/test/mock/CLI_Configuration_commit_replace_comment_goodConfiguration_CLI_.xml b/test/mock/CLI_Configuration_commit_replace_comment_goodConfiguration_CLI_.xml new file mode 100644 index 0000000..fa48bcc --- /dev/null +++ b/test/mock/CLI_Configuration_commit_replace_comment_goodConfiguration_CLI_.xml @@ -0,0 +1,3 @@ + + +XML> diff --git a/test/mock/CLI_Configuration_commit_replace_label_testConfiguration_CLI_.xml b/test/mock/CLI_Configuration_commit_replace_label_testConfiguration_CLI_.xml new file mode 100644 index 0000000..06d5346 --- /dev/null +++ b/test/mock/CLI_Configuration_commit_replace_label_testConfiguration_CLI_.xml @@ -0,0 +1,3 @@ + + +XML> From 4bddd42240ad2a057b19c8a0c28178c10be7c598 Mon Sep 17 00:00:00 2001 From: Thorko Date: Sat, 3 Jun 2017 11:33:19 +0200 Subject: [PATCH 25/39] removed obsolete files --- .../mock/CLI_Configuration_commit_replaceConfiguarion_CLI_.xml | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 test/mock/CLI_Configuration_commit_replaceConfiguarion_CLI_.xml diff --git a/test/mock/CLI_Configuration_commit_replaceConfiguarion_CLI_.xml b/test/mock/CLI_Configuration_commit_replaceConfiguarion_CLI_.xml deleted file mode 100644 index 066e651..0000000 --- a/test/mock/CLI_Configuration_commit_replaceConfiguarion_CLI_.xml +++ /dev/null @@ -1,3 +0,0 @@ - - -XML> From cde3a96143763259479e62a9bb18e0b8fc2c3054 Mon Sep 17 00:00:00 2001 From: Thorko Date: Sat, 3 Jun 2017 11:33:30 +0200 Subject: [PATCH 26/39] removed obsolete files --- ...figuration_commit_replace_comment_goodConfiguarion_CLI_.xml | 3 --- ...onfiguration_commit_replace_label_testConfiguarion_CLI_.xml | 3 --- 2 files changed, 6 deletions(-) delete mode 100644 test/mock/CLI_Configuration_commit_replace_comment_goodConfiguarion_CLI_.xml delete mode 100644 test/mock/CLI_Configuration_commit_replace_label_testConfiguarion_CLI_.xml diff --git a/test/mock/CLI_Configuration_commit_replace_comment_goodConfiguarion_CLI_.xml b/test/mock/CLI_Configuration_commit_replace_comment_goodConfiguarion_CLI_.xml deleted file mode 100644 index fa48bcc..0000000 --- a/test/mock/CLI_Configuration_commit_replace_comment_goodConfiguarion_CLI_.xml +++ /dev/null @@ -1,3 +0,0 @@ - - -XML> diff --git a/test/mock/CLI_Configuration_commit_replace_label_testConfiguarion_CLI_.xml b/test/mock/CLI_Configuration_commit_replace_label_testConfiguarion_CLI_.xml deleted file mode 100644 index 06d5346..0000000 --- a/test/mock/CLI_Configuration_commit_replace_label_testConfiguarion_CLI_.xml +++ /dev/null @@ -1,3 +0,0 @@ - - -XML> From 0e4def0c175e4269a0d90201e0f2bab16421421a Mon Sep 17 00:00:00 2001 From: Mircea Ulinic Date: Sun, 4 Jun 2017 18:16:38 +0100 Subject: [PATCH 27/39] Require netmiko 1.4.1 for opt args --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index ff86190..eead75f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,2 @@ -netmiko >= 0.5.2 +netmiko>=1.4.1 lxml>=3.2.4 From 7e153191484b521a0f8ca0aef5f23edd974f2273 Mon Sep 17 00:00:00 2001 From: Thorko Date: Tue, 13 Jun 2017 14:15:36 +0200 Subject: [PATCH 28/39] fixed issue with netmiko_kwargs --- pyIOSXR/iosxr.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyIOSXR/iosxr.py b/pyIOSXR/iosxr.py index 2945f39..8ffb951 100644 --- a/pyIOSXR/iosxr.py +++ b/pyIOSXR/iosxr.py @@ -163,7 +163,7 @@ def open(self): port=self.port, username=self.username, password=self.password, - **netmiko_kwargs) + **self.netmiko_kwargs) self.device.timeout = self.timeout self._xml_agent_alive = True # successfully open thus alive except NetMikoTimeoutException as t_err: From 313b1f7bf270c2a0be3afc28bb367bae4e3e3674 Mon Sep 17 00:00:00 2001 From: Thorko Date: Tue, 13 Jun 2017 18:12:24 +0200 Subject: [PATCH 29/39] use Exec instead of Configuration - Configuration will break xml agent --- pyIOSXR/iosxr.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyIOSXR/iosxr.py b/pyIOSXR/iosxr.py index 8ffb951..b61d9c4 100644 --- a/pyIOSXR/iosxr.py +++ b/pyIOSXR/iosxr.py @@ -445,7 +445,7 @@ def _execute_config_show(self, show_command, delay_factor=.1): """ Executes a configuration show-type command. """ - rpc_command = '{show_command}'.format( + rpc_command = '{show_command}'.format( show_command=escape_xml(show_command) ) response = self._execute_rpc(rpc_command, delay_factor=delay_factor) From 6be480def3a3f48362e4cc57afefa517317a43eb Mon Sep 17 00:00:00 2001 From: thorko Date: Thu, 15 Jun 2017 10:37:40 +0200 Subject: [PATCH 30/39] Create iosxr.py revert second commit, because it doesn't work --- pyIOSXR/iosxr.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyIOSXR/iosxr.py b/pyIOSXR/iosxr.py index b61d9c4..8ffb951 100644 --- a/pyIOSXR/iosxr.py +++ b/pyIOSXR/iosxr.py @@ -445,7 +445,7 @@ def _execute_config_show(self, show_command, delay_factor=.1): """ Executes a configuration show-type command. """ - rpc_command = '{show_command}'.format( + rpc_command = '{show_command}'.format( show_command=escape_xml(show_command) ) response = self._execute_rpc(rpc_command, delay_factor=delay_factor) From 635cfe0f465901f313c138cf27956c1aeedbc77d Mon Sep 17 00:00:00 2001 From: Mircea Ulinic Date: Mon, 26 Jun 2017 14:02:13 +0100 Subject: [PATCH 31/39] Version 0.51 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 0c05f89..437f6b4 100644 --- a/setup.py +++ b/setup.py @@ -28,7 +28,7 @@ # e.g. ['django==1.5.1', 'mezzanine==1.4.6'] reqs = [str(ir.req) for ir in install_reqs] -version = '0.50' +version = '0.51' setup( name='pyIOSXR', From 3892d2429839f395be6a4327c6bd54f4fea10499 Mon Sep 17 00:00:00 2001 From: Mircea Ulinic Date: Tue, 25 Jul 2017 14:12:56 +0100 Subject: [PATCH 32/39] Version 0.52 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 437f6b4..b1f7568 100644 --- a/setup.py +++ b/setup.py @@ -28,7 +28,7 @@ # e.g. ['django==1.5.1', 'mezzanine==1.4.6'] reqs = [str(ir.req) for ir in install_reqs] -version = '0.51' +version = '0.52' setup( name='pyIOSXR', From 7e0cc927b1081741e025fb371dac117d7cfe25b3 Mon Sep 17 00:00:00 2001 From: Mircea Ulinic Date: Tue, 25 Jul 2017 14:23:00 +0100 Subject: [PATCH 33/39] Revert "Fixed the syntax error from my pull request earlier" --- pyIOSXR/iosxr.py | 20 +++++++++---------- ...Configuration_commitConfiguration_CLI_.xml | 3 --- ...commit_comment_emptyConfiguration_CLI_.xml | 3 --- ..._commit_comment_goodConfiguration_CLI_.xml | 3 --- ...mit_comment_parallelConfiguration_CLI_.xml | 3 --- ...l-agent-iteration-onConfiguration_CLI_.xml | 4 ---- ..._commit_confirmed_60Configuration_CLI_.xml | 3 --- ...on_commit_label_testConfiguration_CLI_.xml | 3 --- ...ation_commit_replaceConfiguration_CLI_.xml | 3 --- ...replace_comment_goodConfiguration_CLI_.xml | 3 --- ...replace_confirmed_60Configuration_CLI_.xml | 3 --- ...t_replace_label_testConfiguration_CLI_.xml | 3 --- 12 files changed, 10 insertions(+), 44 deletions(-) delete mode 100644 test/mock/CLI_Configuration_commitConfiguration_CLI_.xml delete mode 100644 test/mock/CLI_Configuration_commit_comment_emptyConfiguration_CLI_.xml delete mode 100644 test/mock/CLI_Configuration_commit_comment_goodConfiguration_CLI_.xml delete mode 100644 test/mock/CLI_Configuration_commit_comment_parallelConfiguration_CLI_.xml delete mode 100644 test/mock/CLI_Configuration_commit_comment_pyIOSXR-test_xml-agent-iteration-onConfiguration_CLI_.xml delete mode 100644 test/mock/CLI_Configuration_commit_confirmed_60Configuration_CLI_.xml delete mode 100644 test/mock/CLI_Configuration_commit_label_testConfiguration_CLI_.xml delete mode 100644 test/mock/CLI_Configuration_commit_replaceConfiguration_CLI_.xml delete mode 100644 test/mock/CLI_Configuration_commit_replace_comment_goodConfiguration_CLI_.xml delete mode 100644 test/mock/CLI_Configuration_commit_replace_confirmed_60Configuration_CLI_.xml delete mode 100644 test/mock/CLI_Configuration_commit_replace_label_testConfiguration_CLI_.xml diff --git a/pyIOSXR/iosxr.py b/pyIOSXR/iosxr.py index 8ffb951..cc9b41c 100644 --- a/pyIOSXR/iosxr.py +++ b/pyIOSXR/iosxr.py @@ -582,17 +582,17 @@ def commit_config(self, label=None, comment=None, confirmed=None): :param comment: Commit label, displayed instead of the commit ID on the device. :param confirmed: Commit with auto-rollback if new commit is not made in 30 to 300 sec """ - rpc_command = 'commit' + rpc_command = ' - -XML> diff --git a/test/mock/CLI_Configuration_commit_comment_emptyConfiguration_CLI_.xml b/test/mock/CLI_Configuration_commit_comment_emptyConfiguration_CLI_.xml deleted file mode 100644 index dae23f0..0000000 --- a/test/mock/CLI_Configuration_commit_comment_emptyConfiguration_CLI_.xml +++ /dev/null @@ -1,3 +0,0 @@ - - -XML> diff --git a/test/mock/CLI_Configuration_commit_comment_goodConfiguration_CLI_.xml b/test/mock/CLI_Configuration_commit_comment_goodConfiguration_CLI_.xml deleted file mode 100644 index fa48bcc..0000000 --- a/test/mock/CLI_Configuration_commit_comment_goodConfiguration_CLI_.xml +++ /dev/null @@ -1,3 +0,0 @@ - - -XML> diff --git a/test/mock/CLI_Configuration_commit_comment_parallelConfiguration_CLI_.xml b/test/mock/CLI_Configuration_commit_comment_parallelConfiguration_CLI_.xml deleted file mode 100644 index 577dd13..0000000 --- a/test/mock/CLI_Configuration_commit_comment_parallelConfiguration_CLI_.xml +++ /dev/null @@ -1,3 +0,0 @@ - - -XML> diff --git a/test/mock/CLI_Configuration_commit_comment_pyIOSXR-test_xml-agent-iteration-onConfiguration_CLI_.xml b/test/mock/CLI_Configuration_commit_comment_pyIOSXR-test_xml-agent-iteration-onConfiguration_CLI_.xml deleted file mode 100644 index 3d07437..0000000 --- a/test/mock/CLI_Configuration_commit_comment_pyIOSXR-test_xml-agent-iteration-onConfiguration_CLI_.xml +++ /dev/null @@ -1,4 +0,0 @@ - - -XML> - diff --git a/test/mock/CLI_Configuration_commit_confirmed_60Configuration_CLI_.xml b/test/mock/CLI_Configuration_commit_confirmed_60Configuration_CLI_.xml deleted file mode 100644 index 56e7768..0000000 --- a/test/mock/CLI_Configuration_commit_confirmed_60Configuration_CLI_.xml +++ /dev/null @@ -1,3 +0,0 @@ - - -XML> diff --git a/test/mock/CLI_Configuration_commit_label_testConfiguration_CLI_.xml b/test/mock/CLI_Configuration_commit_label_testConfiguration_CLI_.xml deleted file mode 100644 index 06d5346..0000000 --- a/test/mock/CLI_Configuration_commit_label_testConfiguration_CLI_.xml +++ /dev/null @@ -1,3 +0,0 @@ - - -XML> diff --git a/test/mock/CLI_Configuration_commit_replaceConfiguration_CLI_.xml b/test/mock/CLI_Configuration_commit_replaceConfiguration_CLI_.xml deleted file mode 100644 index 066e651..0000000 --- a/test/mock/CLI_Configuration_commit_replaceConfiguration_CLI_.xml +++ /dev/null @@ -1,3 +0,0 @@ - - -XML> diff --git a/test/mock/CLI_Configuration_commit_replace_comment_goodConfiguration_CLI_.xml b/test/mock/CLI_Configuration_commit_replace_comment_goodConfiguration_CLI_.xml deleted file mode 100644 index fa48bcc..0000000 --- a/test/mock/CLI_Configuration_commit_replace_comment_goodConfiguration_CLI_.xml +++ /dev/null @@ -1,3 +0,0 @@ - - -XML> diff --git a/test/mock/CLI_Configuration_commit_replace_confirmed_60Configuration_CLI_.xml b/test/mock/CLI_Configuration_commit_replace_confirmed_60Configuration_CLI_.xml deleted file mode 100644 index 56e7768..0000000 --- a/test/mock/CLI_Configuration_commit_replace_confirmed_60Configuration_CLI_.xml +++ /dev/null @@ -1,3 +0,0 @@ - - -XML> diff --git a/test/mock/CLI_Configuration_commit_replace_label_testConfiguration_CLI_.xml b/test/mock/CLI_Configuration_commit_replace_label_testConfiguration_CLI_.xml deleted file mode 100644 index 06d5346..0000000 --- a/test/mock/CLI_Configuration_commit_replace_label_testConfiguration_CLI_.xml +++ /dev/null @@ -1,3 +0,0 @@ - - -XML> From cf41e644f9f3f73076902b015de166faa123dd15 Mon Sep 17 00:00:00 2001 From: Mircea Ulinic Date: Wed, 11 Oct 2017 15:19:04 +0100 Subject: [PATCH 34/39] Require netmiko 1.4.3 for is_alive method --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index eead75f..1406164 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,2 @@ -netmiko>=1.4.1 +netmiko>=1.4.3 lxml>=3.2.4 From 04920fbc9a9f8f00bd0a57a352cfccd14af9ea20 Mon Sep 17 00:00:00 2001 From: Mircea Ulinic Date: Wed, 11 Oct 2017 15:19:51 +0100 Subject: [PATCH 35/39] Version 0.53 For https://github.com/fooelisa/pyiosxr/pull/53 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index b1f7568..a8dc1b6 100644 --- a/setup.py +++ b/setup.py @@ -28,7 +28,7 @@ # e.g. ['django==1.5.1', 'mezzanine==1.4.6'] reqs = [str(ir.req) for ir in install_reqs] -version = '0.52' +version = '0.53' setup( name='pyIOSXR', From 6317678227526c31e53d5fe0e3c16e7a66760e75 Mon Sep 17 00:00:00 2001 From: Tom Strickx Date: Mon, 27 Nov 2017 14:00:04 +0000 Subject: [PATCH 36/39] Fixes #55: Check commit comment length Raise an InvalidInputError when the commit message is longer than 60 characters, as this breaks IOS-XR. --- pyIOSXR/iosxr.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pyIOSXR/iosxr.py b/pyIOSXR/iosxr.py index cc9b41c..b2b222a 100644 --- a/pyIOSXR/iosxr.py +++ b/pyIOSXR/iosxr.py @@ -579,14 +579,17 @@ def commit_config(self, label=None, comment=None, confirmed=None): Commit the candidate config. :param label: Commit comment, displayed in the commit entry on the device. - :param comment: Commit label, displayed instead of the commit ID on the device. + :param comment: Commit label, displayed instead of the commit ID on the device. (Max 60 characters) :param confirmed: Commit with auto-rollback if new commit is not made in 30 to 300 sec """ rpc_command = ' Date: Mon, 27 Nov 2017 15:20:54 +0000 Subject: [PATCH 37/39] Update error message for commit comment length error Rephrase the commit comment error to better reflect the limits. --- pyIOSXR/iosxr.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyIOSXR/iosxr.py b/pyIOSXR/iosxr.py index b2b222a..59c2b85 100644 --- a/pyIOSXR/iosxr.py +++ b/pyIOSXR/iosxr.py @@ -589,7 +589,7 @@ def commit_config(self, label=None, comment=None, confirmed=None): if len(comment) <= 60: rpc_command += ' Comment="%s"' % comment else: - raise InvalidInputError('comment needs to be shorter than 60 characters', self) + raise InvalidInputError('comment should be no more than 60 characters', self) if confirmed: if 30 <= int(confirmed) <= 300: rpc_command += ' Confirmed="%d"' % int(confirmed) From b63443b4d09890a1de2b64b805ec4104a3ae1c36 Mon Sep 17 00:00:00 2001 From: Patrick Ogenstad Date: Sun, 15 Apr 2018 06:31:57 +0200 Subject: [PATCH 38/39] Fix installation issue with pip 10, test on py3.6 --- .travis.yml | 1 + setup.py | 9 ++------- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index 4b384ba..8bf173b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,6 +3,7 @@ python: - 2.7 - 3.4 - 3.5 +- 3.6 install: - pip install -r requirements-dev.txt - pip install -r requirements.txt diff --git a/setup.py b/setup.py index b1f7568..290911b 100644 --- a/setup.py +++ b/setup.py @@ -18,15 +18,10 @@ # the License. from setuptools import setup, find_packages -from pip.req import parse_requirements -import uuid -# parse_requirements() returns generator of pip.req.InstallRequirement objects -install_reqs = parse_requirements('requirements.txt', session=uuid.uuid1()) -# reqs is a list of requirement -# e.g. ['django==1.5.1', 'mezzanine==1.4.6'] -reqs = [str(ir.req) for ir in install_reqs] +with open("requirements.txt", "r") as fs: + reqs = [r for r in fs.read().splitlines() if (len(r) > 0 and not r.startswith("#"))] version = '0.52' From 266179183f085c9720e07a0146984a53a376d9a8 Mon Sep 17 00:00:00 2001 From: Tom Strickx Date: Mon, 16 Apr 2018 12:33:31 +0100 Subject: [PATCH 39/39] Truncate comment length to maximum of 60 Instead of raising an exception, just truncate the comment length to the maximum of 60 --- pyIOSXR/iosxr.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/pyIOSXR/iosxr.py b/pyIOSXR/iosxr.py index 59c2b85..5cb3467 100644 --- a/pyIOSXR/iosxr.py +++ b/pyIOSXR/iosxr.py @@ -586,10 +586,7 @@ def commit_config(self, label=None, comment=None, confirmed=None): if label: rpc_command += ' Label="%s"' % label if comment: - if len(comment) <= 60: - rpc_command += ' Comment="%s"' % comment - else: - raise InvalidInputError('comment should be no more than 60 characters', self) + rpc_command += ' Comment="%s"' % comment[:60] if confirmed: if 30 <= int(confirmed) <= 300: rpc_command += ' Confirmed="%d"' % int(confirmed)