Forum Discussion
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_856Historic 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
Nimbostratus
Hi,
thanks, that did the trick!!
Greetings, Eric
 
Recent Discussions
Related Content
* Getting Started on DevCentral
* Community Guidelines
* Community Terms of Use / EULA
* Community Ranking Explained
* Community Resources
* Contact the DevCentral Team
* Update MFA on account.f5.com