Public/Network/Remove-VergeNetworkAlias.ps1
|
function Remove-VergeNetworkAlias { <# .SYNOPSIS Deletes an IP alias from a VergeOS virtual network. .DESCRIPTION Remove-VergeNetworkAlias deletes one or more IP aliases from a network. .PARAMETER Network The name or key of the network containing the alias. .PARAMETER IP The IP address of the alias to delete. Supports wildcards (* and ?). .PARAMETER Name The name/hostname of the alias to delete. Supports wildcards (* and ?). .PARAMETER Key The unique key (ID) of the alias to delete. .PARAMETER AliasObject An alias object from Get-VergeNetworkAlias. Accepts pipeline input. .PARAMETER Server The VergeOS connection to use. Defaults to the current default connection. .EXAMPLE Remove-VergeNetworkAlias -Network "External" -Name "webserver" Deletes the IP alias named "webserver". .EXAMPLE Remove-VergeNetworkAlias -Network "External" -IP "10.0.0.100" -Confirm:$false Deletes the alias for 10.0.0.100 without confirmation. .EXAMPLE Get-VergeNetworkAlias -Network "External" -Name "test*" | Remove-VergeNetworkAlias Deletes all aliases starting with "test". .OUTPUTS None .NOTES Aliases referenced by firewall rules cannot be deleted until the rules are removed. #> [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'High', DefaultParameterSetName = 'ByName')] param( [Parameter(Mandatory, Position = 0, ParameterSetName = 'ByName')] [Parameter(Mandatory, Position = 0, ParameterSetName = 'ByIP')] [Parameter(Mandatory, Position = 0, ParameterSetName = 'ByKey')] [string]$Network, [Parameter(Mandatory, Position = 1, ParameterSetName = 'ByIP')] [SupportsWildcards()] [string]$IP, [Parameter(Mandatory, Position = 1, ParameterSetName = 'ByName')] [SupportsWildcards()] [string]$Name, [Parameter(Mandatory, ParameterSetName = 'ByKey')] [int]$Key, [Parameter(Mandatory, ValueFromPipeline, ParameterSetName = 'ByAliasObject')] [PSTypeName('Verge.NetworkAlias')] [PSCustomObject]$AliasObject, [Parameter()] [object]$Server ) begin { # Resolve connection if (-not $Server) { $Server = $script:DefaultConnection } if (-not $Server) { throw [System.InvalidOperationException]::new( 'Not connected to VergeOS. Use Connect-VergeOS to establish a connection.' ) } } process { # Get aliases to delete $aliasesToDelete = switch ($PSCmdlet.ParameterSetName) { 'ByName' { Get-VergeNetworkAlias -Network $Network -Hostname $Name -Server $Server } 'ByIP' { Get-VergeNetworkAlias -Network $Network -IP $IP -Server $Server } 'ByKey' { Get-VergeNetworkAlias -Network $Network -Key $Key -Server $Server } 'ByAliasObject' { $AliasObject } } foreach ($alias in $aliasesToDelete) { if (-not $alias) { continue } $displayName = if ($alias.Name) { "$($alias.Name) ($($alias.IP))" } else { $alias.IP } if ($PSCmdlet.ShouldProcess($displayName, "Remove IP Alias from $($alias.NetworkName)")) { try { Write-Verbose "Deleting IP alias '$displayName' (Key: $($alias.Key))" $response = Invoke-VergeAPI -Method DELETE -Endpoint "vnet_addresses/$($alias.Key)" -Connection $Server Write-Verbose "IP alias '$displayName' deleted successfully" } catch { $errorMessage = $_.Exception.Message if ($errorMessage -match 'referencing') { Write-Error -Message "Cannot delete IP alias '$displayName': It is referenced by firewall rules. Remove the rules first." -ErrorId 'AliasInUse' } else { Write-Error -Message "Failed to delete IP alias '$displayName': $errorMessage" -ErrorId 'AliasDeleteFailed' } } } } } } |