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

 

  • 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