XpiritBV / Vsts-Build-Task-InlinePowershell

6 stars 8 forks source link

Weird behavior - Inline Azure PowerShell #16

Open bertrandpons opened 5 years ago

bertrandpons commented 5 years ago

Assume I have the following script:

####################################################
########      CONFIGURATION PARAMETERS     #########
####################################################
# Web App Resource Group Name
$webAppRgName = "$($env:RG_NAME)";
# Web App Name
$webAppName = "$($env:WEBAPP_NAME)";
# SQL Server Resource Group Name
$sqlRgName = "$($env:RG_NAME)";
# SQL Server Name
$sqlServerName = "$($env:SQL_SERVER_NAME)";

# Define methods used for logging
Function LogSection ($message) {
    Write-Host ""
    Write-Host "** $($message) **" -ForegroundColor "magenta" #-BackgroundColor "blue"
}
Function LogWaiting ($message) {
    Write-Host "$($message)... " -NoNewline -ForegroundColor "white" -BackgroundColor "blue"
}
Function LogInfo ($message) {
    Write-Host $message #-ForegroundColor "white" -BackgroundColor "blue"
}
Function LogWarning ($message) { 
    Write-Host $message -ForegroundColor "yellow" #-BackgroundColor "blue" 
}
Function LogError ($message) { 
    Write-Host $message -ForegroundColor "red" #-BackgroundColor "blue" 
}
Function LogSuccess ($message) { 
    Write-Host $message -ForegroundColor "green" #-BackgroundColor "blue" 
}
Function LogDuration ($startDate) {
    $duration = (Get-Date) - $startDate
    LogInfo "Script duration: $duration `n`n"
}

$cmdName = "Add-AzureRmAccount"
if (Get-Command $cmdName -errorAction SilentlyContinue)
{
    try {
        LogSection "Add SQL Firewall Rules from Web App outbound ips"
        $startDate = (Get-Date)
        LogInfo ("Script started: " + $startDate.ToString())

        # Get Web App OutboundIpAddresses
        LogWaiting "Get Web App OutboundIpAddresses"
        $webapp = Get-AzureRmWebApp -ResourceGroupName $webAppRgName -Name $webAppName -errorAction SilentlyContinue
        if ($webapp){
            LogSuccess "$webAppName was found."
            # Extract Outbound IPs
            $ips = $webapp.PossibleOutboundIpAddresses
                        Write-Host $ips
            if ($ips){
                $ipsArr = $ips -split ','
                $ipsArr | ForEach {
                    $index = $ipsArr.IndexOf($_)
                    $ruleName = $webapp.SiteName + "-" + $index
                    $startIp = $_
                    $endIp = $_
                    Write-Host "Adding IP $index to SQL Server rule: $ruleName , StartIP: $startIp , EndIP $endIp"

                    $fr = Get-AzureRmSqlServerFirewallRule -ResourceGroupName $sqlRgName -ServerName $sqlServerName -FirewallRuleName $ruleName -errorAction SilentlyContinue
                    if ($fr){
                        # No changes on the IPs
                        if (($fr.StartIpAddress -eq $startIp) -and ($fr.EndIpAddress -eq $endIp)){
                            LogSuccess "$ruleName was already created and keep the same IPs ($startIp - $endIp)"
                        } else {
                            Set-AzureRmSqlServerFirewallRule -ResourceGroupName $sqlRgName -ServerName $sqlServerName -FirewallRuleName $ruleName -StartIpAddress $startIp -EndIpAddress $endIp
                            LogSuccess "$ruleName was already created but IPs has been updated to ($startIp - $endIp)"
                        }
                    }
                    else{
                        New-AzureRmSqlServerFirewallRule -ResourceGroupName $sqlRgName -ServerName $sqlServerName -FirewallRuleName $ruleName -StartIpAddress $startIp -EndIpAddress $endIp
                        LogSuccess "done"
                    }
                }
            }
            else{
                Write-Host "No Outbound IPs founded for $webAppName " -ForegroundColor Red
            }
        }
        LogDuration $startDate
    }
    catch
    {
        Write-Host "Errors found:`n$_" -ForegroundColor Red
    }
}
else{
    LogError "$cmdName doesn't exists. Please install latest version of Azure Powershell 1.0: http://aka.ms/webpi-azps"
}

If I execute this script from my laptop, it works fine. When I run it with the task Inline Azure PowerShell from my Release Definition, it doesn't work, as it is not able to retrieve the Outbound IPs as requested in the script: No Outbound IPs founded