Forum Discussion
Relational class or tables
We are running v9.4.8.
I am looking to create a relation based class, not sure if this is a function of a table in v10.
the relation is that I want a way to evaluate more than 1 criteria for a class in relation. I know I can create 2 classes and have the irule match both, but the problem I run into is that the group of users may not all match the group of commands to be matched on.
In the example below I want to match testsuser1 on commands 1 and 2, but testuser2 should only match on command2. It is not scalable to create multiple matching classes for every user as the list is dynamic and will be frequently updated via api. At times there could be 2 users or there could be 15 users. Same with commands.
class penatly_box {
"testuser1" "command1"
"testuser1" "command2"
"testuser1" "command2"
}'
Is there a function that exists to handle these relations?
15 Replies
- swabbies_112156
Nimbostratus
The Irule is valid in terms of syntax but if the user is Testuser1 instead of testuser1, or the command is Command1 instead of command1 the log reports match and the pool is not hit. - hoolio
Cirrostratus
Are your data group entries in all lower case? And does it log matched and go to the pool or log no match and not go to the penaltybox pool?
Aaron - swabbies_112156
Nimbostratus
datagroup entries use only lower case. It logs "no match" and does not go to the penatly box pool. I also added in additional logging.
I also added addtional logging and "Value 2" logs correctly when the URI values are lowercase. Value 2 logs nothing when the URI values use any uppercase.
Start of changes
log local0. "----------------------"
log local0. "URI Information"
log local0. "----------------------"
log local0. "HTTP::uri: [HTTP::uri]"
log local0. "----------------------"
log local0. "Value1: [URI::query ?&[HTTP::query] &uid] "
log local0. "----------------------"
log local0. "Value2: [URI::query ?&[HTTP::query] &command] "
log local0. "----------------------"
log local0. "Path Information"
log local0. "----------------------"
log local0. "HTTP::path: [HTTP::path]"
if {[matchclass [string tolower "[URI::query ?&[HTTP::query] &uid] [URI::query ?&[HTTP::query] &command]" ] equals test_penaltybox]}{
pool test_penaltybox-80
log local0. "matched"
return
} else {
log local0. "no match"
} - hoolio
Cirrostratus
Sorry, URI::query is case sensitive. So you can try this instead:
set query "&[string tolower [HTTP::query]]"
if {[matchclass "[URI::query $query &uid] [URI::query $query &command]" equals test_penaltybox]}{
Aaron - swabbies_112156
Nimbostratus
Thanks again Hoolio for pointing me in the right direction. After quite a bit of logging and failures I adjusted the query slightly and seem to be getting great results.
I will update this after a bit of Q/A testing if there need to be any additional changes.
Start of changes
set testquery1 [ URI::query [string tolower [HTTP::uri]] command ]
log local0. "----------------------"
log local0. "testquery1:"
log local0. "----------------------"
log local0. "$testquery1"
log local0. "----------------------"
set testquery2 [ URI::query [string tolower [HTTP::uri]] uid ]
log local0. "----------------------"
log local0. "testquery2:"
log local0. "----------------------"
log local0. "$testquery2"
log local0. "----------------------"
if {[matchclass "[ URI::query [string tolower [HTTP::uri]] uid] [ URI::query [string tolower [HTTP::uri]] command ]" equals test_penaltybox]}{
pool test_penaltybox-80
log local0. "matched"
return
} else {
log local0. "no match"
}
End of new changes
Recent Discussions
Related Content
* Getting Started on DevCentral
* Community Guidelines
* Community Terms of Use / EULA
* Community Ranking Explained
* Community Resources
* Contact the DevCentral Team
* Update MFA on account.f5.com
