class IDRAC::Session
def handle_max_sessions_and_retry(url, payload)
def handle_max_sessions_and_retry(url, payload) return false unless @sessions_maxed debug "Maximum sessions reached, attempting to clear sessions", 0 if @auto_delete_sessions if force_clear_sessions debug "Successfully cleared sessions, trying to create a new session", 0, :green # Give the iDRAC a moment to process the session deletions sleep(3) # Try one more time after clearing with form-urlencoded begin response = connection.post(url) do |req| req.headers['Authorization'] = "Basic #{Base64.strict_encode64("#{username}:#{password}")}" req.headers['Content-Type'] = 'application/x-www-form-urlencoded' req.body = "UserName=#{URI.encode_www_form_component(username)}&Password=#{URI.encode_www_form_component(password)}" end if process_session_response(response) debug "Redfish session created successfully after clearing sessions", 0, :green return true else debug "Failed to create Redfish session after clearing sessions: #{response.status} - #{response.body}", 0, :red # If still failing, try direct mode debug "Falling back to direct mode", 0, :light_yellow @direct_mode = true return false end rescue => e debug "Error during session creation after clearing: #{e.class.name}: #{e.message}", 0, :red debug "Falling back to direct mode", 0, :light_yellow @direct_mode = true return false end else debug "Failed to clear sessions, switching to direct mode", 0, :light_yellow @direct_mode = true return false end else debug "Auto delete sessions is disabled, switching to direct mode", 0, :light_yellow @direct_mode = true return false end end