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

EM's avatar
EM
Icon for Nimbostratus rankNimbostratus
Sep 06, 2013

11.4 iapp namespace

Hi,

 

I'm developing some iApp templates based on the f5.http. I need to be able to let the user decide if a specific pool member is enabled or disabled when the iApp is deployed.

 

I already added in the presentation section a choice field to enable or disable the member:

 

table members {
        editchoice addr display "large" tcl {
            package require iapp 1.0.0
            return [iapp::get_items ltm node]
        }
        string port display "small" required default "80" validator "PortNumber"

        string connection_limit display "small" required
                default "0" validator "NonNegativeNumber"
        optional (  lb_method == "ratio-member" 
                   || lb_method == "ratio-node" 
                   || lb_method == "ratio-session" 
                   || lb_method == "ratio-least-connections-member" 
                   || lb_method == "ratio-least-connections-node" 
                   || lb_method == "dynamic-ratio-member" 
                   || lb_method == "dynamic-ratio-node" ) {
            string ratio default "1" validator "NonNegativeNumber"
                display "small" 
        }

        optional ( options.advanced == "yes" && use_pga == "yes" ) { 
            string priority default "0" required
                validator "NonNegativeNumber" display "small" 
        }
        optional ( options.advanced == "yes" ) {
            choice state display "xlarge" default "enabled"
        }
    }

The pool is configured with this statement in the template:

 

 array set pool_arr {
         1,0 { [iapp::conf create ltm pool ${app}_pool \
               [iapp::substa pool_ramp_pga_arr($advanced,$do_slow_ramp,$do_pga)] \
               [iapp::substa pool_lb_queue_arr($advanced)] \
               [iapp::substa monitor_arr($new_pool,$new_monitor,$advanced)] \
               [iapp::pool_members $::pool__members]] \
               [iapp::conf modify ltm pool ${app}_pool \ 
               ] }
         0,0 { [expr { $::net__server_mode ne "tunnel" ? \
               $::pool__pool_to_use : $::pool__pool_to_use_wom }] }
         *   { none translate-address disabled }
     }

As the pool members are configured with the "iapp::pool_members" routine, it would be best if this configures the state of the member too. I haven't found the source of this routine so i don't know if it is capable of doing this.

 

Is there any documentation on the iapp:: namespace and it's source code?

 

If the routine is not capable of setting the state - any ideas on how to configure the member state besides iterating over the $::pool__members variable?

 

Greetings,

 

Eric

 

2 Replies

  • Fred_Slater_856's avatar
    Fred_Slater_856
    Historic F5 Account

    Eric-

     

    You can find the source code on BIG-IP in /usr/share/tcl8.4/iapp/iapp.1.0.0.tcl. I apologize for not having posted documentation yet. The "pool_members" proc will natively support your objective if you pass it a parameter, as shown below. The -fields flag takes a list of name-value pairs: (1) the tmsh parameter and (2) your variable name. You will want your values to reflect the correct tmsh syntax, ie. "user-up" and "user-down" rather than "enabled" and "disabled". Good on you for excellent use and modification of iApps.

     

    -Fred

     

    array set pool_arr {
        1,0 { [iapp::conf create ltm pool ${app}_pool \
              [iapp::substa pool_ramp_pga_arr($advanced,$do_slow_ramp,$do_pga)] \
              [iapp::substa pool_lb_queue_arr($advanced,$is_edge,$tcp_queuing)] \
              [iapp::substa monitor_arr($new_pool,$new_monitor,$advanced)] \
              [iapp::pool_members -fields { state state } $::pool__members]] }
        0,0 { [expr { $::net__server_mode ne "tunnel" ? \
              $::pool__pool_to_use : $::pool__pool_to_use_wom }] }
        *   { none }
    }
  • EM's avatar
    EM
    Icon for Nimbostratus rankNimbostratus

    Hi,

     

    thanks, that did the trick!!

     

    Greetings, Eric