Forum Discussion

Michaelyang's avatar
Michaelyang
Icon for Cirrostratus rankCirrostratus
Dec 01, 2022

About script

Hello,

I want to make a script that sends alerts to /var/log/ltm every minute when the pool is not up.
Here is the script I designed:

 

 

modify script pool_script {
    app-service none
    definition {
        set errorcode [catch {exec tmsh show ltm pool | grep Ltm | awk {{ print $(NF-2) }}} result]
        set result [split $result "\n"]

        tmsh::log_dest file
        tmsh::log_level debug

        foreach i $result {
            set pool "[lindex $i 1]"
            if { [tmsh::show ltm pool] contains "Availability           : available" } then {

            } else {
                tmsh::log debug "F5 Pool:${pool} Status -> Not available."
            }
        }
    }
    description none
    events none
}

 

 

I thought it worked, but then I realized that the log only appears when the first pool doesn't start as it should.
Please tell me how to change my script...

Any help is appreciate.

  • Hi MIchaelyang,

    check the iCall script below to get a picture how to LTM configs could be enumerated with foreach loops.  No need to [exec] native BASH commands... 😉

     

    sys icall handler periodic check_pool_state {
        interval 120
        script check_pool_state
    }
    sys icall script check_pool_state {
       app-service none
       definition {
    		tmsh::log_dest file
    		tmsh::log_level debug
    		foreach temp(pool_config) [tmsh::get_config /ltm pool] {
    			set temp(pool_name) [tmsh::get_name $temp(pool_config)]
    			if { [tmsh::show /ltm pool $temp(pool_name)] contains "Availability           : available" } then {
    				# Everything is fine... 	
    			} else {
    				tmsh::log debug "Pool Check: $temp(pool_name) is unhealthy"
    			}
    		}
       }
       description none
       events none
    }

     

     Cheers, Kai

  • Hi MIchaelyang,

    check the iCall script below to get a picture how to LTM configs could be enumerated with foreach loops.  No need to [exec] native BASH commands... 😉

     

    sys icall handler periodic check_pool_state {
        interval 120
        script check_pool_state
    }
    sys icall script check_pool_state {
       app-service none
       definition {
    		tmsh::log_dest file
    		tmsh::log_level debug
    		foreach temp(pool_config) [tmsh::get_config /ltm pool] {
    			set temp(pool_name) [tmsh::get_name $temp(pool_config)]
    			if { [tmsh::show /ltm pool $temp(pool_name)] contains "Availability           : available" } then {
    				# Everything is fine... 	
    			} else {
    				tmsh::log debug "Pool Check: $temp(pool_name) is unhealthy"
    			}
    		}
       }
       description none
       events none
    }

     

     Cheers, Kai

  • Hi Michaelyang,

    on a quick view: You are not passing $pool to the "tmsh::show ltm virtual" command...

    Cheers, Kai 

    • Michaelyang's avatar
      Michaelyang
      Icon for Cirrostratus rankCirrostratus

      Hi Kai_Wike,

      Sorry, I sent the wrong one
      I've updated it...

      • Kai_Wilke's avatar
        Kai_Wilke
        Icon for MVP rankMVP

        As i said... you are not passing the $pool variable into the the "tmsh::show ltm virtual" command. In this case you check if a single pool of all your pools is available. It should be "tmsh::show ltm virtual $pool"

        Beside of this the [exec] part can be avoided... Give me a sec to give you a quick coding how to access and enumerate LTM configurations within TMSH scripts...

        Cheers, Kai