3535
3636class ActionModule (ActionBase ):
3737 """
38- Action plugin to dynamically select between cisco.nac_dc_vxlan.dtc.rest_selector and cisco.dcnm.dcnm_rest
38+ Action plugin to dynamically select between cisco.nd.nd_rest and cisco.dcnm.dcnm_rest
3939 based on the ansible_network_os variable.
4040 """
41+ REST_MODULES = {
42+ 'cisco.nd.nd' : 'cisco.nd.nd_rest' ,
43+ 'cisco.dcnm.dcnm' : 'cisco.dcnm.dcnm_rest'
44+ }
45+
46+ def get_rest_module (self , network_os ):
47+ if not network_os :
48+ results ['failed' ] = True
49+ results ['msg' ] = "ansible_network_os is not defined in task_vars"
50+ else :
51+ results = self .REST_MODULES .get (network_os )
52+ return results
4153
4254 def run (self , tmp = None , task_vars = None ):
4355 """
@@ -59,14 +71,12 @@ def run(self, tmp=None, task_vars=None):
5971 module_args = self ._task .args .copy ()
6072
6173 # Get the network OS from task variables or module arguments
62- network_os = task_vars .get ('ansible_network_os' ) \
63- or module_args . pop ( 'ansible_network_os' , None )
74+ network_os = task_vars .get ('ansible_network_os' )
75+ display . vvvv ( f"Using OS module: { network_os } " )
6476
6577 # Determine which module to use based on network_os
66- if network_os == 'cisco.nd.nd' :
67- rest_module = 'cisco.nac_dc_vxlan.dtc.rest_selector'
68- elif network_os == 'cisco.dcnm.dcnm' :
69- rest_module = 'cisco.dcnm.dcnm_rest'
78+ if network_os in self .REST_MODULES :
79+ rest_module = self .get_rest_module (network_os )
7080 else :
7181 results ['failed' ] = True
7282 results ['msg' ] = (
@@ -75,27 +85,40 @@ def run(self, tmp=None, task_vars=None):
7585 )
7686 return results
7787
78- display .vvvv (f"Using REST module: { rest_module } " )
88+ display .vvvv (f"Using ---------- REST------------- module: { rest_module } " )
7989
8090 try :
91+ display .vvvv (f"Executing module: { rest_module } with args: { module_args } " )
92+
93+ self ._task .vars ['ansible_rest_os_module' ] = rest_module
94+
95+ # Set the connection to httpapi
96+ if 'connection' not in task_vars :
97+ task_vars ['connection' ] = 'httpapi'
98+
8199 # Execute the appropriate REST module
82100 result = self ._execute_module (
83101 module_name = rest_module ,
84102 module_args = module_args ,
85103 task_vars = task_vars ,
86- tmp = tmp
104+ tmp = tmp ,
105+ wrap_async = False
87106 )
88107
89108 # Update results with the module's results
90109 if result .get ('failed' ):
91110 results .update (result )
111+ display .error (f"Module execution failed: { result .get ('msg' )} " )
92112 else :
93113 results ['changed' ] = result .get ('changed' , False )
94114 results .update (result )
115+ display .vvvv (f"Module execution successful: { result } " )
95116
96117 except Exception as e :
118+ import traceback
119+ error_trace = traceback .format_exc ()
97120 results ['failed' ] = True
98- results ['msg' ] = f"Failed to execute { rest_module } : { str (e )} "
121+ results ['msg' ] = f"Failed to execute { rest_module } : { str (e )} \n { error_trace } "
99122 display .error (results ['msg' ], wrap_text = False )
100123
101124 return results
0 commit comments