Dashboard

class Dashboard : KotlinCustomResource

Deprecated

azure.dashboard.Dashboard has been deprecated in favor of azure.portal.Dashboard

Manages a shared dashboard in the Azure Portal. !>Note: The azure.portal.Dashboard resource is deprecated in version 3.0 of the AzureRM provider and will be removed in version 4.0. Please use the azure.portal.PortalDashboard resource instead.

Example Usage

import * as pulumi from "@pulumi/pulumi";
import * as azure from "@pulumi/azure";
const config = new pulumi.Config();
// Content for the MD tile
const mdContent = config.get("mdContent") || "# Hello all :)";
// Link to a video
const videoLink = config.get("videoLink") || "https://www.youtube.com/watch?v=......";
const current = azure.core.getSubscription({});
const example = new azure.core.ResourceGroup("example", {
name: "mygroup",
location: "West Europe",
});
const my_board = new azure.portal.Dashboard("my-board", {
name: "my-cool-dashboard",
resourceGroupName: example.name,
location: example.location,
tags: {
source: "managed",
},
dashboardProperties: current.then(current => `{
"lenses": {
"0": {
"order": 0,
"parts": {
"0": {
"position": {
"x": 0,
"y": 0,
"rowSpan": 2,
"colSpan": 3
},
"metadata": {
"inputs": [],
"type": "Extension/HubsExtension/PartType/MarkdownPart",
"settings": {
"content": {
"settings": {
"content": "${mdContent}",
"subtitle": "",
"title": ""
}
}
}
}
},
"1": {
"position": {
"x": 5,
"y": 0,
"rowSpan": 4,
"colSpan": 6
},
"metadata": {
"inputs": [],
"type": "Extension/HubsExtension/PartType/VideoPart",
"settings": {
"content": {
"settings": {
"title": "Important Information",
"subtitle": "",
"src": "${videoLink}",
"autoplay": true
}
}
}
}
},
"2": {
"position": {
"x": 0,
"y": 4,
"rowSpan": 4,
"colSpan": 6
},
"metadata": {
"inputs": [
{
"name": "ComponentId",
"value": "/subscriptions/${current.subscriptionId}/resourceGroups/myRG/providers/microsoft.insights/components/myWebApp"
}
],
"type": "Extension/AppInsightsExtension/PartType/AppMapGalPt",
"settings": {},
"asset": {
"idInputName": "ComponentId",
"type": "ApplicationInsights"
}
}
}
}
}
},
"metadata": {
"model": {
"timeRange": {
"value": {
"relative": {
"duration": 24,
"timeUnit": 1
}
},
"type": "MsPortalFx.Composition.Configuration.ValueTypes.TimeRange"
},
"filterLocale": {
"value": "en-us"
},
"filters": {
"value": {
"MsPortalFx_TimeRange": {
"model": {
"format": "utc",
"granularity": "auto",
"relative": "24h"
},
"displayCache": {
"name": "UTC Time",
"value": "Past 24 hours"
},
"filteredPartIds": [
"StartboardPart-UnboundPart-ae44fef5-76b8-46b0-86f0-2b3f47bad1c7"
]
}
}
}
}
}
}
`),
});
import pulumi
import pulumi_azure as azure
config = pulumi.Config()
# Content for the MD tile
md_content = config.get("mdContent")
if md_content is None:
md_content = "# Hello all :)"
# Link to a video
video_link = config.get("videoLink")
if video_link is None:
video_link = "https://www.youtube.com/watch?v=......"
current = azure.core.get_subscription()
example = azure.core.ResourceGroup("example",
name="mygroup",
location="West Europe")
my_board = azure.portal.Dashboard("my-board",
name="my-cool-dashboard",
resource_group_name=example.name,
location=example.location,
tags={
"source": "managed",
},
dashboard_properties=f"""{{
"lenses": {{
"0": {{
"order": 0,
"parts": {{
"0": {{
"position": {{
"x": 0,
"y": 0,
"rowSpan": 2,
"colSpan": 3
}},
"metadata": {{
"inputs": [],
"type": "Extension/HubsExtension/PartType/MarkdownPart",
"settings": {{
"content": {{
"settings": {{
"content": "{md_content}",
"subtitle": "",
"title": ""
}}
}}
}}
}}
}},
"1": {{
"position": {{
"x": 5,
"y": 0,
"rowSpan": 4,
"colSpan": 6
}},
"metadata": {{
"inputs": [],
"type": "Extension/HubsExtension/PartType/VideoPart",
"settings": {{
"content": {{
"settings": {{
"title": "Important Information",
"subtitle": "",
"src": "{video_link}",
"autoplay": true
}}
}}
}}
}}
}},
"2": {{
"position": {{
"x": 0,
"y": 4,
"rowSpan": 4,
"colSpan": 6
}},
"metadata": {{
"inputs": [
{{
"name": "ComponentId",
"value": "/subscriptions/{current.subscription_id}/resourceGroups/myRG/providers/microsoft.insights/components/myWebApp"
}}
],
"type": "Extension/AppInsightsExtension/PartType/AppMapGalPt",
"settings": {{}},
"asset": {{
"idInputName": "ComponentId",
"type": "ApplicationInsights"
}}
}}
}}
}}
}}
}},
"metadata": {{
"model": {{
"timeRange": {{
"value": {{
"relative": {{
"duration": 24,
"timeUnit": 1
}}
}},
"type": "MsPortalFx.Composition.Configuration.ValueTypes.TimeRange"
}},
"filterLocale": {{
"value": "en-us"
}},
"filters": {{
"value": {{
"MsPortalFx_TimeRange": {{
"model": {{
"format": "utc",
"granularity": "auto",
"relative": "24h"
}},
"displayCache": {{
"name": "UTC Time",
"value": "Past 24 hours"
}},
"filteredPartIds": [
"StartboardPart-UnboundPart-ae44fef5-76b8-46b0-86f0-2b3f47bad1c7"
]
}}
}}
}}
}}
}}
}}
""")
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Azure = Pulumi.Azure;
return await Deployment.RunAsync(() =>
{
var config = new Config();
// Content for the MD tile
var mdContent = config.Get("mdContent") ?? "# Hello all :)";
// Link to a video
var videoLink = config.Get("videoLink") ?? "https://www.youtube.com/watch?v=......";
var current = Azure.Core.GetSubscription.Invoke();
var example = new Azure.Core.ResourceGroup("example", new()
{
Name = "mygroup",
Location = "West Europe",
});
var my_board = new Azure.Portal.Dashboard("my-board", new()
{
Name = "my-cool-dashboard",
ResourceGroupName = example.Name,
Location = example.Location,
Tags =
{
{ "source", "managed" },
},
DashboardProperties = @$"{{
""lenses"": {{
""0"": {{
""order"": 0,
""parts"": {{
""0"": {{
""position"": {{
""x"": 0,
""y"": 0,
""rowSpan"": 2,
""colSpan"": 3
}},
""metadata"": {{
""inputs"": [],
""type"": ""Extension/HubsExtension/PartType/MarkdownPart"",
""settings"": {{
""content"": {{
""settings"": {{
""content"": ""{mdContent}"",
""subtitle"": """",
""title"": """"
}}
}}
}}
}}
}},
""1"": {{
""position"": {{
""x"": 5,
""y"": 0,
""rowSpan"": 4,
""colSpan"": 6
}},
""metadata"": {{
""inputs"": [],
""type"": ""Extension/HubsExtension/PartType/VideoPart"",
""settings"": {{
""content"": {{
""settings"": {{
""title"": ""Important Information"",
""subtitle"": """",
""src"": ""{videoLink}"",
""autoplay"": true
}}
}}
}}
}}
}},
""2"": {{
""position"": {{
""x"": 0,
""y"": 4,
""rowSpan"": 4,
""colSpan"": 6
}},
""metadata"": {{
""inputs"": [
{{
""name"": ""ComponentId"",
""value"": ""/subscriptions/{current.Apply(getSubscriptionResult => getSubscriptionResult.SubscriptionId)}/resourceGroups/myRG/providers/microsoft.insights/components/myWebApp""
}}
],
""type"": ""Extension/AppInsightsExtension/PartType/AppMapGalPt"",
""settings"": {{}},
""asset"": {{
""idInputName"": ""ComponentId"",
""type"": ""ApplicationInsights""
}}
}}
}}
}}
}}
}},
""metadata"": {{
""model"": {{
""timeRange"": {{
""value"": {{
""relative"": {{
""duration"": 24,
""timeUnit"": 1
}}
}},
""type"": ""MsPortalFx.Composition.Configuration.ValueTypes.TimeRange""
}},
""filterLocale"": {{
""value"": ""en-us""
}},
""filters"": {{
""value"": {{
""MsPortalFx_TimeRange"": {{
""model"": {{
""format"": ""utc"",
""granularity"": ""auto"",
""relative"": ""24h""
}},
""displayCache"": {{
""name"": ""UTC Time"",
""value"": ""Past 24 hours""
}},
""filteredPartIds"": [
""StartboardPart-UnboundPart-ae44fef5-76b8-46b0-86f0-2b3f47bad1c7""
]
}}
}}
}}
}}
}}
}}
",
});
});
package main
import (
"fmt"
"github.com/pulumi/pulumi-azure/sdk/v5/go/azure/core"
"github.com/pulumi/pulumi-azure/sdk/v5/go/azure/portal"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi/config"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
cfg := config.New(ctx, "")
// Content for the MD tile
mdContent := "# Hello all :)"
if param := cfg.Get("mdContent"); param != "" {
mdContent = param
}
// Link to a video
videoLink := "https://www.youtube.com/watch?v=......"
if param := cfg.Get("videoLink"); param != "" {
videoLink = param
}
current, err := core.LookupSubscription(ctx, nil, nil)
if err != nil {
return err
}
example, err := core.NewResourceGroup(ctx, "example", &core.ResourceGroupArgs{
Name: pulumi.String("mygroup"),
Location: pulumi.String("West Europe"),
})
if err != nil {
return err
}
_, err = portal.NewDashboard(ctx, "my-board", &portal.DashboardArgs{
Name: pulumi.String("my-cool-dashboard"),
ResourceGroupName: example.Name,
Location: example.Location,
Tags: pulumi.StringMap{
"source": pulumi.String("managed"),
},
DashboardProperties: pulumi.Sprintf(`{
"lenses": {
"0": {
"order": 0,
"parts": {
"0": {
"position": {
"x": 0,
"y": 0,
"rowSpan": 2,
"colSpan": 3
},
"metadata": {
"inputs": [],
"type": "Extension/HubsExtension/PartType/MarkdownPart",
"settings": {
"content": {
"settings": {
"content": "%v",
"subtitle": "",
"title": ""
}
}
}
}
},
"1": {
"position": {
"x": 5,
"y": 0,
"rowSpan": 4,
"colSpan": 6
},
"metadata": {
"inputs": [],
"type": "Extension/HubsExtension/PartType/VideoPart",
"settings": {
"content": {
"settings": {
"title": "Important Information",
"subtitle": "",
"src": "%v",
"autoplay": true
}
}
}
}
},
"2": {
"position": {
"x": 0,
"y": 4,
"rowSpan": 4,
"colSpan": 6
},
"metadata": {
"inputs": [
{
"name": "ComponentId",
"value": "/subscriptions/%v/resourceGroups/myRG/providers/microsoft.insights/components/myWebApp"
}
],
"type": "Extension/AppInsightsExtension/PartType/AppMapGalPt",
"settings": {},
"asset": {
"idInputName": "ComponentId",
"type": "ApplicationInsights"
}
}
}
}
}
},
"metadata": {
"model": {
"timeRange": {
"value": {
"relative": {
"duration": 24,
"timeUnit": 1
}
},
"type": "MsPortalFx.Composition.Configuration.ValueTypes.TimeRange"
},
"filterLocale": {
"value": "en-us"
},
"filters": {
"value": {
"MsPortalFx_TimeRange": {
"model": {
"format": "utc",
"granularity": "auto",
"relative": "24h"
},
"displayCache": {
"name": "UTC Time",
"value": "Past 24 hours"
},
"filteredPartIds": [
"StartboardPart-UnboundPart-ae44fef5-76b8-46b0-86f0-2b3f47bad1c7"
]
}
}
}
}
}
}
`, mdContent, videoLink, current.SubscriptionId),
})
if err != nil {
return err
}
return nil
})
}
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.azure.core.CoreFunctions;
import com.pulumi.azure.core.inputs.GetSubscriptionArgs;
import com.pulumi.azure.core.ResourceGroup;
import com.pulumi.azure.core.ResourceGroupArgs;
import com.pulumi.azure.portal.Dashboard;
import com.pulumi.azure.portal.DashboardArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
final var config = ctx.config();
final var mdContent = config.get("mdContent").orElse("# Hello all :)");
final var videoLink = config.get("videoLink").orElse("https://www.youtube.com/watch?v=......");
final var current = CoreFunctions.getSubscription();
var example = new ResourceGroup("example", ResourceGroupArgs.builder()
.name("mygroup")
.location("West Europe")
.build());
var my_board = new Dashboard("my-board", DashboardArgs.builder()
.name("my-cool-dashboard")
.resourceGroupName(example.name())
.location(example.location())
.tags(Map.of("source", "managed"))
.dashboardProperties("""
{
"lenses": {
"0": {
"order": 0,
"parts": {
"0": {
"position": {
"x": 0,
"y": 0,
"rowSpan": 2,
"colSpan": 3
},
"metadata": {
"inputs": [],
"type": "Extension/HubsExtension/PartType/MarkdownPart",
"settings": {
"content": {
"settings": {
"content": "%s",
"subtitle": "",
"title": ""
}
}
}
}
},
"1": {
"position": {
"x": 5,
"y": 0,
"rowSpan": 4,
"colSpan": 6
},
"metadata": {
"inputs": [],
"type": "Extension/HubsExtension/PartType/VideoPart",
"settings": {
"content": {
"settings": {
"title": "Important Information",
"subtitle": "",
"src": "%s",
"autoplay": true
}
}
}
}
},
"2": {
"position": {
"x": 0,
"y": 4,
"rowSpan": 4,
"colSpan": 6
},
"metadata": {
"inputs": [
{
"name": "ComponentId",
"value": "/subscriptions/%s/resourceGroups/myRG/providers/microsoft.insights/components/myWebApp"
}
],
"type": "Extension/AppInsightsExtension/PartType/AppMapGalPt",
"settings": {},
"asset": {
"idInputName": "ComponentId",
"type": "ApplicationInsights"
}
}
}
}
}
},
"metadata": {
"model": {
"timeRange": {
"value": {
"relative": {
"duration": 24,
"timeUnit": 1
}
},
"type": "MsPortalFx.Composition.Configuration.ValueTypes.TimeRange"
},
"filterLocale": {
"value": "en-us"
},
"filters": {
"value": {
"MsPortalFx_TimeRange": {
"model": {
"format": "utc",
"granularity": "auto",
"relative": "24h"
},
"displayCache": {
"name": "UTC Time",
"value": "Past 24 hours"
},
"filteredPartIds": [
"StartboardPart-UnboundPart-ae44fef5-76b8-46b0-86f0-2b3f47bad1c7"
]
}
}
}
}
}
}
", mdContent,videoLink,current.applyValue(getSubscriptionResult -> getSubscriptionResult.subscriptionId())))
.build());
}
}
configuration:
mdContent:
type: string
default: '# Hello all :)'
videoLink:
type: string
default: https://www.youtube.com/watch?v=......
resources:
example:
type: azure:core:ResourceGroup
properties:
name: mygroup
location: West Europe
my-board:
type: azure:portal:Dashboard
properties:
name: my-cool-dashboard
resourceGroupName: ${example.name}
location: ${example.location}
tags:
source: managed
dashboardProperties: "{\n \"lenses\": {\n \"0\": {\n \"order\": 0,\n \"parts\": {\n \"0\": {\n \"position\": {\n \"x\": 0,\n \"y\": 0,\n \"rowSpan\": 2,\n \"colSpan\": 3\n },\n \"metadata\": {\n \"inputs\": [],\n \"type\": \"Extension/HubsExtension/PartType/MarkdownPart\",\n \"settings\": {\n \"content\": {\n \"settings\": {\n \"content\": \"${mdContent}\",\n \"subtitle\": \"\",\n \"title\": \"\"\n }\n }\n }\n }\n }, \n \"1\": {\n \"position\": {\n \"x\": 5,\n \"y\": 0,\n \"rowSpan\": 4,\n \"colSpan\": 6\n },\n \"metadata\": {\n \"inputs\": [],\n \"type\": \"Extension/HubsExtension/PartType/VideoPart\",\n \"settings\": {\n \"content\": {\n \"settings\": {\n \"title\": \"Important Information\",\n \"subtitle\": \"\",\n \"src\": \"${videoLink}\",\n \"autoplay\": true\n }\n }\n }\n }\n },\n \"2\": {\n \"position\": {\n \"x\": 0,\n \"y\": 4,\n \"rowSpan\": 4,\n \"colSpan\": 6\n },\n \"metadata\": {\n \"inputs\": [\n {\n \"name\": \"ComponentId\",\n \"value\": \"/subscriptions/${current.subscriptionId}/resourceGroups/myRG/providers/microsoft.insights/components/myWebApp\"\n }\n ],\n \"type\": \"Extension/AppInsightsExtension/PartType/AppMapGalPt\",\n \"settings\": {},\n \"asset\": {\n \"idInputName\": \"ComponentId\",\n \"type\": \"ApplicationInsights\"\n }\n }\n } \n }\n }\n },\n \"metadata\": {\n \"model\": {\n \"timeRange\": {\n \"value\": {\n \"relative\": {\n \"duration\": 24,\n \"timeUnit\": 1\n }\n },\n \"type\": \"MsPortalFx.Composition.Configuration.ValueTypes.TimeRange\"\n },\n \"filterLocale\": {\n \"value\": \"en-us\"\n },\n \"filters\": {\n \"value\": {\n \"MsPortalFx_TimeRange\": {\n \"model\": {\n \"format\": \"utc\",\n \"granularity\": \"auto\",\n \"relative\": \"24h\"\n },\n \"displayCache\": {\n \"name\": \"UTC Time\",\n \"value\": \"Past 24 hours\"\n },\n \"filteredPartIds\": [\n \"StartboardPart-UnboundPart-ae44fef5-76b8-46b0-86f0-2b3f47bad1c7\"\n ]\n }\n }\n }\n }\n }\n}\n"
variables:
current:
fn::invoke:
Function: azure:core:getSubscription
Arguments: {}

It is recommended to follow the steps outlined here to create a Dashboard in the Portal and extract the relevant JSON to use in this resource. From the extracted JSON, the contents of the properties: {} object can used. Variables can be injected as needed - see above example.

Using a template_file data source or the templatefile function

Since the contents of the dashboard JSON can be quite lengthy, use a template file to improve readability: dash.tpl:

{
"lenses": {
"0": {
"order": 0,
"parts": {
"0": {
"position": {
"x": 0,
"y": 0,
"rowSpan": 2,
"colSpan": 3
},
"metadata": {
"inputs": [],
"type": "Extension/HubsExtension/PartType/MarkdownPart",
"settings": {
"content": {
"settings": {
"content": "${md_content}", // <-- note the 'var.' is dropped
"subtitle": "",
"title": ""
}
}
}
}
},
...
...

main.tf

Import

Dashboards can be imported using the resource id, e.g.

$ pulumi import azure:dashboard/dashboard:Dashboard my-board /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg1/providers/Microsoft.Portal/dashboards/00000000-0000-0000-0000-000000000000

Note the URI in the above sample can be found using the Resource Explorer tool in the Azure Portal.

Properties

Link copied to clipboard

JSON data representing dashboard body. See above for details on how to obtain this from the Portal.

Link copied to clipboard
val id: Output<String>
Link copied to clipboard
val location: Output<String>

Specifies the supported Azure location where the resource exists. Changing this forces a new resource to be created.

Link copied to clipboard
val name: Output<String>

Specifies the name of the Shared Dashboard. Changing this forces a new resource to be created.

Link copied to clipboard
val pulumiChildResources: Set<KotlinResource>
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard

The name of the resource group in which to create the dashboard. Changing this forces a new resource to be created.

Link copied to clipboard
val tags: Output<Map<String, String>>?

A mapping of tags to assign to the resource.

Link copied to clipboard
val urn: Output<String>