CodeShare
Have some code. Share some code.
cancel
Showing results for 
Search instead for 
Did you mean: 
Custom Alert Banner
LoyalSoldier
Altostratus
Altostratus

Problem this snippet solves:

This allows a publicly accessible status page of Pools and Pool Members. No cron job is needed.

How to install:

  • If you only have one pool, you will probably have to comment out the "errmsg" HTML response code. For some reason one pool in the Data Group List kicks out an error. "Errmsg" is on lines 60 and 121.

 

Edits to the code:

  • Line 3 - Modify to your IP scheme to lock down access, or allow all
  • Line 8 - Document title information (shows in browser tab)
  • Line 10 - Author information
  • Line 11 - Auto refresh interval (update line 30 if you change this)
  • Line 34 - Page title information
  • Lines 44-45 - Links to other locations if you have devices in different locations/groups
  • Line 122 - Comment out with a "#" if you don't wish to log each time someone connects or the page refreshes

*HTML source and inspiration taken from user The Bhattman and the code is revamped: https://devcentral.f5.com/codeshare/pool-member-status-page-on-a-virtual-server-v10

How to use this snippet:

Screenshot 0151T000003d9DKQAY.png

Code :

 

when HTTP_REQUEST {
if { [HTTP::uri] eq "/status" } {
set response "<!DOCTYPE html>\r\n"
append response "<html lang=\"en\">\r\n"
append response "<head>\r\n"
append response "<title>F5 LTM Server Pool Status</title>\r\n"
append response "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\r\n"
append response "<meta name=\"author\" content=\"Troy Luschen 16Mar2017\"/>\r\n"
append response "<meta http-equiv=\"refresh\" content=\"30\"/>\r\n"
append response "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"/>\r\n"
# ------ Style Section ------ 
append response "<style>\r\n"
append response "h1 {font-weight:normal;text-transform:uppercase;color:#000000;background-color:#D9D7DE;border: 5px groove #699635;font-size:100%;text-align:center;font-family:lucida sans unicode, lucida grande, sans-serif;line-height:3;margin:0px;padding:5px;min-width:675px;width:50%;}\r\n"
append response "h2 {font-weight:normal;font-style:italic;color:#000000;letter-spacing:0pt;word-spacing:1pt;border: 0px;font-size:80%;text-align:center;font-family:lucida sans unicode, lucida grande, sans-serif;line-height:1;margin:0px;padding:0px;min-width:675px;width:50%;}\r\n"
append response "h4 {font-weight:bold;color:#000000;letter-spacing:0pt;word-spacing:1pt;border: 0px;font-size:90%;text-align:left;font-family:lucida sans unicode, lucida grande, sans-serif;line-height:1;margin:0px;padding:0px;}\r\n"
append response "div.layout1 {width:50%;padding:5px;min-width:675px;}\r\n"
append response "div.layout2 {width:50%;padding:7px;min-width:675px;font-size:90%;font-family:lucida sans unicode, lucida grande, sans-serif;}\r\n"
append response "p {font-weight:normal;color:#000000;border:0px;font-size:90%;text-align:left;font-family:lucida sans unicode, lucida grande, sans-serif;}\r\n"
append response "p.time {font-weight:normal;color:#000000;letter-spacing:1pt;word-spacing:1pt;font-size:80%;text-align:left;font-family:arial,helvetica,sans-serif;line-height:1;margin:0px;padding:0px;}\r\n"
append response "p.time2 {font-weight:normal;color:#000000;letter-spacing:1pt;word-spacing:1pt;font-size:70%;text-align:left;font-family:arial,helvetica,sans-serif;line-height:1;margin:0px;padding:0px;}\r\n"
append response "li {font-weight:normal;color:#000000;border:0px;font-size:90%;text-align:left;font-family:lucida sans unicode, lucida grande, sans-serif;line-height:1;margin:0px;padding:0px;}\r\n"
append response "#pool_status th {font-weight:bold;padding-top:12px;padding-bottom:12px;text-align:left;background-color:#85c1e9;color:#434474;}\r\n"
append response "#pool_status tr table tr:nth-child(even){background-color:#ddd;}\r\n"
append response "#pool_status tr table tr:hover {font-weight:bold;font-size:110%;font-variant:small-caps;background-color:#B7950B;}\r\n"
append response "</style>\r\n"
# ------ End Style Section ------ 
append response "</head>\r\n"
append response "<body>\r\n"
append response "<p class=\"time\">Status Check Time: [clock format [clock seconds]]</p>\r\n"
append response "<p class=\"time2\">Auto Refreshes Every 30 Seconds</p>\r\n"
append response "<br>\r\n"
append response "<h1>F5 LTM Server Pool Status</h1>\r\n"
append response "<h2>Status of Virtual Servers and their Pool Members</h2>\r\n"
append response "<br>\r\n"
# Table containing "F5 Locations" and "Critical" sections.
append response "<div class=\"layout1\">\r\n"
append response "<table style=\"width:100%;font-family:lucida sans unicode, lucida grande, sans-serif;\">\r\n"
append response " <tr>\r\n"
append response " <td style=\"width:50%;text-align:left;vertical-align:top;\">\r\n"
append response " <h4>F5 Locations</h4>\r\n"
append response " <ul>\r\n"
append response " <li><a href=\"https://<;IP>/status\">LTM Pool Status at Location 1</a></li>\r\n"
append response " <li><a href=\"https://<;IP>/status\">LTM Pool Status at Location 2</a></li>\r\n"
append response " </ul>\r\n"
append response " </td>\r\n"
append response " <td style=\"width:50%;border-style:dashed;border-width:3px;padding:5px;font-size:90%;text-align:left;vertical-align:top;\">\r\n"
append response " <h4 style=\"font-size:100%;font-weight:bold;color:#FF0000;padding-bottom:10px;\">Critical - No Available Pool Members</h4>\r\n"
foreach { selectedpool } [class get BIG-IP_Pool_Member_Status] {
set thispool [getfield $selectedpool " " 1]
if { [catch {
if { [active_members $thispool] < 1 } {
# Pool Status for pools with no active members
append response " <div style=\"line-height:125%;\">$thispool</div>\r\n"
} else {
# Skip
}
} errmsg ] } {
append response " <div style=\"line-height:125%;\">$thispool <span style=\"font-weight:bold;color:#FF0000\">ERROR: Invalid pool name</span></div>\r\n"
}
}
append response " </td>\r\n"
append response " </tr>\r\n"
append response "</table>\r\n"
append response "</div>\r\n"
# End Table containing "F5 Locations" and "Critical" sections.
# Tables containing Pools with at least one available pool member.
foreach { selectedpool } [class get BIG-IP_Pool_Member_Status] {
set thispool [getfield $selectedpool " " 1]
if { [catch {
if { [active_members $thispool] < 1 } {
# Pool Status for pools with no active members
# Skip. This is implemented above in the first table.
} else {
# Pool Status
append response "<div class=\"layout2\">\r\n"
append response "<table style=\"width:100%;\" id=\"pool_status\">\r\n"
append response " <tr>\r\n"
append response " <th colspan=\"2\">$thispool</th>\r\n"
append response " </tr>\r\n"
append response " <tr>\r\n"
append response " <td style=\"width:50%;text-align:left;vertical-align:top;\">\r\n"
append response " <h4>Pool Member Status</h4>\r\n"
# Pool Member Status Section
append response " <table>\r\n"
foreach { pmem } [members -list $thispool] {
append response " <tr>\r\n"
append response " <td style=\"font-size:90%;\">\r\n"
append response " [join $pmem ":"] is "
set nodestatus "[LB::status pool $thispool member [getfield $pmem " " 1] [getfield $pmem " " 2]]"
if {$nodestatus == "up"} {
append response "<span style=\"font-weight:bold;color:#17ab4a;\">Up</span>\r\n"
} elseif {$nodestatus == "down"} {
append response "<span style=\"font-weight:bold;color:#FF0000;\">Down</span>\r\n"
} elseif {$nodestatus == "session_disabled"} {
append response "<span style=\"font-weight:bold;color:#B7950B;\">Disabled</span>\r\n"
} else {
append response "<span style=\"font-weight:bold;color:#17ab4a;\">$nodestatus</span>\r\n"
}
set nodestatus null
append response " </td>\r\n"
append response " </tr>\r\n"
}
append response " </table>\r\n"
# End Pool Member Status Section
append response " </td>\r\n"
append response " <td style=\"width:50%;font-size:90%;text-align:left;vertical-align:top;\">\r\n"
append response " </td>\r\n"
append response " </tr>\r\n"
append response "</table>\r\n"
append response "</div>\r\n"
append response "<div style=\"padding-bottom:5px;\"></div>\r\n"
}
} errmsg ] } {
append response "<div style=\"line-height:125%;\">$thispool <span style=\"font-weight:bold;color:#FF0000\">ERROR: Invalid pool name</span></div>\r\n"
}
}
# End Tables containing Pools with at least one available pool member.
append response "</body>\r\n"
append response "</html>\r\n"
HTTP::respond 200 content $response "Content-Type" "text/html"
}
log local0.info "$response"
}

 

