For more information regarding the security incident at F5, the actions we are taking to address it, and our ongoing efforts to protect our customers, click here.

Forum Discussion

jwhite18's avatar
jwhite18
Icon for Nimbostratus rankNimbostratus
May 25, 2016

Irule Integration

Hi guys,

I have this irule:

when HTTP_REQUEST {

switch [HTTP::cookie hectorlbhkg] { - - {

    pool [HTTP::cookie hectorlbhkg]
set selected ""
     }
 default {
    set rand [expr { rand() }]

    if { ($rand < .33) and ([active_members www.hector.com_cluster_2a] >= 3) } {
       pool www.hector.com_cluster_2a
       set selected www.hector.com_cluster_2a
    } elseif { ($rand < .66) and ([active_members www.hector.com_cluster_2b] >= 3) } {
       pool www.hector.com_cluster_2b
       set selected www.hector.com_cluster_2b
    }  elseif {([active_members www.hector.com_cluster_2c] >= 3)} {
       pool www.hector.com_cluster_2c
       set selected www.hector.com_cluster_2c
    }
            }

} } when HTTP_RESPONSE { if {$selected ne ""}{ HTTP::cookie insert name hectorlbhkg value $selected path "/" } }

And I have created this one:

when HTTP_REQUEST { if { [string tolower [HTTP::header User-Agent]] contains “msie7” or "msie8" } { pool } }

Is there a way I can integrate in to one without having to create them separately?

Cheers

1 Reply

  • Hi,

    your "new" irule is not working.

    The condition must be:

    ([string tolower [HTTP::header User-Agent]] contains "msie7") or ([string tolower [HTTP::header User-Agent]] contains "msie8")

    And you can optimize the irule like that:

    when RULE_INIT {
        array set static::pools {
            0 "www.hector.com_cluster_2a"
            1 "www.hector.com_cluster_2b"
            2 "www.hector.com_cluster_2c"
        }
    }
    
    when HTTP_REQUEST {
        if { ([string tolower [HTTP::header User-Agent]] contains "msie7") or ([string tolower [HTTP::header User-Agent]] contains "msie8") } {
            pool www.hector.com_cluster_2k
        } elseif { [info exists static::pools([HTTP::cookie hectorlbhkg])]} {
            pool $static::pools([HTTP::cookie hectorlbhkg])
        } else {
            set PoolID [expr { int(rand()*[array size static::pools])}]
            while { [info exists static::pools($PoolID)] } {
            log local0. $PoolID
                if { ([active_members $static::pools($PoolID)] >= 3) } {
                    pool $static::pools($PoolID)
                    set selected $static::pools($PoolID)
                    break
                } else {incr PoolID}
            }
        }
    }
    
    when HTTP_RESPONSE {
      if {[info exists selected]}{
        HTTP::cookie insert name hectorlbhkg value $selected path "/"
      }
    }
    

    The random value is an integer between 0 and the size of the static array. Adding a new entry in the array will apply without any change in the irule.