Public/Add-PoolMember.ps1
Function Add-PoolMember{ <# .SYNOPSIS Add a computer to a pool as a member .LINK [Modifying pool members](https://devcentral.f5.com/questions/modifying-pool-members-through-rest-api) [Add a pool with an existing node member](https://devcentral.f5.com/questions/add-a-new-pool-with-an-existing-node) #> [cmdletBinding()] param ( $F5Session=$Script:F5Session, [Parameter(Mandatory=$true,ParameterSetName='InputObject',ValueFromPipeline=$true)] [Alias("Pool")] [PSObject[]]$InputObject, [Parameter(Mandatory=$true,ParameterSetName='PoolName',ValueFromPipeline=$true)] [string[]]$PoolName, [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true)] [string]$Partition, [Parameter(Mandatory=$false)] [PoshLTM.F5Address]$Address=[PoshLTM.F5Address]::Any, [Parameter(Mandatory=$false)] [string]$Name, [Parameter(Mandatory=$true)] [ValidateRange(0,65535)] [int]$PortNumber, [Parameter(Mandatory=$false)] [string]$Description, [ValidateSet("Enabled","Disabled")] [Parameter(Mandatory=$true)]$Status, [Alias('iApp')] [Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true)] [string]$Application='', [Parameter(Mandatory=$false)] [int]$RouteDomain ) begin { #Test that the F5 session is in a valid format Test-F5Session($F5Session) #If both Address and RouteDomain are passed in, then append RouteDomain to Address if ($Address -and $RouteDomain) { $Address = "{0}%{1}" -f $Address.IPAddress.IPAddressToString, $RouteDomain.ToString() } If (!$Name -and !$Address){ Write-Error 'Either a name or an IP address is required.' } #Strip out any port info when checking for an existing node $NodeName = $Name -replace ':\d+$','' $ExistingNode = Get-Node -F5Session $F5Session -Address $Address -Name $NodeName -Partition $Partition -ErrorAction SilentlyContinue } process { switch ($PSCmdLet.ParameterSetName) { 'InputObject' { switch ($InputObject.kind) { "tm:ltm:pool:poolstate" { $AddressString = $Address.ToString() if ($Address -ne [PoshLTM.F5Address]::Any) { # Default name to IPAddress if (!$Name) { $Name = '{0}:{1}' -f $AddressString, $PortNumber } } # Append port number if not already present if ($Name -notmatch ':\d+$') { $Name = '{0}:{1}' -f $Name,$PortNumber } foreach($pool in $InputObject) { if (!$Partition) { $Partition = $pool.partition } $JSONBody = @{name=$Name;partition=$Partition;address=$AddressString;description=$Description} if ($ExistingNode) { # Node exists, just add using name $JSONBody = @{name=('{0}:{1}' -f $ExistingNode.name,$PortNumber);partition=('{0}' -f $Partition);description=$Description} } # else the node will be created $JSONBody = $JSONBody | ConvertTo-Json $MembersLink = $F5session.GetLink($pool.membersReference.link) Invoke-F5RestMethod -Method POST -Uri "$MembersLink" -F5Session $F5Session -Body $JSONBody -ContentType 'application/json' -ErrorMessage "Failed to add $Name to $($pool.name)." | Add-ObjectDetail -TypeName 'PoshLTM.PoolMember' #After adding to the pool, make sure the member status is set as specified If ($Status -eq "Enabled"){ $pool | Get-PoolMember -F5Session $F5Session -Address $AddressString -Name $Name -Application $Application | Enable-PoolMember -F5session $F5Session | Out-Null } ElseIf ($Status -eq "Disabled"){ $pool | Get-PoolMember -F5Session $F5Session -Address $AddressString -Name $Name -Application $Application | Disable-PoolMember -F5session $F5Session | Out-Null } } } } } 'PoolName' { foreach($pName in $PoolName) { Get-Pool -F5Session $F5Session -PoolName $pName -Partition $Partition -Application $Application | Add-PoolMember -F5session $F5Session -Address $Address -Name $Name -Description $Description -PortNumber $PortNumber -Status $Status -Application $Application } } } } } |