Tested this on version:

12.1

Comments
Maneesh_72711
Cirrostratus
Cirrostratus

This is very good to get the details as we have number of developers who keep on chasing us for the pool member status.

 

AN
Nimbostratus
Nimbostratus

I tried above code... I am getting ERROR: Invalid pool name

 

I put IP:PortNumber in BIG-IP_Pool_Member_Status Address: 1.1.1.1 Value: :80

 

Do we suppose to put pool name i under IRUle:Data Group List? We are using Partition on BigIP.

 

LoyalSoldier
Altostratus
Altostratus

Yes, your pool names. The "IP:Port" in the image is what the result will look like when the page is processed.

 

So, under iRules | Data Group List you should have a list named "BIG-IP_Pool_Member_Status", with the string list of Pools you want. Nothing for the Value field.

 

Screenshot example: https://f5.com/Portals/1/Images/whitepaper-images/Enhancing%20Exchange%20Mobile%...

 

AN
Nimbostratus
Nimbostratus

That works,,, It wasn't clear Data Group list -> String we supposed to select. I had Address selected but once I changed to String and include pool member string,,, it started working,,,

 

Thanks again,,

 

LoyalSoldier
Altostratus
Altostratus

Your welcome. Sorry about forgetting that piece of information.

 

AN
Nimbostratus
Nimbostratus

