deploy/scripts/Test-SDAFURLs.ps1 (211 lines of code) (raw):

# Copyright (c) Microsoft Corporation. # Licensed under the MIT License. function Show-Menu($data) { Write-Host "================ $Title ================" $i = 1 foreach ($d in $data) { Write-Host "($i): Select '$i' for $($d)" $i++ } Write-Host "q: Select 'q' for Exit" } $LogFileDir = $Env:LogFileDir if ($null -eq $LogFileDir -or $LogFileDir -eq "") { $LogFileDir = Read-Host "Please enter the directory to save the log file" } if (Test-Path $LogFileDir) { $LogFileName = "SDAF-" + $(Get-Date -Format "yyyyMMdd-HHmm") + ".md" $LogFileName = Join-Path $LogFileDir -ChildPath $LogFileName } else { Write-Host "The directory does not exist" return } Add-Content -Path $LogFileName "# SDAF URL Assesment #" Add-Content -Path $LogFileName "" $OutputString = "Time of assessment: " + $(Get-Date -Format "yyyy-MM-dd HH:mm:ss") Add-Content -Path $LogFileName $OutputString $authenticationMethod = 'Service Principal (recommended)' $Title = "Select the authentication method to use" $data = @('Service Principal (recommended)', 'User Account') Show-Menu($data) $selection = Read-Host $Title $authenticationMethod = $data[$selection - 1] Add-Content -Path $LogFileName "" $OutputString = "Authentication model: " + $authenticationMethod Add-Content -Path $LogFileName $OutputString if ($authenticationMethod -eq "User Account") { az logout az login --output none } else { $ARM_CLIENT_ID = $Env:ARM_CLIENT_ID $ARM_CLIENT_SECRET = $Env:ARM_CLIENT_SECRET $ARM_TENANT_ID = $Env:ARM_TENANT_ID if ($null -eq $ARM_CLIENT_ID -or $ARM_CLIENT_ID -eq "") { $ARM_CLIENT_ID = Read-Host "Please enter the Service Principal's Application ID" } if ($null -eq $ARM_CLIENT_SECRET -or $ARM_CLIENT_SECRET -eq "") { $ARM_CLIENT_SECRET = Read-Host "Please enter the Service Principals App ID Password" -AsSecureString } if ($null -eq $ARM_TENANT_ID -or $ARM_TENANT_ID -eq "") { $ARM_TENANT_ID = Read-Host "Please enter the Tenant ID" } if ($null -eq $ARM_SUBSCRIPTION_ID -or $ARM_SUBSCRIPTION_ID -eq "") { $ARM_SUBSCRIPTION_ID = Read-Host "Please enter the Subscription ID" } az logout az login --service-principal -u $ARM_CLIENT_ID -p $ARM_CLIENT_SECRET --tenant $ARM_TENANT_ID --output none } $ARM_SUBSCRIPTION_ID = $Env:ARM_SUBSCRIPTION_ID if ($null -eq $ARM_SUBSCRIPTION_ID -or $ARM_SUBSCRIPTION_ID -eq "") { $ARM_SUBSCRIPTION_ID = Read-Host "Please enter the Subscription ID" } az account set --subscription $ARM_SUBSCRIPTION_ID Add-Content -Path $LogFileName "" $OutputString = "Subscription: " + $ARM_SUBSCRIPTION_ID Add-Content -Path $LogFileName $OutputString $resourceGroupName = $Env:ResourceGroupName if ($null -eq $resourceGroupName -or $resourceGroupName -eq "") { $resourceGroupName = Read-Host "Please enter the Resource Group Name" } $vmName = $Env:VMName if ($null -eq $vmName -or $vmName -eq "") { $vmName = Read-Host "Please enter the Virtual Machine Name" } $UrlsToCheck = Get-Content -Raw -Path ..\configs\sdaf_urls.json | ConvertFrom-Json Add-Content -Path $LogFileName "" Add-Content -Path $LogFileName "## Check URLS ##" Add-Content -Path $LogFileName "" Write-Host "Checking Deployer URLs" -ForegroundColor Yellow Add-Content -Path $LogFileName "Checking Deployer URLs" foreach ($url in $UrlsToCheck.deployer.urls) { Write-Host "Checking if $url is accessible from the Virtual Machine" $result = $(az vm run-command invoke --resource-group $resourceGroupName --name $vmName --command-id RunShellScript --scripts "wget -O /tmp/foo.zip $url" --query value[0].message) if ($result.Contains("200 OK")) { $OutputString = "$url is accessible" Write-Host $OutputString -ForegroundColor Green Add-Content -Path $LogFileName $OutputString } elseif ($result.Contains("403 Forbidden")) { $OutputString = "$url is accessible" Write-Host $OutputString -ForegroundColor Green Add-Content -Path $LogFileName $OutputString } else { $OutputString = "$url is not accessible" Write-Host $OutputString -ForegroundColor Red Add-Content -Path $LogFileName $OutputString } } Write-Host "Checking Deployer IPs" -ForegroundColor Yellow Add-Content -Path $LogFileName "Checking Deployer IPs" Add-Content -Path $LogFileName "" foreach ($IP in $UrlsToCheck.deployer.IPs) { Write-Host "Checking if $IP is accessible from the Virtual Machine" $result = $(az vm run-command invoke --resource-group $resourceGroupName --name $vmName --command-id RunShellScript --scripts "nc -zv $IP 443" --query value[0].message) if ($result.Contains("succeeded!")) { $OutputString = "$IP is accessible" Write-Host $OutputString -ForegroundColor Green Add-Content -Path $LogFileName $OutputString Add-Content -Path $LogFileName "" } elseif ($result.Contains("Connected")) { $OutputString = "$IP is accessible" Write-Host $OutputString -ForegroundColor Green Add-Content -Path $LogFileName $OutputString Add-Content -Path $LogFileName "" } else { $OutputString = "$IP is not accessible" Write-Host $OutputString -ForegroundColor Red Add-Content -Path $LogFileName $OutputString Add-Content -Path $LogFileName "" } } Write-Host "Checking Windows URLs" -ForegroundColor Yellow Add-Content -Path $LogFileName "Checking Windows URLs" Add-Content -Path $LogFileName "" foreach ($url in $UrlsToCheck.windows.urls) { Write-Host "Checking if $url is accessible from the Virtual Machine" $result = $(az vm run-command invoke --resource-group $resourceGroupName --name $vmName --command-id RunShellScript --scripts "wget -O /tmp/foo.zip $url" --query value[0].message) if ($result.Contains("200 OK")) { $OutputString = "$url is accessible" Write-Host $OutputString -ForegroundColor Green Add-Content -Path $LogFileName $OutputString } elseif ($result.Contains("403 Forbidden")) { $OutputString = "$url is accessible" Write-Host $OutputString -ForegroundColor Green Add-Content -Path $LogFileName $OutputString } else { $OutputString = "$url is not accessible" Write-Host $OutputString -ForegroundColor Red Add-Content -Path $LogFileName $OutputString } } Write-Host "Checking Windows IPs" -ForegroundColor Yellow Add-Content -Path $LogFileName "Checking Windows IPs" Add-Content -Path $LogFileName "" foreach ($IP in $UrlsToCheck.windows.IPs) { Write-Host "Checking if $IP is accessible from the Virtual Machine" $result = $(az vm run-command invoke --resource-group $resourceGroupName --name $vmName --command-id RunShellScript --scripts "nc -zv $IP 443" --query value[0].message) if ($result.Contains("succeeded!")) { $OutputString = "$IP is accessible" Write-Host $OutputString -ForegroundColor Green Add-Content -Path $LogFileName $OutputString } elseif ($result.Contains("Connected")) { $OutputString = "$IP is accessible" Write-Host $OutputString -ForegroundColor Green Add-Content -Path $LogFileName $OutputString } else { $OutputString = "$IP is not accessible" Write-Host $OutputString -ForegroundColor Red Add-Content -Path $LogFileName $OutputString } } Write-Host "Checking 'runtime' URLs" -ForegroundColor Yellow Add-Content -Path $LogFileName "Checking 'runtime' URLs" foreach ($url in $UrlsToCheck.sap.urls) { Write-Host "Checking if $url is accessible from the Virtual Machine" $result = $(az vm run-command invoke --resource-group $resourceGroupName --name $vmName --command-id RunShellScript --scripts "wget -O /tmp/foo.zip $url" --query value[0].message) if ($result.Contains("200 OK")) { $OutputString = "$url is accessible" Write-Host $OutputString -ForegroundColor Green Add-Content -Path $LogFileName $OutputString } elseif ($result.Contains("403 Forbidden")) { $OutputString = "$url is accessible" Write-Host $OutputString -ForegroundColor Green Add-Content -Path $LogFileName $OutputString } else { $OutputString = "$url is not accessible" Write-Host $OutputString -ForegroundColor Red Add-Content -Path $LogFileName $OutputString } } Write-Host "Checking 'runtime' IPs" -ForegroundColor Yellow Add-Content -Path $LogFileName "Checking 'runtime' IPs" foreach ($IP in $UrlsToCheck.sap.IPs) { Write-Host "Checking if $IP is accessible from the Virtual Machine" $result = $(az vm run-command invoke --resource-group $resourceGroupName --name $vmName --command-id RunShellScript --scripts "nc -zv $IP 443" --query value[0].message) if ($result.Contains("succeeded!")) { $OutputString = "$IP is accessible" Write-Host $OutputString -ForegroundColor Green Add-Content -Path $LogFileName $OutputString } elseif ($result.Contains("Connected")) { $OutputString = "$IP is accessible" Write-Host $OutputString -ForegroundColor Green Add-Content -Path $LogFileName $OutputString } else { $OutputString = "$IP is not accessible" Write-Host $OutputString -ForegroundColor Red Add-Content -Path $LogFileName $OutputString } }