functions/azure/loadbalancer/Add-LBRule.ps1
function Add-LBRule { [CmdletBinding()] param ( [Parameter(Mandatory)] [string]$ResourceGroup, [Parameter(Mandatory)] [string]$LoadBalancerName, [Parameter(Mandatory)] [int]$FrontendPort, [int]$BackendPort = $FrontendPort, [string]$FrontendIPConfigName, # Standard: Erste Frontend-IP, falls leer [string]$BackendPoolName, # Standard: Erster Backend-Pool, falls leer [ValidateSet('Tcp', 'Udp')] [string]$Protocol = 'Tcp', [string]$ProbeName = $("LBP-$FrontendPort"), [string]$RuleName = $("LBR-$FrontendPort"), [ValidateSet('SourceIPProtocol', 'SourceIP', 'Default')] [string]$SessionPersistence = 'SourceIPProtocol', [int]$IdleTimeoutInMinutes = 30, [bool]$FloatingIP = $false, [bool]$EnableTcpReset = $true ) $lb = Get-AzLoadBalancer -ResourceGroupName $ResourceGroup -Name $LoadBalancerName if (-not $FrontendIPConfigName) { $FrontendIPConfigName = $lb.FrontendIpConfigurations[0].Name } $frontend = $lb.FrontendIpConfigurations | Where-Object { $_.Name -eq $FrontendIPConfigName } if (-not $frontend) { throw "Frontend IP-Configuration '$FrontendIPConfigName' not found!." } if (-not $BackendPoolName) { $BackendPoolName = $lb.BackendAddressPools[0].Name } $backend = $lb.BackendAddressPools | Where-Object { $_.Name -eq $BackendPoolName } if (-not $backend) { throw "Backend-Pool '$BackendPoolName' not found!" } $probe = $lb.Probes | Where-Object { $_.Name -eq $ProbeName } if (-not $probe) { $probe = Add-LBHealthProbe -ResourceGroup $ResourceGroup -LoadBalancerName $LoadBalancerName -Port $BackendPort -Protocol $Protocol -ProbeName $ProbeName # Re-read the LB to get updated references $lb = Get-AzLoadBalancer -ResourceGroupName $ResourceGroup -Name $LoadBalancerName $probe = $lb.Probes | Where-Object { $_.Name -eq $ProbeName } } $existingRule = $lb.LoadBalancingRules | Where-Object { $_.Name -eq $RuleName } if ($existingRule) { Write-Information "Load Balancer Rule '$RuleName' existiert bereits." return } $rule = New-AzLoadBalancerRuleConfig -Name $RuleName ` -FrontendIpConfiguration $frontend ` -BackendAddressPool $backend ` -Probe $probe ` -Protocol $Protocol ` -FrontendPort $FrontendPort ` -BackendPort $BackendPort ` -IdleTimeoutInMinutes $IdleTimeoutInMinutes ` -EnableFloatingIP:$FloatingIP ` -LoadDistribution $SessionPersistence ` -EnableTcpReset:$EnableTcpReset $lb.LoadBalancingRules.Add($rule) return Set-AzLoadBalancer -LoadBalancer $lb } |