setup/backend/Function/code/agentMgmt/run.ps1 (133 lines of code) (raw):
using namespace System.Net
# Input bindings are passed in via param block.
param($Request, $TriggerMetadata)
# Write to the Azure Functions log stream.
Write-Host "PowerShell HTTP trigger function processed a request."
# Interact with query parameters or the body of the request.
$resources = $Request.Body.Resources
"Resources"
$resources
$action = $Request.Body.Action
if ($resources) {
"Working on $($resources.count) resource(s). Action: $action. Altering AMA configuration."
switch ($action) {
'AddAgent' {
foreach ($resource in $resources) {
$resourceName=$resource.id.split('/')[8]
$resourceSubcriptionId=$resource.id.split('/')[2]
"Running $action for $resourceName resource."
Set-AzContext -subscriptionId $resourceSubcriptionId
#$tag = (Get-AzResource -ResourceId $resource.Resource).Tags
if ($resource.OS -eq 'Linux') {
"Looking for the Linux agent on $resourceName and $($resource.'Resource Group') RG."
$agentstatus=Get-AzVMExtension -ResourceGroupName $resource.'Resource Group' -VMName $resourceName -Name "AzureMonitorLinuxAgent" -ErrorAction SilentlyContinue
}
else {
"Looking for the Windows agent on $resourceName and $($resource.'Resource Group') RG."
$agentstatus=Get-AzVMExtension -ResourceGroupName $resource.'Resource Group' -VMName $resourceName -Name "AzureMonitorWindowsAgent" -ErrorAction SilentlyContinue
}
if ($agentstatus) {
"Agent already installed."
}
else {
"Agent not installed. Installing..."
if ($resource.OS -eq 'Linux') { #
if ($resource.id.split('/')[7] -eq 'virtualMachines') {
# Virtual machine - add extension
install-azmonitorAgent -subscriptionId $resourceSubcriptionId -resourceGroupName $resource.'Resource Group' -vmName $resourceName -location $resource.location `
-ExtensionName "AzureMonitorLinuxAgent" -ExtensionTypeHandlerVersion "1.27"
#$agent=Set-AzVMExtension -ResourceGroupName $resource.'Resource Group' -VMName $resourceName -Name "AzureMonitorLinuxAgent" -Publisher "Microsoft.Azure.Monitor" -ExtensionType "AzureMonitorLinuxAgent" -TypeHandlerVersion "1.0" -Location $resource.location -EnableAutomaticUpgrade $true
}
else {
# Arc machine -add extension
Set-AzContext -SubscriptionId $subscriptionId
$tags=get-azvm -Name $resourceName -ResourceGroupName $resource.resourceGroup | Select-Object -ExpandProperty tags | ConvertTo-Json
$agent= New-AzConnectedMachineExtension -Name AzureMonitorLinuxAgent -ExtensionType AzureMonitorLinuxAgent -Publisher Microsoft.Azure.Monitor -ResourceGroupName $resource.'Resource Group' -MachineName $resourceName -Location $resource.location -EnableAutomaticUpgrade -Tag $tags
}
}
else { # Windows
if ($resource.id.split('/')[7] -eq 'virtualMachines') {
# Virtual machine - add extension
install-azmonitorAgent -subscriptionId $resourceSubcriptionId -resourceGroupName $resource.'Resource Group' -vmName $resourceName -location $resource.location `
-ExtensionName "AzureMonitorWindowsAgent" -ExtensionTypeHandlerVersion "1.2"
#$agent=Set-AzVMExtension -ResourceGroupName $resource.'Resource Group' -VMName $resourceName -Name "AzureMonitorWindowsAgent" -Publisher "Microsoft.Azure.Monitor" -ExtensionType "AzureMonitorWindowsAgent" -TypeHandlerVersion "1.0" -Location $resource.location -ForceRerun -ForceUpdateTag -EnableAutomaticUpgrade $true
}
else {
# Arc machine -add extension
Set-AzContext -SubscriptionId $subscriptionId
$tags=get-azvm -Name $resourceName -ResourceGroupName $resource.resourceGroup | Select-Object -ExpandProperty tags | ConvertTo-Json
$agent=New-AzConnectedMachineExtension -Name AzureMonitorWindowsAgent -ExtensionType AzureMonitorWindowsAgent -Publisher Microsoft.Azure.Monitor -ResourceGroupName $resource.'Resource Group' -MachineName $resourceName -Location $resource.location -EnableAutomaticUpgrade -Tag $tags
}
}
}
#Set-AzResource -ResourceId $resource.Resource -Tag $tag -Force
}
}
'RemoveAgent' {
foreach ($resource in $resources) {
$resourceName=$resource.id.split('/')[8]
$resourceSubcriptionId=$resource.id.split('/')[2]
"Running $action for $resourceName resource."
Set-AzContext -subscriptionId $resourceSubcriptionId
#$tag = (Get-AzResource -ResourceId $resource.Resource).Tags
if ($resource.OS -eq 'Linux') {
"Looking for the Linux agent on $resourceName and $($resource.'Resource Group') RG."
$agentstatus=Get-AzVMExtension -ResourceGroupName $resource.'Resource Group' -VMName $resourceName -Name "AzureMonitorLinuxAgent" -ErrorAction SilentlyContinue
}
else {
"Looking for the Windows agent on $resourceName and $($resource.'Resource Group') RG."
$agentstatus=Get-AzVMExtension -ResourceGroupName $resource.'Resource Group' -VMName $resourceName -Name "AzureMonitorWindowsAgent" -ErrorAction SilentlyContinue
}
"Agent Status: $agentstatus"
if (!$agentstatus) {
"Agent not installed."
}
else {
"Agent installed. Removing..."
if ($resource.OS -eq 'Linux') { #
if ($resource.id.split('/')[7] -eq 'virtualMachines') {
# Virtual machine - remove extension
Remove-AzVMExtension -Name AzureMonitorLinuxAgent -ResourceGroupName $resource.'Resource Group' -VMName $resourceName -Force
# install-azmonitorAgent -subscriptionId $resourceSubcriptionId -resourceGroupName $resource.'Resource Group' -vmName $resourceName -location $resource.location `
# -ExtensionName "AzureMonitorLinuxAgent" -ExtensionTypeHandlerVersion "1.27"
# #$agent=Set-AzVMExtension -ResourceGroupName $resource.'Resource Group' -VMName $resourceName -Name "AzureMonitorLinuxAgent" -Publisher "Microsoft.Azure.Monitor" -ExtensionType "AzureMonitorLinuxAgent" -TypeHandlerVersion "1.0" -Location $resource.location -EnableAutomaticUpgrade $true
}
else {
# Arc machine - remove extension
Set-AzContext -SubscriptionId $subscriptionId
Remove-AzConnectedMachineExtension -Name AzureMonitorLinuxAgent -ResourceGroupName $resource.'Resource Group' -MachineName $resourceName
}
}
else { # Windows
if ($resource.id.split('/')[7] -eq 'virtualMachines') {
# Virtual machine - remove extension
Remove-AzVMExtension -Name AzureMonitorWindowsAgent -ResourceGroupName $resource.'Resource Group' -VMName $resourceName -Force
# install-azmonitorAgent -subscriptionId $resourceSubcriptionId -resourceGroupName $resource.'Resource Group' -vmName $resourceName -location $resource.location `
# -ExtensionName "AzureMonitorWindowsAgent" -ExtensionTypeHandlerVersion "1.2"
# #$agent=Set-AzVMExtension -ResourceGroupName $resource.'Resource Group' -VMName $resourceName -Name "AzureMonitorWindowsAgent" -Publisher "Microsoft.Azure.Monitor" -ExtensionType "AzureMonitorWindowsAgent" -TypeHandlerVersion "1.0" -Location $resource.location -ForceRerun -ForceUpdateTag -EnableAutomaticUpgrade $true
}
else {
# Arc machine - remove extension
Set-AzContext -SubscriptionId $subscriptionId
Remove-AzConnectedMachineExtension -Name AzureMonitorWindowsAgent -ResourceGroupName $resource.'Resource Group' -MachineName $resourceName
}
}
}
#Set-AzResource -ResourceId $resource.Resource -Tag $tag -Force
}
}
default {
Write-Host "Invalid Action"
}
}
}
else
{
"No resources provided."
}
$body = "This HTTP triggered function executed successfully. $($resources.count) were altered ($action)."
#Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = [HttpStatusCode]::OK
Body = $body
})