Можно ли отображать пользовательскую информацию на информационных панелях Azure? Я искал, как добавить пользовательский контент на панели инструментов Azure, но ничего не нашел. Единственное, что было рядом, это плитка уценки, которая позволяет отображать html.
Пользовательские плитки портала Azure — плитка Markdown
Ответы (1)
Имея это в виду и после долгих копаний я нашел решение:
По сути, нам нужна была пользовательская плитка, отображающая данные, полученные из нашего REST API.
<сильный>1. Создайте новую пустую плитку «Markdown» на новой или существующей панели инструментов и присвойте ей «Название».
<сильный>2. Поделиться панелью управления
<сильный>3. Перейдите ко всем службам, отфильтруйте по «панелям мониторинга» в фильтре ResourceGroup. Нажмите на панель мониторинга, содержащую плитку «Markdown». Запишите «ИДЕНТИФИКАТОР РЕСУРСА».
В нашем сценарии мы использовали модули Runbook службы автоматизации Azure. В этом сценарии мы использовали REST API Azure Resource Manager.
<сильный>4. Создайте новый RunBook [Powershell Runbook]
Следующие шаги касаются следующего: - Войдите в ResourceManagerAPI - Получите ресурс Azure по идентификатору [идентификатор ресурса выше] - обновите ресурс Azure по идентификатору [идентификатор ресурса выше]
Прежде чем мы продолжим, нам нужно получить учетные данные нашего клиента. Для этого: - Щелкните Cloud Shell в строке меню портала. - Введите «az». - Введите «az ad sp create-for-rpac -n «runbooks»». строка — приведенная выше команда должна перечислить необходимые учетные данные. В случае возникновения ошибки обратитесь к администратору Azure и запустите его из своей учетной записи.
<сильный>5. В пустой модуль runbook powershell добавьте следующие две переменные:
$ExpectedTileName = "Extension/HubsExtension/PartType/MarkdownPart"
$MarkdownTileTitle = "<The Markdown title you've set in the first step>"
<сильный>6. Получение Access_Token [переменные ‹> представляют собой значения, полученные на предыдущем шаге]
#Get Bearer Token
$TenantId = '<Your tenantID>'
$LoginUri = "https://login.microsoftonline.com/"+$TenantId+"/oauth2/token"
$params = @{
"grant_type"="client_credentials";
"client_id"="<appId>";
"client_secret"="<password>";
"resource"="https://management.azure.com";
}
$LoginResponse = Invoke-RestMethod -Uri $LoginUri -Method Post -Body $params
$Access_Token = $LoginResponse.access_token;
$Access_TokenString = "Bearer " + $Access_Token
<сильный>7. Получение DashboardResource по ResourceID:
#Get Resource
$RMUri = "https://management.azure.com/"+ $DashboardId +"?api-version=2015-08-01-preview"
$DashboardResource = (Invoke-RestMethod -Uri $RMUri -Method Get -Headers @{'Authorization'=$Access_TokenString}) | ConvertTo-Json -Depth 100 | ConvertFrom-Json
<сильный>8. Перебор всех плиток на приборной панели. Обратите внимание, что плитки не содержатся в массиве, поэтому вам может потребоваться увеличить или уменьшить длину цикла for.
#Loop through all tiles within the dashboard
$Parts = $DashboardResource.properties.lenses.0.0.parts
For ($i=0; $i -lt 200; $i++)
{
$Part = $Parts | Select-Object -Property $i.toString()
if($Part.$i)
{
if($Part.$i.metadata.type -eq $ExpectedTileName -And $Part.$i.metadata.settings.content.settings.title -eq $MarkdownTileTitle)
{
$Part.$i.metadata.settings.content.settings.content = <CustomValue ex: invoke a get request to your api>
}
}
else
{
break
}
}
<сильный>9. Наконец, нам нужно обновить ресурс панели мониторинга
#Update Resource
$UpdateUri = "https://management.azure.com/"+ $DashboardId +"?api-version=2015-08-01-preview"
$JsonValue = $DashboardResource | ConvertTo-Json -Depth 100
Invoke-RestMethod -Uri $UpdateUri -Method Put -Headers @{'Authorization'=$Access_TokenString; 'Content-type'='application/json'} -Body $JsonValue
Подводя итог:
$ExpectedTileName = "Extension/HubsExtension/PartType/MarkdownPart"
$MarkdownTileTitle = "<The Markdown title you've set in the first step>"
#Get Bearer Token
$TenantId = '<Your subscriptionID>'
$LoginUri = "https://login.microsoftonline.com/"+$TenantId+"/oauth2/token"
$params = @{
"grant_type"="client_credentials";
"client_id"="<appId>";
"client_secret"="<password>";
"resource"="https://management.azure.com";
}
$LoginResponse = Invoke-RestMethod -Uri $LoginUri -Method Post -Body $params
$Access_Token = $LoginResponse.access_token;
$Access_TokenString = "Bearer " + $Access_Token
#Get Resource
$RMUri = "https://management.azure.com/"+ $DashboardId +"?api-version=2015-08-01-preview"
$DashboardResource = (Invoke-RestMethod -Uri $RMUri -Method Get -Headers @{'Authorization'=$Access_TokenString}) | ConvertTo-Json -Depth 100 | ConvertFrom-Json
#Loop through all tiles within the dashboard
$Parts = $DashboardResource.properties.lenses.0.0.parts
For ($i=0; $i -lt 200; $i++)
{
$Part = $Parts | Select-Object -Property $i.toString()
if($Part.$i)
{
if($Part.$i.metadata.type -eq $ExpectedTileName -And $Part.$i.metadata.settings.content.settings.title -eq $MarkdownTileTitle)
{
$Part.$i.metadata.settings.content.settings.content = <CustomValue ex: invoke a get request to your api>
}
}
else
{
break
}
}
#Update Resource
$UpdateUri = "https://management.azure.com/"+ $DashboardId +"?api-version=2015-08-01-preview"
$JsonValue = $DashboardResource | ConvertTo-Json -Depth 100
Invoke-RestMethod -Uri $UpdateUri -Method Put -Headers @{'Authorization'=$Access_TokenString; 'Content-type'='application/json'} -Body $JsonValue
Заключение Теперь с помощью этого недавно созданного модуля Runbook мы можем запланировать его запуск каждые 1 час. В нашем случае 1 час был слишком много. В следующей статье показано, как мы можем запланировать запуск модуля Runbook каждые 1 минуту.