@@ -138,6 +138,37 @@ def __init__(self, resource_name, supports_check_mode=True):
138138 self .module .params ["api_path" ] = "nitro/v2/config"
139139
140140 self .client = NitroAPIClient (self .module , self .resource_name )
141+ have_userpass = all ([
142+ self .module .params .get ("nitro_user" ),
143+ self .module .params .get ("nitro_pass" )
144+ ])
145+ if have_userpass and not self .module .check_mode :
146+ self .client ._headers .pop ("X-NITRO-USER" , None )
147+ self .client ._headers .pop ("X-NITRO-PASS" , None )
148+ self .client ._headers .pop ("Cookie" , None )
149+ ok , response = adc_login (
150+ self .client ,
151+ self .module .params ["nitro_user" ],
152+ self .module .params ["nitro_pass" ],
153+ )
154+ if not ok :
155+ self .client ._headers ["Cookie" ] = ""
156+ self .return_failure ("ERROR: Login failed: %s" % response )
157+
158+ else :
159+ if self .netscaler_console_as_proxy_server :
160+ self .module .params ["nitro_auth_token" ] = response ["login" ][0 ].get ("sessionid" , None )
161+ else :
162+ self .module .params ["nitro_auth_token" ] = response .get ("sessionid" , None )
163+
164+ if not self .module .params ["nitro_auth_token" ]:
165+ self .return_failure ("ERROR: Login failed. No sessionid returned from the NetScaler ADC" )
166+ log ("INFO: Login successful. Session ID: %s" % self .module .params ["nitro_auth_token" ])
167+
168+ self .client ._headers ["Cookie" ] = (
169+ "NITRO_AUTH_TOKEN=%s" % self .module .params ["nitro_auth_token" ]
170+ )
171+
141172 self .ns_major_version , self .ns_minor_version = get_netscaler_version (
142173 self .client
143174 )
@@ -181,6 +212,13 @@ def return_success(self):
181212 # }
182213 if self .resource_name == "login" :
183214 self .module_result ["sessionid" ] = self .sessionid
215+ if self .client ._headers .get ("Cookie" , None ) not in (None , "" ) and not self .module .check_mode :
216+ ok , response = adc_logout (self .client )
217+ if not ok :
218+ log ("ERROR: Logout failed: %s" % response )
219+ else :
220+ log ("INFO: Logout successful" )
221+ self .client ._headers ["Cookie" ] = ""
184222 self .module .exit_json (** self .module_result )
185223
186224 @trace
@@ -204,6 +242,13 @@ def update_diff_list(self, existing=None, desired=None, delete=False, **kwargs):
204242
205243 @trace
206244 def return_failure (self , msg ):
245+ if self .client ._headers ["Cookie" ] != "" and not self .module .check_mode :
246+ ok , response = adc_logout (self .client )
247+ if not ok :
248+ log ("ERROR: Logout failed: %s" % response )
249+ else :
250+ log ("INFO: Logout successful" )
251+ self .client ._headers ["Cookie" ] = ""
207252 self .module .fail_json (msg = msg , ** self .module_result )
208253
209254 @trace
0 commit comments