05-Nov-2019
06:19
- last edited on
22-Nov-2022
15:14
by
JimmyPackets
I'm having this issue, that i can't get the sideband connection to work. Code is like this:
when HTTP_REQUEST {
set apikey [URI::query [HTTP::uri] api-key]
log local0. $apikey
if { $apikey eq "" } {
log local0. "apikey is empty, redirecting to another virtual"
virtual test-internal
} else {
log local0. "We got the apikey and begin HSSR connection"
set status [call /Common/HSSR::http_req -virt "/test-internal-api" \
-uri "http://test.com/[URI::encode $apikey]" \
-tag "custom" -key $apikey -rbody rbody]
if {($status == 200) && ($rbody ne "NOT_FOUND")} {
log local0. "HSSR query successful, redirecting traffic to pool"
pool test-pool
return
}
}
}
The test-internal-api virtual is assigned with access policy that has a simple LDAP query and a iRule that gets the reply for the sideband query.
Now when the user goes to that virtual where the iRule is assigned, ltm logs the following lines:
Nov 5 15:27:59 f5test01 info tmm1[17166]: Rule /Common/APIKEY <HTTP_REQUEST>: 010101-123N
Nov 5 15:27:59 f5test01 info tmm1[17166]: Rule /Common/APIKEY <HTTP_REQUEST>: We got the apikey and begin HSSR connection
Nov 5 15:27:59 f5test01 err tmm1[17166]: 01220001:3: TCL error: /Common/APIKEY <HTTP_REQUEST> - can't read "sts": no such variable while executing "set e "connect to ${dest} '${server}' fails: ${sts} (${conn})"" (iRule proc "/Common/HSSR::http_req") (line 430) invoked from within "call /Common/HSSR::http_req -virt "/test-internal-api" -uri "http://test.com/" -tag "custom" -key $apikey -r..." invoked from within "if { $apikey eq "" } { log local0. "apikey is empty, redirecting to another virtual" virtual test-internal..."
What is that sts and where should it come from? No matter what i do to the call, the error is the same...
05-Nov-2019
23:39
- last edited on
21-Nov-2022
16:27
by
JimmyPackets
Ok, got this a bit further. I was missing the /Common before the virtual server in the call. But now as the another virtual has this iRule code, it never get's to the ACCESS_POLICY_COMPLETED:
when HTTP_REQUEST {
log local0. "Got http request to internal virtual"
set apikey ""
if {[HTTP::path] starts_with "/"} {
regexp {/([^/]+)$} [HTTP::path] junk x
set apikey [URI::decode $x]
}
}
when ACCESS_SESSION_STARTED {
if {$apikey ne ""} {
log local0. "Access session started on internal virtual"
ACCESS::session data set session.custom.apikey $apikey
}
}
when ACCESS_POLICY_COMPLETED {
set reply "NOT_FOUND"
if {[ACCESS::session data get session.ldap.last.queryresult] == 1} {
set reply [ACCESS::session data get session.ldap.last.attr.apikey]
}
log local0. "Access session policy completed with reply: $reply"
ACCESS::respond 200 content $reply Content-Type "text/plain" Connection close
}
The access policy attached to this internal virtual contains only one LDAP query that ends in deny no matter what the query result is.
What am i missing here?