Forum Discussion

jojo83_271212's avatar
jojo83_271212
Icon for Nimbostratus rankNimbostratus
Oct 29, 2017

create irule with variable in iApp

Hi Devcentral!

I've a questions:

I'm modifying an iApp in order to create an irule to assign to the vs.

the assignment is here { [iapp_conf create ltm virtual ${app}_vs \ destination [iapp_destination $::pool__addr $::pool__port] \ mask $mask \ $vs_params \ ip-protocol tcp \ mirror $mirror_action \ profiles replace-all-with { $tcp_profiles http } \ rules { iwf_test_irulebal iwf_$irulelog }] }

the irules are very simple

the first irule is with no variables

tmsh::create ltm rule iwf_$irulelog { 

when HTTP_REQUEST { 
    log local0. "No variables" 
}

}

the second irule need to balance on the pool created with the iapp, so i need to write it with variable statement and not with string

tmsh::create ltm rule iwf_test_irulebal {

when HTTP_REQUEST { 

if { [HTTP::uri] starts_with "/portal${app}_pool" } {
    use pool ${app}_pool }
else {
    TCP::close
}
}
}

i've tried with \before the { but seems not works. also with ::global variable but not works.

In a classic BIG-IP environment without iapp the use of variable in irule works. how can i use the variable in an irule created with an iapp?

thanks in advance

1 Reply

  • iApps are fussy with brackets, braces, and quotes, and need a lot of escape characters, especially when creating an iRule. As a result, I like to set a variable to the iRule code string (with all the escape characters) and then refer to the variable on the tmsh::create command, rather than try to do it all on one command. Makes maintenance a bit easier, too:

     

    set MyRule "
    when HTTP_REQUEST \{
       if \{ \[HTTP::uri\] starts_with \"/portal${app}_pool\" \} \{
          pool ${app}_pool
       \} else \{
          TCP::close
       \}
    \}"
    tmsh::create "/ltm rule ${app}_MyRule $MyRule"

    Notice the braces in ${app} are not escaped so that the iApp processor will perform variable substitution when the application service is deployed. But all the braces, brackets, and quotes that need to be present in the finished iRule must be escaped.