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 <bigip> -User <user> -Pass <pass> [-Pool <poolname> [-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;
}
}</poolname></pass></user></bigip>