#---------------------------------------------------------- # Install Dynatrace extensions ............---------------- #---------------------------------------------------------- [CmdletBinding()] param( [Parameter(Mandatory=$True)] [string]$subscription, [Parameter(Mandatory=$True)] [string]$resourceGroup, [Parameter(Mandatory=$True)] [string]$appName, [Parameter(Mandatory=$True)] [string]$environmentId, [Parameter(Mandatory=$True)] [string]$apiToken, [string]$apiUrl = "", [string]$sslMode = "Default" ) $azureAplicationId ="XXXXXXXX" $azureTenantId= "XXXXXXXX" $azurePassword = ConvertTo-SecureString "XXXXXXXX" -AsPlainText -Force $psCred = New-Object System.Management.Automation.PSCredential($azureAplicationId , $azurePassword) Connect-AzAccount -Credential $psCred -TenantId $azureTenantId -ServicePrincipal Set-AzContext -Subscription $subscription # Get credentials from published profile $user = "" $pwd = "" $scmUrl = "" [xml]$data = (Get-AzWebAppPublishingProfile -ResourceGroupName $resourceGroup -Name $appName) foreach ($publishProfile in $data.publishData.publishProfile) { echo $publishProfile if ($publishProfile.publishMethod -eq "MSDeploy") { $user = $publishProfile.userName $pwd = $publishProfile.userPWD $scmUrl = "https://{0}" -f $publishProfile.publishUrl break } } $credentials = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user, $pwd))) #---------------------------------------------------------- # Upgrade the agent through extensions API ---------------- #---------------------------------------------------------- $settings = @{ "environmentId" = $environmentId "apiUrl" = $apiUrl "apiToken" = $apiToken "sslMode" = $sslMode } echo $settings $status = Invoke-RestMethod -Headers @{Authorization=("Basic {0}" -f $credentials)} -Uri ("{0}/dynatrace/api/status" -f $scmUrl) echo $status if (($status.isAgentInstalled) -and ($status.isUpgradeAvailable)) { echo "Installing OneaAgent.." Invoke-RestMethod -Headers @{Authorization=("Basic {0}" -f $credentials)} -Method 'PUT' -ContentType "application/json" -Uri ("{0}/dynatrace/api/settings" -f $scmUrl) -Body ($settings | ConvertTo-Json) } # Wait until the agent is upgraded or the upgrade fails $retry = 0 while ($true) { $status = Invoke-RestMethod -Headers @{Authorization=("Basic {0}" -f $credentials)} -Uri ("{0}/dynatrace/api/status" -f $scmUrl) if (!$status.isUpgradeAvailable) { echo "OneAgent is on latest version!!!!" break } if (++$retry -ge 10) { echo "Upgrade timed out. Exiting...." break } Start-Sleep -Seconds 1 } # Restart app-service so changes gets applied --check on QA first