Forum Discussion
Is this what you're after?
when XML_CONTENT_BASED_ROUTING {
for {set i 0} { $i < $XML_count } {incr i} {
if {($XML_queries($i) contains "CDetails")} {
pool qa2-pool
} elseif {($XML_queries($i) contains "GetBalances")} {
pool qa2-pool
}
log local0. "IP:[IP::remote_addr] XML_queries\($i\):$XML_queries($i) pool:[LB::server pool]"
}
}
BTW the logic above doesn't quite make sense - you may want to put a 'break' statement in to leave the loop?
- sandiksk_35282Jan 23, 2017Altostratus
This is the irule I am using .
ltm rule prd_xml_irule { when XML_CONTENT_BASED_ROUTING { for {set i 0} { $i < $XML_count } {incr i} { log local0. $XML_queries($i) if {($XML_queries($i) contains "CDetails")} { pool prd2_pool } elseif {($XML_queries($i) contains "GetBalances")} { pool prd2_pool } elseif {($XML_queries($i) contains "GetSPoints")} { pool prd2_pool }
} } } and if these attributes does not match then they will be hitting the default pool defined in the VS.
- IheartF5_45022Jan 23, 2017Nacreous
So once you've found an element that contains the string you are looking for - do you need to keep looking? If you can stop looking after finding the first occurrence, you can use 'break' to leave the loop.
when XML_CONTENT_BASED_ROUTING { for {set i 0} { $i < $XML_count } {incr i} { log local0. "$i: $XML_queries($i)" switch -glob -- $XML_queries($i) { "*CDetails*" - "*GetBalances*" - "*GetSPoints*" { log local0. "Choosing pool prd2_pool" pool prd2_pool break } } }
Ignore the switch (I like how switches look), the main point is the 'break'
- sandiksk_35282Jan 25, 2017Altostratus
Will iRule be used once per TCP connection , in our scenario client is opening a TCP session and with in the same session application is making multiple call , is it possible for each call to hit the irule or can i create a loop for the same TCP session . we are doing ssl offload on f5 and again encrypting the traffic from f5 to pool members.
Please advice me on this
- IheartF5_45022Jan 25, 2017Nacreous
The iRule will be invoked each time the XML_CONTENT_BASED_ROUTING event is triggered. If you process multiple requests per TCP session then Yes the iRule will be triggered multiple times.
- sandiksk_35282Jan 25, 2017Altostratus
if I use the below irule then will it be triggered for each request with in a single TCP session. But looking at the captures I see the irule is hit once and after that it is being LBed to the same server instead of hitting the irule.
when XML_CONTENT_BASED_ROUTING { for {set i 0} { $i < $XML_count } {incr i} { log local0. "$i: $XML_queries($i)" switch -glob -- $XML_queries($i) { "CDetails" - "GetBalances" - "GetSPoints" {