No Problem.. It's an awesome Tool that allow application/server team to look for Pool status.

 

Thanks for sharing.

 

Maneesh_72711
Cirrostratus
Cirrostratus

LoyalSoldier is there a way we can get the output like an XML ?

 

I got 150+ Pools out of which around 60 are marked down/decommed but still lying in the config, as a result it takes top half of the page, if I have XML I can get the XML/JSON called from an external application and there I can put a search box in which user can input his search string to extract the required info.

 

Or for that matter if we can have something on this page itself that is also great.

 

LoyalSoldier
Altostratus
Altostratus

Maneesh,

 

As far as an XML output, you would have to re-code the HTML into an XML style format. For an example, see this link, go to the bottom of the last block of code and look for the section starting with this:

if { [HTTP::uri] eq "/rss" } {
. It is RSS, which is XML, but you're more likely looking for XHTML, which is similar. https://devcentral.f5.com/s/articles/pool-member-status-page-on-a-virtual-server-v10

 

A built-in search feature sounds cool, but would have to be with a client side scripting ability, such as JavaScript. If you have a working example I can try and add it when I get time.

 

Maneesh_72711
Cirrostratus
Cirrostratus

when HTTP_REQUEST { IP Block. Allow specific users/groups to access the status page. if { [IP::addr [IP::client_addr] equals 10.0.0.0/8 ] } { if { [HTTP::uri] eq "/servicexml" } { set response "\r\n"

 

     Code to display inactive pools in XML Format
    append response "\r\n"
    append response "Inactive\r\n"
                            foreach { selectedpool } [class get test] {
                            set thispool [getfield $selectedpool " " 1]
                                if {  [catch {
                                    if { [active_members $thispool] < 1 } {
                                         Pool Status for pools with no active members
                                        append response "$thispool\r\n"
                                        } else {
                                         Skip
                                    }
                                 } errmsg ] } {
                                    append response "$thispool: ERROR: Invalid pool name\r\n"
                                }
                            }


     End XML containing "F5 Locations" and "Critical" sections.
     Code to display active pools in XML Format

    append response "Active\r\n"
    foreach { selectedpool } [class get test] {
        set thispool [getfield $selectedpool " " 1]
        if {  [catch {
            if { [active_members $thispool] < 1 } {
                 Pool Status for pools with no active members
                 Skip.  This is implemented above in the first table.
                } else {
                 Pool Status
                    append response "$thispool\r\n"
                     Pool Member Status Section
                    foreach { pmem } [members -list $thispool] {
                        append response "$pmem\r\n"
                                            set nodestatus "[LB::status pool $thispool member [getfield $pmem " " 1] [getfield $pmem " " 2]]"
                                            if {$nodestatus == "up"} {
                                                append response "Up\r\n"
                                            } elseif {$nodestatus == "down"} {
                                                append response "Down\r\n"
                                            } elseif {$nodestatus == "session_disabled"} {
                                                append response "Disabled\r\n"
                                            } else {
                                                append response "$nodestatus\r\n"
                                            }
                                            set nodestatus null
                    }
                }
            } errmsg ] } {
                append response "$thispool: ERROR: Invalid pool name\r\n"
            }

    }
    append response "\r\n"
     End Pool Member Status Section

    HTTP::respond 200 content $response "Content-Type" "text"   
}

} }

 

Maneesh_72711
Cirrostratus
Cirrostratus

Thanks LoyalSoldier was able to convert the code to XML as mentioned above. Now can read the XML via an external HTML/JavaScript.

 

LoyalSoldier
Altostratus
Altostratus

Cool. Can you upload the whole code for an XML solution?

 

Maneesh_72711
Cirrostratus
Cirrostratus

Above my comment I had already posted it.

 

AN
Nimbostratus
Nimbostratus

Hi Maneesh,, Does you code allow users to select/search particular pool??

 

Maneesh_72711
Cirrostratus
Cirrostratus

For searching we would have to write a HTML page which calls XML using javascript for search capability.

 

I am asking a developer to assist me writing a HTML page for the same which will give search capability for finding pools. XML was taking long to load hence have coded a JSON i-rule which would be faster fetching results.

 

I would post the JSON code as well below this comment.

 

Maneesh_72711
Cirrostratus
Cirrostratus

when HTTP_REQUEST { IP Block. Allow specific users/groups to access the status page. if { [IP::addr [IP::client_addr] equals 10.0.0.0/8 ] } { if { [HTTP::uri] eq "/json" } { set response "{ \"PoolDet\": ["

        foreach { selectedpool } [class get test] {
        set thispool [getfield $selectedpool " " 1]
        if {  [catch {
            if { [active_members $thispool] < 1 } {
                 Pool Status for pools with no active members
                            append response "{\"PoolName\": \"$thispool\","
                            append response "\"PoolStatus\":\"Inactive\"},"
                                                                            } else {
                 Pool Status
                                                                                            append response "{"
                                                                                            append response "\"PoolName\": \"$thispool\","
                                                                                            append response "\"PoolStatus\":\"Active\","
                                                                                            append response "\"PoolMemberDet\": \["
                                                                                             Pool Member Status Section
                                                                                            foreach { pmem } [members -list $thispool] {                                
                                                                                                            append response "{\"PoolMember\": \"$pmem\","
                                                                                                                                                                                            set nodestatus "[LB::status pool $thispool member [getfield $pmem " " 1] [getfield $pmem " " 2]]"
                                                                                                                                                                                            if {$nodestatus == "up"} {
                                                                                                                                                                                                            append response "\"PoolMemberStatus\": \"Up\""
                                                                                                                                                                                            } elseif {$nodestatus == "down"} {
                                                                                                                                                                                                            append response "\"PoolMemberStatus\": \"Down\""
                                                                                                                                                                                            } elseif {$nodestatus == "session_disabled"} {
                                                                                                                                                                                                            append response "\"PoolMemberStatus\": \"Disabled\""
                                                                                                                                                                                            } else {
                                                                                                                                                                                                            append response "\"PoolMemberStatus\": \"$nodestatus\""
                                                                                                                                                                                            }
                                                                                                                                                                                            set nodestatus null
                                                                                                            append response "},"
                                                                                            }
                                                                                            append response "{ \"PoolMember\": \"filler\", \"PoolMemberStatus\": \"filler\" }\]},"
                                                                            }
                                                            } errmsg ] } {
                                                                            append response "\"PoolNameError\": \"$thispool: ERROR: Invalid pool name\""
                                                            }

                            }
                            append response "{"
                            append response "\"PoolName\": \"filler\","
                            append response "\"PoolStatus\":\"filler\""   
                            append response "}\]}"   
                             End Pool Member Status Section

                            HTTP::respond 200 content $response "Content-Type" "application/json"      
            }

} }

Jason_291422
Nimbostratus
Nimbostratus

This is exactly what I have been looking for! But I am running into a little issue where pool members that are Offline still show as Up. The status of Disabled members show correctly. Any thoughts on what could be the issue?

 

Also, how hard would it be to add some additional information like hostname next to the IP:PORT and the description of the Pool next to the pool name?

 

Thanks in advance!

 

LoyalSoldier
Altostratus
Altostratus

Jason,

 

Not sure why your Offline members are showing Up. I checked mine, and I have a couple members offline...one being due to a monitor setting it offline, and the other is due to manually disabling it. Both show Down on the HTML page. Maybe verify your settings/implementation is correct?

 

As far as adding the hostname... I looked into that while building the script and there was no easy/known way to incorporate the hostname from an iRule command, such as "[members -list $thispool]". The "members" command, for example, only pulls the IP and Port. Never tried looking at adding the description field.

 

With that said, you may be able to get those fields added using iCall, but I don't have enough experience with iCall, or time, to attempt it. If you or someone else wants to feel free. Can add that to the script if it works out.

 

One such example: https://devcentral.f5.com/s/feed/0D51T00006pY5mySAC

 

Jason_291422
Nimbostratus
Nimbostratus

LoyalSoldier,

 

Yeah its very bizarre as I have a couple pools that are Offline (Enabled) due to monitoring, but the status page still shows those Up. I wouldnt think it mattered if the node showed as Up under Nodes but the monitor has it marked down at the pool, correct?

 

Even more bizarre, I have a pool that is disabled and I have seen it change to up randomly.

 

Im supposed to use that actually name of the pool the pool, correct? The only reason I ask is in your screen shot above the pool names look like just random characters.

 

LoyalSoldier
Altostratus
Altostratus

So I did a test on one of mine and caused a Pool to go Offline (Enabled). All the Nodes are still Available (Enabled). Looking at the Status Page, it now shows that Pool as having no available pool members and lists it in the top Critical box. This is how it should be working. The code is executed based on the pool members, not nodes.

 

On your disabled pool that randomly changes to Up....does it do that in the Configuration Manager as well? Show the member(s) being marked up in the logs? Would make sure it is operating as expected first outside of the Status Page.

 

Yes, you must add the actual pool names to the iRule Data Groups area. The screenshot contains gray boxes in areas that will change based on your setup (i.e. Pool Name, IP:Port, etc.). You do NOT put your Pool Names in those areas. The code will do that for you based on the iRule Data Group.

 

LenderLive_Mitc
Nimbostratus
Nimbostratus

Great little script! Thank you for sharing this.

 

Works like a Charm !!! Thank you.

 

AN
Nimbostratus
Nimbostratus

Hi Maneesh ,

 

I tried copying your code and it doesn't like... Tried to go through iRule..but can't get it going...

 

I changed following lines

 

Original: set response "{ \"PoolDet\": [" Changed to: set response "{ \"PoolDet\": }"

 

Now it's complaining about following line: if { [catch {

 

LoyalSoldier
Altostratus
Altostratus

Hi AN,

 

It could be that you are missing a few closing "}". Looking at Maneesh's code, there are a couple "}" under the code input box.

 

konta_eps_25448
Nimbostratus
Nimbostratus

Hi, i am getting an error: http://prntscr.com/i7cy5a

 

Not sure what is misconfigured. I have followed instructions: -created VS -Created iRule -Created DataGroup

 

LoyalSoldier
Altostratus
Altostratus

Hi konta.eps,

 

Did you create the Virtual Server with a Client SSL profile (most likely requires one with no pools so that it doesn't pass traffic on to pool members, thus "bypassing" the script)? If so, or whether you are using an existing one, is this VS load balancing with a pool? If so, try removing the pool from the VS, or test on a new one with no pool assigned (if you can't remove the pool due to being in production).

 

Other than that, does your VS's statistics show it being hit? Able to ping that IP? Other IPs on it working?

 

konta_eps_25448
Nimbostratus
Nimbostratus

I have created new client SSL profile and it works. Thank you, sir.

 

DaleT_215516
Nimbostratus
Nimbostratus

Works Perfectly.... This is everything i was looking for thanks.

 

stevenSL_284049
Nimbostratus
Nimbostratus

This is exactly what I was looking for. Thanks very much for posting.

 

Siva_balan
Nimbostratus
Nimbostratus

i am also getting similar like below error:

 

http://prntscr.com/i7cy5a

 

But i am using separate Client SSL profile and able to see the hits in VS's statistics.

 

is it applicable only for Common partition? or can i use this for different partition? Do i need make any changes for different partition?

 

LoyalSoldier
Altostratus
Altostratus

Hi Siva,

 

When you say "separate Client SSL profile" are you actually referring to that, or a separate VIP that has no pool members? Seen it work best with a separate VIP with no pool members.

 

I built it on a system with only one partition: the common partition. I don't see why it couldn't work on another partition, but haven't tried that. It may require extra coding to specify the partition to use.

 

======== UPDATE 23Oct2018 ========

 

I found this article, and it does appear to be an issue with different partitions being in use. So, you will have to explicitly reference them.

 

From below link:

 

Note that starting in v11, any data-groups that are configured in a partition other than Common must be referenced by /Partition_Name/Data-Group_Name, even by iRules configured in that partition. Data-groups referenced only by name are implicitly presumed to be /Common/Data-Group_Name.

 

My suggestion to try is to try explicitly listing them in the Data Group under:

 

Local Traffic ›› iRules : Data Group List.

 

I'm not utilizing partitions, so am unable to test it myself. If you find this works, or doesn't, please post the results so others will know.

 

https://devcentral.f5.com/s/feed/0D51T00006i7XiOSAU

 

Another link/source if modifying the iRule code https://clouddocs.f5.com/api/irules/class.html

 

ZinalA_361953
Nimbostratus
Nimbostratus

Hey, Is there a way to report on every Pool status?

 

LoyalSoldier
Altostratus
Altostratus

ZinalA,

 

It does report on every Pool status. Looking at the screenshot I included, you have "Pool Name" in the blue area, which is a placeholder for the actual pool names. Then under those you have the "Pool Member Status" for each of the members. If the whole Pool is down (no available members) then it will show in the Critical section.

 

If I'm not understanding then please explain.

 

ZinalA_361953
Nimbostratus
Nimbostratus

If LTM configuration is automated, this means that every pool has to be entered here as well. My question was if we can enable this view for every pool member hosted on the LTM.

 

LoyalSoldier
Altostratus
Altostratus

LTM is not fully automated...you must configure per the instructions that are listed. Posted them below. Every pool member will automatically show up, but you must configure a Data Group List and add what Pools you want to monitor on that LTM. Each LTM would have its own similar configuration.

 

  • Create iRule Data Group List called "BIG-IP_Pool_Member_Status" and include the Pools you want to show a status on*
  • Create iRule using the code below.
  • Create Virtual Server with Client SSL profile (most likely requires one with no pools so that it doesn't pass traffic on to pool members, thus "bypassing" the script)
  • Test by accessing the VIP at:
Siva_balan
Nimbostratus
Nimbostratus

I am using separate VIP that has no pool members and created new Client SSL profile.

 

Still facing the same issue. But the only different is, i am not using common partition.

 

LoyalSoldier
Altostratus
Altostratus

Have you tested it for how it was meant to work - on the common partition? Just to rule that out.

 

ZinalA_361953
Nimbostratus
Nimbostratus

Create iRule Data Group List called "BIG-IP_Pool_Member_Status" and include the Pools you want to show a status on* If its a lB with Multiple VIPS which gets created on a daily basis, how can i include all pools. Do i need to add these manually or can i use some string that gets every pool?

 

Create iRule using the code below. I have created the irule.Do i need to attch this to the VIP as well?

 

Thanks for your help so far.

 

ZinalA_361953
Nimbostratus
Nimbostratus

Managed to get the hits on irules but i still dont see the page. I think this is because the Data Group List is incorrect. I am not too sure what string to use here i guess. LTM Version is 12.1.2 in case if the script is for older version.

 

LoyalSoldier
Altostratus
Altostratus

So inside your Data Group List at location: Local Traffic ›› iRules : Data Group List ›› BIG-IP_Pool_Member_Status

 

You should have the list of your Pools you want to monitor. Should match exactly with what you have at Local Traffic ›› Pools : Pool List. You should be putting the pool names in the String field, and nothing in the Value field.

 

ZinalA_361953
Nimbostratus
Nimbostratus

thanks. Seems like the page wouldnt work even though i could see hits on VIP and iRule. I used the original code/irule that attached as Zip to this discussion. Hope thats correct.

 

LoyalSoldier
Altostratus
Altostratus

Yes, original code in the zip is correct.

 

bac81987_341588
Nimbostratus
Nimbostratus

This is great. I am currently using this iRule myself, but most of my pools aren't displaying correctly. The one that is displaying is on the Common partition. All the others that aren't showing correctly have the message "ERROR: Invalid pool name". The only difference I can see is that they are on another partition. I've triple checked the names, and I can confirm they are typed correctly. I've even copied and pasted them in, but no luck.

 

Is there a way I can monitor all the pools? According to F5, an iRule can reference any object, regardless of the partition in which the referenced object resides.

 

https://support.f5.com/kb/en-us/products/big-ip_ltm/manuals/product/bigip-system-irules-concepts-11-...

 

LoyalSoldier
Altostratus
Altostratus

bac81987,

 

I found this article, and it does appear to be an issue with different partitions being in use. So, you will have to explicitly reference them.

 

From below link:

 

Note that starting in v11, any data-groups that are configured in a partition other than Common must be referenced by /Partition_Name/Data-Group_Name, even by iRules configured in that partition. Data-groups referenced only by name are implicitly presumed to be /Common/Data-Group_Name.

 

My suggestion to try is to try explicitly listing them in the Data Group under:

 

Local Traffic ›› iRules : Data Group List.

 

I'm not utilizing partitions, so am unable to test it myself. If you find this works, or doesn't, please post the results so others will know.

 

Thanks

 

https://devcentral.f5.com/s/feed/0D51T00006i7XiOSAU

 

Another link/source if modifying the iRule code https://clouddocs.f5.com/api/irules/class.html

 

Lucern
Nimbostratus
Nimbostratus

I'm thinking this doesn't like underscores in the pool names because it can't find any of mine. Anyone else have this issue? I'm running 12.1.3.6

 

Looking forward to getting this going!

 

Thanks!

 

bac81987_341588
Nimbostratus
Nimbostratus

Underscores work for me. Currently running 13.1.1

 

LoyalSoldier
Altostratus
Altostratus

Not sure if this helps... https://support.f5.com/csp/article/K6869

Custom characters for the BIG-IP system

Custom characters are not allowed, except for the following:

    hyphen (-)
    period (.)
    underscore (_)

The object name must start with a letter or underscore.

Archived - K12812: The Configuration utility and tmsh incorrectly allow profile names that begin wit...

Lucern
Nimbostratus
Nimbostratus

Right, we're following those rules.. Actually I created a test pool with hyphens and it can't find that either. Something funny is going on.. Hmmmmmm.

 

Thanks guys!

 

bac81987_341588
Nimbostratus
Nimbostratus

I just realized something today. My pools I had were created with an iApp template. When I created a new test pool with hypens and underscores manually, they show up properly on the webpage.

 

LoyalSoldier
Altostratus
Altostratus

Never used iApps in the creation/testing of this tool, nor were any of my pools created that way.

 

Lucern
Nimbostratus
Nimbostratus

YUP! That's it! The majority of my pools are created via an iApp so I put in one that wasn't and it works! Any chance you could mod it so it would work with iApp pools?

 

Thanks a bunch for creating this!!

 

Version history
Last update:
‎19-Sep-2022 22:31
Updated by:
Contributors