Forum Discussion

talsa's avatar
talsa
Icon for Nimbostratus rankNimbostratus
Dec 20, 2022
Solved

BIG IP F5 IRule with data group to check if date has passed

Hello,

I have a datagroup of kind string/external file, which has hosts on the first field, and dates with format YYYY-MM-DD on the second field. I want to create an irule that will do something when the date on the same row of the host has passed, or do something else if it doesn't.

Example:

"www.google.com" := "2020-04-16"

In this case I want to do something, and if the date was 2024-11-25 I would want to do something else.

Right now, it's not working for me, as I've tried with my Irule for a number of times. I am not even getting anything in the log.

My irule:

when HTTP_REQUEST priority 100 { if { not (
( [IP::addr [IP::client_addr] equals 1.1.0.0%2/15]) or
( [IP::addr [IP::client_addr] equals 2.2.4.0%2/24]) or
( [IP::addr [IP::client_addr] equals 3.3.23.0%2/24]) or
( [IP::addr [IP::client_addr] equals 4.4.41.0%2/24]) or
( [IP::addr [IP::client_addr] equals 5.5.66.0%2/24]) or
( [IP::addr [IP::client_addr] equals 6.6.236.65%2/24]) or
( [IP::addr [IP::client_addr] equals 7.7.151.0%2/24]) or
( [IP::addr [IP::client_addr] equals 8.8.6.0%2/23]) or
( [IP::addr [IP::client_addr] equals 9.9.8.0%2/21]) or
( [HTTP::host] ends_with "co.il") or
( [HTTP::host] ends_with "sites.example.com")
) } {

if { [string tolower [class match -name "[HTTP::host]" equals /Common/webrules_tal]] ne "" } {
set expire_date [clock scan { class match -value equals /Common/webrules_tal }]
log local0. "Got host address: [HTTP::host]"
if { [clock seconds] < [clock scan { "$expire_date" }] } {
HTTP::redirect "https://www.youtube.com"
}
}

}

}

How can I do something like this in my Irule?

Note: The IP address restriction above is to restrict by IP, these IP addresses are not mine, they're there just for this post.

Thank you!

Tal Sabadia

  • So, this code will return the value of the date you've mapped to every host

     

    when HTTP_REQUEST {
     set host [string tolower [HTTP::host]] 
     set now [clock seconds] ; log local0. "now is $now"
     set expire_date "1991-01-01"
     if { [class match $host eq test-string] }{ set expire_date [class match -value "$host" equals test-string] } else { log local0. "$host does not have a value in datagroup"}
     log local0. "expire date is $expire_date"
     set exp_clock [clock scan $expire_date]; log local0. "exp_clock is $exp_clock"
     
    }

     

    Here's what variables look like

     

    Dec 21 12:39:47 bigip info tmm4[11336]: Rule /Common/iRule_DC <HTTP_REQUEST>: now is 1603535987
    Dec 21 12:39:47 bigip info tmm4[11336]: Rule /Common/iRule_DC <HTTP_REQUEST>: expire date is 2024-04-16
    Dec 21 12:39:47 bigip info tmm4[11336]: Rule /Common/iRule_DC <HTTP_REQUEST>: exp_clock is 1713218400
    
    Dec 21 12:40:53 bigip info tmm1[11336]: Rule /Common/iRule_DC <HTTP_REQUEST>: now is 1603536053
    Dec 21 12:40:53 bigip info tmm1[11336]: Rule /Common/iRule_DC <HTTP_REQUEST>: www.random.com does not have a value in datagroup
    Dec 21 12:40:53 bigip info tmm1[11336]: Rule /Common/iRule_DC <HTTP_REQUEST>: expire date is 1991-01-01
    Dec 21 12:40:53 bigip info tmm1[11336]: Rule /Common/iRule_DC <HTTP_REQUEST>: exp_clock is 662684400

     

1 Reply

  • So, this code will return the value of the date you've mapped to every host

     

    when HTTP_REQUEST {
     set host [string tolower [HTTP::host]] 
     set now [clock seconds] ; log local0. "now is $now"
     set expire_date "1991-01-01"
     if { [class match $host eq test-string] }{ set expire_date [class match -value "$host" equals test-string] } else { log local0. "$host does not have a value in datagroup"}
     log local0. "expire date is $expire_date"
     set exp_clock [clock scan $expire_date]; log local0. "exp_clock is $exp_clock"
     
    }

     

    Here's what variables look like

     

    Dec 21 12:39:47 bigip info tmm4[11336]: Rule /Common/iRule_DC <HTTP_REQUEST>: now is 1603535987
    Dec 21 12:39:47 bigip info tmm4[11336]: Rule /Common/iRule_DC <HTTP_REQUEST>: expire date is 2024-04-16
    Dec 21 12:39:47 bigip info tmm4[11336]: Rule /Common/iRule_DC <HTTP_REQUEST>: exp_clock is 1713218400
    
    Dec 21 12:40:53 bigip info tmm1[11336]: Rule /Common/iRule_DC <HTTP_REQUEST>: now is 1603536053
    Dec 21 12:40:53 bigip info tmm1[11336]: Rule /Common/iRule_DC <HTTP_REQUEST>: www.random.com does not have a value in datagroup
    Dec 21 12:40:53 bigip info tmm1[11336]: Rule /Common/iRule_DC <HTTP_REQUEST>: expire date is 1991-01-01
    Dec 21 12:40:53 bigip info tmm1[11336]: Rule /Common/iRule_DC <HTTP_REQUEST>: exp_clock is 662684400