From 07732e10e1b110292700387a2942760f5c9535e4 Mon Sep 17 00:00:00 2001 From: lakshmj Date: Thu, 12 Feb 2026 20:35:44 +0000 Subject: [PATCH 1/6] Code changes to support GET on routerdynamicrouting endpoint to read data from vtysh. Signed-off-by: lakshmj --- examples/routerdynamicrouting_info.yaml | 51 ++ plugins/module_utils/client.py | 5 +- plugins/module_utils/module_executor.py | 5 +- plugins/module_utils/nitro_resource_map.py | 441 ++---------------- plugins/modules/routerdynamicrouting_info.py | 252 ++++++++++ .../routerdynamicrouting_info/tasks/main.yml | 123 +++++ tools/migrationtool/utils.py | 4 +- 7 files changed, 467 insertions(+), 414 deletions(-) create mode 100644 examples/routerdynamicrouting_info.yaml create mode 100644 plugins/modules/routerdynamicrouting_info.py create mode 100644 tests/integration/targets/routerdynamicrouting_info/tasks/main.yml diff --git a/examples/routerdynamicrouting_info.yaml b/examples/routerdynamicrouting_info.yaml new file mode 100644 index 00000000..93f594df --- /dev/null +++ b/examples/routerdynamicrouting_info.yaml @@ -0,0 +1,51 @@ +--- +- name: Sample routerdynamicrouting_info playbook + hosts: demo_netscalers + gather_facts: false + collections: + - netscaler.adc + tasks: + - name: Get BGP routing summary + delegate_to: localhost + netscaler.adc.routerdynamicrouting_info: + nsip: "{{ nsip }}" + nitro_user: "{{ nitro_user }}" + nitro_pass: "{{ nitro_pass }}" + nitro_protocol: "{{ nitro_protocol }}" + validate_certs: false + commandstring: "show ip bgp summary" + register: bgp_summary + + - name: Display BGP summary + debug: + var: bgp_summary.info + + - name: Get IP routing table + delegate_to: localhost + netscaler.adc.routerdynamicrouting_info: + nsip: "{{ nsip }}" + nitro_user: "{{ nitro_user }}" + nitro_pass: "{{ nitro_pass }}" + nitro_protocol: "{{ nitro_protocol }}" + validate_certs: false + commandstring: "sh ip route" + register: ip_route + + - name: Display routing table + debug: + var: ip_route.info + + - name: Get OSPF neighbor information + delegate_to: localhost + netscaler.adc.routerdynamicrouting_info: + nsip: "{{ nsip }}" + nitro_user: "{{ nitro_user }}" + nitro_pass: "{{ nitro_pass }}" + nitro_protocol: "{{ nitro_protocol }}" + validate_certs: false + commandstring: "show ip ospf neighbor" + register: ospf_neighbors + + - name: Display OSPF neighbors + debug: + var: ospf_neighbors.info diff --git a/plugins/module_utils/client.py b/plugins/module_utils/client.py index 2fcfda61..623bd786 100644 --- a/plugins/module_utils/client.py +++ b/plugins/module_utils/client.py @@ -137,7 +137,10 @@ def format_value(val): return str(val) args_val = ",".join( - ["%s:%s" % (k, quote(codecs.encode(format_value(args[k])), safe="")) for k in args] + [ + "%s:%s" % (k, quote(codecs.encode(format_value(args[k])), safe="")) + for k in args + ] ) args_val = ("args=%s" % args_val) if args_val != "" else "" diff --git a/plugins/module_utils/module_executor.py b/plugins/module_utils/module_executor.py index 61b230c3..604b113e 100644 --- a/plugins/module_utils/module_executor.py +++ b/plugins/module_utils/module_executor.py @@ -325,7 +325,10 @@ def filter_values(value): log("DEBUG: self.module.params: %s" % self.module.params) for k, v in self.module.params.items(): - if not k.endswith("_binding") and k in NITRO_RESOURCE_MAP[self.resource_name]["readwrite_arguments"]: + if ( + not k.endswith("_binding") + and k in NITRO_RESOURCE_MAP[self.resource_name]["readwrite_arguments"] + ): cleaned_value = filter_values(v) if cleaned_value is not None: self.resource_module_params[k] = cleaned_value diff --git a/plugins/module_utils/nitro_resource_map.py b/plugins/module_utils/nitro_resource_map.py index 850dd154..d7e32563 100644 --- a/plugins/module_utils/nitro_resource_map.py +++ b/plugins/module_utils/nitro_resource_map.py @@ -150,7 +150,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -167,7 +166,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -184,7 +182,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -201,7 +198,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -218,7 +214,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -235,7 +230,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -252,7 +246,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -269,7 +262,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -286,7 +278,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -303,7 +294,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -320,7 +310,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -337,7 +326,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -1731,7 +1719,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -1748,7 +1735,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -1765,7 +1751,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -1782,7 +1767,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -1799,7 +1783,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -1816,7 +1799,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -1833,7 +1815,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -1850,7 +1831,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -1867,7 +1847,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -1884,7 +1863,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -1901,7 +1879,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -2892,7 +2869,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -3119,7 +3095,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -3744,7 +3719,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -3803,7 +3777,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -4752,7 +4725,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -4812,7 +4784,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -5241,7 +5212,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -5258,7 +5228,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -5275,7 +5244,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -5292,7 +5260,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -5309,7 +5276,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -5326,7 +5292,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -5343,7 +5308,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -5360,7 +5324,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -5377,7 +5340,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -5394,7 +5356,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -5411,7 +5372,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -5428,7 +5388,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -5445,7 +5404,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -5462,7 +5420,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -5479,7 +5436,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -5496,7 +5452,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -5513,7 +5468,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -5530,7 +5484,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -5547,7 +5500,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -5564,7 +5516,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -5581,7 +5532,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -5598,7 +5548,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -5615,7 +5564,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -5632,7 +5580,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -5649,7 +5596,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -5666,7 +5612,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -5683,7 +5628,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -5700,7 +5644,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -5717,7 +5660,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -5734,7 +5676,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -5751,7 +5692,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -5768,7 +5708,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -5785,7 +5724,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -5802,7 +5740,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -12800,7 +12737,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -12869,7 +12805,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -14580,7 +14515,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -14597,7 +14531,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -14614,7 +14547,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -14631,7 +14563,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -14648,7 +14579,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -14665,7 +14595,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -14682,7 +14611,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -14699,7 +14627,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -14716,7 +14643,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -14733,7 +14659,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -14750,7 +14675,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -14767,7 +14691,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -14784,7 +14707,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -14801,7 +14723,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -14818,7 +14739,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -14835,7 +14755,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -14852,7 +14771,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -14869,7 +14787,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -14886,7 +14803,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -14903,7 +14819,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -14920,7 +14835,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -16502,7 +16416,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -16559,7 +16472,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -17114,7 +17026,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -17182,7 +17093,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -17392,7 +17302,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -17409,7 +17318,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -17426,7 +17334,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -17443,7 +17350,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -17460,7 +17366,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -17477,7 +17382,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -17494,7 +17398,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -17511,7 +17414,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -17528,7 +17430,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -18691,7 +18592,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -18708,7 +18608,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -18725,7 +18624,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -19437,7 +19335,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -19510,7 +19407,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -19791,7 +19687,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -20513,7 +20408,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -20530,7 +20424,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -20547,7 +20440,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -20564,7 +20456,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -20581,7 +20472,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -20598,7 +20488,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -20615,7 +20504,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -20632,7 +20520,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -20649,7 +20536,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -20666,7 +20552,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -20683,7 +20568,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -20700,7 +20584,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -20962,7 +20845,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -20979,7 +20861,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -20996,7 +20877,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -21013,7 +20893,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -21030,7 +20909,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -21047,7 +20925,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -21064,7 +20941,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -21081,7 +20957,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -21098,7 +20973,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -21115,7 +20989,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -21132,7 +21005,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -21149,7 +21021,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -21263,7 +21134,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -21280,7 +21150,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -21297,7 +21166,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -21314,7 +21182,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -21331,7 +21198,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -21348,7 +21214,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -21365,7 +21230,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -21382,7 +21246,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -21399,7 +21262,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -21416,7 +21278,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -21433,7 +21294,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -22104,7 +21964,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -22162,7 +22021,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -22528,7 +22386,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -22595,7 +22452,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -22949,7 +22805,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -22966,7 +22821,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -22983,7 +22837,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -23000,7 +22853,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -23017,7 +22869,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -23034,7 +22885,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -23051,7 +22901,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -23068,7 +22917,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -23085,7 +22933,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -23102,7 +22949,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -23119,7 +22965,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -23136,7 +22981,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -23153,7 +22997,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -23170,7 +23013,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -23187,7 +23029,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -24359,7 +24200,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -24417,7 +24257,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -24757,7 +24596,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -24774,7 +24612,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -24791,7 +24628,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -24808,7 +24644,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -24825,7 +24660,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -24842,7 +24676,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -24859,7 +24692,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -24876,7 +24708,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -24893,7 +24724,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -24910,7 +24740,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -24927,7 +24756,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -24944,7 +24772,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -24961,7 +24788,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -24978,7 +24804,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -24995,7 +24820,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -25012,7 +24836,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -25029,7 +24852,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -25046,7 +24868,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -25063,7 +24884,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -25080,7 +24900,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -25097,7 +24916,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -25114,7 +24932,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -27789,7 +27606,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -27889,7 +27705,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -28931,7 +28746,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -28948,7 +28762,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -29428,7 +29241,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -29445,7 +29257,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -29462,7 +29273,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -29479,7 +29289,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -29771,7 +29580,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -29788,7 +29596,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -30296,7 +30103,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -30313,7 +30119,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -30330,7 +30135,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -30347,7 +30151,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -30364,7 +30167,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -30864,7 +30666,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -30881,7 +30682,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -32309,7 +32109,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -32326,7 +32125,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -32662,7 +32460,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -33275,7 +33072,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -33393,7 +33189,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -33727,7 +33522,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -33744,7 +33538,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -34384,7 +34177,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -34452,7 +34244,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -35166,7 +34957,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -35183,7 +34973,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -35200,7 +34989,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -35217,7 +35005,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -35234,7 +35021,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -35251,7 +35037,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -35268,7 +35053,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -35285,7 +35069,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -35302,7 +35085,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -35319,7 +35101,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -35336,7 +35117,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -35353,7 +35133,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -35370,7 +35149,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -35387,7 +35165,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -35404,7 +35181,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -35421,7 +35197,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -35438,7 +35213,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -35455,7 +35229,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -35472,7 +35245,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -35489,7 +35261,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -35506,7 +35277,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -35523,7 +35293,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -35540,7 +35309,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -37344,7 +37112,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -37423,7 +37190,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -37440,7 +37206,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -37984,7 +37749,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -38001,7 +37765,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -38141,7 +37904,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -38158,7 +37920,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -38175,7 +37936,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -38192,7 +37952,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -38430,7 +38189,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -38447,7 +38205,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -38464,7 +38221,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -38481,7 +38237,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -38498,7 +38253,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -38515,7 +38269,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -38532,7 +38285,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -38549,7 +38301,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -38566,7 +38317,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -39169,7 +38919,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -39736,7 +39485,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -39849,7 +39597,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -39973,7 +39720,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -39990,7 +39736,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -40007,7 +39752,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -40024,7 +39768,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -40041,7 +39784,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -40058,7 +39800,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -40075,7 +39816,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -40092,7 +39832,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -40109,7 +39848,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -40678,7 +40416,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -40760,7 +40497,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -40884,7 +40620,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -40901,7 +40636,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -40918,7 +40652,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -40935,7 +40668,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -41133,7 +40865,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -41150,7 +40881,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -44969,7 +44699,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -44986,7 +44715,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -45003,7 +44731,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -45923,7 +45650,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -47064,7 +46790,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -47283,7 +47008,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -47300,7 +47024,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -47317,7 +47040,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -48380,7 +48102,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -48691,7 +48412,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -48904,7 +48624,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -49984,7 +49703,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -50071,7 +49789,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -50428,7 +50145,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -50494,7 +50210,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -50674,7 +50389,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -50691,7 +50405,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -50708,7 +50421,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -50725,7 +50437,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -50814,7 +50525,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -51362,6 +51072,37 @@ "singleton": False, "update_payload_keys": ["commandstring"], }, + "routerdynamicrouting_info": { + "_supported_operations": ["get"], + "action_payload_keys": { + "apply": [], + "change": [], + "create": [], + "force": [], + "import": [], + "link": [], + "switch": [], + "unlink": [], + "unset": [], + }, + "add_payload_keys": [], + "bindings": [], + "bindprimary_key": "", + "delete_arg_keys": [], + "disable_payload_keys": [], + "enable_payload_keys": [], + "get_arg_keys": ["commandstring"], + "immutable_keys": [], + "password_keys": [], + "primary_key": "", + "primary_key_composite": [], + "readwrite_arguments": { + "commandstring": {"no_log": False, "required": True, "type": "str"}, + "nodeid": {"no_log": False, "type": "int"}, + }, + "singleton": False, + "update_payload_keys": [], + }, "rsskeytype": { "_supported_operations": ["get", "update"], "action_payload_keys": { @@ -51705,7 +51446,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -51722,7 +51462,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -51739,7 +51478,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -52116,7 +51854,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -52133,7 +51870,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -53071,7 +52807,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -53580,7 +53315,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -53698,7 +53432,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -53918,7 +53651,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -54118,7 +53850,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -55468,7 +55199,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -55516,7 +55246,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -55973,7 +55702,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -55990,7 +55718,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -56007,7 +55734,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -56024,7 +55750,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -56041,7 +55766,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -56568,7 +56292,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -56585,7 +56308,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -56602,7 +56324,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -56619,7 +56340,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -56636,7 +56356,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -56653,7 +56372,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -56670,7 +56388,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -56687,7 +56404,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -56704,7 +56420,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -56721,7 +56436,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -56738,7 +56452,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -57165,7 +56878,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -57182,7 +56894,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -57199,7 +56910,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -57216,7 +56926,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -57233,7 +56942,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -57688,7 +57396,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -57705,7 +57412,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -57722,7 +57428,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -57739,7 +57444,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -57756,7 +57460,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -57773,7 +57476,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -57790,7 +57492,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -57807,7 +57508,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -57824,7 +57524,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -57841,7 +57540,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -57858,7 +57556,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -57875,7 +57572,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -57892,7 +57588,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -57909,7 +57604,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -57926,7 +57620,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -58442,7 +58135,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -60077,7 +59769,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -60094,7 +59785,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -60111,7 +59801,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -60686,7 +60375,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -60703,7 +60391,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -62159,7 +61846,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -62220,7 +61906,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -62751,7 +62436,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -62822,7 +62506,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -63142,7 +62825,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -63213,7 +62895,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -63391,7 +63072,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -63408,7 +63088,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -63425,7 +63104,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -63442,7 +63120,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -63459,7 +63136,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -67659,7 +67335,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -67676,7 +67351,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -67693,7 +67367,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -67710,7 +67383,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -67727,7 +67399,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -67744,7 +67415,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -67761,7 +67431,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -67778,7 +67447,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -67795,7 +67463,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -67812,7 +67479,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -67829,7 +67495,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -67846,7 +67511,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -67863,7 +67527,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -67880,7 +67543,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -67897,7 +67559,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -67914,7 +67575,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -67931,7 +67591,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -67948,7 +67607,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -67965,7 +67623,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -67982,7 +67639,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -67999,7 +67655,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -68016,7 +67671,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -68033,7 +67687,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -68050,7 +67703,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -68067,7 +67719,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -68084,7 +67735,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -68101,7 +67751,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -68118,7 +67767,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -68135,7 +67783,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -68152,7 +67799,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -68169,7 +67815,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -68186,7 +67831,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -68203,7 +67847,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -68220,7 +67863,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -68237,7 +67879,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -68254,7 +67895,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -68271,7 +67911,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -68288,7 +67927,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -68305,7 +67943,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -68322,7 +67959,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -68339,7 +67975,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -70621,7 +70256,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -70638,7 +70272,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -70655,7 +70288,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -70672,7 +70304,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -70689,7 +70320,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -70706,7 +70336,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -70812,7 +70441,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -70829,7 +70457,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -70846,7 +70473,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -71223,7 +70849,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -71240,7 +70865,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -71257,7 +70881,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -71274,7 +70897,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, @@ -71420,7 +71042,6 @@ "options": { "binding_members": { "default": [], - "elements": "dict", "type": "list", }, diff --git a/plugins/modules/routerdynamicrouting_info.py b/plugins/modules/routerdynamicrouting_info.py new file mode 100644 index 00000000..f8bea1e0 --- /dev/null +++ b/plugins/modules/routerdynamicrouting_info.py @@ -0,0 +1,252 @@ +#!/usr/bin/python + +# -*- coding: utf-8 -*- + +# Copyright (c) 2025 Cloud Software Group, Inc. +# MIT License (see LICENSE or https://opensource.org/licenses/MIT) + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + + +ANSIBLE_METADATA = { + "metadata_version": "1.1", + "status": ["preview"], + "supported_by": "community", +} + +DOCUMENTATION = r""" +--- +module: routerdynamicrouting_info +short_description: Retrieve information from dynamic routing configuration. +description: + - Retrieve information from dynamic routing configuration. + - This module is a read-only data source that executes show commands. + - The commandstring parameter must start with 'sh' or 'show' for security. +version_added: 2.13.0 +author: + - Sumanth Lingappa (@sumanth-lingappa) + - Shiva Shankar Vaddepally (@shivashankar-vaddepally) + - Lakshman M J (@lakshmj) +options: + commandstring: + type: str + required: true + description: + - Show command to be executed to retrieve routing information. + - Must start with 'sh' or 'show' (case insensitive). + - 'Example: "show ip bgp summary" or "sh ip route"' + nodeid: + type: int + description: + - Unique number that identifies the cluster node. +extends_documentation_fragment: netscaler.adc.netscaler_adc + +""" + +EXAMPLES = r""" +--- +- name: Get BGP routing information + delegate_to: localhost + netscaler.adc.routerdynamicrouting_info: + nsip: 10.0.0.1 + nitro_user: nsroot + nitro_pass: nsroot + nitro_protocol: https + validate_certs: false + commandstring: "show ip bgp summary" + register: bgp_info + +- name: Display BGP info + debug: + var: bgp_info + +- name: Get IP route information + delegate_to: localhost + netscaler.adc.routerdynamicrouting_info: + nsip: 10.0.0.1 + nitro_user: nsroot + nitro_pass: nsroot + nitro_protocol: https + validate_certs: false + commandstring: "sh ip route" + register: route_info + +- name: Display route info + debug: + var: route_info +""" + +RETURN = r""" +--- +changed: + description: Always false for info modules as they do not modify state + returned: always + type: bool + sample: false +info: + description: Information retrieved from the dynamic routing configuration + returned: success + type: dict + sample: { + "commandstring": "show ip bgp summary", + "response": "router response data here" + } +failed: + description: Indicates if the module failed or not + returned: always + type: bool + sample: false +loglines: + description: list of logged messages by the module + returned: always + type: list + sample: ['message 1', 'message 2'] +""" + + +import os + +from ansible.module_utils.basic import AnsibleModule + +from ..module_utils.client import NitroAPIClient +from ..module_utils.common import get_resource +from ..module_utils.constants import NETSCALER_COMMON_ARGUMENTS +from ..module_utils.logger import log, loglines +from ..module_utils.nitro_resource_map import NITRO_RESOURCE_MAP + +RESOURCE_NAME = os.path.basename(__file__).replace(".py", "") + + +def validate_commandstring(commandstring): + """ + Validate that commandstring starts with 'sh' or 'show' (case insensitive). + Returns tuple (is_valid, error_message) + """ + if not commandstring: + return False, "commandstring cannot be empty" + + # Strip leading/trailing whitespace + cmd = commandstring.strip() + + # Check if it starts with 'sh' or 'show' (case insensitive) + if not (cmd.lower().startswith("sh ") or cmd.lower().startswith("show ")): + return ( + False, + "commandstring must start with 'sh' or 'show' (case insensitive). Got: '{}'".format( + commandstring + ), + ) + + return True, None + + +def main(): + module_specific_arguments = NITRO_RESOURCE_MAP[RESOURCE_NAME]["readwrite_arguments"] + argument_spec = dict() + argument_spec.update(NETSCALER_COMMON_ARGUMENTS) + argument_spec.update(module_specific_arguments) + + module = AnsibleModule( + argument_spec=argument_spec, + supports_check_mode=True, + mutually_exclusive=[ + ("nitro_pass", "nitro_auth_token"), + ( + "managed_netscaler_instance_name", + "managed_netscaler_instance_ip", + "managed_netscaler_instance_id", + ), + ], + required_together=[ + ( + "managed_netscaler_instance_username", + "managed_netscaler_instance_password", + ), + ], + required_if=[ + ( + "netscaler_console_as_proxy_server", + True, + ( + "managed_netscaler_instance_name", + "managed_netscaler_instance_ip", + "managed_netscaler_instance_id", + "managed_netscaler_instance_username", + "managed_netscaler_instance_password", + ), + True, + ), + ], + ) + + module_result = dict( + changed=False, # Info modules never change state + failed=False, + loglines=loglines, + ) + + try: + # Validate commandstring + commandstring = module.params.get("commandstring") + is_valid, error_msg = validate_commandstring(commandstring) + + if not is_valid: + module.fail_json(msg=error_msg, **module_result) + + log("DEBUG: commandstring validation passed: %s" % commandstring) + + # Initialize NITRO client + client = NitroAPIClient(module, RESOURCE_NAME) + + # NetScaler Console proxy handling + netscaler_console_as_proxy_server = module.params.get( + "netscaler_console_as_proxy_server", False + ) + if netscaler_console_as_proxy_server: + module.params["api_path"] = "nitro/v2/config" + + # Prepare resource parameters + resource_module_params = {} + if commandstring: + resource_module_params["commandstring"] = commandstring + if module.params.get("nodeid"): + resource_module_params["nodeid"] = module.params["nodeid"] + + log( + "DEBUG: Fetching router dynamic routing info with params: %s" + % resource_module_params + ) + + # Get the resource information + # For routerdynamicrouting, we use "routerdynamicrouting" as the resource_name + # since the info variant uses the same API endpoint + is_exist, response = get_resource( + client, + resource_name="routerdynamicrouting", + resource_id=None, + resource_module_params=resource_module_params, + ) + + if is_exist and response: + module_result["info"] = { + "commandstring": commandstring, + "response": response[0].get("output", "") + } + log("INFO: Successfully retrieved routing information") + else: + # Even if no data, return success with empty response + module_result["info"] = {"commandstring": commandstring, "response": ""} + log("INFO: No routing information found or empty response") + + module.exit_json(**module_result) + + except Exception as e: + msg = "Exception %s: %s" % (type(e).__name__, str(e)) + log("ERROR: %s" % msg) + module.fail_json(msg=msg, **module_result) + + +if __name__ == "__main__": + main() diff --git a/tests/integration/targets/routerdynamicrouting_info/tasks/main.yml b/tests/integration/targets/routerdynamicrouting_info/tasks/main.yml new file mode 100644 index 00000000..5b4e7f0f --- /dev/null +++ b/tests/integration/targets/routerdynamicrouting_info/tasks/main.yml @@ -0,0 +1,123 @@ +--- +- name: Test routerdynamicrouting_info module + hosts: citrix_adc + gather_facts: false + collections: + - netscaler.adc + + tasks: + # Test 1: Valid command with "show" + - name: Test valid show command + delegate_to: localhost + netscaler.adc.routerdynamicrouting_info: + nsip: "{{ nsip }}" + nitro_user: "{{ nitro_user }}" + nitro_pass: "{{ nitro_pass }}" + nitro_protocol: "{{ nitro_protocol }}" + validate_certs: "{{ validate_certs }}" + commandstring: "show ip route" + register: result + + - name: Assert show command succeeded + assert: + that: + - not result.changed + - not result.failed + - result.info is defined + - result.info.commandstring == "show ip route" + + # Test 2: Valid command with "sh" + - name: Test valid sh command + delegate_to: localhost + netscaler.adc.routerdynamicrouting_info: + nsip: "{{ nsip }}" + nitro_user: "{{ nitro_user }}" + nitro_pass: "{{ nitro_pass }}" + nitro_protocol: "{{ nitro_protocol }}" + validate_certs: "{{ validate_certs }}" + commandstring: "sh ip bgp summary" + register: result + + - name: Assert sh command succeeded + assert: + that: + - not result.changed + - not result.failed + - result.info is defined + - result.info.commandstring == "sh ip bgp summary" + + # Test 3: Command with uppercase SHOW + - name: Test uppercase SHOW command + delegate_to: localhost + netscaler.adc.routerdynamicrouting_info: + nsip: "{{ nsip }}" + nitro_user: "{{ nitro_user }}" + nitro_pass: "{{ nitro_pass }}" + nitro_protocol: "{{ nitro_protocol }}" + validate_certs: "{{ validate_certs }}" + commandstring: "SHOW ip ospf neighbor" + register: result + + - name: Assert uppercase SHOW command succeeded + assert: + that: + - not result.changed + - not result.failed + - result.info is defined + + # Test 4: Invalid command (should fail) + - name: Test invalid command (not starting with sh/show) + delegate_to: localhost + netscaler.adc.routerdynamicrouting_info: + nsip: "{{ nsip }}" + nitro_user: "{{ nitro_user }}" + nitro_pass: "{{ nitro_pass }}" + nitro_protocol: "{{ nitro_protocol }}" + validate_certs: "{{ validate_certs }}" + commandstring: "configure terminal" + register: result + ignore_errors: true + + - name: Assert invalid command failed + assert: + that: + - result.failed + - "'must start with' in result.msg" + + # Test 5: Another invalid command + - name: Test another invalid command + delegate_to: localhost + netscaler.adc.routerdynamicrouting_info: + nsip: "{{ nsip }}" + nitro_user: "{{ nitro_user }}" + nitro_pass: "{{ nitro_pass }}" + nitro_protocol: "{{ nitro_protocol }}" + validate_certs: "{{ validate_certs }}" + commandstring: "delete ip route" + register: result + ignore_errors: true + + - name: Assert delete command failed + assert: + that: + - result.failed + - "'must start with' in result.msg" + + # Test 6: Command with leading whitespace + - name: Test command with leading whitespace + delegate_to: localhost + netscaler.adc.routerdynamicrouting_info: + nsip: "{{ nsip }}" + nitro_user: "{{ nitro_user }}" + nitro_pass: "{{ nitro_pass }}" + nitro_protocol: "{{ nitro_protocol }}" + validate_certs: "{{ validate_certs }}" + commandstring: " show ip route" + register: result + + - name: Assert command with whitespace succeeded + assert: + that: + - not result.changed + - not result.failed + - result.info is defined diff --git a/tools/migrationtool/utils.py b/tools/migrationtool/utils.py index 6f9c6322..f3f24633 100644 --- a/tools/migrationtool/utils.py +++ b/tools/migrationtool/utils.py @@ -22,7 +22,7 @@ "citrix_adc_cs_policy": "netscaler.adc.cspolicy", "citrix_adc_cs_vserver": "netscaler.adc.csvserver", "citrix_adc_dnsnsrec": "netscaler.adc.dnsnsrec", - "citrix_adc_get_bearer_token": "netscaler.adc.get_bearer_token", # nosec + "citrix_adc_get_bearer_token": "netscaler.adc.get_bearer_token", # nosec "citrix_adc_gslb_service": "netscaler.adc.gslbservice", "citrix_adc_gslb_site": "netscaler.adc.gslbsite", "citrix_adc_gslb_vserver": "netscaler.adc.gslbvserver", @@ -30,7 +30,7 @@ "citrix_adc_lb_vserver": "netscaler.adc.lbvserver", "citrix_adc_nsip": "netscaler.adc.nsip", "citrix_adc_nspartition": "netscaler.adc.nspartition", - "citrix_adc_password_reset": "netscaler.adc.password_reset", # nosec + "citrix_adc_password_reset": "netscaler.adc.password_reset", # nosec "citrix_adc_save_config": "netscaler.adc.save_config", "citrix_adc_server": "netscaler.adc.server", "citrix_adc_servicegroup": "netscaler.adc.servicegroup", From e5c5ca74f23691c5f6a6878d1b41f05fe1bcd37b Mon Sep 17 00:00:00 2001 From: lakshmj Date: Thu, 12 Feb 2026 22:15:25 +0000 Subject: [PATCH 2/6] Addressing lint issues reported by PR build failures. Signed-off-by: lakshmj --- examples/routerdynamicrouting_info.yaml | 6 +++--- plugins/modules/routerdynamicrouting_info.py | 2 +- .../targets/routerdynamicrouting_info/tasks/main.yml | 9 ++++----- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/examples/routerdynamicrouting_info.yaml b/examples/routerdynamicrouting_info.yaml index 93f594df..3b9b2020 100644 --- a/examples/routerdynamicrouting_info.yaml +++ b/examples/routerdynamicrouting_info.yaml @@ -17,7 +17,7 @@ register: bgp_summary - name: Display BGP summary - debug: + ansible.builtin.debug: var: bgp_summary.info - name: Get IP routing table @@ -32,7 +32,7 @@ register: ip_route - name: Display routing table - debug: + ansible.builtin.debug: var: ip_route.info - name: Get OSPF neighbor information @@ -47,5 +47,5 @@ register: ospf_neighbors - name: Display OSPF neighbors - debug: + ansible.builtin.debug: var: ospf_neighbors.info diff --git a/plugins/modules/routerdynamicrouting_info.py b/plugins/modules/routerdynamicrouting_info.py index f8bea1e0..e91694ca 100644 --- a/plugins/modules/routerdynamicrouting_info.py +++ b/plugins/modules/routerdynamicrouting_info.py @@ -20,7 +20,7 @@ --- module: routerdynamicrouting_info short_description: Retrieve information from dynamic routing configuration. -description: +description: - Retrieve information from dynamic routing configuration. - This module is a read-only data source that executes show commands. - The commandstring parameter must start with 'sh' or 'show' for security. diff --git a/tests/integration/targets/routerdynamicrouting_info/tasks/main.yml b/tests/integration/targets/routerdynamicrouting_info/tasks/main.yml index 5b4e7f0f..a873ac11 100644 --- a/tests/integration/targets/routerdynamicrouting_info/tasks/main.yml +++ b/tests/integration/targets/routerdynamicrouting_info/tasks/main.yml @@ -1,10 +1,9 @@ --- - name: Test routerdynamicrouting_info module - hosts: citrix_adc - gather_facts: false - collections: - - netscaler.adc - + delegate_to: localhost + register: result + check_mode: true + tags: test tasks: # Test 1: Valid command with "show" - name: Test valid show command From a407e59e5ad2f626aa9f2f6a0781b9d19d2a6047 Mon Sep 17 00:00:00 2001 From: lakshmj Date: Thu, 12 Feb 2026 22:31:41 +0000 Subject: [PATCH 3/6] Addressing lint issues reported by PR build failures. Signed-off-by: lakshmj --- examples/routerdynamicrouting_info.yaml | 2 - .../routerdynamicrouting_info/tasks/main.yml | 224 +++++++++--------- 2 files changed, 118 insertions(+), 108 deletions(-) diff --git a/examples/routerdynamicrouting_info.yaml b/examples/routerdynamicrouting_info.yaml index 3b9b2020..35a550b2 100644 --- a/examples/routerdynamicrouting_info.yaml +++ b/examples/routerdynamicrouting_info.yaml @@ -2,8 +2,6 @@ - name: Sample routerdynamicrouting_info playbook hosts: demo_netscalers gather_facts: false - collections: - - netscaler.adc tasks: - name: Get BGP routing summary delegate_to: localhost diff --git a/tests/integration/targets/routerdynamicrouting_info/tasks/main.yml b/tests/integration/targets/routerdynamicrouting_info/tasks/main.yml index a873ac11..611a61d3 100644 --- a/tests/integration/targets/routerdynamicrouting_info/tasks/main.yml +++ b/tests/integration/targets/routerdynamicrouting_info/tasks/main.yml @@ -1,122 +1,134 @@ --- -- name: Test routerdynamicrouting_info module +# Test 1: Valid command with "show" +- name: Test valid show command delegate_to: localhost register: result check_mode: true tags: test - tasks: - # Test 1: Valid command with "show" - - name: Test valid show command - delegate_to: localhost - netscaler.adc.routerdynamicrouting_info: - nsip: "{{ nsip }}" - nitro_user: "{{ nitro_user }}" - nitro_pass: "{{ nitro_pass }}" - nitro_protocol: "{{ nitro_protocol }}" - validate_certs: "{{ validate_certs }}" - commandstring: "show ip route" - register: result + netscaler.adc.routerdynamicrouting_info: + nsip: "{{ nsip }}" + nitro_user: "{{ nitro_user }}" + nitro_pass: "{{ nitro_pass }}" + nitro_protocol: "{{ nitro_protocol }}" + validate_certs: "{{ validate_certs }}" + commandstring: "show ip route" - - name: Assert show command succeeded - assert: - that: - - not result.changed - - not result.failed - - result.info is defined - - result.info.commandstring == "show ip route" +- name: Assert show command succeeded + tags: test + assert: + that: + - not result.changed + - not result.failed + - result.info is defined + - result.info.commandstring == "show ip route" - # Test 2: Valid command with "sh" - - name: Test valid sh command - delegate_to: localhost - netscaler.adc.routerdynamicrouting_info: - nsip: "{{ nsip }}" - nitro_user: "{{ nitro_user }}" - nitro_pass: "{{ nitro_pass }}" - nitro_protocol: "{{ nitro_protocol }}" - validate_certs: "{{ validate_certs }}" - commandstring: "sh ip bgp summary" - register: result +# Test 2: Valid command with "sh" +- name: Test valid sh command + delegate_to: localhost + register: result + check_mode: true + tags: test + netscaler.adc.routerdynamicrouting_info: + nsip: "{{ nsip }}" + nitro_user: "{{ nitro_user }}" + nitro_pass: "{{ nitro_pass }}" + nitro_protocol: "{{ nitro_protocol }}" + validate_certs: "{{ validate_certs }}" + commandstring: "sh ip bgp summary" - - name: Assert sh command succeeded - assert: - that: - - not result.changed - - not result.failed - - result.info is defined - - result.info.commandstring == "sh ip bgp summary" +- name: Assert sh command succeeded + tags: test + assert: + that: + - not result.changed + - not result.failed + - result.info is defined + - result.info.commandstring == "sh ip bgp summary" - # Test 3: Command with uppercase SHOW - - name: Test uppercase SHOW command - delegate_to: localhost - netscaler.adc.routerdynamicrouting_info: - nsip: "{{ nsip }}" - nitro_user: "{{ nitro_user }}" - nitro_pass: "{{ nitro_pass }}" - nitro_protocol: "{{ nitro_protocol }}" - validate_certs: "{{ validate_certs }}" - commandstring: "SHOW ip ospf neighbor" - register: result +# Test 3: Command with uppercase SHOW +- name: Test uppercase SHOW command + delegate_to: localhost + register: result + check_mode: true + tags: test + netscaler.adc.routerdynamicrouting_info: + nsip: "{{ nsip }}" + nitro_user: "{{ nitro_user }}" + nitro_pass: "{{ nitro_pass }}" + nitro_protocol: "{{ nitro_protocol }}" + validate_certs: "{{ validate_certs }}" + commandstring: "SHOW ip ospf neighbor" - - name: Assert uppercase SHOW command succeeded - assert: - that: - - not result.changed - - not result.failed - - result.info is defined +- name: Assert uppercase SHOW command succeeded + tags: test + assert: + that: + - not result.changed + - not result.failed + - result.info is defined - # Test 4: Invalid command (should fail) - - name: Test invalid command (not starting with sh/show) - delegate_to: localhost - netscaler.adc.routerdynamicrouting_info: - nsip: "{{ nsip }}" - nitro_user: "{{ nitro_user }}" - nitro_pass: "{{ nitro_pass }}" - nitro_protocol: "{{ nitro_protocol }}" - validate_certs: "{{ validate_certs }}" - commandstring: "configure terminal" - register: result - ignore_errors: true +# Test 4: Invalid command (should fail) +- name: Test invalid command (not starting with sh/show) + delegate_to: localhost + register: result + check_mode: true + tags: test + netscaler.adc.routerdynamicrouting_info: + nsip: "{{ nsip }}" + nitro_user: "{{ nitro_user }}" + nitro_pass: "{{ nitro_pass }}" + nitro_protocol: "{{ nitro_protocol }}" + validate_certs: "{{ validate_certs }}" + commandstring: "configure terminal" + ignore_errors: true - - name: Assert invalid command failed - assert: - that: - - result.failed - - "'must start with' in result.msg" +- name: Assert invalid command failed + tags: test + assert: + that: + - result.failed + - "'must start with' in result.msg" - # Test 5: Another invalid command - - name: Test another invalid command - delegate_to: localhost - netscaler.adc.routerdynamicrouting_info: - nsip: "{{ nsip }}" - nitro_user: "{{ nitro_user }}" - nitro_pass: "{{ nitro_pass }}" - nitro_protocol: "{{ nitro_protocol }}" - validate_certs: "{{ validate_certs }}" - commandstring: "delete ip route" - register: result - ignore_errors: true +# Test 5: Another invalid command +- name: Test another invalid command + delegate_to: localhost + register: result + check_mode: true + tags: test + netscaler.adc.routerdynamicrouting_info: + nsip: "{{ nsip }}" + nitro_user: "{{ nitro_user }}" + nitro_pass: "{{ nitro_pass }}" + nitro_protocol: "{{ nitro_protocol }}" + validate_certs: "{{ validate_certs }}" + commandstring: "delete ip route" + ignore_errors: true - - name: Assert delete command failed - assert: - that: - - result.failed - - "'must start with' in result.msg" +- name: Assert delete command failed + tags: test + assert: + that: + - result.failed + - "'must start with' in result.msg" - # Test 6: Command with leading whitespace - - name: Test command with leading whitespace - delegate_to: localhost - netscaler.adc.routerdynamicrouting_info: - nsip: "{{ nsip }}" - nitro_user: "{{ nitro_user }}" - nitro_pass: "{{ nitro_pass }}" - nitro_protocol: "{{ nitro_protocol }}" - validate_certs: "{{ validate_certs }}" - commandstring: " show ip route" - register: result +# Test 6: Command with leading whitespace +- name: Test command with leading whitespace + delegate_to: localhost + register: result + check_mode: true + tags: test + netscaler.adc.routerdynamicrouting_info: + nsip: "{{ nsip }}" + nitro_user: "{{ nitro_user }}" + nitro_pass: "{{ nitro_pass }}" + nitro_protocol: "{{ nitro_protocol }}" + validate_certs: "{{ validate_certs }}" + commandstring: " show ip route" - - name: Assert command with whitespace succeeded - assert: - that: - - not result.changed - - not result.failed - - result.info is defined +- name: Assert command with whitespace succeeded + tags: test + assert: + that: + - not result.changed + - not result.failed + - result.info is defined From e0e4d9d6c95fe93f44ce00cd555e1282e2e9a6a3 Mon Sep 17 00:00:00 2001 From: lakshmj Date: Thu, 12 Feb 2026 22:39:21 +0000 Subject: [PATCH 4/6] Addressing lint issues reported by PR build failures. Signed-off-by: lakshmj --- .../targets/routerdynamicrouting_info/tasks/main.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/integration/targets/routerdynamicrouting_info/tasks/main.yml b/tests/integration/targets/routerdynamicrouting_info/tasks/main.yml index 611a61d3..ec098b76 100644 --- a/tests/integration/targets/routerdynamicrouting_info/tasks/main.yml +++ b/tests/integration/targets/routerdynamicrouting_info/tasks/main.yml @@ -15,7 +15,7 @@ - name: Assert show command succeeded tags: test - assert: + ansible.builtin.assert: that: - not result.changed - not result.failed @@ -38,7 +38,7 @@ - name: Assert sh command succeeded tags: test - assert: + ansible.builtin.assert: that: - not result.changed - not result.failed @@ -61,7 +61,7 @@ - name: Assert uppercase SHOW command succeeded tags: test - assert: + ansible.builtin.assert: that: - not result.changed - not result.failed @@ -84,7 +84,7 @@ - name: Assert invalid command failed tags: test - assert: + ansible.builtin.assert: that: - result.failed - "'must start with' in result.msg" @@ -106,7 +106,7 @@ - name: Assert delete command failed tags: test - assert: + ansible.builtin.assert: that: - result.failed - "'must start with' in result.msg" @@ -127,7 +127,7 @@ - name: Assert command with whitespace succeeded tags: test - assert: + ansible.builtin.assert: that: - not result.changed - not result.failed From bec92d84056e755a0c30796b703ba0576a5ffba9 Mon Sep 17 00:00:00 2001 From: lakshmj Date: Thu, 12 Feb 2026 23:05:14 +0000 Subject: [PATCH 5/6] Addressing lint issues reported by PR build failures. Signed-off-by: lakshmj --- plugins/modules/routerdynamicrouting_info.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/modules/routerdynamicrouting_info.py b/plugins/modules/routerdynamicrouting_info.py index e91694ca..82cf039c 100644 --- a/plugins/modules/routerdynamicrouting_info.py +++ b/plugins/modules/routerdynamicrouting_info.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2025 Cloud Software Group, Inc. +# Copyright (c) 2026 Cloud Software Group, Inc. # MIT License (see LICENSE or https://opensource.org/licenses/MIT) from __future__ import absolute_import, division, print_function From 1e93637a471f6530d75c38d3dfbfcf97417aef9b Mon Sep 17 00:00:00 2001 From: lakshmj Date: Thu, 12 Feb 2026 23:26:03 +0000 Subject: [PATCH 6/6] Addressing lint issues reported by PR build failures. Signed-off-by: lakshmj --- tests/sanity/ignore-2.15.txt | 1 + tests/sanity/ignore-2.16.txt | 1 + tests/sanity/ignore-2.17.txt | 1 + 3 files changed, 3 insertions(+) diff --git a/tests/sanity/ignore-2.15.txt b/tests/sanity/ignore-2.15.txt index 9cc953e8..18df0377 100644 --- a/tests/sanity/ignore-2.15.txt +++ b/tests/sanity/ignore-2.15.txt @@ -625,6 +625,7 @@ plugins/modules/rnatsession.py validate-modules:missing-gplv3-license # We use M plugins/modules/route.py validate-modules:missing-gplv3-license # We use MIT license plugins/modules/route6.py validate-modules:missing-gplv3-license # We use MIT license plugins/modules/routerdynamicrouting.py validate-modules:missing-gplv3-license # We use MIT license +plugins/modules/routerdynamicrouting_info.py validate-modules:missing-gplv3-license # We use MIT license plugins/modules/rsskeytype.py validate-modules:missing-gplv3-license # We use MIT license plugins/modules/save_config.py validate-modules:missing-gplv3-license # We use MIT license plugins/modules/server.py validate-modules:missing-gplv3-license # We use MIT license diff --git a/tests/sanity/ignore-2.16.txt b/tests/sanity/ignore-2.16.txt index 9cc953e8..18df0377 100644 --- a/tests/sanity/ignore-2.16.txt +++ b/tests/sanity/ignore-2.16.txt @@ -625,6 +625,7 @@ plugins/modules/rnatsession.py validate-modules:missing-gplv3-license # We use M plugins/modules/route.py validate-modules:missing-gplv3-license # We use MIT license plugins/modules/route6.py validate-modules:missing-gplv3-license # We use MIT license plugins/modules/routerdynamicrouting.py validate-modules:missing-gplv3-license # We use MIT license +plugins/modules/routerdynamicrouting_info.py validate-modules:missing-gplv3-license # We use MIT license plugins/modules/rsskeytype.py validate-modules:missing-gplv3-license # We use MIT license plugins/modules/save_config.py validate-modules:missing-gplv3-license # We use MIT license plugins/modules/server.py validate-modules:missing-gplv3-license # We use MIT license diff --git a/tests/sanity/ignore-2.17.txt b/tests/sanity/ignore-2.17.txt index 9cc953e8..18df0377 100644 --- a/tests/sanity/ignore-2.17.txt +++ b/tests/sanity/ignore-2.17.txt @@ -625,6 +625,7 @@ plugins/modules/rnatsession.py validate-modules:missing-gplv3-license # We use M plugins/modules/route.py validate-modules:missing-gplv3-license # We use MIT license plugins/modules/route6.py validate-modules:missing-gplv3-license # We use MIT license plugins/modules/routerdynamicrouting.py validate-modules:missing-gplv3-license # We use MIT license +plugins/modules/routerdynamicrouting_info.py validate-modules:missing-gplv3-license # We use MIT license plugins/modules/rsskeytype.py validate-modules:missing-gplv3-license # We use MIT license plugins/modules/save_config.py validate-modules:missing-gplv3-license # We use MIT license plugins/modules/server.py validate-modules:missing-gplv3-license # We use MIT license