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
Cirrus
Joined May 05, 2019
CodeCentral_194
Cirrus
Joined May 05, 2019
- rathidNimbostratus
Can some one have this code in python as well.
- Pinja_Sachi_736NimbostratusAlso Noticed - Doesnt Work with v11 due to ==> LocalLBPoolMember.get_object_status the v11 supports ==> LocalLBPool.get_member_object_status
- Pinja_Sachi_736NimbostratusGetting 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