Пользовательские плитки портала Azure — плитка Markdown

Можно ли отображать пользовательскую информацию на информационных панелях Azure? Я искал, как добавить пользовательский контент на панели инструментов Azure, но ничего не нашел. Единственное, что было рядом, это плитка уценки, которая позволяет отображать html.


person Dash    schedule 21.01.2019    source источник
comment
вам нужно разбить его на 2 части: вопрос и ответ   -  person 4c74356b41    schedule 21.01.2019
comment
Вы правы, спасибо за комментарий.   -  person Dash    schedule 21.01.2019


Ответы (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 минуту.

https://blogs.technet.microsoft.com/stefan_stranger/2017/06/21/azure-scheduler-schedule-your-runbooks-more-often-than-every-hour/

person Dash    schedule 21.01.2019
comment
Не стесняйтесь предлагать, что портал может сделать, чтобы упростить эту задачу в будущем, здесь: отзыв .azure.com/forums/223579-azure-portal - person Brian Hauger; 23.01.2019
comment
На самом деле, похоже, это можно было бы упростить с помощью плитки, которая позволяет вызов REST и возможность форматировать ответ в уценку. - person Brian Hauger; 23.01.2019
comment
@BrianHauger Проблема в том, что нет плиток, разрешающих вызовы REST. - person Dash; 24.01.2019
comment
Кроме того, @BrianHauger Я уже подписан на следующую тему: feedback.azure.com/forums/223579-azure-portal/suggestions/ Но команда Azure пометила это как незапланированное. - person Dash; 24.01.2019