LibreDevOpsHelpers.AzureNsg/LibreDevOpsHelpers.AzureNsg.psm1
function Set-CurrentIPInNsg { param ( [string]$ResourceGroup, # Accept the resource group as a parameter [string]$NsgName, # Accept the NSG name as a parameter [bool]$AddRule, [string]$RuleName, [int]$Priority, [string]$Direction, [string]$Access, [string]$Protocol = "Tcp", [string]$SourcePortRange = "*", [string]$DestinationPortRange = "*", [string]$DestinationAddressPrefix = "VirtualNetwork" ) try { if ($AddRule) { $currentIp = (Invoke-RestMethod -Uri "https://checkip.amazonaws.com").Trim() if (-not $currentIp) { _LogMessage -Level "ERROR" -Message "Failed to obtain current IP." -InvocationName "$( $MyInvocation.MyCommand.Name )" return } $sourceAddressPrefix = $currentIp # Check if the rule already exists using Azure CLI $existingRule = az network nsg rule list --resource-group $ResourceGroup --nsg-name $NsgName --query "[?name=='$RuleName']" -o tsv if ($existingRule) { _LogMessage -Level "INFO" -Message "Rule $RuleName already exists on $NsgName. Updating it with the new IP address." -InvocationName "$( $MyInvocation.MyCommand.Name )" # Remove existing rule to update az network nsg rule delete --resource-group $ResourceGroup --nsg-name $NsgName --name $RuleName } # Adding the rule using Azure CLI az network nsg rule create --resource-group $ResourceGroup ` --nsg-name $NsgName ` --name $RuleName ` --access $Access ` --protocol $Protocol ` --direction $Direction ` --priority $Priority ` --source-address-prefixes $sourceAddressPrefix ` --source-port-ranges "*" ` --destination-address-prefixes "VirtualNetwork" ` --destination-port-ranges "*" | Out-Null _LogMessage -Level "INFO" -Message "Rule $RuleName has been added/updated successfully to $NsgName." -InvocationName "$( $MyInvocation.MyCommand.Name )" } else { # Removing the rule using Azure CLI $existingRule = az network nsg rule list --resource-group $ResourceGroup --nsg-name $NsgName --query "[?name=='$RuleName']" -o tsv if ($existingRule) { az network nsg rule delete --resource-group $ResourceGroup --nsg-name $NsgName --name $RuleName _LogMessage -Level "INFO" -Message "Rule $RuleName has been removed successfully from $NsgName" -InvocationName "$( $MyInvocation.MyCommand.Name )" } else { _LogMessage -Level "INFO" -Message "Rule $RuleName does not exist on $NsgName. No action needed." -InvocationName "$( $MyInvocation.MyCommand.Name )" } } # Applying changes to the NSG is automatically handled by Azure CLI when rules are added/removed _LogMessage -Level "INFO" -Message "NSG - $NsgName - been updated successfully." -InvocationName "$( $MyInvocation.MyCommand.Name )" } catch { _LogMessage -Level "ERROR" -Message "An error occurred: $_" -InvocationName "$( $MyInvocation.MyCommand.Name )" throw } } Export-ModuleMember -Function Set-CurrentIPInNsg |