PowerShell Pool Member Availability
Problem this snippet solves:
This PowerShell script will query the status of the pool members for a specified poolname.
How to use this snippet:
PowerShellPoolMemberAvailability.ps1
-BIGIP < bigip>
-User < user>
-Pass < pass>
[-Pool < poolname>
[-List]]
Code :
#----------------------------------------------------------------------------
# The contents of this file are subject to the "END USER LICENSE AGREEMENT
# FOR F5 Software Development Kit for iControl"; you may not use this file
# except in compliance with the License. The License is included in the
# iControl Software Development Kit.
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
# the License for the specific language governing rights and limitations
# under the License.
#
# The Original Code is iControl Code and related documentation
# distributed by F5.
#
# The Initial Developer of the Original Code is F5 Networks,
# Inc. Seattle, WA, USA. Portions created by F5 are Copyright (C) 1996-2010
# F5 Networks, Inc. All Rights Reserved. iControl (TM) is a registered
# trademark of F5 Networks, Inc.
#
# Alternatively, the contents of this file may be used under the terms
# of the GNU General Public License (the "GPL"), in which case the
# provisions of GPL are applicable instead of those above. If you wish
# to allow use of your version of this file only under the terms of the
# GPL and not to allow others to use your version of this file under the
# License, indicate your decision by deleting the provisions above and
# replace them with the notice and other provisions required by the GPL.
# If you do not delete the provisions above, a recipient may use your
# version of this file under either the License or the GPL.
#----------------------------------------------------------------------------
param(
[string]$BIGIP = $null,
[string]$User = $null,
[string]$Pass = $null,
[string]$Pool = $null,
[switch]$List = $false
);
Set-PSDebug -strict;
#-------------------------------------------------------------------------
function Write-Usage()
#
# Print Usage information for this script
#-------------------------------------------------------------------------
{
Write-Host "Usage: $(Split-Path -Path $MyInvocation.ScriptName -Leaf) -BIGIP -User -Pass [-Pool [-List]]";
exit;
}
#-------------------------------------------------------------------------
function Get-PoolList()
#-------------------------------------------------------------------------
{
$pool_list = (Get-F5.iControl).LocalLBPool.get_list();
Write-Host "Available Pools:";
foreach ($pool in $pool_list)
{
Write-Host " $pool";
}
}
#-------------------------------------------------------------------------
function Get-PoolMemberAvailability()
#-------------------------------------------------------------------------
{
param([string]$Pool);
$avail_count = 0;
$total_count = 0;
if ( $Pool.Length -ne 0 )
{
$MemberObjectStatusAofA = (Get-F5.iControl).LocalLBPoolMember.get_object_status((, $Pool));
# Only one pool, so let's access the members for first entry of returned array.
$MemberObjectStatusA = $MemberObjectStatusAofA[0];
foreach ($MemberObjectStatus in $MemberObjectStatusA)
{
$member = $MemberObjectStatus.member;
$addr = $member.address;
$port = $member.port;
$Availability = $MemberObjectStatus.object_status.availability_status;
$Enabled = $MemberObjectStatus.object_status.enabled_status;
$Description = $MemberObjectStatus.object_status.status_description;
$total_count++;
if ( $Availability -eq "AVAILABILITY_STATUS_GREEN" )
{
$avail_count++;
}
if ($List)
{
Write-Host "$Pool,${addr}:${port},$Availability,$Enabled,$Description";
}
}
if (!$List)
{
Write-Host "$avail_count/$total_count"
}
}
}
#-------------------------------------------------------------------------
function Do-Initialize()
#-------------------------------------------------------------------------
{
if ( (Get-PSSnapin | Where-Object { $_.Name -eq "iControlSnapIn"}) -eq $null )
{
Add-PSSnapIn iControlSnapIn
}
$success = Initialize-F5.iControl -HostName $BIGIP -Username $User -Password $Pass;
return $success;
}
#-------------------------------------------------------------------------
# Main Application Logic
#-------------------------------------------------------------------------
if ( ($BIGIP.Length -eq 0) -or ($User.Length -eq 0) -or ($Pass.Length -eq 0) )
{
Write-Usage;
}
if ( Do-Initialize )
{
if ( $Pool.Length -eq 0 )
{
Get-PoolList;
}
else
{
Get-PoolMemberAvailability -Pool $Pool;
}
} Published Mar 09, 2015
Version 1.0CodeCentral_194
Cirrostratus
Joined May 05, 2019
CodeCentral_194
Cirrostratus
Joined May 05, 2019
3 Comments
- Pinja_Sachi_736
Nimbostratus
Getting Error - Issue is the node belongs to a different partition and the pool belongs to a different partion - but the script assumes the pool partition as the node partition... Script works if both pool and node are in the same partition PowerShellPoolMemberAvailability.ps1 -BIGIP 1x.1x.x.x -User xx -Pass xx -Pool bi.dd.com Exception calling "get_object_status" with "1" argument(s): "Exception caught in LocalLB::urn:iControl:LocalLB/PoolMember::get_object_status() Exception: Common::OperationFailed primary_error_code : 16908342 (0x01020036) secondary_error_code : 0 error_string : 01020036:3: The requested Pool Member (/App_Admins/bi.dd.com /App_Admins/1x.x.x.x 80) was not found." At C:\pl\PowerShellPoolMemberAvailability.ps1:72 char:84 + $MemberObjectStatusAofA = (Get-F5.iControl).LocalLBPoolMember.get_object_status <<<< ((, $Pool)); + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : DotNetMethodException The variable '$MemberObjectStatusAofA' cannot be retrieved because it has not been set. At C:\pl\PowerShellPoolMemberAvailability.ps1:74 char:51 + $MemberObjectStatusA = $MemberObjectStatusAofA <<<< [0]; + CategoryInfo : InvalidOperation: (MemberObjectStatusAofA:Token) [], RuntimeException + FullyQualifiedErrorId : VariableIsUndefined The variable '$MemberObjectStatusA' cannot be retrieved because it has not been set. At C:\pl\PowerShellPoolMemberAvailability.ps1:75 char:57 + foreach ($MemberObjectStatus in $MemberObjectStatusA <<<< ) + CategoryInfo : InvalidOperation: (MemberObjectStatusA:Token) [], RuntimeException + FullyQualifiedErrorId : VariableIsUndefined 0/0 - Pinja_Sachi_736
Nimbostratus
Also Noticed - Doesnt Work with v11 due to ==> LocalLBPoolMember.get_object_status the v11 supports ==> LocalLBPool.get_member_object_status - rathid
Nimbostratus
Can some one have this code in python as well.