From e1afeb517d9666075b04b1d3952bfaf129e276da Mon Sep 17 00:00:00 2001 From: chidanandpujar Date: Fri, 24 Jan 2025 11:47:57 +0530 Subject: [PATCH 01/11] Fix for issue #1355 --- lib/jnpr/junos/facts/vmhost.py | 52 ++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/lib/jnpr/junos/facts/vmhost.py b/lib/jnpr/junos/facts/vmhost.py index 89e59b339..5d90e5034 100644 --- a/lib/jnpr/junos/facts/vmhost.py +++ b/lib/jnpr/junos/facts/vmhost.py @@ -2,6 +2,32 @@ import re from lxml import etree +def _get_vmhost_version_information(device): + multi_re = False + try: + rsp = device.rpc.get_route_engine_information(normalize=True) + re_list = rsp.findall(".//route-engine") + if len(re_list) > 1: + multi_re = True + else: + multi_re = False + except RpcError as err: + pass + + if multi_re == True: + try: + return device.rpc.cli( + "show vmhost version invoke-on all-routing-engines", format="xml", normalize=True + ) + except RpcError as err: + raise RpcError() + else: + try: + return device.rpc.cli( + "show vmhost version", format="xml", normalize=True + ) + except RpcError as err: + raise RpcError() def provides_facts(): """ @@ -19,6 +45,8 @@ def get_facts(device): """ SYSCTL_VMHOST_MODE = "sysctl -n hw.re.vmhost_mode" vmhost = None + vmhost_info = {} + vm_ver_rsp = None if device.facts["_is_linux"]: vmhost = False @@ -35,6 +63,30 @@ def get_facts(device): except RpcError: pass + if vmhost == True: + rsp = _get_vmhost_version_information(device) + if rsp.tag == "output": + pass + else: + if rsp.tag == "vmhost-version-information": + vm_ver_rsp = [rsp] + else: + vm_ver_rsp = rsp.findall(".//vmhost-version-information") + vmhost_info = {} + + for re_vm_ver_info in vm_ver_rsp: + re_name = re_vm_ver_info.findtext("../re-name", "re0") + vmhost_current_root_set = re_vm_ver_info.findtext("./current-root-set") + vmhost_set_junos_version_set_p = re_vm_ver_info.findtext("./set-disk-info[set-disk-name = 'set p']/set-junos-version") + vmhost_set_junos_version_set_b = re_vm_ver_info.findtext("./set-disk-info[set-disk-name = 'set b']/set-junos-version") + + vmhost_info[re_name] = { + "vmhost_current_root_set": vmhost_current_root_set, + "vmhost_version_set_p" : vmhost_set_junos_version_set_p, + "vmhost_version_set_b": vmhost_set_junos_version_set_b, + } + return { "vmhost": vmhost, + "vmhost_info": vmhost_info, } From 8f54fa266baab96225b6697bd5e81dafd64253b2 Mon Sep 17 00:00:00 2001 From: chidanandpujar Date: Mon, 3 Feb 2025 17:39:07 +0530 Subject: [PATCH 02/11] Fix for issue #1355 --- lib/jnpr/junos/facts/vmhost.py | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/lib/jnpr/junos/facts/vmhost.py b/lib/jnpr/junos/facts/vmhost.py index 5d90e5034..6e3b906ed 100644 --- a/lib/jnpr/junos/facts/vmhost.py +++ b/lib/jnpr/junos/facts/vmhost.py @@ -2,6 +2,7 @@ import re from lxml import etree + def _get_vmhost_version_information(device): multi_re = False try: @@ -17,18 +18,19 @@ def _get_vmhost_version_information(device): if multi_re == True: try: return device.rpc.cli( - "show vmhost version invoke-on all-routing-engines", format="xml", normalize=True + "show vmhost version invoke-on all-routing-engines", + format="xml", + normalize=True ) except RpcError as err: raise RpcError() else: try: - return device.rpc.cli( - "show vmhost version", format="xml", normalize=True - ) + return device.rpc.cli("show vmhost version", format="xml", normalize=True) except RpcError as err: raise RpcError() + def provides_facts(): """ Returns a dictionary keyed on the facts provided by this module. The value @@ -36,6 +38,7 @@ def provides_facts(): """ return { "vmhost": "A boolean indicating if the device is vmhost.", + "vmhost_info": "A dictionay indicating vmhost RE partion JUNOS versions.", } @@ -77,14 +80,18 @@ def get_facts(device): for re_vm_ver_info in vm_ver_rsp: re_name = re_vm_ver_info.findtext("../re-name", "re0") vmhost_current_root_set = re_vm_ver_info.findtext("./current-root-set") - vmhost_set_junos_version_set_p = re_vm_ver_info.findtext("./set-disk-info[set-disk-name = 'set p']/set-junos-version") - vmhost_set_junos_version_set_b = re_vm_ver_info.findtext("./set-disk-info[set-disk-name = 'set b']/set-junos-version") + vmhost_set_junos_version_set_p = re_vm_ver_info.findtext( + "./set-disk-info[set-disk-name = 'set p']/set-junos-version" + ) + vmhost_set_junos_version_set_b = re_vm_ver_info.findtext( + "./set-disk-info[set-disk-name = 'set b']/set-junos-version" + ) vmhost_info[re_name] = { "vmhost_current_root_set": vmhost_current_root_set, - "vmhost_version_set_p" : vmhost_set_junos_version_set_p, + "vmhost_version_set_p": vmhost_set_junos_version_set_p, "vmhost_version_set_b": vmhost_set_junos_version_set_b, - } + } return { "vmhost": vmhost, From cb3b57a5014018f6e2ebd39161b2ea687a0c4075 Mon Sep 17 00:00:00 2001 From: chidanandpujar Date: Mon, 3 Feb 2025 17:41:05 +0530 Subject: [PATCH 03/11] Fix for issue #1355 --- lib/jnpr/junos/facts/vmhost.py | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/jnpr/junos/facts/vmhost.py b/lib/jnpr/junos/facts/vmhost.py index 6e3b906ed..0943fba6e 100644 --- a/lib/jnpr/junos/facts/vmhost.py +++ b/lib/jnpr/junos/facts/vmhost.py @@ -87,6 +87,7 @@ def get_facts(device): "./set-disk-info[set-disk-name = 'set b']/set-junos-version" ) + vmhost_info[re_name] = { "vmhost_current_root_set": vmhost_current_root_set, "vmhost_version_set_p": vmhost_set_junos_version_set_p, From fff3ff2267264185db28d513196f941690c95d35 Mon Sep 17 00:00:00 2001 From: chidanandpujar Date: Mon, 3 Feb 2025 17:43:19 +0530 Subject: [PATCH 04/11] Fix for issue #1355 --- lib/jnpr/junos/facts/vmhost.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/jnpr/junos/facts/vmhost.py b/lib/jnpr/junos/facts/vmhost.py index 0943fba6e..e2041272d 100644 --- a/lib/jnpr/junos/facts/vmhost.py +++ b/lib/jnpr/junos/facts/vmhost.py @@ -20,7 +20,7 @@ def _get_vmhost_version_information(device): return device.rpc.cli( "show vmhost version invoke-on all-routing-engines", format="xml", - normalize=True + normalize=True, ) except RpcError as err: raise RpcError() @@ -87,7 +87,6 @@ def get_facts(device): "./set-disk-info[set-disk-name = 'set b']/set-junos-version" ) - vmhost_info[re_name] = { "vmhost_current_root_set": vmhost_current_root_set, "vmhost_version_set_p": vmhost_set_junos_version_set_p, From e6af97ee0e2aec25367e347d4701ff9e7902a01d Mon Sep 17 00:00:00 2001 From: chidanandpujar Date: Mon, 3 Feb 2025 17:44:48 +0530 Subject: [PATCH 05/11] Fix for issue #1355 --- lib/jnpr/junos/ofacts/session.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/jnpr/junos/ofacts/session.py b/lib/jnpr/junos/ofacts/session.py index f857021af..d0f499705 100644 --- a/lib/jnpr/junos/ofacts/session.py +++ b/lib/jnpr/junos/ofacts/session.py @@ -1,5 +1,5 @@ """ - facts['HOME'] = login home directory +facts['HOME'] = login home directory """ from lxml.builder import E From 1af2d1d68f59eae04a2848d6769cebe45d9ffbf9 Mon Sep 17 00:00:00 2001 From: chidanandpujar Date: Mon, 3 Feb 2025 17:48:39 +0530 Subject: [PATCH 06/11] Fix for issue #1355 --- lib/jnpr/junos/facts/vmhost.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/jnpr/junos/facts/vmhost.py b/lib/jnpr/junos/facts/vmhost.py index e2041272d..aefa782c6 100644 --- a/lib/jnpr/junos/facts/vmhost.py +++ b/lib/jnpr/junos/facts/vmhost.py @@ -38,7 +38,7 @@ def provides_facts(): """ return { "vmhost": "A boolean indicating if the device is vmhost.", - "vmhost_info": "A dictionay indicating vmhost RE partion JUNOS versions.", + "vmhost_info": "A dictionary indicating vmhost RE partition JUNOS versions.", } From 581d7da238c938958a861bb02edf1bca1b5d0223 Mon Sep 17 00:00:00 2001 From: chidanandpujar Date: Tue, 4 Feb 2025 12:49:35 +0530 Subject: [PATCH 07/11] Fix for issue #1355 --- lib/jnpr/junos/facts/vmhost.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/jnpr/junos/facts/vmhost.py b/lib/jnpr/junos/facts/vmhost.py index aefa782c6..dc7cbf9b7 100644 --- a/lib/jnpr/junos/facts/vmhost.py +++ b/lib/jnpr/junos/facts/vmhost.py @@ -66,7 +66,7 @@ def get_facts(device): except RpcError: pass - if vmhost == True: + if vmhost: rsp = _get_vmhost_version_information(device) if rsp.tag == "output": pass From 6896e4077148f07ddfcba8ae2473260900494968 Mon Sep 17 00:00:00 2001 From: chidanandpujar Date: Thu, 6 Feb 2025 15:25:51 +0530 Subject: [PATCH 08/11] Fix for issue #1355 --- .../facts/rpc-reply/vmhost_true_command.xml | 35 ++++++++++++++++ ...host_true_get-route-engine-information.xml | 42 +++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 tests/unit/facts/rpc-reply/vmhost_true_command.xml create mode 100644 tests/unit/facts/rpc-reply/vmhost_true_get-route-engine-information.xml diff --git a/tests/unit/facts/rpc-reply/vmhost_true_command.xml b/tests/unit/facts/rpc-reply/vmhost_true_command.xml new file mode 100644 index 000000000..84587d609 --- /dev/null +++ b/tests/unit/facts/rpc-reply/vmhost_true_command.xml @@ -0,0 +1,35 @@ + + + + sda + jrootb_P + sda4 + + Primary + b + CBEP_P_VAL1_00.18.02 + Tue Jan 21 21:05:21 PST 2025 + + + set p + 7.2725 + vmhost-x86_64-22.4R3-S2-20240326_1606_builder + vmhost-core-x86-64-22.4R3-S3.3 + 5.2.60-rt15-LTS19 + junos-install-mx-x86-64-22.4R3-S3.3 + + + + set b + 10.3103 + vmhost-x86_64-24.2R2-20241112_0808_builder + vmhost-core-x86-64-24.2R2.1 + 5.15.136-rt61-LTS22 + junos-install-mx-x86-64-24.2R2.1 + + + + + + + \ No newline at end of file diff --git a/tests/unit/facts/rpc-reply/vmhost_true_get-route-engine-information.xml b/tests/unit/facts/rpc-reply/vmhost_true_get-route-engine-information.xml new file mode 100644 index 000000000..b4e892796 --- /dev/null +++ b/tests/unit/facts/rpc-reply/vmhost_true_get-route-engine-information.xml @@ -0,0 +1,42 @@ + + + + OK + 43 degrees C / 109 degrees F + 43 degrees C / 109 degrees F + 16337 MB + (16384 MB installed) + 5 + 0 + 0 + 0 + 0 + 99 + 1 + 0 + 0 + 0 + 99 + 0 + 0 + 0 + 0 + 99 + 0 + 0 + 0 + 0 + 99 + RE-S-1600x8 + 2025-02-05 08:30:29 IST + 1 day, 4 hours, 17 minutes, 12 seconds + 0x4000:VJUNOS reboot + 0.39 + 0.29 + 0.25 + + + + + + \ No newline at end of file From 896840309e30a67243b4690c9416c351caf92cc8 Mon Sep 17 00:00:00 2001 From: chidanandpujar Date: Wed, 12 Feb 2025 09:41:56 +0530 Subject: [PATCH 09/11] Fix for issue #1355 --- lib/jnpr/junos/facts/vmhost.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/jnpr/junos/facts/vmhost.py b/lib/jnpr/junos/facts/vmhost.py index dc7cbf9b7..3e47b6792 100644 --- a/lib/jnpr/junos/facts/vmhost.py +++ b/lib/jnpr/junos/facts/vmhost.py @@ -50,6 +50,10 @@ def get_facts(device): vmhost = None vmhost_info = {} vm_ver_rsp = None + vmhost_current_root_set = None + vmhost_set_junos_version_set_p = None + vmhost_set_junos_version_set_b = None + re_name = None if device.facts["_is_linux"]: vmhost = False @@ -68,14 +72,11 @@ def get_facts(device): if vmhost: rsp = _get_vmhost_version_information(device) - if rsp.tag == "output": - pass - else: + if device.facts["version"] >= "22.2R3": # PR 1510446 for show vmhost version rpc supports form 22.2R3 if rsp.tag == "vmhost-version-information": vm_ver_rsp = [rsp] else: vm_ver_rsp = rsp.findall(".//vmhost-version-information") - vmhost_info = {} for re_vm_ver_info in vm_ver_rsp: re_name = re_vm_ver_info.findtext("../re-name", "re0") @@ -92,6 +93,8 @@ def get_facts(device): "vmhost_version_set_p": vmhost_set_junos_version_set_p, "vmhost_version_set_b": vmhost_set_junos_version_set_b, } + else: + pass return { "vmhost": vmhost, From 0f86e3203217f385f2c17fe378eaef68d1f988f5 Mon Sep 17 00:00:00 2001 From: chidanandpujar Date: Wed, 12 Feb 2025 09:44:20 +0530 Subject: [PATCH 10/11] Fix for issue #1355 --- lib/jnpr/junos/facts/vmhost.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/jnpr/junos/facts/vmhost.py b/lib/jnpr/junos/facts/vmhost.py index 3e47b6792..be192a88e 100644 --- a/lib/jnpr/junos/facts/vmhost.py +++ b/lib/jnpr/junos/facts/vmhost.py @@ -72,7 +72,8 @@ def get_facts(device): if vmhost: rsp = _get_vmhost_version_information(device) - if device.facts["version"] >= "22.2R3": # PR 1510446 for show vmhost version rpc supports form 22.2R3 + # PR 1510446 fix for show vmhost version rpc supports form 22.2R3 + if device.facts["version"] >= "22.2R3": if rsp.tag == "vmhost-version-information": vm_ver_rsp = [rsp] else: From 3010357452278e6c5cdaacdc14952839817a32db Mon Sep 17 00:00:00 2001 From: chidanandpujar Date: Wed, 12 Feb 2025 10:48:59 +0530 Subject: [PATCH 11/11] Fix for issue #1355 --- lib/jnpr/junos/facts/vmhost.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/jnpr/junos/facts/vmhost.py b/lib/jnpr/junos/facts/vmhost.py index be192a88e..2a5988332 100644 --- a/lib/jnpr/junos/facts/vmhost.py +++ b/lib/jnpr/junos/facts/vmhost.py @@ -13,7 +13,7 @@ def _get_vmhost_version_information(device): else: multi_re = False except RpcError as err: - pass + raise RpcError() if multi_re == True: try: