Forum Discussion
PeteWhite
Jan 30, 2015Employee
This is what I use for managing pools:
Presentation
choice pool display "xxlarge" default "/create_new" tcl {
package require iapp 1.1.0
return "Create a new pool\t/create_new\n[iapp::get_items ltm pool]"
}
optional ( pool == "/create_new" ) {
Build a table of pool members
choice lb_method default "least-connections-member" display "xxlarge"
choice monitor display "xxlarge" default "/create_new" tcl {
package require iapp 1.1.0
set choices "Create a new health monitor\t/create_new\n[iapp::get_items ltm monitor http]\n[iapp::get_items ltm monitor https]\n[iapp::get_items -filter NAME != "external" ltm monitor external]"
return $choices
}
optional ( monitor == "/create_new" ) {
string uri default "/"
choice http_version display "xxlarge" default "http11"
optional ( http_version == "http11" ) {
string host required display "large" validator "FQDN"
}
string response display "xxlarge" default "200 OK"
}
table pool_members {
editchoice addr display "large" tcl {
package require iapp 1.1.0
return [iapp::get_items ltm node]
}
string port display "small" required default "80" validator "PortNumber"
}
}
Implementation
set poolmembers ""
if { $::global_config__pool == $::CREATE_NEW_ANSWER } {
Monitor
set new_monitor [iapp::is ::global_config__monitor $::CREATE_NEW_ANSWER]
set http10 [expr {[iapp::is ::global_config__http_version http10]}]
array keys: $new_monitor,$http10
array set monitor_arr {
0,1 { $::global_config__monitor }
0,0 { $::global_config__monitor }
1,1 { [iapp::conf create ltm monitor http ${app}_monitor_http defaults-from http send 'GET $::global_config__uri HTTP/1.0\\r\\nConnection: Close\\r\\n\\r\\n' recv '$global_config__response' ] }
1,0 { [iapp::conf create ltm monitor http ${app}_monitor_http defaults-from http send 'GET $::global_config__uri HTTP/1.1\\r\\nHost: $::global_config__host\\r\\nConnection: Close\\r\\n\\r\\n' recv '$global_config__response' ] }
* { }
}
set monitor [iapp::substa monitor_arr($new_monitor,$http10)]
set poolmembers [iapp::pool_members $::global_config__pool_members]
set pool [iapp::conf create ltm pool ${app}_pool monitor $monitor load-balancing-mode $::global_config__lb_method [iapp::pool_members $::global_config__pool_members] ]
} else {
set pool $::global_config__pool
}
To answer your question more specifically, you can use foreach to loop through the answers ( though that's the old way of doing iApps)
foreach row $::pool_members__pool_members_list {
array set columns [lindex $row 0]
set ip $columns(pool_ip)
set port $columns(pool_port)
}