Azure门户自定义磁贴-降价磁贴

时间:2019-01-21 08:16:08

标签: azure powershell azure-automation azureportal azure-runbook

是否可以在天蓝色的仪表板中显示自定义信息? 我在搜索如何在天蓝色的仪表板中添加自定义内容,但未找到任何内容。唯一关闭的是markdown磁贴,可显示html。

1 个答案:

答案 0 :(得分:2)

考虑到这一点,经过大量挖掘,我找到了解决方案:

基本上,我们需要一个自定义磁贴,以显示从REST API检索到的数据。

1。在新的或现有的仪表板上创建一个新的空白“ Markdown”图块,并为其指定“标题”

2。共享仪表板

3。导航到所有服务,然后在ResourceGroup过滤器中按“仪表板”过滤     -点击包含“降价”图块的信息中心     -记下“资源ID”

在我们的方案中,我们使用了Azure Automation Runbook。在这种情况下,我们利用了Azure资源管理器REST API。

4。创建一个新的RunBook [Powershell Runbook]

以下步骤涉及以下内容: -登录到ResourceManagerAPI -通过ID [上面的资源ID]获取Azure资源 -通过ID [上面的资源ID]更新Azure资源

在继续之前,我们需要获取客户凭据。为此: -在门户菜单栏中单击Cloud Shell -输入“ az” -输入'az ad sp create-for-rpac -n“ runbooks”'// runbooks只是一个名称,请随时输入其他字符串 -以上命令应列出所需的凭据。如果发生错误,请联系您的Azure管理员并从其帐户运行它。

5。在空的Powershell Runbook中,添加以下2个变量:

$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。通过ResourceID获取DashboardResource:

#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/