{"name":"grafana","displayName":"Grafana","version":"2.21.0","description":"A Pulumi package for creating and managing grafana.","keywords":["pulumi","grafana","pulumiverse"],"homepage":"https://grafana.com","license":"Apache-2.0","attribution":"This Pulumi package is based on the [`grafana` Terraform Provider](https://github.com/grafana/terraform-provider-grafana).","repository":"https://github.com/pulumiverse/pulumi-grafana","logoUrl":"https://raw.githubusercontent.com/pulumiverse/pulumi-grafana/main/assets/grafana.png","pluginDownloadURL":"github://api.github.com/pulumiverse","publisher":"pulumiverse","meta":{"moduleFormat":"(.*)(?:/[^/]*)"},"language":{"csharp":{"compatibility":"tfbridge20","rootNamespace":"Pulumiverse","respectSchemaVersion":true},"go":{"importBasePath":"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana","generateResourceContainerTypes":true,"generateExtraInputTypes":true,"respectSchemaVersion":true},"nodejs":{"packageName":"@pulumiverse/grafana","packageDescription":"A Pulumi package for creating and managing grafana.","readme":"\u003e This provider is a derived work of the [Terraform Provider](https://github.com/grafana/terraform-provider-grafana)\n\u003e distributed under [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/). If you encounter a bug or missing feature,\n\u003e first check the [`pulumi-grafana` repo](https://github.com/pulumiverse/pulumi-grafana/issues); however, if that doesn't turn up anything,\n\u003e please consult the source [`terraform-provider-grafana` repo](https://github.com/grafana/terraform-provider-grafana/issues).","devDependencies":{"@types/mime":"^2.0.0","@types/node":"^10.0.0"},"compatibility":"tfbridge20","disableUnionOutputTypes":true,"respectSchemaVersion":true},"python":{"packageName":"pulumiverse_grafana","readme":"\u003e This provider is a derived work of the [Terraform Provider](https://github.com/grafana/terraform-provider-grafana)\n\u003e distributed under [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/). If you encounter a bug or missing feature,\n\u003e first check the [`pulumi-grafana` repo](https://github.com/pulumiverse/pulumi-grafana/issues); however, if that doesn't turn up anything,\n\u003e please consult the source [`terraform-provider-grafana` repo](https://github.com/grafana/terraform-provider-grafana/issues).","compatibility":"tfbridge20","respectSchemaVersion":true,"pyproject":{"enabled":true}}},"config":{"variables":{"auth":{"type":"string","description":"API token, basic auth in the `username:password` format or \u003cspan pulumi-lang-nodejs=\"`anonymous`\" pulumi-lang-dotnet=\"`Anonymous`\" pulumi-lang-go=\"`anonymous`\" pulumi-lang-python=\"`anonymous`\" pulumi-lang-yaml=\"`anonymous`\" pulumi-lang-java=\"`anonymous`\"\u003e`anonymous`\u003c/span\u003e (string literal). May alternatively be set via the `GRAFANA_AUTH` environment variable.","defaultInfo":{"environment":["GRAFANA_AUTH"]},"secret":true},"caCert":{"type":"string","description":"Certificate CA bundle (file path or literal value) to use to verify the Grafana server's certificate. May alternatively be set via the `GRAFANA_CA_CERT` environment variable.","defaultInfo":{"environment":["GRAFANA_CA_CERT"]}},"cloudAccessPolicyToken":{"type":"string","description":"Access Policy Token for Grafana Cloud. May alternatively be set via the `GRAFANA_CLOUD_ACCESS_POLICY_TOKEN` environment variable.","defaultInfo":{"environment":["GRAFANA_CLOUD_ACCESS_POLICY_TOKEN"]},"secret":true},"cloudApiUrl":{"type":"string","description":"Grafana Cloud's API URL. May alternatively be set via the `GRAFANA_CLOUD_API_URL` environment variable.","defaultInfo":{"environment":["GRAFANA_CLOUD_API_URL"]}},"cloudProviderAccessToken":{"type":"string","description":"A Grafana Cloud Provider access token. May alternatively be set via the `GRAFANA_CLOUD_PROVIDER_ACCESS_TOKEN` environment variable.","secret":true},"cloudProviderUrl":{"type":"string","description":"A Grafana Cloud Provider backend address. May alternatively be set via the `GRAFANA_CLOUD_PROVIDER_URL` environment variable."},"connectionsApiAccessToken":{"type":"string","description":"A Grafana Connections API access token. May alternatively be set via the `GRAFANA_CONNECTIONS_API_ACCESS_TOKEN` environment variable.","secret":true},"connectionsApiUrl":{"type":"string","description":"A Grafana Connections API address. May alternatively be set via the `GRAFANA_CONNECTIONS_API_URL` environment variable."},"fleetManagementAuth":{"type":"string","description":"A Grafana Fleet Management basic auth in the `username:password` format. May alternatively be set via the `GRAFANA_FLEET_MANAGEMENT_AUTH` environment variable.","secret":true},"fleetManagementUrl":{"type":"string","description":"A Grafana Fleet Management API address. May alternatively be set via the `GRAFANA_FLEET_MANAGEMENT_URL` environment variable."},"frontendO11yApiAccessToken":{"type":"string","description":"A Grafana Frontend Observability API access token. May alternatively be set via the `GRAFANA_FRONTEND_O11Y_API_ACCESS_TOKEN` environment variable.","secret":true},"frontendO11yApiUrl":{"type":"string","description":"The Grafana Frontend Observability API URL. This is optional, and should only be set to override the default API. May alternatively be set via the `GRAFANA_FRONTEND_O11Y_API_URL` environment variable."},"httpHeaders":{"type":"object","additionalProperties":{"type":"string"},"description":"Optional. HTTP headers mapping keys to values used for accessing the Grafana and Grafana Cloud APIs. May alternatively be set via the `GRAFANA_HTTP_HEADERS` environment variable in JSON format.","secret":true},"insecureSkipVerify":{"type":"boolean","description":"Skip TLS certificate verification. May alternatively be set via the `GRAFANA_INSECURE_SKIP_VERIFY` environment variable.","defaultInfo":{"environment":["GRAFANA_INSECURE_SKIP_VERIFY"]}},"k6AccessToken":{"type":"string","description":"The k6 Cloud API token. May alternatively be set via the `GRAFANA_K6_ACCESS_TOKEN` environment variable.","secret":true},"k6Url":{"type":"string","description":"The k6 Cloud API url. May alternatively be set via the `GRAFANA_K6_URL` environment variable."},"oncallAccessToken":{"type":"string","description":"A Grafana OnCall access token. May alternatively be set via the `GRAFANA_ONCALL_ACCESS_TOKEN` environment variable.","defaultInfo":{"environment":["GRAFANA_ONCALL_ACCESS_TOKEN"]},"secret":true},"oncallUrl":{"type":"string","description":"An Grafana OnCall backend address. May alternatively be set via the `GRAFANA_ONCALL_URL` environment variable.","defaultInfo":{"environment":["GRAFANA_ONCALL_URL"]}},"orgId":{"type":"integer","description":"The Grafana org ID, if you are using a self-hosted OSS or enterprise Grafana instance. May alternatively be set via the `GRAFANA_ORG_ID` environment variable."},"retries":{"type":"integer","description":"The amount of retries to use for Grafana API and Grafana Cloud API calls. May alternatively be set via the `GRAFANA_RETRIES` environment variable.","defaultInfo":{"environment":["GRAFANA_RETRIES"]}},"retryStatusCodes":{"type":"array","items":{"type":"string"},"description":"The status codes to retry on for Grafana API and Grafana Cloud API calls. Use \u003cspan pulumi-lang-nodejs=\"`x`\" pulumi-lang-dotnet=\"`X`\" pulumi-lang-go=\"`x`\" pulumi-lang-python=\"`x`\" pulumi-lang-yaml=\"`x`\" pulumi-lang-java=\"`x`\"\u003e`x`\u003c/span\u003e as a digit wildcard. Defaults to 429 and 5xx. May alternatively be set via the `GRAFANA_RETRY_STATUS_CODES` environment variable."},"retryWait":{"type":"integer","description":"The amount of time in seconds to wait between retries for Grafana API and Grafana Cloud API calls. May alternatively be set via the `GRAFANA_RETRY_WAIT` environment variable.","defaultInfo":{"environment":["GRAFANA_RETRY_WAIT"]}},"smAccessToken":{"type":"string","description":"A Synthetic Monitoring access token. May alternatively be set via the `GRAFANA_SM_ACCESS_TOKEN` environment variable.","defaultInfo":{"environment":["GRAFANA_SM_ACCESS_TOKEN"]},"secret":true},"smUrl":{"type":"string","defaultInfo":{"environment":["GRAFANA_SM_URL"]}},"stackId":{"type":"integer","description":"The Grafana stack ID, if you are using a Grafana Cloud stack. May alternatively be set via the `GRAFANA_STACK_ID` environment variable."},"storeDashboardSha256":{"type":"boolean","description":"Set to true if you want to save only the sha256sum instead of complete dashboard model JSON in the tfstate.","defaultInfo":{"environment":["GRAFANA_STORE_DASHBOARD_SHA256"]}},"tlsCert":{"type":"string","description":"Client TLS certificate (file path or literal value) to use to authenticate to the Grafana server. May alternatively be set via the `GRAFANA_TLS_CERT` environment variable.","defaultInfo":{"environment":["GRAFANA_TLS_CERT"]}},"tlsKey":{"type":"string","description":"Client TLS key (file path or literal value) to use to authenticate to the Grafana server. May alternatively be set via the `GRAFANA_TLS_KEY` environment variable.","defaultInfo":{"environment":["GRAFANA_TLS_KEY"]},"secret":true},"url":{"type":"string","description":"The root URL of a Grafana server. May alternatively be set via the `GRAFANA_URL` environment variable.","defaultInfo":{"environment":["GRAFANA_URL"]}}}},"types":{"grafana:alerting/AlertEnrichmentMetadata:AlertEnrichmentMetadata":{"properties":{"annotations":{"type":"object","additionalProperties":{"type":"string"},"description":"Annotations of the resource.\n"},"folderUid":{"type":"string","description":"The UID of the folder to save the resource in.\n"},"uid":{"type":"string","description":"The unique identifier of the resource.\n"},"url":{"type":"string","description":"The full URL of the resource.\n"},"uuid":{"type":"string","description":"The globally unique identifier of a resource, used by the API for tracking.\n"},"version":{"type":"string","description":"The version of the resource.\n"}},"type":"object","required":["uid"],"language":{"nodejs":{"requiredOutputs":["annotations","uid","url","uuid","version"]}}},"grafana:alerting/AlertEnrichmentOptions:AlertEnrichmentOptions":{"properties":{"overwrite":{"type":"boolean","description":"Set to true if you want to overwrite existing resource with newer version, same resource title in folder or same resource uid.\n"}},"type":"object"},"grafana:alerting/AlertEnrichmentSpec:AlertEnrichmentSpec":{"properties":{"alertRuleUids":{"type":"array","items":{"type":"string"},"description":"UIDs of alert rules this enrichment applies to. If empty, applies to all alert rules.\n"},"annotationMatchers":{"type":"array","items":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpecAnnotationMatcher:AlertEnrichmentSpecAnnotationMatcher"},"description":"Annotation matchers that an alert must satisfy for this enrichment to apply. Each matcher is an object with: 'type' (string, one of: =, !=, =~, !~), 'name' (string, annotation key to match), 'value' (string, annotation value to compare against, supports regex for =~/!~ operators).\n"},"description":{"type":"string","description":"Description of the alert enrichment.\n"},"disableProvenance":{"type":"boolean"},"labelMatchers":{"type":"array","items":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpecLabelMatcher:AlertEnrichmentSpecLabelMatcher"},"description":"Label matchers that an alert must satisfy for this enrichment to apply. Each matcher is an object with: 'type' (string, one of: =, !=, =~, !~), 'name' (string, label key to match), 'value' (string, label value to compare against, supports regex for =~/!~ operators).\n"},"receivers":{"type":"array","items":{"type":"string"},"description":"Receiver names to match. If empty, applies to all receivers.\n"},"steps":{"type":"array","items":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpecStep:AlertEnrichmentSpecStep"},"description":"Enrichment step. Can be repeated multiple times to define a sequence of steps. Each step must contain exactly one enrichment block.\n"},"title":{"type":"string","description":"The title of the alert enrichment.\n"}},"type":"object","required":["title"],"language":{"nodejs":{"requiredOutputs":["description","disableProvenance","title"]}}},"grafana:alerting/AlertEnrichmentSpecAnnotationMatcher:AlertEnrichmentSpecAnnotationMatcher":{"properties":{"name":{"type":"string"},"type":{"type":"string"},"value":{"type":"string"}},"type":"object","required":["name","type","value"]},"grafana:alerting/AlertEnrichmentSpecLabelMatcher:AlertEnrichmentSpecLabelMatcher":{"properties":{"name":{"type":"string"},"type":{"type":"string"},"value":{"type":"string"}},"type":"object","required":["name","type","value"]},"grafana:alerting/AlertEnrichmentSpecStep:AlertEnrichmentSpecStep":{"properties":{"asserts":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpecStepAsserts:AlertEnrichmentSpecStepAsserts","description":"Integrate with Grafana Asserts for enrichment.\n"},"assign":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpecStepAssign:AlertEnrichmentSpecStepAssign","description":"Assign annotations to an alert.\n"},"assistantInvestigations":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpecStepAssistantInvestigations:AlertEnrichmentSpecStepAssistantInvestigations","description":"Use AI assistant to investigate alerts and add insights.\n"},"conditional":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpecStepConditional:AlertEnrichmentSpecStepConditional","description":"Conditional step with if/then/else.\n"},"dataSource":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpecStepDataSource:AlertEnrichmentSpecStepDataSource","description":"Query Grafana data sources and add results to alerts.\n"},"explain":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpecStepExplain:AlertEnrichmentSpecStepExplain","description":"Generate AI explanation and store in an annotation.\n"},"external":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpecStepExternal:AlertEnrichmentSpecStepExternal","description":"Call an external HTTP service for enrichment.\n"},"sift":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpecStepSift:AlertEnrichmentSpecStepSift","description":"Analyze alerts for patterns and insights.\n"}},"type":"object"},"grafana:alerting/AlertEnrichmentSpecStepAsserts:AlertEnrichmentSpecStepAsserts":{"properties":{"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')\n"}},"type":"object"},"grafana:alerting/AlertEnrichmentSpecStepAssign:AlertEnrichmentSpecStepAssign":{"properties":{"annotations":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of annotation names to values to set on matching alerts.\n"},"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')\n"}},"type":"object"},"grafana:alerting/AlertEnrichmentSpecStepAssistantInvestigations:AlertEnrichmentSpecStepAssistantInvestigations":{"properties":{"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')\n"}},"type":"object"},"grafana:alerting/AlertEnrichmentSpecStepConditional:AlertEnrichmentSpecStepConditional":{"properties":{"else":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpecStepConditionalElse:AlertEnrichmentSpecStepConditionalElse","description":"Steps when condition is false.\n"},"if":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpecStepConditionalIf:AlertEnrichmentSpecStepConditionalIf","description":"Condition to evaluate.\n"},"then":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpecStepConditionalThen:AlertEnrichmentSpecStepConditionalThen","description":"Steps when condition is true.\n"},"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')\n"}},"type":"object"},"grafana:alerting/AlertEnrichmentSpecStepConditionalElse:AlertEnrichmentSpecStepConditionalElse":{"properties":{"steps":{"type":"array","items":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpecStepConditionalElseStep:AlertEnrichmentSpecStepConditionalElseStep"}}},"type":"object"},"grafana:alerting/AlertEnrichmentSpecStepConditionalElseStep:AlertEnrichmentSpecStepConditionalElseStep":{"properties":{"asserts":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpecStepConditionalElseStepAsserts:AlertEnrichmentSpecStepConditionalElseStepAsserts","description":"Integrate with Grafana Asserts for enrichment.\n"},"assign":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpecStepConditionalElseStepAssign:AlertEnrichmentSpecStepConditionalElseStepAssign","description":"Assign annotations to an alert.\n"},"assistantInvestigations":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpecStepConditionalElseStepAssistantInvestigations:AlertEnrichmentSpecStepConditionalElseStepAssistantInvestigations","description":"Use AI assistant to investigate alerts and add insights.\n"},"dataSource":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpecStepConditionalElseStepDataSource:AlertEnrichmentSpecStepConditionalElseStepDataSource","description":"Query Grafana data sources and add results to alerts.\n"},"explain":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpecStepConditionalElseStepExplain:AlertEnrichmentSpecStepConditionalElseStepExplain","description":"Generate AI explanation and store in an annotation.\n"},"external":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpecStepConditionalElseStepExternal:AlertEnrichmentSpecStepConditionalElseStepExternal","description":"Call an external HTTP service for enrichment.\n"},"sift":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpecStepConditionalElseStepSift:AlertEnrichmentSpecStepConditionalElseStepSift","description":"Analyze alerts for patterns and insights.\n"}},"type":"object"},"grafana:alerting/AlertEnrichmentSpecStepConditionalElseStepAsserts:AlertEnrichmentSpecStepConditionalElseStepAsserts":{"properties":{"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')\n"}},"type":"object"},"grafana:alerting/AlertEnrichmentSpecStepConditionalElseStepAssign:AlertEnrichmentSpecStepConditionalElseStepAssign":{"properties":{"annotations":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of annotation names to values to set on matching alerts.\n"},"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')\n"}},"type":"object"},"grafana:alerting/AlertEnrichmentSpecStepConditionalElseStepAssistantInvestigations:AlertEnrichmentSpecStepConditionalElseStepAssistantInvestigations":{"properties":{"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')\n"}},"type":"object"},"grafana:alerting/AlertEnrichmentSpecStepConditionalElseStepDataSource:AlertEnrichmentSpecStepConditionalElseStepDataSource":{"properties":{"logsQuery":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpecStepConditionalElseStepDataSourceLogsQuery:AlertEnrichmentSpecStepConditionalElseStepDataSourceLogsQuery","description":"Logs query configuration for querying log data sources.\n"},"rawQuery":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpecStepConditionalElseStepDataSourceRawQuery:AlertEnrichmentSpecStepConditionalElseStepDataSourceRawQuery","description":"Raw query configuration for advanced data source queries.\n"},"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')\n"}},"type":"object"},"grafana:alerting/AlertEnrichmentSpecStepConditionalElseStepDataSourceLogsQuery:AlertEnrichmentSpecStepConditionalElseStepDataSourceLogsQuery":{"properties":{"dataSourceType":{"type":"string","description":"Data source type (e.g., 'loki').\n"},"dataSourceUid":{"type":"string","description":"UID of the data source to query.\n"},"expr":{"type":"string","description":"Log query expression to execute.\n"},"maxLines":{"type":"integer","description":"Maximum number of log lines to include. Defaults to 3.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["maxLines"]}}},"grafana:alerting/AlertEnrichmentSpecStepConditionalElseStepDataSourceRawQuery:AlertEnrichmentSpecStepConditionalElseStepDataSourceRawQuery":{"properties":{"refId":{"type":"string","description":"Reference ID for correlating queries.\n"},"request":{"type":"string","description":"Raw request payload for the data source query.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["refId"]}}},"grafana:alerting/AlertEnrichmentSpecStepConditionalElseStepExplain:AlertEnrichmentSpecStepConditionalElseStepExplain":{"properties":{"annotation":{"type":"string","description":"Annotation name to set the explanation in. Defaults to 'ai_explanation'.\n"},"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["annotation"]}}},"grafana:alerting/AlertEnrichmentSpecStepConditionalElseStepExternal:AlertEnrichmentSpecStepConditionalElseStepExternal":{"properties":{"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')\n"},"url":{"type":"string","description":"HTTP endpoint URL to call for enrichment\n"}},"type":"object"},"grafana:alerting/AlertEnrichmentSpecStepConditionalElseStepSift:AlertEnrichmentSpecStepConditionalElseStepSift":{"properties":{"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')\n"}},"type":"object"},"grafana:alerting/AlertEnrichmentSpecStepConditionalIf:AlertEnrichmentSpecStepConditionalIf":{"properties":{"annotationMatchers":{"type":"array","items":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpecStepConditionalIfAnnotationMatcher:AlertEnrichmentSpecStepConditionalIfAnnotationMatcher"},"description":"Annotation matchers for the condition.\n"},"dataSourceCondition":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpecStepConditionalIfDataSourceCondition:AlertEnrichmentSpecStepConditionalIfDataSourceCondition","description":"Data source condition.\n"},"labelMatchers":{"type":"array","items":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpecStepConditionalIfLabelMatcher:AlertEnrichmentSpecStepConditionalIfLabelMatcher"},"description":"Label matchers for the condition.\n"}},"type":"object"},"grafana:alerting/AlertEnrichmentSpecStepConditionalIfAnnotationMatcher:AlertEnrichmentSpecStepConditionalIfAnnotationMatcher":{"properties":{"name":{"type":"string"},"type":{"type":"string"},"value":{"type":"string"}},"type":"object","required":["name","type","value"]},"grafana:alerting/AlertEnrichmentSpecStepConditionalIfDataSourceCondition:AlertEnrichmentSpecStepConditionalIfDataSourceCondition":{"properties":{"request":{"type":"string","description":"Data source request payload.\n"}},"type":"object"},"grafana:alerting/AlertEnrichmentSpecStepConditionalIfLabelMatcher:AlertEnrichmentSpecStepConditionalIfLabelMatcher":{"properties":{"name":{"type":"string"},"type":{"type":"string"},"value":{"type":"string"}},"type":"object","required":["name","type","value"]},"grafana:alerting/AlertEnrichmentSpecStepConditionalThen:AlertEnrichmentSpecStepConditionalThen":{"properties":{"steps":{"type":"array","items":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpecStepConditionalThenStep:AlertEnrichmentSpecStepConditionalThenStep"}}},"type":"object"},"grafana:alerting/AlertEnrichmentSpecStepConditionalThenStep:AlertEnrichmentSpecStepConditionalThenStep":{"properties":{"asserts":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpecStepConditionalThenStepAsserts:AlertEnrichmentSpecStepConditionalThenStepAsserts","description":"Integrate with Grafana Asserts for enrichment.\n"},"assign":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpecStepConditionalThenStepAssign:AlertEnrichmentSpecStepConditionalThenStepAssign","description":"Assign annotations to an alert.\n"},"assistantInvestigations":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpecStepConditionalThenStepAssistantInvestigations:AlertEnrichmentSpecStepConditionalThenStepAssistantInvestigations","description":"Use AI assistant to investigate alerts and add insights.\n"},"dataSource":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpecStepConditionalThenStepDataSource:AlertEnrichmentSpecStepConditionalThenStepDataSource","description":"Query Grafana data sources and add results to alerts.\n"},"explain":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpecStepConditionalThenStepExplain:AlertEnrichmentSpecStepConditionalThenStepExplain","description":"Generate AI explanation and store in an annotation.\n"},"external":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpecStepConditionalThenStepExternal:AlertEnrichmentSpecStepConditionalThenStepExternal","description":"Call an external HTTP service for enrichment.\n"},"sift":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpecStepConditionalThenStepSift:AlertEnrichmentSpecStepConditionalThenStepSift","description":"Analyze alerts for patterns and insights.\n"}},"type":"object"},"grafana:alerting/AlertEnrichmentSpecStepConditionalThenStepAsserts:AlertEnrichmentSpecStepConditionalThenStepAsserts":{"properties":{"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')\n"}},"type":"object"},"grafana:alerting/AlertEnrichmentSpecStepConditionalThenStepAssign:AlertEnrichmentSpecStepConditionalThenStepAssign":{"properties":{"annotations":{"type":"object","additionalProperties":{"type":"string"},"description":"Map of annotation names to values to set on matching alerts.\n"},"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')\n"}},"type":"object"},"grafana:alerting/AlertEnrichmentSpecStepConditionalThenStepAssistantInvestigations:AlertEnrichmentSpecStepConditionalThenStepAssistantInvestigations":{"properties":{"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')\n"}},"type":"object"},"grafana:alerting/AlertEnrichmentSpecStepConditionalThenStepDataSource:AlertEnrichmentSpecStepConditionalThenStepDataSource":{"properties":{"logsQuery":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpecStepConditionalThenStepDataSourceLogsQuery:AlertEnrichmentSpecStepConditionalThenStepDataSourceLogsQuery","description":"Logs query configuration for querying log data sources.\n"},"rawQuery":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpecStepConditionalThenStepDataSourceRawQuery:AlertEnrichmentSpecStepConditionalThenStepDataSourceRawQuery","description":"Raw query configuration for advanced data source queries.\n"},"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')\n"}},"type":"object"},"grafana:alerting/AlertEnrichmentSpecStepConditionalThenStepDataSourceLogsQuery:AlertEnrichmentSpecStepConditionalThenStepDataSourceLogsQuery":{"properties":{"dataSourceType":{"type":"string","description":"Data source type (e.g., 'loki').\n"},"dataSourceUid":{"type":"string","description":"UID of the data source to query.\n"},"expr":{"type":"string","description":"Log query expression to execute.\n"},"maxLines":{"type":"integer","description":"Maximum number of log lines to include. Defaults to 3.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["maxLines"]}}},"grafana:alerting/AlertEnrichmentSpecStepConditionalThenStepDataSourceRawQuery:AlertEnrichmentSpecStepConditionalThenStepDataSourceRawQuery":{"properties":{"refId":{"type":"string","description":"Reference ID for correlating queries.\n"},"request":{"type":"string","description":"Raw request payload for the data source query.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["refId"]}}},"grafana:alerting/AlertEnrichmentSpecStepConditionalThenStepExplain:AlertEnrichmentSpecStepConditionalThenStepExplain":{"properties":{"annotation":{"type":"string","description":"Annotation name to set the explanation in. Defaults to 'ai_explanation'.\n"},"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["annotation"]}}},"grafana:alerting/AlertEnrichmentSpecStepConditionalThenStepExternal:AlertEnrichmentSpecStepConditionalThenStepExternal":{"properties":{"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')\n"},"url":{"type":"string","description":"HTTP endpoint URL to call for enrichment\n"}},"type":"object"},"grafana:alerting/AlertEnrichmentSpecStepConditionalThenStepSift:AlertEnrichmentSpecStepConditionalThenStepSift":{"properties":{"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')\n"}},"type":"object"},"grafana:alerting/AlertEnrichmentSpecStepDataSource:AlertEnrichmentSpecStepDataSource":{"properties":{"logsQuery":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpecStepDataSourceLogsQuery:AlertEnrichmentSpecStepDataSourceLogsQuery","description":"Logs query configuration for querying log data sources.\n"},"rawQuery":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpecStepDataSourceRawQuery:AlertEnrichmentSpecStepDataSourceRawQuery","description":"Raw query configuration for advanced data source queries.\n"},"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')\n"}},"type":"object"},"grafana:alerting/AlertEnrichmentSpecStepDataSourceLogsQuery:AlertEnrichmentSpecStepDataSourceLogsQuery":{"properties":{"dataSourceType":{"type":"string","description":"Data source type (e.g., 'loki').\n"},"dataSourceUid":{"type":"string","description":"UID of the data source to query.\n"},"expr":{"type":"string","description":"Log query expression to execute.\n"},"maxLines":{"type":"integer","description":"Maximum number of log lines to include. Defaults to 3.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["maxLines"]}}},"grafana:alerting/AlertEnrichmentSpecStepDataSourceRawQuery:AlertEnrichmentSpecStepDataSourceRawQuery":{"properties":{"refId":{"type":"string","description":"Reference ID for correlating queries.\n"},"request":{"type":"string","description":"Raw request payload for the data source query.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["refId"]}}},"grafana:alerting/AlertEnrichmentSpecStepExplain:AlertEnrichmentSpecStepExplain":{"properties":{"annotation":{"type":"string","description":"Annotation name to set the explanation in. Defaults to 'ai_explanation'.\n"},"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["annotation"]}}},"grafana:alerting/AlertEnrichmentSpecStepExternal:AlertEnrichmentSpecStepExternal":{"properties":{"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')\n"},"url":{"type":"string","description":"HTTP endpoint URL to call for enrichment\n"}},"type":"object"},"grafana:alerting/AlertEnrichmentSpecStepSift:AlertEnrichmentSpecStepSift":{"properties":{"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')\n"}},"type":"object"},"grafana:alerting/AlertRuleV0Alpha1Metadata:AlertRuleV0Alpha1Metadata":{"properties":{"annotations":{"type":"object","additionalProperties":{"type":"string"},"description":"Annotations of the resource.\n"},"folderUid":{"type":"string","description":"The UID of the folder to save the resource in.\n"},"uid":{"type":"string","description":"The unique identifier of the resource.\n"},"url":{"type":"string","description":"The full URL of the resource.\n"},"uuid":{"type":"string","description":"The globally unique identifier of a resource, used by the API for tracking.\n"},"version":{"type":"string","description":"The version of the resource.\n"}},"type":"object","required":["uid"],"language":{"nodejs":{"requiredOutputs":["annotations","uid","url","uuid","version"]}}},"grafana:alerting/AlertRuleV0Alpha1Options:AlertRuleV0Alpha1Options":{"properties":{"overwrite":{"type":"boolean","description":"Set to true if you want to overwrite existing resource with newer version, same resource title in folder or same resource uid.\n"}},"type":"object"},"grafana:alerting/AlertRuleV0Alpha1Spec:AlertRuleV0Alpha1Spec":{"properties":{"annotations":{"type":"object","additionalProperties":{"type":"string"},"description":"Key-value pairs of metadata to attach to the alert rule. They add additional information, such as a \u003cspan pulumi-lang-nodejs=\"`summary`\" pulumi-lang-dotnet=\"`Summary`\" pulumi-lang-go=\"`summary`\" pulumi-lang-python=\"`summary`\" pulumi-lang-yaml=\"`summary`\" pulumi-lang-java=\"`summary`\"\u003e`summary`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`runbookUrl`\" pulumi-lang-dotnet=\"`RunbookUrl`\" pulumi-lang-go=\"`runbookUrl`\" pulumi-lang-python=\"`runbook_url`\" pulumi-lang-yaml=\"`runbookUrl`\" pulumi-lang-java=\"`runbookUrl`\"\u003e`runbook_url`\u003c/span\u003e, to help identify and investigate alerts.\n"},"execErrState":{"type":"string","description":"Describes what state to enter when the rule's query is invalid and the rule cannot be executed. Options are OK, Error, KeepLast, and Alerting.\n"},"expressions":{"type":"object","additionalProperties":{"type":"string"},"description":"A sequence of stages that describe the contents of the rule. Each value is a JSON string representing an expression object.\n"},"for":{"type":"string","description":"The amount of time for which the rule must be breached for the rule to be considered to be Firing. Before this time has elapsed, the rule is only considered to be Pending.\n"},"keepFiringFor":{"type":"string","description":"The amount of time for which the rule will considered to be Recovering after initially Firing. Before this time has elapsed, the rule will continue to fire once it's been triggered.\n"},"labels":{"type":"object","additionalProperties":{"type":"string"},"description":"Key-value pairs to attach to the alert rule that can be used in matching, grouping, and routing.\n"},"missingSeriesEvalsToResolve":{"type":"integer","description":"The number of missing series evaluations that must occur before the rule is considered to be resolved.\n"},"noDataState":{"type":"string","description":"Describes what state to enter when the rule's query returns No Data. Options are OK, NoData, KeepLast, and Alerting.\n"},"notificationSettings":{"$ref":"#/types/grafana:alerting/AlertRuleV0Alpha1SpecNotificationSettings:AlertRuleV0Alpha1SpecNotificationSettings","description":"Notification settings for the rule. If specified, it overrides the notification policies.\n"},"panelRef":{"type":"object","additionalProperties":{"type":"string"},"description":"Reference to a panel that this alert rule is associated with. Should be an object with 'dashboard_uid' (string) and 'panel_id' (number) fields.\n"},"paused":{"type":"boolean","description":"Sets whether the rule should be paused or not.\n"},"title":{"type":"string","description":"The title of the alert rule.\n"},"trigger":{"$ref":"#/types/grafana:alerting/AlertRuleV0Alpha1SpecTrigger:AlertRuleV0Alpha1SpecTrigger","description":"The trigger configuration for the alert rule.\n"}},"type":"object","required":["execErrState","expressions","noDataState","title"]},"grafana:alerting/AlertRuleV0Alpha1SpecNotificationSettings:AlertRuleV0Alpha1SpecNotificationSettings":{"properties":{"activeTimings":{"type":"array","items":{"type":"string"},"description":"A list of time interval names to apply to alerts that match this policy to suppress them unless they are sent at the specified time.\n"},"contactPoint":{"type":"string","description":"The contact point to route notifications that match this rule to.\n"},"groupBies":{"type":"array","items":{"type":"string"},"description":"A list of alert labels to group alerts into notifications by.\n"},"groupInterval":{"type":"string","description":"Minimum time interval between two notifications for the same group.\n"},"groupWait":{"type":"string","description":"Time to wait to buffer alerts of the same group before sending a notification.\n"},"muteTimings":{"type":"array","items":{"type":"string"},"description":"A list of mute timing names to apply to alerts that match this policy.\n"},"repeatInterval":{"type":"string","description":"Minimum time interval for re-sending a notification if an alert is still firing.\n"}},"type":"object","required":["contactPoint"]},"grafana:alerting/AlertRuleV0Alpha1SpecTrigger:AlertRuleV0Alpha1SpecTrigger":{"properties":{"interval":{"type":"string","description":"The interval at which the alert rule should be evaluated.\n"}},"type":"object","required":["interval"]},"grafana:alerting/ContactPointAlertmanager:ContactPointAlertmanager":{"properties":{"basicAuthPassword":{"type":"string","description":"The password component of the basic auth credentials to use.\n","secret":true},"basicAuthUser":{"type":"string","description":"The username component of the basic auth credentials to use.\n"},"disableResolveMessage":{"type":"boolean","description":"Whether to disable sending resolve messages. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"settings":{"type":"object","additionalProperties":{"type":"string"},"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.\n","secret":true},"uid":{"type":"string","description":"The UID of the contact point.\n"},"url":{"type":"string","description":"The URL of the Alertmanager instance.\n"}},"type":"object","required":["url"],"language":{"nodejs":{"requiredOutputs":["uid","url"]}}},"grafana:alerting/ContactPointDingding:ContactPointDingding":{"properties":{"disableResolveMessage":{"type":"boolean","description":"Whether to disable sending resolve messages. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"message":{"type":"string","description":"The templated content of the message.\n"},"messageType":{"type":"string","description":"The format of message to send - either 'link' or 'actionCard'\n"},"settings":{"type":"object","additionalProperties":{"type":"string"},"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.\n","secret":true},"title":{"type":"string","description":"The templated title of the message.\n"},"uid":{"type":"string","description":"The UID of the contact point.\n"},"url":{"type":"string","description":"The DingDing webhook URL.\n","secret":true}},"type":"object","required":["url"],"language":{"nodejs":{"requiredOutputs":["uid","url"]}}},"grafana:alerting/ContactPointDiscord:ContactPointDiscord":{"properties":{"avatarUrl":{"type":"string","description":"The URL of a custom avatar image to use. Defaults to ``.\n"},"disableResolveMessage":{"type":"boolean","description":"Whether to disable sending resolve messages. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"message":{"type":"string","description":"The templated content of the message. Defaults to ``.\n"},"settings":{"type":"object","additionalProperties":{"type":"string"},"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.\n","secret":true},"title":{"type":"string","description":"The templated content of the title.\n"},"uid":{"type":"string","description":"The UID of the contact point.\n"},"url":{"type":"string","description":"The discord webhook URL.\n","secret":true},"useDiscordUsername":{"type":"boolean","description":"Whether to use the bot account's plain username instead of \"Grafana.\" Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"}},"type":"object","required":["url"],"language":{"nodejs":{"requiredOutputs":["uid","url"]}}},"grafana:alerting/ContactPointEmail:ContactPointEmail":{"properties":{"addresses":{"type":"array","items":{"type":"string"},"description":"The addresses to send emails to.\n"},"disableResolveMessage":{"type":"boolean","description":"Whether to disable sending resolve messages. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"message":{"type":"string","description":"The templated content of the email. Defaults to ``.\n"},"settings":{"type":"object","additionalProperties":{"type":"string"},"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.\n","secret":true},"singleEmail":{"type":"boolean","description":"Whether to send a single email CC'ing all addresses, rather than a separate email to each address. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"subject":{"type":"string","description":"The templated subject line of the email. Defaults to ``.\n"},"uid":{"type":"string","description":"The UID of the contact point.\n"}},"type":"object","required":["addresses"],"language":{"nodejs":{"requiredOutputs":["addresses","uid"]}}},"grafana:alerting/ContactPointGooglechat:ContactPointGooglechat":{"properties":{"disableResolveMessage":{"type":"boolean","description":"Whether to disable sending resolve messages. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"message":{"type":"string","description":"The templated content of the message.\n"},"settings":{"type":"object","additionalProperties":{"type":"string"},"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.\n","secret":true},"title":{"type":"string","description":"The templated content of the title.\n"},"uid":{"type":"string","description":"The UID of the contact point.\n"},"url":{"type":"string","description":"The Google Chat webhook URL.\n","secret":true}},"type":"object","required":["url"],"language":{"nodejs":{"requiredOutputs":["uid","url"]}}},"grafana:alerting/ContactPointJira:ContactPointJira":{"properties":{"apiToken":{"type":"string","description":"Personal Access Token that is used as a bearer authorization header.\n","secret":true},"apiUrl":{"type":"string","description":"The URL of the Jira REST API (v2 or v3).\n"},"dedupKeyField":{"type":"string","description":"Custom field ID for storing deduplication keys. Must be numeric.\n"},"description":{"type":"string","description":"The templated description of the Jira issue. Maximum length is 32767 characters.\n"},"disableResolveMessage":{"type":"boolean","description":"Whether to disable sending resolve messages. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"fields":{"type":"object","additionalProperties":{"type":"string"},"description":"Custom Jira issue fields.\n"},"issueType":{"type":"string","description":"The type of issue to create (e.g., Bug, Task, Story).\n"},"labels":{"type":"array","items":{"type":"string"},"description":"Labels to assign to the Jira issue.\n"},"password":{"type":"string","description":"Password to use for Jira authentication.\n","secret":true},"priority":{"type":"string","description":"The priority level of the issue (e.g., High, Medium, Low).\n"},"project":{"type":"string","description":"The project key in Jira.\n"},"reopenDuration":{"type":"string","description":"Duration to consider reopening issues (e.g., '10m').\n"},"reopenTransition":{"type":"string","description":"The name of the workflow transition to reopen an issue.\n"},"resolveTransition":{"type":"string","description":"The name of the workflow transition to resolve an issue.\n"},"settings":{"type":"object","additionalProperties":{"type":"string"},"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.\n","secret":true},"summary":{"type":"string","description":"The templated summary of the Jira issue. Maximum length is 255 characters.\n"},"uid":{"type":"string","description":"The UID of the contact point.\n"},"user":{"type":"string","description":"Username to use for Jira authentication.\n","secret":true},"wontFixResolution":{"type":"string","description":"Resolution status to exclude from reopening/updating.\n"}},"type":"object","required":["apiUrl","issueType","project"],"language":{"nodejs":{"requiredOutputs":["apiUrl","issueType","project","uid"]}}},"grafana:alerting/ContactPointKafka:ContactPointKafka":{"properties":{"apiVersion":{"type":"string","description":"The API version to use when contacting the Kafka REST Server. Supported: v2 (default) and v3. Defaults to \u003cspan pulumi-lang-nodejs=\"`v2`\" pulumi-lang-dotnet=\"`V2`\" pulumi-lang-go=\"`v2`\" pulumi-lang-python=\"`v2`\" pulumi-lang-yaml=\"`v2`\" pulumi-lang-java=\"`v2`\"\u003e`v2`\u003c/span\u003e.\n"},"clusterId":{"type":"string","description":"The Id of cluster to use when contacting the Kafka REST Server. Required\u003cspan pulumi-lang-nodejs=\" apiVersion \" pulumi-lang-dotnet=\" ApiVersion \" pulumi-lang-go=\" apiVersion \" pulumi-lang-python=\" api_version \" pulumi-lang-yaml=\" apiVersion \" pulumi-lang-java=\" apiVersion \"\u003e api_version \u003c/span\u003eto be 'v3'\n"},"description":{"type":"string","description":"The templated description of the Kafka message.\n"},"details":{"type":"string","description":"The templated details to include with the message.\n"},"disableResolveMessage":{"type":"boolean","description":"Whether to disable sending resolve messages. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"password":{"type":"string","description":"The password to use when making a call to the Kafka REST Proxy\n","secret":true},"restProxyUrl":{"type":"string","description":"The URL of the Kafka REST proxy to send requests to.\n","secret":true},"settings":{"type":"object","additionalProperties":{"type":"string"},"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.\n","secret":true},"topic":{"type":"string","description":"The name of the Kafka topic to publish to.\n"},"uid":{"type":"string","description":"The UID of the contact point.\n"},"username":{"type":"string","description":"The user name to use when making a call to the Kafka REST Proxy\n"}},"type":"object","required":["restProxyUrl","topic"],"language":{"nodejs":{"requiredOutputs":["restProxyUrl","topic","uid"]}}},"grafana:alerting/ContactPointLine:ContactPointLine":{"properties":{"description":{"type":"string","description":"The templated description of the message.\n"},"disableResolveMessage":{"type":"boolean","description":"Whether to disable sending resolve messages. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"settings":{"type":"object","additionalProperties":{"type":"string"},"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.\n","secret":true},"title":{"type":"string","description":"The templated title of the message.\n"},"token":{"type":"string","description":"The bearer token used to authorize the client.\n","secret":true},"uid":{"type":"string","description":"The UID of the contact point.\n"}},"type":"object","required":["token"],"language":{"nodejs":{"requiredOutputs":["token","uid"]}}},"grafana:alerting/ContactPointOncall:ContactPointOncall":{"properties":{"authorizationCredentials":{"type":"string","description":"Allows a custom authorization scheme - attaches an auth header with this value. Do not use in conjunction with basic auth parameters.\n","secret":true},"authorizationScheme":{"type":"string","description":"Allows a custom authorization scheme - attaches an auth header with this name. Do not use in conjunction with basic auth parameters.\n"},"basicAuthPassword":{"type":"string","description":"The username to use in basic auth headers attached to the request. If omitted, basic auth will not be used.\n","secret":true},"basicAuthUser":{"type":"string","description":"The username to use in basic auth headers attached to the request. If omitted, basic auth will not be used.\n"},"disableResolveMessage":{"type":"boolean","description":"Whether to disable sending resolve messages. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"httpMethod":{"type":"string","description":"The HTTP method to use in the request. Defaults to `POST`.\n"},"maxAlerts":{"type":"integer","description":"The maximum number of alerts to send in a single request. This can be helpful in limiting the size of the request body. The default is 0, which indicates no limit.\n"},"message":{"type":"string","description":"Custom message. You can use template variables.\n"},"settings":{"type":"object","additionalProperties":{"type":"string"},"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.\n","secret":true},"title":{"type":"string","description":"Templated title of the message.\n"},"uid":{"type":"string","description":"The UID of the contact point.\n"},"url":{"type":"string","description":"The URL to send webhook requests to.\n"}},"type":"object","required":["url"],"language":{"nodejs":{"requiredOutputs":["uid","url"]}}},"grafana:alerting/ContactPointOpsgeny:ContactPointOpsgeny":{"properties":{"apiKey":{"type":"string","description":"The OpsGenie API key to use.\n","secret":true},"autoClose":{"type":"boolean","description":"Whether to auto-close alerts in OpsGenie when they resolve in the Alertmanager.\n"},"description":{"type":"string","description":"A templated high-level description to use for the alert.\n"},"disableResolveMessage":{"type":"boolean","description":"Whether to disable sending resolve messages. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"message":{"type":"string","description":"The templated content of the message.\n"},"overridePriority":{"type":"boolean","description":"Whether to allow the alert priority to be configured via the value of the \u003cspan pulumi-lang-nodejs=\"`ogPriority`\" pulumi-lang-dotnet=\"`OgPriority`\" pulumi-lang-go=\"`ogPriority`\" pulumi-lang-python=\"`og_priority`\" pulumi-lang-yaml=\"`ogPriority`\" pulumi-lang-java=\"`ogPriority`\"\u003e`og_priority`\u003c/span\u003e annotation on the alert.\n"},"responders":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointOpsgenyResponder:ContactPointOpsgenyResponder"},"description":"Teams, users, escalations and schedules that the alert will be routed to send notifications. If the API Key belongs to a team integration, this field will be overwritten with the owner team. This feature is available from Grafana 10.3+.\n"},"sendTagsAs":{"type":"string","description":"Whether to send annotations to OpsGenie as Tags, Details, or both. Supported values are \u003cspan pulumi-lang-nodejs=\"`tags`\" pulumi-lang-dotnet=\"`Tags`\" pulumi-lang-go=\"`tags`\" pulumi-lang-python=\"`tags`\" pulumi-lang-yaml=\"`tags`\" pulumi-lang-java=\"`tags`\"\u003e`tags`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`details`\" pulumi-lang-dotnet=\"`Details`\" pulumi-lang-go=\"`details`\" pulumi-lang-python=\"`details`\" pulumi-lang-yaml=\"`details`\" pulumi-lang-java=\"`details`\"\u003e`details`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`both`\" pulumi-lang-dotnet=\"`Both`\" pulumi-lang-go=\"`both`\" pulumi-lang-python=\"`both`\" pulumi-lang-yaml=\"`both`\" pulumi-lang-java=\"`both`\"\u003e`both`\u003c/span\u003e, or empty to use the default behavior of Tags.\n"},"settings":{"type":"object","additionalProperties":{"type":"string"},"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.\n","secret":true},"uid":{"type":"string","description":"The UID of the contact point.\n"},"url":{"type":"string","description":"Allows customization of the OpsGenie API URL.\n"}},"type":"object","required":["apiKey"],"language":{"nodejs":{"requiredOutputs":["apiKey","uid"]}}},"grafana:alerting/ContactPointOpsgenyResponder:ContactPointOpsgenyResponder":{"properties":{"id":{"type":"string","description":"ID of the responder. Must be specified if name and username are empty.\n"},"name":{"type":"string","description":"Name of the responder. Must be specified if username and id are empty.\n"},"type":{"type":"string","description":"Type of the responder. Supported: team, teams, user, escalation, schedule or a template that is expanded to one of these values.\n"},"username":{"type":"string","description":"User name of the responder. Must be specified if name and id are empty.\n"}},"type":"object","required":["type"]},"grafana:alerting/ContactPointPagerduty:ContactPointPagerduty":{"properties":{"class":{"type":"string","description":"The class or type of event, for example `ping failure`.\n"},"client":{"type":"string","description":"The name of the monitoring client that is triggering this event.\n"},"clientUrl":{"type":"string","description":"The URL of the monitoring client that is triggering this event.\n"},"component":{"type":"string","description":"The component being affected by the event.\n"},"details":{"type":"object","additionalProperties":{"type":"string"},"description":"A set of arbitrary key/value pairs that provide further detail about the incident.\n"},"disableResolveMessage":{"type":"boolean","description":"Whether to disable sending resolve messages. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"group":{"type":"string","description":"The group to which the provided component belongs to.\n"},"integrationKey":{"type":"string","description":"The PagerDuty API key.\n","secret":true},"settings":{"type":"object","additionalProperties":{"type":"string"},"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.\n","secret":true},"severity":{"type":"string","description":"The PagerDuty event severity level. Default is \u003cspan pulumi-lang-nodejs=\"`critical`\" pulumi-lang-dotnet=\"`Critical`\" pulumi-lang-go=\"`critical`\" pulumi-lang-python=\"`critical`\" pulumi-lang-yaml=\"`critical`\" pulumi-lang-java=\"`critical`\"\u003e`critical`\u003c/span\u003e.\n"},"source":{"type":"string","description":"The unique location of the affected system.\n"},"summary":{"type":"string","description":"The templated summary message of the event.\n"},"uid":{"type":"string","description":"The UID of the contact point.\n"},"url":{"type":"string","description":"The URL to send API requests to\n"}},"type":"object","required":["integrationKey"],"language":{"nodejs":{"requiredOutputs":["integrationKey","uid"]}}},"grafana:alerting/ContactPointPushover:ContactPointPushover":{"properties":{"apiToken":{"type":"string","description":"The Pushover API token.\n","secret":true},"device":{"type":"string","description":"Comma-separated list of devices to which the event is associated.\n"},"disableResolveMessage":{"type":"boolean","description":"Whether to disable sending resolve messages. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"expire":{"type":"integer","description":"How many seconds for which the notification will continue to be retried by Pushover.\n"},"message":{"type":"string","description":"The templated notification message content.\n"},"okPriority":{"type":"integer","description":"The priority level of the resolved event.\n"},"okSound":{"type":"string","description":"The sound associated with the resolved notification.\n"},"priority":{"type":"integer","description":"The priority level of the event.\n"},"retry":{"type":"integer","description":"How often, in seconds, the Pushover servers will send the same notification to the user.\n"},"settings":{"type":"object","additionalProperties":{"type":"string"},"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.\n","secret":true},"sound":{"type":"string","description":"The sound associated with the notification.\n"},"title":{"type":"string","description":"The templated title of the message.\n"},"uid":{"type":"string","description":"The UID of the contact point.\n"},"uploadImage":{"type":"boolean","description":"Whether to send images in the notification or not. Default is true. Requires Grafana to be configured to send images in notifications.\n"},"userKey":{"type":"string","description":"The Pushover user key.\n","secret":true}},"type":"object","required":["apiToken","userKey"],"language":{"nodejs":{"requiredOutputs":["apiToken","uid","userKey"]}}},"grafana:alerting/ContactPointSensugo:ContactPointSensugo":{"properties":{"apiKey":{"type":"string","description":"The SensuGo API key.\n","secret":true},"check":{"type":"string","description":"The SensuGo check to which the event should be routed.\n"},"disableResolveMessage":{"type":"boolean","description":"Whether to disable sending resolve messages. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"entity":{"type":"string","description":"The entity being monitored.\n"},"handler":{"type":"string","description":"A custom handler to execute in addition to the check.\n"},"message":{"type":"string","description":"Templated message content describing the alert.\n"},"namespace":{"type":"string","description":"The namespace in which the check resides.\n"},"settings":{"type":"object","additionalProperties":{"type":"string"},"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.\n","secret":true},"uid":{"type":"string","description":"The UID of the contact point.\n"},"url":{"type":"string","description":"The SensuGo URL to send requests to.\n"}},"type":"object","required":["apiKey","url"],"language":{"nodejs":{"requiredOutputs":["apiKey","uid","url"]}}},"grafana:alerting/ContactPointSlack:ContactPointSlack":{"properties":{"color":{"type":"string","description":"Templated color of the slack message.\n"},"disableResolveMessage":{"type":"boolean","description":"Whether to disable sending resolve messages. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"endpointUrl":{"type":"string","description":"Use this to override the Slack API endpoint URL to send requests to.\n"},"iconEmoji":{"type":"string","description":"The name of a Slack workspace emoji to use as the bot icon.\n"},"iconUrl":{"type":"string","description":"A URL of an image to use as the bot icon.\n"},"mentionChannel":{"type":"string","description":"Describes how to ping the slack channel that messages are being sent to. Options are \u003cspan pulumi-lang-nodejs=\"`here`\" pulumi-lang-dotnet=\"`Here`\" pulumi-lang-go=\"`here`\" pulumi-lang-python=\"`here`\" pulumi-lang-yaml=\"`here`\" pulumi-lang-java=\"`here`\"\u003e`here`\u003c/span\u003e for an @here ping, \u003cspan pulumi-lang-nodejs=\"`channel`\" pulumi-lang-dotnet=\"`Channel`\" pulumi-lang-go=\"`channel`\" pulumi-lang-python=\"`channel`\" pulumi-lang-yaml=\"`channel`\" pulumi-lang-java=\"`channel`\"\u003e`channel`\u003c/span\u003e for @channel, or empty for no ping.\n"},"mentionGroups":{"type":"string","description":"Comma-separated list of groups to mention in the message.\n"},"mentionUsers":{"type":"string","description":"Comma-separated list of users to mention in the message.\n"},"recipient":{"type":"string","description":"Channel, private group, or IM channel (can be an encoded ID or a name) to send messages to.\n"},"settings":{"type":"object","additionalProperties":{"type":"string"},"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.\n","secret":true},"text":{"type":"string","description":"Templated content of the message.\n"},"title":{"type":"string","description":"Templated title of the message.\n"},"token":{"type":"string","description":"A Slack API token,for sending messages directly without the webhook method.\n","secret":true},"uid":{"type":"string","description":"The UID of the contact point.\n"},"url":{"type":"string","description":"A Slack webhook URL,for sending messages via the webhook method.\n","secret":true},"username":{"type":"string","description":"Username for the bot to use.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["uid"]}}},"grafana:alerting/ContactPointSn:ContactPointSn":{"properties":{"accessKey":{"type":"string","description":"AWS access key ID used to authenticate with Amazon SNS.\n","secret":true},"assumeRoleArn":{"type":"string","description":"The Amazon Resource Name (ARN) of the role to assume to send notifications to Amazon SNS.\n"},"authProvider":{"type":"string","description":"The authentication provider to use. Valid values are \u003cspan pulumi-lang-nodejs=\"`default`\" pulumi-lang-dotnet=\"`Default`\" pulumi-lang-go=\"`default`\" pulumi-lang-python=\"`default`\" pulumi-lang-yaml=\"`default`\" pulumi-lang-java=\"`default`\"\u003e`default`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`arn`\" pulumi-lang-dotnet=\"`Arn`\" pulumi-lang-go=\"`arn`\" pulumi-lang-python=\"`arn`\" pulumi-lang-yaml=\"`arn`\" pulumi-lang-java=\"`arn`\"\u003e`arn`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`keys`\" pulumi-lang-dotnet=\"`Keys`\" pulumi-lang-go=\"`keys`\" pulumi-lang-python=\"`keys`\" pulumi-lang-yaml=\"`keys`\" pulumi-lang-java=\"`keys`\"\u003e`keys`\u003c/span\u003e. Default is \u003cspan pulumi-lang-nodejs=\"`default`\" pulumi-lang-dotnet=\"`Default`\" pulumi-lang-go=\"`default`\" pulumi-lang-python=\"`default`\" pulumi-lang-yaml=\"`default`\" pulumi-lang-java=\"`default`\"\u003e`default`\u003c/span\u003e. Defaults to \u003cspan pulumi-lang-nodejs=\"`default`\" pulumi-lang-dotnet=\"`Default`\" pulumi-lang-go=\"`default`\" pulumi-lang-python=\"`default`\" pulumi-lang-yaml=\"`default`\" pulumi-lang-java=\"`default`\"\u003e`default`\u003c/span\u003e.\n"},"body":{"type":"string"},"disableResolveMessage":{"type":"boolean","description":"Whether to disable sending resolve messages. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"externalId":{"type":"string","description":"The external ID to use when assuming the role.\n"},"messageFormat":{"type":"string","description":"The format of the message to send. Valid values are \u003cspan pulumi-lang-nodejs=\"`text`\" pulumi-lang-dotnet=\"`Text`\" pulumi-lang-go=\"`text`\" pulumi-lang-python=\"`text`\" pulumi-lang-yaml=\"`text`\" pulumi-lang-java=\"`text`\"\u003e`text`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`body`\" pulumi-lang-dotnet=\"`Body`\" pulumi-lang-go=\"`body`\" pulumi-lang-python=\"`body`\" pulumi-lang-yaml=\"`body`\" pulumi-lang-java=\"`body`\"\u003e`body`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`json`\" pulumi-lang-dotnet=\"`Json`\" pulumi-lang-go=\"`json`\" pulumi-lang-python=\"`json`\" pulumi-lang-yaml=\"`json`\" pulumi-lang-java=\"`json`\"\u003e`json`\u003c/span\u003e. Default is \u003cspan pulumi-lang-nodejs=\"`text`\" pulumi-lang-dotnet=\"`Text`\" pulumi-lang-go=\"`text`\" pulumi-lang-python=\"`text`\" pulumi-lang-yaml=\"`text`\" pulumi-lang-java=\"`text`\"\u003e`text`\u003c/span\u003e. Defaults to \u003cspan pulumi-lang-nodejs=\"`text`\" pulumi-lang-dotnet=\"`Text`\" pulumi-lang-go=\"`text`\" pulumi-lang-python=\"`text`\" pulumi-lang-yaml=\"`text`\" pulumi-lang-java=\"`text`\"\u003e`text`\u003c/span\u003e.\n"},"secretKey":{"type":"string","description":"AWS secret access key used to authenticate with Amazon SNS.\n","secret":true},"settings":{"type":"object","additionalProperties":{"type":"string"},"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.\n","secret":true},"subject":{"type":"string"},"topic":{"type":"string","description":"The Amazon SNS topic to send notifications to.\n"},"uid":{"type":"string","description":"The UID of the contact point.\n"}},"type":"object","required":["topic"],"language":{"nodejs":{"requiredOutputs":["topic","uid"]}}},"grafana:alerting/ContactPointTeam:ContactPointTeam":{"properties":{"disableResolveMessage":{"type":"boolean","description":"Whether to disable sending resolve messages. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"message":{"type":"string","description":"The templated message content to send.\n"},"sectionTitle":{"type":"string","description":"The templated subtitle for each message section.\n"},"settings":{"type":"object","additionalProperties":{"type":"string"},"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.\n","secret":true},"title":{"type":"string","description":"The templated title of the message.\n"},"uid":{"type":"string","description":"The UID of the contact point.\n"},"url":{"type":"string","description":"A Teams webhook URL.\n","secret":true}},"type":"object","required":["url"],"language":{"nodejs":{"requiredOutputs":["uid","url"]}}},"grafana:alerting/ContactPointTelegram:ContactPointTelegram":{"properties":{"chatId":{"type":"string","description":"The chat ID to send messages to.\n"},"disableNotifications":{"type":"boolean","description":"When set users will receive a notification with no sound.\n"},"disableResolveMessage":{"type":"boolean","description":"Whether to disable sending resolve messages. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"disableWebPagePreview":{"type":"boolean","description":"When set it disables link previews for links in the message.\n"},"message":{"type":"string","description":"The templated content of the message.\n"},"messageThreadId":{"type":"string","description":"The ID of the message thread to send the message to.\n"},"parseMode":{"type":"string","description":"Mode for parsing entities in the message text. Supported: None, Markdown, MarkdownV2, and HTML. HTML is the default.\n"},"protectContent":{"type":"boolean","description":"When set it protects the contents of the message from forwarding and saving.\n"},"settings":{"type":"object","additionalProperties":{"type":"string"},"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.\n","secret":true},"token":{"type":"string","description":"The Telegram bot token.\n","secret":true},"uid":{"type":"string","description":"The UID of the contact point.\n"}},"type":"object","required":["chatId","token"],"language":{"nodejs":{"requiredOutputs":["chatId","token","uid"]}}},"grafana:alerting/ContactPointThreema:ContactPointThreema":{"properties":{"apiSecret":{"type":"string","description":"The Threema API key.\n","secret":true},"description":{"type":"string","description":"The templated description of the message.\n"},"disableResolveMessage":{"type":"boolean","description":"Whether to disable sending resolve messages. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"gatewayId":{"type":"string","description":"The Threema gateway ID.\n"},"recipientId":{"type":"string","description":"The ID of the recipient of the message.\n"},"settings":{"type":"object","additionalProperties":{"type":"string"},"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.\n","secret":true},"title":{"type":"string","description":"The templated title of the message.\n"},"uid":{"type":"string","description":"The UID of the contact point.\n"}},"type":"object","required":["apiSecret","gatewayId","recipientId"],"language":{"nodejs":{"requiredOutputs":["apiSecret","gatewayId","recipientId","uid"]}}},"grafana:alerting/ContactPointVictorop:ContactPointVictorop":{"properties":{"description":{"type":"string","description":"Templated description of the message.\n"},"disableResolveMessage":{"type":"boolean","description":"Whether to disable sending resolve messages. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"messageType":{"type":"string","description":"The VictorOps alert state - typically either `CRITICAL` or `RECOVERY`.\n"},"settings":{"type":"object","additionalProperties":{"type":"string"},"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.\n","secret":true},"title":{"type":"string","description":"Templated title to display.\n"},"uid":{"type":"string","description":"The UID of the contact point.\n"},"url":{"type":"string","description":"The VictorOps webhook URL.\n","secret":true}},"type":"object","required":["url"],"language":{"nodejs":{"requiredOutputs":["uid","url"]}}},"grafana:alerting/ContactPointWebex:ContactPointWebex":{"properties":{"apiUrl":{"type":"string","description":"The URL to send webhook requests to.\n"},"disableResolveMessage":{"type":"boolean","description":"Whether to disable sending resolve messages. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"message":{"type":"string","description":"The templated title of the message to send.\n"},"roomId":{"type":"string","description":"ID of the Webex Teams room where to send the messages.\n"},"settings":{"type":"object","additionalProperties":{"type":"string"},"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.\n","secret":true},"token":{"type":"string","description":"The bearer token used to authorize the client.\n","secret":true},"uid":{"type":"string","description":"The UID of the contact point.\n"}},"type":"object","required":["roomId","token"],"language":{"nodejs":{"requiredOutputs":["roomId","token","uid"]}}},"grafana:alerting/ContactPointWebhook:ContactPointWebhook":{"properties":{"authorizationCredentials":{"type":"string","description":"Allows a custom authorization scheme - attaches an auth header with this value. Do not use in conjunction with basic auth parameters.\n","secret":true},"authorizationScheme":{"type":"string","description":"Allows a custom authorization scheme - attaches an auth header with this name. Do not use in conjunction with basic auth parameters.\n"},"basicAuthPassword":{"type":"string","description":"The username to use in basic auth headers attached to the request. If omitted, basic auth will not be used.\n","secret":true},"basicAuthUser":{"type":"string","description":"The username to use in basic auth headers attached to the request. If omitted, basic auth will not be used.\n"},"disableResolveMessage":{"type":"boolean","description":"Whether to disable sending resolve messages. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"headers":{"type":"object","additionalProperties":{"type":"string"},"description":"Custom headers to attach to the request.\n"},"hmacConfig":{"$ref":"#/types/grafana:alerting/ContactPointWebhookHmacConfig:ContactPointWebhookHmacConfig","description":"HMAC signature configuration options.\n"},"httpConfig":{"$ref":"#/types/grafana:alerting/ContactPointWebhookHttpConfig:ContactPointWebhookHttpConfig","description":"Common HTTP client options.\n"},"httpMethod":{"type":"string","description":"The HTTP method to use in the request. Defaults to `POST`.\n"},"maxAlerts":{"type":"integer","description":"The maximum number of alerts to send in a single request. This can be helpful in limiting the size of the request body. The default is 0, which indicates no limit.\n"},"message":{"type":"string","description":"Custom message. You can use template variables.\n"},"payload":{"$ref":"#/types/grafana:alerting/ContactPointWebhookPayload:ContactPointWebhookPayload","description":"Optionally provide a templated payload. Overrides 'Message' and 'Title' field.\n"},"settings":{"type":"object","additionalProperties":{"type":"string"},"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.\n","secret":true},"title":{"type":"string","description":"Templated title of the message.\n"},"tlsConfig":{"type":"object","additionalProperties":{"type":"string"},"description":"Allows configuring TLS for the webhook notifier.\n","secret":true},"uid":{"type":"string","description":"The UID of the contact point.\n"},"url":{"type":"string","description":"The URL to send webhook requests to.\n"}},"type":"object","required":["url"],"language":{"nodejs":{"requiredOutputs":["uid","url"]}}},"grafana:alerting/ContactPointWebhookHmacConfig:ContactPointWebhookHmacConfig":{"properties":{"header":{"type":"string","description":"The header in which the HMAC signature will be included. Defaults to `X-Grafana-Alerting-Signature`.\n"},"secret":{"type":"string","description":"The secret key used to generate the HMAC signature.\n","secret":true},"timestampHeader":{"type":"string","description":"If set, the timestamp will be included in the HMAC signature. The value should be the name of the header to use.\n"}},"type":"object","required":["secret"]},"grafana:alerting/ContactPointWebhookHttpConfig:ContactPointWebhookHttpConfig":{"properties":{"oauth2":{"$ref":"#/types/grafana:alerting/ContactPointWebhookHttpConfigOauth2:ContactPointWebhookHttpConfigOauth2","description":"OAuth2 configuration options.\n"}},"type":"object"},"grafana:alerting/ContactPointWebhookHttpConfigOauth2:ContactPointWebhookHttpConfigOauth2":{"properties":{"clientId":{"type":"string","description":"Client ID to use when authenticating.\n"},"clientSecret":{"type":"string","description":"Client secret to use when authenticating.\n","secret":true},"endpointParams":{"type":"object","additionalProperties":{"type":"string"},"description":"Optional parameters to append to the access token request.\n"},"proxyConfig":{"$ref":"#/types/grafana:alerting/ContactPointWebhookHttpConfigOauth2ProxyConfig:ContactPointWebhookHttpConfigOauth2ProxyConfig","description":"Optional proxy configuration for OAuth2 requests.\n"},"scopes":{"type":"array","items":{"type":"string"},"description":"Optional scopes to request when obtaining an access token.\n"},"tlsConfig":{"$ref":"#/types/grafana:alerting/ContactPointWebhookHttpConfigOauth2TlsConfig:ContactPointWebhookHttpConfigOauth2TlsConfig","description":"Optional TLS configuration options for OAuth2 requests.\n"},"tokenUrl":{"type":"string","description":"URL for the access token endpoint.\n"}},"type":"object","required":["clientId","clientSecret","tokenUrl"]},"grafana:alerting/ContactPointWebhookHttpConfigOauth2ProxyConfig:ContactPointWebhookHttpConfigOauth2ProxyConfig":{"properties":{"noProxy":{"type":"string","description":"Comma-separated list of addresses that should not use a proxy.\n"},"proxyConnectHeader":{"type":"object","additionalProperties":{"type":"string"},"description":"Optional headers to send to proxies during CONNECT requests.\n"},"proxyFromEnvironment":{"type":"boolean","description":"Use environment HTTP*PROXY, HTTPS*PROXY and NO_PROXY to determine proxies. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"proxyUrl":{"type":"string","description":"HTTP proxy server to use to connect to the targets.\n"}},"type":"object"},"grafana:alerting/ContactPointWebhookHttpConfigOauth2TlsConfig:ContactPointWebhookHttpConfigOauth2TlsConfig":{"properties":{"caCertificate":{"type":"string","description":"Certificate in PEM format to use when verifying the server's certificate chain.\n","secret":true},"clientCertificate":{"type":"string","description":"Client certificate in PEM format to use when connecting to the server.\n","secret":true},"clientKey":{"type":"string","description":"Client key in PEM format to use when connecting to the server.\n","secret":true},"insecureSkipVerify":{"type":"boolean","description":"Do not verify the server's certificate chain and host name. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"}},"type":"object"},"grafana:alerting/ContactPointWebhookPayload:ContactPointWebhookPayload":{"properties":{"template":{"type":"string","description":"Custom payload template.\n"},"vars":{"type":"object","additionalProperties":{"type":"string"},"description":"Optionally provide a variables to be used in the payload template. They will be available in the template as `.Vars.\u003cvariable_name\u003e`.\n"}},"type":"object","required":["template"]},"grafana:alerting/ContactPointWecom:ContactPointWecom":{"properties":{"agentId":{"type":"string","description":"Agent ID added to the request payload when using APIAPP.\n"},"corpId":{"type":"string","description":"Corp ID used to get token when using APIAPP.\n"},"disableResolveMessage":{"type":"boolean","description":"Whether to disable sending resolve messages. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"message":{"type":"string","description":"The templated content of the message to send.\n"},"msgType":{"type":"string","description":"The type of them message. Supported: markdown, text. Default: text.\n"},"secret":{"type":"string","description":"The secret key required to obtain access token when using APIAPP. See https://work.weixin.qq.com/wework_admin/frame#apps to create APIAPP.\n","secret":true},"settings":{"type":"object","additionalProperties":{"type":"string"},"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.\n","secret":true},"title":{"type":"string","description":"The templated title of the message to send.\n"},"toUser":{"type":"string","description":"The ID of user that should receive the message. Multiple entries should be separated by '|'. Default: @all.\n"},"uid":{"type":"string","description":"The UID of the contact point.\n"},"url":{"type":"string","description":"The WeCom webhook URL. Required if using GroupRobot.\n","secret":true}},"type":"object","language":{"nodejs":{"requiredOutputs":["uid"]}}},"grafana:alerting/MuteTimingInterval:MuteTimingInterval":{"properties":{"daysOfMonths":{"type":"array","items":{"type":"string"},"description":"An inclusive range of days, 1-31, within a month, e.g. \"1\" or \"14:16\". Negative values can be used to represent days counting from the end of a month, e.g. \"-1\".\n"},"location":{"type":"string","description":"Provides the time zone for the time interval. Must be a location in the IANA time zone database, e.g \"America/New_York\"\n"},"months":{"type":"array","items":{"type":"string"},"description":"An inclusive range of months, either numerical or full calendar month, e.g. \"1:3\", \"december\", or \"may:august\".\n"},"times":{"type":"array","items":{"$ref":"#/types/grafana:alerting/MuteTimingIntervalTime:MuteTimingIntervalTime"},"description":"The time ranges, represented in minutes, during which to mute in a given day.\n"},"weekdays":{"type":"array","items":{"type":"string"},"description":"An inclusive range of weekdays, e.g. \"monday\" or \"tuesday:thursday\".\n"},"years":{"type":"array","items":{"type":"string"},"description":"A positive inclusive range of years, e.g. \"2030\" or \"2025:2026\".\n"}},"type":"object"},"grafana:alerting/MuteTimingIntervalTime:MuteTimingIntervalTime":{"properties":{"end":{"type":"string","description":"The time, in hh:mm format, of when the interval should end exclusively.\n"},"start":{"type":"string","description":"The time, in hh:mm format, of when the interval should begin inclusively.\n"}},"type":"object","required":["end","start"]},"grafana:alerting/NotificationPolicyPolicy:NotificationPolicyPolicy":{"properties":{"activeTimings":{"type":"array","items":{"type":"string"},"description":"A list of time interval names to apply to alerts that match this policy to suppress them unless they are sent at the specified time. Supported in Grafana 12.1.0 and later\n"},"contactPoint":{"type":"string","description":"The contact point to route notifications that match this rule to.\n"},"continue":{"type":"boolean","description":"Whether to continue matching subsequent rules if an alert matches the current rule. Otherwise, the rule will be 'consumed' by the first policy to match it.\n"},"groupBies":{"type":"array","items":{"type":"string"},"description":"A list of alert labels to group alerts into notifications by. Use the special label `...` to group alerts by all labels, effectively disabling grouping. Required for root policy only. If empty, the parent grouping is used.\n"},"groupInterval":{"type":"string","description":"Minimum time interval between two notifications for the same group. Default is 5 minutes.\n"},"groupWait":{"type":"string","description":"Time to wait to buffer alerts of the same group before sending a notification. Default is 30 seconds.\n"},"matchers":{"type":"array","items":{"$ref":"#/types/grafana:alerting/NotificationPolicyPolicyMatcher:NotificationPolicyPolicyMatcher"},"description":"Describes which labels this rule should match. When multiple matchers are supplied, an alert must match ALL matchers to be accepted by this policy. When no matchers are supplied, the rule will match all alert instances.\n"},"muteTimings":{"type":"array","items":{"type":"string"},"description":"A list of time intervals to apply to alerts that match this policy to mute them for the specified time.\n"},"policies":{"type":"array","items":{"$ref":"#/types/grafana:alerting/NotificationPolicyPolicyPolicy:NotificationPolicyPolicyPolicy"},"description":"Routing rules for specific label sets.\n"},"repeatInterval":{"type":"string","description":"Minimum time interval for re-sending a notification if an alert is still firing. Default is 4 hours.\n"}},"type":"object"},"grafana:alerting/NotificationPolicyPolicyMatcher:NotificationPolicyPolicyMatcher":{"properties":{"label":{"type":"string","description":"The name of the label to match against.\n"},"match":{"type":"string","description":"The operator to apply when matching values of the given label. Allowed operators are `=` for equality, `!=` for negated equality, `=~` for regex equality, and `!~` for negated regex equality.\n"},"value":{"type":"string","description":"The label value to match against.\n"}},"type":"object","required":["label","match","value"]},"grafana:alerting/NotificationPolicyPolicyPolicy:NotificationPolicyPolicyPolicy":{"properties":{"activeTimings":{"type":"array","items":{"type":"string"},"description":"A list of time interval names to apply to alerts that match this policy to suppress them unless they are sent at the specified time. Supported in Grafana 12.1.0 and later\n"},"contactPoint":{"type":"string","description":"The contact point to route notifications that match this rule to.\n"},"continue":{"type":"boolean","description":"Whether to continue matching subsequent rules if an alert matches the current rule. Otherwise, the rule will be 'consumed' by the first policy to match it.\n"},"groupBies":{"type":"array","items":{"type":"string"},"description":"A list of alert labels to group alerts into notifications by. Use the special label `...` to group alerts by all labels, effectively disabling grouping. Required for root policy only. If empty, the parent grouping is used.\n"},"groupInterval":{"type":"string","description":"Minimum time interval between two notifications for the same group. Default is 5 minutes.\n"},"groupWait":{"type":"string","description":"Time to wait to buffer alerts of the same group before sending a notification. Default is 30 seconds.\n"},"matchers":{"type":"array","items":{"$ref":"#/types/grafana:alerting/NotificationPolicyPolicyPolicyMatcher:NotificationPolicyPolicyPolicyMatcher"},"description":"Describes which labels this rule should match. When multiple matchers are supplied, an alert must match ALL matchers to be accepted by this policy. When no matchers are supplied, the rule will match all alert instances.\n"},"muteTimings":{"type":"array","items":{"type":"string"},"description":"A list of time intervals to apply to alerts that match this policy to mute them for the specified time.\n"},"policies":{"type":"array","items":{"$ref":"#/types/grafana:alerting/NotificationPolicyPolicyPolicyPolicy:NotificationPolicyPolicyPolicyPolicy"},"description":"Routing rules for specific label sets.\n"},"repeatInterval":{"type":"string","description":"Minimum time interval for re-sending a notification if an alert is still firing. Default is 4 hours.\n"}},"type":"object"},"grafana:alerting/NotificationPolicyPolicyPolicyMatcher:NotificationPolicyPolicyPolicyMatcher":{"properties":{"label":{"type":"string","description":"The name of the label to match against.\n"},"match":{"type":"string","description":"The operator to apply when matching values of the given label. Allowed operators are `=` for equality, `!=` for negated equality, `=~` for regex equality, and `!~` for negated regex equality.\n"},"value":{"type":"string","description":"The label value to match against.\n"}},"type":"object","required":["label","match","value"]},"grafana:alerting/NotificationPolicyPolicyPolicyPolicy:NotificationPolicyPolicyPolicyPolicy":{"properties":{"activeTimings":{"type":"array","items":{"type":"string"},"description":"A list of time interval names to apply to alerts that match this policy to suppress them unless they are sent at the specified time. Supported in Grafana 12.1.0 and later\n"},"contactPoint":{"type":"string","description":"The contact point to route notifications that match this rule to.\n"},"continue":{"type":"boolean","description":"Whether to continue matching subsequent rules if an alert matches the current rule. Otherwise, the rule will be 'consumed' by the first policy to match it.\n"},"groupBies":{"type":"array","items":{"type":"string"},"description":"A list of alert labels to group alerts into notifications by. Use the special label `...` to group alerts by all labels, effectively disabling grouping. Required for root policy only. If empty, the parent grouping is used.\n"},"groupInterval":{"type":"string","description":"Minimum time interval between two notifications for the same group. Default is 5 minutes.\n"},"groupWait":{"type":"string","description":"Time to wait to buffer alerts of the same group before sending a notification. Default is 30 seconds.\n"},"matchers":{"type":"array","items":{"$ref":"#/types/grafana:alerting/NotificationPolicyPolicyPolicyPolicyMatcher:NotificationPolicyPolicyPolicyPolicyMatcher"},"description":"Describes which labels this rule should match. When multiple matchers are supplied, an alert must match ALL matchers to be accepted by this policy. When no matchers are supplied, the rule will match all alert instances.\n"},"muteTimings":{"type":"array","items":{"type":"string"},"description":"A list of time intervals to apply to alerts that match this policy to mute them for the specified time.\n"},"policies":{"type":"array","items":{"$ref":"#/types/grafana:alerting/NotificationPolicyPolicyPolicyPolicyPolicy:NotificationPolicyPolicyPolicyPolicyPolicy"},"description":"Routing rules for specific label sets.\n"},"repeatInterval":{"type":"string","description":"Minimum time interval for re-sending a notification if an alert is still firing. Default is 4 hours.\n"}},"type":"object"},"grafana:alerting/NotificationPolicyPolicyPolicyPolicyMatcher:NotificationPolicyPolicyPolicyPolicyMatcher":{"properties":{"label":{"type":"string","description":"The name of the label to match against.\n"},"match":{"type":"string","description":"The operator to apply when matching values of the given label. Allowed operators are `=` for equality, `!=` for negated equality, `=~` for regex equality, and `!~` for negated regex equality.\n"},"value":{"type":"string","description":"The label value to match against.\n"}},"type":"object","required":["label","match","value"]},"grafana:alerting/NotificationPolicyPolicyPolicyPolicyPolicy:NotificationPolicyPolicyPolicyPolicyPolicy":{"properties":{"activeTimings":{"type":"array","items":{"type":"string"},"description":"A list of time interval names to apply to alerts that match this policy to suppress them unless they are sent at the specified time. Supported in Grafana 12.1.0 and later\n"},"contactPoint":{"type":"string","description":"The contact point to route notifications that match this rule to.\n"},"continue":{"type":"boolean","description":"Whether to continue matching subsequent rules if an alert matches the current rule. Otherwise, the rule will be 'consumed' by the first policy to match it.\n"},"groupBies":{"type":"array","items":{"type":"string"},"description":"A list of alert labels to group alerts into notifications by. Use the special label `...` to group alerts by all labels, effectively disabling grouping. Required for root policy only. If empty, the parent grouping is used.\n"},"groupInterval":{"type":"string","description":"Minimum time interval between two notifications for the same group. Default is 5 minutes.\n"},"groupWait":{"type":"string","description":"Time to wait to buffer alerts of the same group before sending a notification. Default is 30 seconds.\n"},"matchers":{"type":"array","items":{"$ref":"#/types/grafana:alerting/NotificationPolicyPolicyPolicyPolicyPolicyMatcher:NotificationPolicyPolicyPolicyPolicyPolicyMatcher"},"description":"Describes which labels this rule should match. When multiple matchers are supplied, an alert must match ALL matchers to be accepted by this policy. When no matchers are supplied, the rule will match all alert instances.\n"},"muteTimings":{"type":"array","items":{"type":"string"},"description":"A list of time intervals to apply to alerts that match this policy to mute them for the specified time.\n"},"policies":{"type":"array","items":{"$ref":"#/types/grafana:alerting/NotificationPolicyPolicyPolicyPolicyPolicyPolicy:NotificationPolicyPolicyPolicyPolicyPolicyPolicy"},"description":"Routing rules for specific label sets.\n"},"repeatInterval":{"type":"string","description":"Minimum time interval for re-sending a notification if an alert is still firing. Default is 4 hours.\n"}},"type":"object"},"grafana:alerting/NotificationPolicyPolicyPolicyPolicyPolicyMatcher:NotificationPolicyPolicyPolicyPolicyPolicyMatcher":{"properties":{"label":{"type":"string","description":"The name of the label to match against.\n"},"match":{"type":"string","description":"The operator to apply when matching values of the given label. Allowed operators are `=` for equality, `!=` for negated equality, `=~` for regex equality, and `!~` for negated regex equality.\n"},"value":{"type":"string","description":"The label value to match against.\n"}},"type":"object","required":["label","match","value"]},"grafana:alerting/NotificationPolicyPolicyPolicyPolicyPolicyPolicy:NotificationPolicyPolicyPolicyPolicyPolicyPolicy":{"properties":{"activeTimings":{"type":"array","items":{"type":"string"},"description":"A list of time interval names to apply to alerts that match this policy to suppress them unless they are sent at the specified time. Supported in Grafana 12.1.0 and later\n"},"contactPoint":{"type":"string","description":"The contact point to route notifications that match this rule to.\n"},"continue":{"type":"boolean","description":"Whether to continue matching subsequent rules if an alert matches the current rule. Otherwise, the rule will be 'consumed' by the first policy to match it.\n"},"groupBies":{"type":"array","items":{"type":"string"},"description":"A list of alert labels to group alerts into notifications by. Use the special label `...` to group alerts by all labels, effectively disabling grouping. Required for root policy only. If empty, the parent grouping is used.\n"},"groupInterval":{"type":"string","description":"Minimum time interval between two notifications for the same group. Default is 5 minutes.\n"},"groupWait":{"type":"string","description":"Time to wait to buffer alerts of the same group before sending a notification. Default is 30 seconds.\n"},"matchers":{"type":"array","items":{"$ref":"#/types/grafana:alerting/NotificationPolicyPolicyPolicyPolicyPolicyPolicyMatcher:NotificationPolicyPolicyPolicyPolicyPolicyPolicyMatcher"},"description":"Describes which labels this rule should match. When multiple matchers are supplied, an alert must match ALL matchers to be accepted by this policy. When no matchers are supplied, the rule will match all alert instances.\n"},"muteTimings":{"type":"array","items":{"type":"string"},"description":"A list of time intervals to apply to alerts that match this policy to mute them for the specified time.\n"},"repeatInterval":{"type":"string","description":"Minimum time interval for re-sending a notification if an alert is still firing. Default is 4 hours.\n"}},"type":"object","required":["groupBies"]},"grafana:alerting/NotificationPolicyPolicyPolicyPolicyPolicyPolicyMatcher:NotificationPolicyPolicyPolicyPolicyPolicyPolicyMatcher":{"properties":{"label":{"type":"string","description":"The name of the label to match against.\n"},"match":{"type":"string","description":"The operator to apply when matching values of the given label. Allowed operators are `=` for equality, `!=` for negated equality, `=~` for regex equality, and `!~` for negated regex equality.\n"},"value":{"type":"string","description":"The label value to match against.\n"}},"type":"object","required":["label","match","value"]},"grafana:alerting/RecordingRuleV0Alpha1Metadata:RecordingRuleV0Alpha1Metadata":{"properties":{"annotations":{"type":"object","additionalProperties":{"type":"string"},"description":"Annotations of the resource.\n"},"folderUid":{"type":"string","description":"The UID of the folder to save the resource in.\n"},"uid":{"type":"string","description":"The unique identifier of the resource.\n"},"url":{"type":"string","description":"The full URL of the resource.\n"},"uuid":{"type":"string","description":"The globally unique identifier of a resource, used by the API for tracking.\n"},"version":{"type":"string","description":"The version of the resource.\n"}},"type":"object","required":["uid"],"language":{"nodejs":{"requiredOutputs":["annotations","uid","url","uuid","version"]}}},"grafana:alerting/RecordingRuleV0Alpha1Options:RecordingRuleV0Alpha1Options":{"properties":{"overwrite":{"type":"boolean","description":"Set to true if you want to overwrite existing resource with newer version, same resource title in folder or same resource uid.\n"}},"type":"object"},"grafana:alerting/RecordingRuleV0Alpha1Spec:RecordingRuleV0Alpha1Spec":{"properties":{"expressions":{"type":"object","additionalProperties":{"type":"string"},"description":"A sequence of stages that describe the contents of the rule. Each value is a JSON string representing an expression object.\n"},"labels":{"type":"object","additionalProperties":{"type":"string"},"description":"Key-value pairs to attach to the recorded metric.\n"},"metric":{"type":"string","description":"The name of the metric to write to.\n"},"paused":{"type":"boolean","description":"Sets whether the recording rule should be paused or not.\n"},"targetDatasourceUid":{"type":"string","description":"The UID of the datasource to write the metric to.\n"},"title":{"type":"string","description":"The title of the recording rule.\n"},"trigger":{"$ref":"#/types/grafana:alerting/RecordingRuleV0Alpha1SpecTrigger:RecordingRuleV0Alpha1SpecTrigger","description":"The trigger configuration for the recording rule.\n"}},"type":"object","required":["expressions","metric","targetDatasourceUid","title"]},"grafana:alerting/RecordingRuleV0Alpha1SpecTrigger:RecordingRuleV0Alpha1SpecTrigger":{"properties":{"interval":{"type":"string","description":"The interval at which the recording rule should be evaluated.\n"}},"type":"object","required":["interval"]},"grafana:alerting/RuleGroupRule:RuleGroupRule":{"properties":{"annotations":{"type":"object","additionalProperties":{"type":"string"},"description":"Key-value pairs of metadata to attach to the alert rule. They add additional information, such as a \u003cspan pulumi-lang-nodejs=\"`summary`\" pulumi-lang-dotnet=\"`Summary`\" pulumi-lang-go=\"`summary`\" pulumi-lang-python=\"`summary`\" pulumi-lang-yaml=\"`summary`\" pulumi-lang-java=\"`summary`\"\u003e`summary`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`runbookUrl`\" pulumi-lang-dotnet=\"`RunbookUrl`\" pulumi-lang-go=\"`runbookUrl`\" pulumi-lang-python=\"`runbook_url`\" pulumi-lang-yaml=\"`runbookUrl`\" pulumi-lang-java=\"`runbookUrl`\"\u003e`runbook_url`\u003c/span\u003e, to help identify and investigate alerts. The `__dashboardUid__` and `__panelId__` annotations, which link alerts to a panel, must be set together. Defaults to `map[]`.\n"},"condition":{"type":"string","description":"The \u003cspan pulumi-lang-nodejs=\"`refId`\" pulumi-lang-dotnet=\"`RefId`\" pulumi-lang-go=\"`refId`\" pulumi-lang-python=\"`ref_id`\" pulumi-lang-yaml=\"`refId`\" pulumi-lang-java=\"`refId`\"\u003e`ref_id`\u003c/span\u003e of the query node in the \u003cspan pulumi-lang-nodejs=\"`data`\" pulumi-lang-dotnet=\"`Data`\" pulumi-lang-go=\"`data`\" pulumi-lang-python=\"`data`\" pulumi-lang-yaml=\"`data`\" pulumi-lang-java=\"`data`\"\u003e`data`\u003c/span\u003e field to use as the alert condition.\n"},"datas":{"type":"array","items":{"$ref":"#/types/grafana:alerting/RuleGroupRuleData:RuleGroupRuleData"},"description":"A sequence of stages that describe the contents of the rule.\n"},"execErrState":{"type":"string","description":"Describes what state to enter when the rule's query is invalid and the rule cannot be executed. Options are OK, Error, KeepLast, and Alerting.  Defaults to Alerting if not set.\n"},"for":{"type":"string","description":"The amount of time for which the rule must be breached for the rule to be considered to be Firing. Before this time has elapsed, the rule is only considered to be Pending. Defaults to \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e.\n"},"isPaused":{"type":"boolean","description":"Sets whether the alert should be paused or not. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"keepFiringFor":{"type":"string","description":"The amount of time for which the rule will considered to be Recovering after initially Firing. Before this time has elapsed, the rule will continue to fire once it's been triggered.\n"},"labels":{"type":"object","additionalProperties":{"type":"string"},"description":"Key-value pairs to attach to the alert rule that can be used in matching, grouping, and routing. Defaults to `map[]`.\n"},"missingSeriesEvalsToResolve":{"type":"integer","description":"The number of missing series evaluations that must occur before the rule is considered to be resolved.\n"},"name":{"type":"string","description":"The name of the alert rule.\n"},"noDataState":{"type":"string","description":"Describes what state to enter when the rule's query returns No Data. Options are OK, NoData, KeepLast, and Alerting. Defaults to NoData if not set.\n"},"notificationSettings":{"$ref":"#/types/grafana:alerting/RuleGroupRuleNotificationSettings:RuleGroupRuleNotificationSettings","description":"Notification settings for the rule. If specified, it overrides the notification policies. Available since Grafana 10.4, requires feature flag 'alertingSimplifiedRouting' to be enabled.\n"},"record":{"$ref":"#/types/grafana:alerting/RuleGroupRuleRecord:RuleGroupRuleRecord","description":"Settings for a recording rule. Available since Grafana 11.2, requires feature flag 'grafanaManagedRecordingRules' to be enabled.\n"},"uid":{"type":"string","description":"The unique identifier of the alert rule.\n"}},"type":"object","required":["datas","name"],"language":{"nodejs":{"requiredOutputs":["datas","name","uid"]}}},"grafana:alerting/RuleGroupRuleData:RuleGroupRuleData":{"properties":{"datasourceUid":{"type":"string","description":"The UID of the datasource being queried, or \"-100\" if this stage is an expression stage.\n"},"model":{"type":"string","description":"Custom JSON data to send to the specified datasource when querying.\n"},"queryType":{"type":"string","description":"An optional identifier for the type of query being executed. Defaults to ``.\n"},"refId":{"type":"string","description":"A unique string to identify this query stage within a rule.\n"},"relativeTimeRange":{"$ref":"#/types/grafana:alerting/RuleGroupRuleDataRelativeTimeRange:RuleGroupRuleDataRelativeTimeRange","description":"The time range, relative to when the query is executed, across which to query.\n"}},"type":"object","required":["datasourceUid","model","refId","relativeTimeRange"]},"grafana:alerting/RuleGroupRuleDataRelativeTimeRange:RuleGroupRuleDataRelativeTimeRange":{"properties":{"from":{"type":"integer","description":"The number of seconds in the past, relative to when the rule is evaluated, at which the time range begins.\n"},"to":{"type":"integer","description":"The number of seconds in the past, relative to when the rule is evaluated, at which the time range ends.\n"}},"type":"object","required":["from","to"]},"grafana:alerting/RuleGroupRuleNotificationSettings:RuleGroupRuleNotificationSettings":{"properties":{"activeTimings":{"type":"array","items":{"type":"string"},"description":"A list of time interval names to apply to alerts that match this policy to suppress them unless they are sent at the specified time. Supported in Grafana 12.1.0 and later\n"},"contactPoint":{"type":"string","description":"The contact point to route notifications that match this rule to.\n"},"groupBies":{"type":"array","items":{"type":"string"},"description":"A list of alert labels to group alerts into notifications by. Use the special label `...` to group alerts by all labels, effectively disabling grouping. If empty, no grouping is used. If specified, requires labels 'alertname' and 'grafana_folder' to be included.\n"},"groupInterval":{"type":"string","description":"Minimum time interval between two notifications for the same group. Default is 5 minutes.\n"},"groupWait":{"type":"string","description":"Time to wait to buffer alerts of the same group before sending a notification. Default is 30 seconds.\n"},"muteTimings":{"type":"array","items":{"type":"string"},"description":"A list of mute timing names to apply to alerts that match this policy.\n"},"repeatInterval":{"type":"string","description":"Minimum time interval for re-sending a notification if an alert is still firing. Default is 4 hours.\n"}},"type":"object","required":["contactPoint"]},"grafana:alerting/RuleGroupRuleRecord:RuleGroupRuleRecord":{"properties":{"from":{"type":"string","description":"The ref id of the query node in the data field to use as the source of the metric.\n"},"metric":{"type":"string","description":"The name of the metric to write to.\n"},"targetDatasourceUid":{"type":"string","description":"The UID of the datasource to write the metric to.\n"}},"type":"object","required":["from","metric"]},"grafana:assert/CustomModelRulesRules:CustomModelRulesRules":{"properties":{"entities":{"type":"array","items":{"$ref":"#/types/grafana:assert/CustomModelRulesRulesEntity:CustomModelRulesRulesEntity"},"description":"List of entities to define in the custom model rules.\n"}},"type":"object","required":["entities"]},"grafana:assert/CustomModelRulesRulesEntity:CustomModelRulesRulesEntity":{"properties":{"definedBies":{"type":"array","items":{"$ref":"#/types/grafana:assert/CustomModelRulesRulesEntityDefinedBy:CustomModelRulesRulesEntityDefinedBy"},"description":"List of queries that define this entity.\n"},"disabled":{"type":"boolean","description":"Whether this entity is disabled.\n"},"enrichedBies":{"type":"array","items":{"type":"string"},"description":"List of enrichment sources for the entity.\n"},"lookup":{"type":"object","additionalProperties":{"type":"string"},"description":"Lookup mappings for the entity.\n"},"name":{"type":"string","description":"The name of the entity.\n"},"scope":{"type":"object","additionalProperties":{"type":"string"},"description":"Scope labels for the entity.\n"},"type":{"type":"string","description":"The type of the entity (e.g., Service, Pod, Namespace).\n"}},"type":"object","required":["definedBies","name","type"]},"grafana:assert/CustomModelRulesRulesEntityDefinedBy:CustomModelRulesRulesEntityDefinedBy":{"properties":{"disabled":{"type":"boolean","description":"Whether this rule is disabled. When true, only the 'query' field is used to match an existing rule to disable; other fields are ignored.\n"},"labelValues":{"type":"object","additionalProperties":{"type":"string"},"description":"Label value mappings for the query.\n"},"literals":{"type":"object","additionalProperties":{"type":"string"},"description":"Literal value mappings for the query.\n"},"metricValue":{"type":"string","description":"Metric value for the query.\n"},"query":{"type":"string","description":"The Prometheus query that defines this entity.\n"}},"type":"object","required":["query"]},"grafana:assert/LogConfigMatch:LogConfigMatch":{"properties":{"op":{"type":"string","description":"Operation to use for matching. One of: =, \u003c\u003e, \u003c, \u003e, \u003c=, \u003e=, IS NULL, IS NOT NULL, STARTS WITH, CONTAINS.\n"},"property":{"type":"string","description":"Entity property to match.\n"},"values":{"type":"array","items":{"type":"string"},"description":"Values to match against.\n"}},"type":"object","required":["op","property","values"]},"grafana:assert/ProfileConfigMatch:ProfileConfigMatch":{"properties":{"op":{"type":"string","description":"Operation to use for matching. One of: =, \u003c\u003e, \u003c, \u003e, \u003c=, \u003e=, IS NULL, IS NOT NULL, STARTS WITH, CONTAINS.\n"},"property":{"type":"string","description":"Entity property to match.\n"},"values":{"type":"array","items":{"type":"string"},"description":"Values to match against.\n"}},"type":"object","required":["op","property","values"]},"grafana:assert/PromRuleFileGroup:PromRuleFileGroup":{"properties":{"interval":{"type":"string","description":"Evaluation interval for this group (e.g., '30s', '1m'). If not specified, uses the global evaluation interval.\n"},"name":{"type":"string","description":"The name of the rule group (e.g., 'latency_monitoring').\n"},"rules":{"type":"array","items":{"$ref":"#/types/grafana:assert/PromRuleFileGroupRule:PromRuleFileGroupRule"},"description":"List of Prometheus rules in this group.\n"}},"type":"object","required":["name","rules"]},"grafana:assert/PromRuleFileGroupRule:PromRuleFileGroupRule":{"properties":{"active":{"type":"boolean","description":"Whether this specific rule is active. This field is read-only and controlled by the API.\n"},"alert":{"type":"string","description":"The name of the alert for alerting rules. Either 'record' or 'alert' must be specified, but not both.\n"},"annotations":{"type":"object","additionalProperties":{"type":"string"},"description":"Annotations to add to alerts (e.g., summary, description).\n"},"disableInGroups":{"type":"array","items":{"type":"string"},"description":"List of group names where this rule should be disabled. Useful for conditional rule enablement.\n"},"duration":{"type":"string","description":"How long the condition must be true before firing the alert (e.g., '5m'). Only applicable for alerting rules. Maps to 'for' in Prometheus.\n"},"expr":{"type":"string","description":"The PromQL expression to evaluate.\n"},"labels":{"type":"object","additionalProperties":{"type":"string"},"description":"Labels to attach to the resulting time series or alert.\n"},"record":{"type":"string","description":"The name of the time series to output for recording rules. Either 'record' or 'alert' must be specified, but not both.\n"}},"type":"object","required":["expr"],"language":{"nodejs":{"requiredOutputs":["active","expr"]}}},"grafana:assert/ThresholdsHealthThreshold:ThresholdsHealthThreshold":{"properties":{"alertCategory":{"type":"string","description":"Optional alert category label for the health threshold.\n"},"assertionName":{"type":"string","description":"Assertion name.\n"},"entityType":{"type":"string","description":"Entity type for the health threshold (e.g., Service, Pod, Namespace, Volume).\n"},"expression":{"type":"string","description":"Prometheus expression.\n"}},"type":"object","required":["assertionName","entityType","expression"]},"grafana:assert/ThresholdsRequestThreshold:ThresholdsRequestThreshold":{"properties":{"assertionName":{"type":"string","description":"Assertion name (e.g., RequestRateAnomaly, ErrorRatioBreach).\n"},"entityName":{"type":"string","description":"Entity name the threshold applies to.\n"},"requestContext":{"type":"string","description":"Request context (e.g., path or context identifier).\n"},"requestType":{"type":"string","description":"Request type (e.g., inbound/outbound).\n"},"value":{"type":"number","description":"Threshold value.\n"}},"type":"object","required":["assertionName","entityName","requestContext","requestType","value"]},"grafana:assert/ThresholdsResourceThreshold:ThresholdsResourceThreshold":{"properties":{"assertionName":{"type":"string","description":"Assertion name (e.g., Saturation, ResourceRateBreach).\n"},"containerName":{"type":"string","description":"Container name.\n"},"resourceType":{"type":"string","description":"Resource type (e.g., container/pod/node).\n"},"severity":{"type":"string","description":"Severity (warning or critical).\n"},"source":{"type":"string","description":"Data source for the threshold (e.g., metrics/logs).\n"},"value":{"type":"number","description":"Threshold value.\n"}},"type":"object","required":["assertionName","containerName","resourceType","severity","source","value"]},"grafana:assert/TraceConfigMatch:TraceConfigMatch":{"properties":{"op":{"type":"string","description":"Operation to use for matching. One of: =, \u003c\u003e, \u003c, \u003e, \u003c=, \u003e=, IS NULL, IS NOT NULL, STARTS WITH, CONTAINS.\n"},"property":{"type":"string","description":"Entity property to match.\n"},"values":{"type":"array","items":{"type":"string"},"description":"Values to match against.\n"}},"type":"object","required":["op","property","values"]},"grafana:cloud/AccessPolicyCondition:AccessPolicyCondition":{"properties":{"allowedSubnets":{"type":"array","items":{"type":"string"},"description":"Conditions that apply to the access policy,such as IP Allow lists.\n"}},"type":"object","required":["allowedSubnets"]},"grafana:cloud/AccessPolicyRealm:AccessPolicyRealm":{"properties":{"identifier":{"type":"string","description":"The identifier of the org or stack. For orgs, this is the slug, for stacks, this is the stack ID.\n"},"labelPolicies":{"type":"array","items":{"$ref":"#/types/grafana:cloud/AccessPolicyRealmLabelPolicy:AccessPolicyRealmLabelPolicy"}},"type":{"type":"string","description":"Whether a policy applies to a Cloud org or a specific stack. Should be one of \u003cspan pulumi-lang-nodejs=\"`org`\" pulumi-lang-dotnet=\"`Org`\" pulumi-lang-go=\"`org`\" pulumi-lang-python=\"`org`\" pulumi-lang-yaml=\"`org`\" pulumi-lang-java=\"`org`\"\u003e`org`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`stack`\" pulumi-lang-dotnet=\"`Stack`\" pulumi-lang-go=\"`stack`\" pulumi-lang-python=\"`stack`\" pulumi-lang-yaml=\"`stack`\" pulumi-lang-java=\"`stack`\"\u003e`stack`\u003c/span\u003e.\n"}},"type":"object","required":["identifier","type"]},"grafana:cloud/AccessPolicyRealmLabelPolicy:AccessPolicyRealmLabelPolicy":{"properties":{"selector":{"type":"string","description":"The label selector to match in metrics or logs query. Should be in PromQL or LogQL format.\n"}},"type":"object","required":["selector"]},"grafana:cloud/ProductActivationAppO11yConfigV1Alpha1Metadata:ProductActivationAppO11yConfigV1Alpha1Metadata":{"properties":{"annotations":{"type":"object","additionalProperties":{"type":"string"},"description":"Annotations of the resource.\n"},"folderUid":{"type":"string","description":"The UID of the folder to save the resource in.\n"},"uid":{"type":"string","description":"The unique identifier of the resource.\n"},"url":{"type":"string","description":"The full URL of the resource.\n"},"uuid":{"type":"string","description":"The globally unique identifier of a resource, used by the API for tracking.\n"},"version":{"type":"string","description":"The version of the resource.\n"}},"type":"object","required":["uid"],"language":{"nodejs":{"requiredOutputs":["annotations","uid","url","uuid","version"]}}},"grafana:cloud/ProductActivationAppO11yConfigV1Alpha1Options:ProductActivationAppO11yConfigV1Alpha1Options":{"properties":{"overwrite":{"type":"boolean","description":"Set to true if you want to overwrite existing resource with newer version, same resource title in folder or same resource uid.\n"}},"type":"object"},"grafana:cloud/ProductActivationAppO11yConfigV1Alpha1Spec:ProductActivationAppO11yConfigV1Alpha1Spec":{"properties":{"enabled":{"type":"boolean","description":"Whether application observability is enabled.\n"}},"type":"object","required":["enabled"]},"grafana:cloud/ProductActivationK8sO11yConfigV1Alpha1Metadata:ProductActivationK8sO11yConfigV1Alpha1Metadata":{"properties":{"annotations":{"type":"object","additionalProperties":{"type":"string"},"description":"Annotations of the resource.\n"},"folderUid":{"type":"string","description":"The UID of the folder to save the resource in.\n"},"uid":{"type":"string","description":"The unique identifier of the resource.\n"},"url":{"type":"string","description":"The full URL of the resource.\n"},"uuid":{"type":"string","description":"The globally unique identifier of a resource, used by the API for tracking.\n"},"version":{"type":"string","description":"The version of the resource.\n"}},"type":"object","required":["uid"],"language":{"nodejs":{"requiredOutputs":["annotations","uid","url","uuid","version"]}}},"grafana:cloud/ProductActivationK8sO11yConfigV1Alpha1Options:ProductActivationK8sO11yConfigV1Alpha1Options":{"properties":{"overwrite":{"type":"boolean","description":"Set to true if you want to overwrite existing resource with newer version, same resource title in folder or same resource uid.\n"}},"type":"object"},"grafana:cloud/ProductActivationK8sO11yConfigV1Alpha1Spec:ProductActivationK8sO11yConfigV1Alpha1Spec":{"properties":{"enabled":{"type":"boolean","description":"Whether Kubernetes observability is enabled.\n"}},"type":"object","required":["enabled"]},"grafana:cloud/getAccessPoliciesAccessPolicy:getAccessPoliciesAccessPolicy":{"properties":{"displayName":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"region":{"type":"string"},"status":{"type":"string"}},"type":"object","required":["displayName","id","name","region","status"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:cloud/getPrivateDataSourceConnectNetworksPrivateDataSourceConnectNetwork:getPrivateDataSourceConnectNetworksPrivateDataSourceConnectNetwork":{"properties":{"displayName":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"region":{"type":"string"},"status":{"type":"string"}},"type":"object","required":["displayName","id","name","region","status"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:cloudProvider/AwsCloudwatchScrapeJobCustomNamespace:AwsCloudwatchScrapeJobCustomNamespace":{"properties":{"metrics":{"type":"array","items":{"$ref":"#/types/grafana:cloudProvider/AwsCloudwatchScrapeJobCustomNamespaceMetric:AwsCloudwatchScrapeJobCustomNamespaceMetric"},"description":"One or more configuration blocks to configure metrics and their statistics to scrape. Each block must represent a distinct metric name. When accessing this as an attribute reference, it is a list of objects.\n"},"name":{"type":"string","description":"The name of the custom namespace to scrape.\n"},"scrapeIntervalSeconds":{"type":"integer","description":"The interval in seconds to scrape the custom namespace. Defaults to \u003cspan pulumi-lang-nodejs=\"`300`\" pulumi-lang-dotnet=\"`300`\" pulumi-lang-go=\"`300`\" pulumi-lang-python=\"`300`\" pulumi-lang-yaml=\"`300`\" pulumi-lang-java=\"`300`\"\u003e`300`\u003c/span\u003e.\n"}},"type":"object","required":["name"],"language":{"nodejs":{"requiredOutputs":["name","scrapeIntervalSeconds"]}}},"grafana:cloudProvider/AwsCloudwatchScrapeJobCustomNamespaceMetric:AwsCloudwatchScrapeJobCustomNamespaceMetric":{"properties":{"name":{"type":"string","description":"The name of the metric to scrape.\n"},"statistics":{"type":"array","items":{"type":"string"},"description":"A set of statistics to scrape.\n"}},"type":"object","required":["name","statistics"]},"grafana:cloudProvider/AwsCloudwatchScrapeJobService:AwsCloudwatchScrapeJobService":{"properties":{"metrics":{"type":"array","items":{"$ref":"#/types/grafana:cloudProvider/AwsCloudwatchScrapeJobServiceMetric:AwsCloudwatchScrapeJobServiceMetric"},"description":"One or more configuration blocks to configure metrics and their statistics to scrape. Please note that AWS metric names must be supplied, and not their PromQL counterparts. Each block must represent a distinct metric name. When accessing this as an attribute reference, it is a list of objects.\n"},"name":{"type":"string","description":"The name of the service to scrape. See https://grafana.com/docs/grafana-cloud/monitor-infrastructure/monitor-cloud-provider/aws/cloudwatch-metrics/services/ for supported services.\n"},"resourceDiscoveryTagFilters":{"type":"array","items":{"$ref":"#/types/grafana:cloudProvider/AwsCloudwatchScrapeJobServiceResourceDiscoveryTagFilter:AwsCloudwatchScrapeJobServiceResourceDiscoveryTagFilter"},"description":"One or more configuration blocks to configure tag filters applied to discovery of resource entities in the associated AWS account. When accessing this as an attribute reference, it is a list of objects.\n"},"scrapeIntervalSeconds":{"type":"integer","description":"The interval in seconds to scrape the service. See https://grafana.com/docs/grafana-cloud/monitor-infrastructure/monitor-cloud-provider/aws/cloudwatch-metrics/services/ for supported scrape intervals. Defaults to \u003cspan pulumi-lang-nodejs=\"`300`\" pulumi-lang-dotnet=\"`300`\" pulumi-lang-go=\"`300`\" pulumi-lang-python=\"`300`\" pulumi-lang-yaml=\"`300`\" pulumi-lang-java=\"`300`\"\u003e`300`\u003c/span\u003e.\n"},"tagsToAddToMetrics":{"type":"array","items":{"type":"string"},"description":"A set of tags to add to all metrics exported by this scrape job, for use in PromQL queries.\n"}},"type":"object","required":["name"],"language":{"nodejs":{"requiredOutputs":["name","scrapeIntervalSeconds","tagsToAddToMetrics"]}}},"grafana:cloudProvider/AwsCloudwatchScrapeJobServiceMetric:AwsCloudwatchScrapeJobServiceMetric":{"properties":{"name":{"type":"string","description":"The name of the metric to scrape.\n"},"statistics":{"type":"array","items":{"type":"string"},"description":"A set of statistics to scrape.\n"}},"type":"object","required":["name","statistics"]},"grafana:cloudProvider/AwsCloudwatchScrapeJobServiceResourceDiscoveryTagFilter:AwsCloudwatchScrapeJobServiceResourceDiscoveryTagFilter":{"properties":{"key":{"type":"string","description":"The key of the tag filter.\n"},"value":{"type":"string","description":"The value of the tag filter.\n"}},"type":"object","required":["key","value"]},"grafana:cloudProvider/AwsResourceMetadataScrapeJobService:AwsResourceMetadataScrapeJobService":{"properties":{"name":{"type":"string","description":"The name of the service to scrape. See https://grafana.com/docs/grafana-cloud/monitor-infrastructure/monitor-cloud-provider/aws/cloudwatch-metrics/services/ for supported services.\n"},"resourceDiscoveryTagFilters":{"type":"array","items":{"$ref":"#/types/grafana:cloudProvider/AwsResourceMetadataScrapeJobServiceResourceDiscoveryTagFilter:AwsResourceMetadataScrapeJobServiceResourceDiscoveryTagFilter"},"description":"One or more configuration blocks to configure tag filters applied to discovery of resource entities in the associated AWS account. When accessing this as an attribute reference, it is a list of objects.\n"},"scrapeIntervalSeconds":{"type":"integer","description":"The interval in seconds to scrape the service. See https://grafana.com/docs/grafana-cloud/monitor-infrastructure/monitor-cloud-provider/aws/cloudwatch-metrics/services/ for supported scrape intervals. Defaults to \u003cspan pulumi-lang-nodejs=\"`300`\" pulumi-lang-dotnet=\"`300`\" pulumi-lang-go=\"`300`\" pulumi-lang-python=\"`300`\" pulumi-lang-yaml=\"`300`\" pulumi-lang-java=\"`300`\"\u003e`300`\u003c/span\u003e.\n"}},"type":"object","required":["name"],"language":{"nodejs":{"requiredOutputs":["name","scrapeIntervalSeconds"]}}},"grafana:cloudProvider/AwsResourceMetadataScrapeJobServiceResourceDiscoveryTagFilter:AwsResourceMetadataScrapeJobServiceResourceDiscoveryTagFilter":{"properties":{"key":{"type":"string","description":"The key of the tag filter.\n"},"value":{"type":"string","description":"The value of the tag filter.\n"}},"type":"object","required":["key","value"]},"grafana:cloudProvider/AzureCredentialAutoDiscoveryConfiguration:AzureCredentialAutoDiscoveryConfiguration":{"properties":{"resourceTypeConfigurations":{"type":"array","items":{"$ref":"#/types/grafana:cloudProvider/AzureCredentialAutoDiscoveryConfigurationResourceTypeConfiguration:AzureCredentialAutoDiscoveryConfigurationResourceTypeConfiguration"},"description":"The list of resource type configurations.\n"},"subscriptionId":{"type":"string","description":"The subscription ID of the Azure account.\n"}},"type":"object","required":["resourceTypeConfigurations","subscriptionId"]},"grafana:cloudProvider/AzureCredentialAutoDiscoveryConfigurationResourceTypeConfiguration:AzureCredentialAutoDiscoveryConfigurationResourceTypeConfiguration":{"properties":{"metricConfigurations":{"type":"array","items":{"$ref":"#/types/grafana:cloudProvider/AzureCredentialAutoDiscoveryConfigurationResourceTypeConfigurationMetricConfiguration:AzureCredentialAutoDiscoveryConfigurationResourceTypeConfigurationMetricConfiguration"}},"resourceTypeName":{"type":"string"}},"type":"object","required":["metricConfigurations","resourceTypeName"]},"grafana:cloudProvider/AzureCredentialAutoDiscoveryConfigurationResourceTypeConfigurationMetricConfiguration:AzureCredentialAutoDiscoveryConfigurationResourceTypeConfigurationMetricConfiguration":{"properties":{"aggregations":{"type":"array","items":{"type":"string"}},"dimensions":{"type":"array","items":{"type":"string"}},"name":{"type":"string"}},"type":"object","required":["aggregations","dimensions","name"]},"grafana:cloudProvider/AzureCredentialResourceDiscoveryTagFilter:AzureCredentialResourceDiscoveryTagFilter":{"properties":{"key":{"type":"string","description":"The key of the tag filter.\n"},"value":{"type":"string","description":"The value of the tag filter.\n"}},"type":"object","required":["key","value"]},"grafana:cloudProvider/getAwsCloudwatchScrapeJobCustomNamespace:getAwsCloudwatchScrapeJobCustomNamespace":{"properties":{"metrics":{"type":"array","items":{"$ref":"#/types/grafana:cloudProvider/getAwsCloudwatchScrapeJobCustomNamespaceMetric:getAwsCloudwatchScrapeJobCustomNamespaceMetric"},"description":"One or more configuration blocks to configure metrics and their statistics to scrape. Each block must represent a distinct metric name. When accessing this as an attribute reference, it is a list of objects.\n"},"name":{"type":"string","description":"The name of the custom namespace to scrape.\n"},"scrapeIntervalSeconds":{"type":"integer","description":"The interval in seconds to scrape the custom namespace.\n"}},"type":"object","required":["name","scrapeIntervalSeconds"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:cloudProvider/getAwsCloudwatchScrapeJobCustomNamespaceMetric:getAwsCloudwatchScrapeJobCustomNamespaceMetric":{"properties":{"name":{"type":"string","description":"The name of the metric to scrape.\n"},"statistics":{"type":"array","items":{"type":"string"},"description":"A set of statistics to scrape.\n"}},"type":"object","required":["name","statistics"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:cloudProvider/getAwsCloudwatchScrapeJobService:getAwsCloudwatchScrapeJobService":{"properties":{"metrics":{"type":"array","items":{"$ref":"#/types/grafana:cloudProvider/getAwsCloudwatchScrapeJobServiceMetric:getAwsCloudwatchScrapeJobServiceMetric"},"description":"One or more configuration blocks to configure metrics and their statistics to scrape. Each block must represent a distinct metric name. When accessing this as an attribute reference, it is a list of objects.\n"},"name":{"type":"string","description":"The name of the service to scrape. See https://grafana.com/docs/grafana-cloud/monitor-infrastructure/monitor-cloud-provider/aws/cloudwatch-metrics/services/ for supported services, metrics, and their statistics.\n"},"resourceDiscoveryTagFilters":{"type":"array","items":{"$ref":"#/types/grafana:cloudProvider/getAwsCloudwatchScrapeJobServiceResourceDiscoveryTagFilter:getAwsCloudwatchScrapeJobServiceResourceDiscoveryTagFilter"},"description":"One or more configuration blocks to configure tag filters applied to discovery of resource entities in the associated AWS account. When accessing this as an attribute reference, it is a list of objects.\n"},"scrapeIntervalSeconds":{"type":"integer","description":"The interval in seconds to scrape the service. See https://grafana.com/docs/grafana-cloud/monitor-infrastructure/monitor-cloud-provider/aws/cloudwatch-metrics/services/ for supported scrape intervals.\n"},"tagsToAddToMetrics":{"type":"array","items":{"type":"string"},"description":"A set of tags to add to all metrics exported by this scrape job, for use in PromQL queries.\n"}},"type":"object","required":["name","scrapeIntervalSeconds","tagsToAddToMetrics"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:cloudProvider/getAwsCloudwatchScrapeJobServiceMetric:getAwsCloudwatchScrapeJobServiceMetric":{"properties":{"name":{"type":"string","description":"The name of the metric to scrape.\n"},"statistics":{"type":"array","items":{"type":"string"},"description":"A set of statistics to scrape.\n"}},"type":"object","required":["name","statistics"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:cloudProvider/getAwsCloudwatchScrapeJobServiceResourceDiscoveryTagFilter:getAwsCloudwatchScrapeJobServiceResourceDiscoveryTagFilter":{"properties":{"key":{"type":"string","description":"The key of the tag filter.\n"},"value":{"type":"string","description":"The value of the tag filter.\n"}},"type":"object","required":["key","value"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:cloudProvider/getAwsCloudwatchScrapeJobsScrapeJob:getAwsCloudwatchScrapeJobsScrapeJob":{"properties":{"awsAccountResourceId":{"type":"string","description":"The ID assigned by the Grafana Cloud Provider API to an AWS Account resource that should be associated with this AWS CloudWatch Scrape Job. This can be provided by the \u003cspan pulumi-lang-nodejs=\"`resourceId`\" pulumi-lang-dotnet=\"`ResourceId`\" pulumi-lang-go=\"`resourceId`\" pulumi-lang-python=\"`resource_id`\" pulumi-lang-yaml=\"`resourceId`\" pulumi-lang-java=\"`resourceId`\"\u003e`resource_id`\u003c/span\u003e attribute of the \u003cspan pulumi-lang-nodejs=\"`grafana.cloudProvider.AwsAccount`\" pulumi-lang-dotnet=\"`grafana.cloudProvider.AwsAccount`\" pulumi-lang-go=\"`cloudProvider.AwsAccount`\" pulumi-lang-python=\"`cloudProvider.AwsAccount`\" pulumi-lang-yaml=\"`grafana.cloudProvider.AwsAccount`\" pulumi-lang-java=\"`grafana.cloudProvider.AwsAccount`\"\u003e`grafana.cloudProvider.AwsAccount`\u003c/span\u003e resource.\n"},"customNamespaces":{"type":"array","items":{"$ref":"#/types/grafana:cloudProvider/getAwsCloudwatchScrapeJobsScrapeJobCustomNamespace:getAwsCloudwatchScrapeJobsScrapeJobCustomNamespace"},"description":"Zero or more configuration blocks to configure custom namespaces for the AWS CloudWatch Scrape Job to scrape. Each block must have a distinct \u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e attribute. When accessing this as an attribute reference, it is a list of objects.\n"},"disabledReason":{"type":"string","description":"When the AWS CloudWatch Scrape Job is disabled, this will show the reason that it is in that state.\n"},"enabled":{"type":"boolean","description":"Whether the AWS CloudWatch Scrape Job is enabled or not.\n"},"exportTags":{"type":"boolean","description":"When enabled, AWS resource tags are exported as Prometheus labels to metrics formatted as `aws_\u003cservice_name\u003e_info`.\n"},"id":{"type":"string"},"name":{"type":"string"},"regions":{"type":"array","items":{"type":"string"},"description":"The set of AWS region names that this AWS CloudWatch Scrape Job is configured to scrape.\n"},"regionsSubsetOverrideUsed":{"type":"boolean","description":"When true, the \u003cspan pulumi-lang-nodejs=\"`regions`\" pulumi-lang-dotnet=\"`Regions`\" pulumi-lang-go=\"`regions`\" pulumi-lang-python=\"`regions`\" pulumi-lang-yaml=\"`regions`\" pulumi-lang-java=\"`regions`\"\u003e`regions`\u003c/span\u003e attribute will be the set of regions configured in the override. When false, the \u003cspan pulumi-lang-nodejs=\"`regions`\" pulumi-lang-dotnet=\"`Regions`\" pulumi-lang-go=\"`regions`\" pulumi-lang-python=\"`regions`\" pulumi-lang-yaml=\"`regions`\" pulumi-lang-java=\"`regions`\"\u003e`regions`\u003c/span\u003e attribute will be the set of regions belonging to the AWS Account resource that is associated with this AWS CloudWatch Scrape Job.\n"},"roleArn":{"type":"string","description":"The AWS ARN of the IAM role associated with the AWS Account resource that is being used by this AWS CloudWatch Scrape Job.\n"},"services":{"type":"array","items":{"$ref":"#/types/grafana:cloudProvider/getAwsCloudwatchScrapeJobsScrapeJobService:getAwsCloudwatchScrapeJobsScrapeJobService"},"description":"One or more configuration blocks to dictate what this AWS CloudWatch Scrape Job should scrape. Each block must have a distinct \u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e attribute. When accessing this as an attribute reference, it is a list of objects.\n"},"stackId":{"type":"string"},"staticLabels":{"type":"object","additionalProperties":{"type":"string"},"description":"A set of static labels to add to all metrics exported by this scrape job.\n"}},"type":"object","required":["awsAccountResourceId","disabledReason","enabled","exportTags","id","name","regions","regionsSubsetOverrideUsed","roleArn","stackId","staticLabels"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:cloudProvider/getAwsCloudwatchScrapeJobsScrapeJobCustomNamespace:getAwsCloudwatchScrapeJobsScrapeJobCustomNamespace":{"properties":{"metrics":{"type":"array","items":{"$ref":"#/types/grafana:cloudProvider/getAwsCloudwatchScrapeJobsScrapeJobCustomNamespaceMetric:getAwsCloudwatchScrapeJobsScrapeJobCustomNamespaceMetric"},"description":"One or more configuration blocks to configure metrics and their statistics to scrape. Each block must represent a distinct metric name. When accessing this as an attribute reference, it is a list of objects.\n"},"name":{"type":"string","description":"The name of the custom namespace to scrape.\n"},"scrapeIntervalSeconds":{"type":"integer","description":"The interval in seconds to scrape the custom namespace.\n"}},"type":"object","required":["name","scrapeIntervalSeconds"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:cloudProvider/getAwsCloudwatchScrapeJobsScrapeJobCustomNamespaceMetric:getAwsCloudwatchScrapeJobsScrapeJobCustomNamespaceMetric":{"properties":{"name":{"type":"string","description":"The name of the metric to scrape.\n"},"statistics":{"type":"array","items":{"type":"string"},"description":"A set of statistics to scrape.\n"}},"type":"object","required":["name","statistics"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:cloudProvider/getAwsCloudwatchScrapeJobsScrapeJobService:getAwsCloudwatchScrapeJobsScrapeJobService":{"properties":{"metrics":{"type":"array","items":{"$ref":"#/types/grafana:cloudProvider/getAwsCloudwatchScrapeJobsScrapeJobServiceMetric:getAwsCloudwatchScrapeJobsScrapeJobServiceMetric"},"description":"One or more configuration blocks to configure metrics and their statistics to scrape. Each block must represent a distinct metric name. When accessing this as an attribute reference, it is a list of objects.\n"},"name":{"type":"string","description":"The name of the service to scrape. See https://grafana.com/docs/grafana-cloud/monitor-infrastructure/monitor-cloud-provider/aws/cloudwatch-metrics/services/ for supported services, metrics, and their statistics.\n"},"resourceDiscoveryTagFilters":{"type":"array","items":{"$ref":"#/types/grafana:cloudProvider/getAwsCloudwatchScrapeJobsScrapeJobServiceResourceDiscoveryTagFilter:getAwsCloudwatchScrapeJobsScrapeJobServiceResourceDiscoveryTagFilter"},"description":"One or more configuration blocks to configure tag filters applied to discovery of resource entities in the associated AWS account. When accessing this as an attribute reference, it is a list of objects.\n"},"scrapeIntervalSeconds":{"type":"integer","description":"The interval in seconds to scrape the service. See https://grafana.com/docs/grafana-cloud/monitor-infrastructure/monitor-cloud-provider/aws/cloudwatch-metrics/services/ for supported scrape intervals.\n"},"tagsToAddToMetrics":{"type":"array","items":{"type":"string"},"description":"A set of tags to add to all metrics exported by this scrape job, for use in PromQL queries.\n"}},"type":"object","required":["name","scrapeIntervalSeconds","tagsToAddToMetrics"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:cloudProvider/getAwsCloudwatchScrapeJobsScrapeJobServiceMetric:getAwsCloudwatchScrapeJobsScrapeJobServiceMetric":{"properties":{"name":{"type":"string","description":"The name of the metric to scrape.\n"},"statistics":{"type":"array","items":{"type":"string"},"description":"A set of statistics to scrape.\n"}},"type":"object","required":["name","statistics"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:cloudProvider/getAwsCloudwatchScrapeJobsScrapeJobServiceResourceDiscoveryTagFilter:getAwsCloudwatchScrapeJobsScrapeJobServiceResourceDiscoveryTagFilter":{"properties":{"key":{"type":"string","description":"The key of the tag filter.\n"},"value":{"type":"string","description":"The value of the tag filter.\n"}},"type":"object","required":["key","value"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:cloudProvider/getAzureCredentialAutoDiscoveryConfiguration:getAzureCredentialAutoDiscoveryConfiguration":{"properties":{"resourceTypeConfigurations":{"type":"array","items":{"$ref":"#/types/grafana:cloudProvider/getAzureCredentialAutoDiscoveryConfigurationResourceTypeConfiguration:getAzureCredentialAutoDiscoveryConfigurationResourceTypeConfiguration"},"description":"The list of resource type configurations.\n"},"subscriptionId":{"type":"string","description":"The subscription ID of the Azure account.\n"}},"type":"object","required":["resourceTypeConfigurations","subscriptionId"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:cloudProvider/getAzureCredentialAutoDiscoveryConfigurationResourceTypeConfiguration:getAzureCredentialAutoDiscoveryConfigurationResourceTypeConfiguration":{"properties":{"metricConfigurations":{"type":"array","items":{"$ref":"#/types/grafana:cloudProvider/getAzureCredentialAutoDiscoveryConfigurationResourceTypeConfigurationMetricConfiguration:getAzureCredentialAutoDiscoveryConfigurationResourceTypeConfigurationMetricConfiguration"}},"resourceTypeName":{"type":"string"}},"type":"object","required":["metricConfigurations","resourceTypeName"]},"grafana:cloudProvider/getAzureCredentialAutoDiscoveryConfigurationResourceTypeConfigurationMetricConfiguration:getAzureCredentialAutoDiscoveryConfigurationResourceTypeConfigurationMetricConfiguration":{"properties":{"aggregations":{"type":"array","items":{"type":"string"}},"dimensions":{"type":"array","items":{"type":"string"}},"name":{"type":"string"}},"type":"object","required":["aggregations","dimensions","name"]},"grafana:cloudProvider/getAzureCredentialResourceDiscoveryTagFilter:getAzureCredentialResourceDiscoveryTagFilter":{"properties":{"key":{"type":"string","description":"The key of the tag filter.\n"},"value":{"type":"string","description":"The value of the tag filter.\n"}},"type":"object","required":["key","value"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:enterprise/DataSourcePermissionPermission:DataSourcePermissionPermission":{"properties":{"builtInRole":{"type":"string","description":"Name of the basic role to manage permissions for. Options: `Viewer`, `Editor` or `Admin`.\n"},"permission":{"type":"string","description":"Permission to associate with item. Options: `Query`, `Edit` or `Admin` (`Admin` can only be used with Grafana v10.3.0+).\n"},"teamId":{"type":"string","description":"ID of the team to manage permissions for. Defaults to \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e.\n"},"userId":{"type":"string","description":"ID of the user or service account to manage permissions for. Defaults to \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e.\n"}},"type":"object","required":["permission"]},"grafana:enterprise/ReportDashboard:ReportDashboard":{"properties":{"reportVariables":{"type":"object","additionalProperties":{"type":"string"},"description":"Add report variables to the dashboard. Values should be separated by commas.\n"},"timeRange":{"$ref":"#/types/grafana:enterprise/ReportDashboardTimeRange:ReportDashboardTimeRange","description":"Time range of the report.\n"},"uid":{"type":"string","description":"Dashboard uid.\n"}},"type":"object","required":["uid"]},"grafana:enterprise/ReportDashboardTimeRange:ReportDashboardTimeRange":{"properties":{"from":{"type":"string","description":"Start of the time range.\n"},"to":{"type":"string","description":"End of the time range.\n"}},"type":"object"},"grafana:enterprise/ReportSchedule:ReportSchedule":{"properties":{"customInterval":{"type":"string","description":"Custom interval of the report.\n**Note:** This field is only available when frequency is set to \u003cspan pulumi-lang-nodejs=\"`custom`\" pulumi-lang-dotnet=\"`Custom`\" pulumi-lang-go=\"`custom`\" pulumi-lang-python=\"`custom`\" pulumi-lang-yaml=\"`custom`\" pulumi-lang-java=\"`custom`\"\u003e`custom`\u003c/span\u003e.\n"},"endTime":{"type":"string","description":"End time of the report. If empty, the report will be sent indefinitely (according to frequency). Note that times will be saved as UTC in Grafana. Use 2006-01-02T15:04:05 format if you want to set a custom timezone\n"},"frequency":{"type":"string","description":"Frequency of the report. Allowed values: \u003cspan pulumi-lang-nodejs=\"`never`\" pulumi-lang-dotnet=\"`Never`\" pulumi-lang-go=\"`never`\" pulumi-lang-python=\"`never`\" pulumi-lang-yaml=\"`never`\" pulumi-lang-java=\"`never`\"\u003e`never`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`once`\" pulumi-lang-dotnet=\"`Once`\" pulumi-lang-go=\"`once`\" pulumi-lang-python=\"`once`\" pulumi-lang-yaml=\"`once`\" pulumi-lang-java=\"`once`\"\u003e`once`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`hourly`\" pulumi-lang-dotnet=\"`Hourly`\" pulumi-lang-go=\"`hourly`\" pulumi-lang-python=\"`hourly`\" pulumi-lang-yaml=\"`hourly`\" pulumi-lang-java=\"`hourly`\"\u003e`hourly`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`daily`\" pulumi-lang-dotnet=\"`Daily`\" pulumi-lang-go=\"`daily`\" pulumi-lang-python=\"`daily`\" pulumi-lang-yaml=\"`daily`\" pulumi-lang-java=\"`daily`\"\u003e`daily`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`weekly`\" pulumi-lang-dotnet=\"`Weekly`\" pulumi-lang-go=\"`weekly`\" pulumi-lang-python=\"`weekly`\" pulumi-lang-yaml=\"`weekly`\" pulumi-lang-java=\"`weekly`\"\u003e`weekly`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`monthly`\" pulumi-lang-dotnet=\"`Monthly`\" pulumi-lang-go=\"`monthly`\" pulumi-lang-python=\"`monthly`\" pulumi-lang-yaml=\"`monthly`\" pulumi-lang-java=\"`monthly`\"\u003e`monthly`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`custom`\" pulumi-lang-dotnet=\"`Custom`\" pulumi-lang-go=\"`custom`\" pulumi-lang-python=\"`custom`\" pulumi-lang-yaml=\"`custom`\" pulumi-lang-java=\"`custom`\"\u003e`custom`\u003c/span\u003e.\n"},"lastDayOfMonth":{"type":"boolean","description":"Send the report on the last day of the month Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"startTime":{"type":"string","description":"Start time of the report. If empty, the start date will be set to the creation time. Note that times will be saved as UTC in Grafana. Use 2006-01-02T15:04:05 format if you want to set a custom timezone\n"},"timezone":{"type":"string","description":"Set the report time zone. Defaults to `GMT`.\n"},"workdaysOnly":{"type":"boolean","description":"Whether to send the report only on work days. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"}},"type":"object","required":["frequency"]},"grafana:enterprise/RolePermission:RolePermission":{"properties":{"action":{"type":"string","description":"Specific action users granted with the role will be allowed to perform (for example: `users:read`)\n"},"scope":{"type":"string","description":"Scope to restrict the action to a set of resources (for example: `users:*` or `roles:customrole1`) Defaults to ``.\n"}},"type":"object","required":["action"]},"grafana:enterprise/getRolePermission:getRolePermission":{"properties":{"action":{"type":"string","description":"Specific action users granted with the role will be allowed to perform (for example: `users:read`)\n"},"scope":{"type":"string","description":"Scope to restrict the action to a set of resources (for example: `users:*` or `roles:customrole1`)\n"}},"type":"object","required":["action"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:experimental/AppsDashboardMetadata:AppsDashboardMetadata":{"properties":{"annotations":{"type":"object","additionalProperties":{"type":"string"},"description":"Annotations of the resource.\n"},"folderUid":{"type":"string","description":"The UID of the folder to save the resource in.\n"},"uid":{"type":"string","description":"The unique identifier of the resource.\n"},"url":{"type":"string","description":"The full URL of the resource.\n"},"uuid":{"type":"string","description":"The globally unique identifier of a resource, used by the API for tracking.\n"},"version":{"type":"string","description":"The version of the resource.\n"}},"type":"object","required":["uid"],"language":{"nodejs":{"requiredOutputs":["annotations","uid","url","uuid","version"]}}},"grafana:experimental/AppsDashboardOptions:AppsDashboardOptions":{"properties":{"overwrite":{"type":"boolean","description":"Set to true if you want to overwrite existing resource with newer version, same resource title in folder or same resource uid.\n"}},"type":"object"},"grafana:experimental/AppsDashboardSpec:AppsDashboardSpec":{"properties":{"json":{"type":"string","description":"The JSON representation of the dashboard spec.\n"},"tags":{"type":"array","items":{"type":"string"},"description":"The tags of the dashboard. If not set, the tags will be derived from the JSON spec.\n"},"title":{"type":"string","description":"The title of the dashboard. If not set, the title will be derived from the JSON spec.\n"}},"type":"object","required":["json"]},"grafana:experimental/AppsPlaylistV0Alpha1Metadata:AppsPlaylistV0Alpha1Metadata":{"properties":{"annotations":{"type":"object","additionalProperties":{"type":"string"},"description":"Annotations of the resource.\n"},"folderUid":{"type":"string","description":"The UID of the folder to save the resource in.\n"},"uid":{"type":"string","description":"The unique identifier of the resource.\n"},"url":{"type":"string","description":"The full URL of the resource.\n"},"uuid":{"type":"string","description":"The globally unique identifier of a resource, used by the API for tracking.\n"},"version":{"type":"string","description":"The version of the resource.\n"}},"type":"object","required":["uid"],"language":{"nodejs":{"requiredOutputs":["annotations","uid","url","uuid","version"]}}},"grafana:experimental/AppsPlaylistV0Alpha1Options:AppsPlaylistV0Alpha1Options":{"properties":{"overwrite":{"type":"boolean","description":"Set to true if you want to overwrite existing resource with newer version, same resource title in folder or same resource uid.\n"}},"type":"object"},"grafana:experimental/AppsPlaylistV0Alpha1Spec:AppsPlaylistV0Alpha1Spec":{"properties":{"interval":{"type":"string","description":"The interval of the playlist.\n"},"items":{"type":"array","items":{"$ref":"#/types/grafana:experimental/AppsPlaylistV0Alpha1SpecItem:AppsPlaylistV0Alpha1SpecItem"},"description":"The items of the playlist.\n"},"title":{"type":"string","description":"The title of the playlist.\n"}},"type":"object","required":["items","title"]},"grafana:experimental/AppsPlaylistV0Alpha1SpecItem:AppsPlaylistV0Alpha1SpecItem":{"properties":{"type":{"type":"string"},"value":{"type":"string"}},"type":"object","required":["type","value"]},"grafana:fleetManagement/getCollectorsCollector:getCollectorsCollector":{"properties":{"collectorType":{"type":"string"},"enabled":{"type":"boolean"},"id":{"type":"string"},"localAttributes":{"type":"object","additionalProperties":{"type":"string"}},"remoteAttributes":{"type":"object","additionalProperties":{"type":"string"}}},"type":"object","required":["collectorType","enabled","id","localAttributes","remoteAttributes"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:k6/ScheduleCron:ScheduleCron":{"properties":{"schedule":{"type":"string","description":"A cron expression with exactly 5 entries, or an alias. The allowed aliases are: `@yearly`, `@annually`, `@monthly`, `@weekly`, `@daily`, `@hourly`.\n"},"timezone":{"type":"string","description":"The timezone of the cron expression. For example, `UTC` or `Europe/London`.\n"}},"type":"object"},"grafana:k6/ScheduleRecurrenceRule:ScheduleRecurrenceRule":{"properties":{"bydays":{"type":"array","items":{"type":"string"},"description":"The weekdays when the 'WEEKLY' recurrence will be applied (e.g., ['MO', 'WE', 'FR']). Cannot be set for other frequencies.\n"},"count":{"type":"integer","description":"How many times the recurrence will repeat.\n"},"frequency":{"type":"string","description":"The frequency of the schedule (HOURLY, DAILY, WEEKLY, MONTHLY, YEARLY).\n"},"interval":{"type":"integer","description":"The interval between each frequency iteration (e.g., 2 = every 2 hours for HOURLY). Defaults to 1.\n"},"until":{"type":"string","description":"The end time for the recurrence (RFC3339 format).\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["interval"]}}},"grafana:k6/getLoadTestsLoadTest:getLoadTestsLoadTest":{"properties":{"baselineTestRunId":{"type":"string"},"created":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"projectId":{"type":"string"},"script":{"type":"string"},"updated":{"type":"string"}},"type":"object","required":["baselineTestRunId","created","id","name","projectId","script","updated"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:k6/getProjectsProject:getProjectsProject":{"properties":{"created":{"type":"string"},"grafanaFolderUid":{"type":"string"},"id":{"type":"string"},"isDefault":{"type":"boolean"},"name":{"type":"string"},"updated":{"type":"string"}},"type":"object","required":["created","grafanaFolderUid","id","isDefault","name","updated"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:k6/getScheduleCron:getScheduleCron":{"properties":{"schedule":{"type":"string","description":"A cron expression with exactly 5 entries, or an alias. The allowed aliases are: `@yearly`, `@annually`, `@monthly`, `@weekly`, `@daily`, `@hourly`.\n"},"timezone":{"type":"string","description":"The timezone of the cron expression. For example, `UTC` or `Europe/London`.\n"}},"type":"object","required":["schedule","timezone"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:k6/getScheduleRecurrenceRule:getScheduleRecurrenceRule":{"properties":{"bydays":{"type":"array","items":{"type":"string"},"description":"The weekdays when the 'WEEKLY' recurrence will be applied (e.g., ['MO', 'WE', 'FR']). Cannot be set for other frequencies.\n"},"count":{"type":"integer","description":"How many times the recurrence will repeat.\n"},"frequency":{"type":"string","description":"The frequency of the schedule (HOURLY, DAILY, WEEKLY, MONTHLY).\n"},"interval":{"type":"integer","description":"The interval between each frequency iteration (e.g., 2 = every 2 hours for HOURLY).\n"},"until":{"type":"string","description":"The end time for the recurrence (RFC3339 format).\n"}},"type":"object","required":["bydays","count","frequency","interval","until"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:k6/getSchedulesSchedule:getSchedulesSchedule":{"properties":{"createdBy":{"type":"string"},"cron":{"$ref":"#/types/grafana:k6/getSchedulesScheduleCron:getSchedulesScheduleCron"},"deactivated":{"type":"boolean"},"id":{"type":"string"},"loadTestId":{"type":"string"},"nextRun":{"type":"string"},"recurrenceRule":{"$ref":"#/types/grafana:k6/getSchedulesScheduleRecurrenceRule:getSchedulesScheduleRecurrenceRule"},"starts":{"type":"string"}},"type":"object","required":["createdBy","cron","deactivated","id","loadTestId","nextRun","recurrenceRule","starts"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:k6/getSchedulesScheduleCron:getSchedulesScheduleCron":{"properties":{"schedule":{"type":"string"},"timezone":{"type":"string"}},"type":"object","required":["schedule","timezone"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:k6/getSchedulesScheduleRecurrenceRule:getSchedulesScheduleRecurrenceRule":{"properties":{"bydays":{"type":"array","items":{"type":"string"}},"count":{"type":"integer"},"frequency":{"type":"string"},"interval":{"type":"integer"},"until":{"type":"string"}},"type":"object","required":["bydays","count","frequency","interval","until"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:machineLearning/HolidayCustomPeriod:HolidayCustomPeriod":{"properties":{"endTime":{"type":"string"},"name":{"type":"string","description":"The name of the custom period.\n"},"startTime":{"type":"string"}},"type":"object","required":["endTime","startTime"]},"grafana:machineLearning/OutlierDetectorAlgorithm:OutlierDetectorAlgorithm":{"properties":{"config":{"$ref":"#/types/grafana:machineLearning/OutlierDetectorAlgorithmConfig:OutlierDetectorAlgorithmConfig","description":"For DBSCAN only, specify the configuration map\n"},"name":{"type":"string","description":"The name of the algorithm to use ('mad' or 'dbscan').\n"},"sensitivity":{"type":"number","description":"Specify the sensitivity of the detector (in range [0,1]).\n"}},"type":"object","required":["name","sensitivity"]},"grafana:machineLearning/OutlierDetectorAlgorithmConfig:OutlierDetectorAlgorithmConfig":{"properties":{"epsilon":{"type":"number","description":"Specify the epsilon parameter (positive float)\n"}},"type":"object","required":["epsilon"]},"grafana:onCall/IntegrationDefaultRoute:IntegrationDefaultRoute":{"properties":{"escalationChainId":{"type":"string","description":"The ID of the escalation chain.\n"},"id":{"type":"string"},"msteams":{"$ref":"#/types/grafana:onCall/IntegrationDefaultRouteMsteams:IntegrationDefaultRouteMsteams","description":"MS teams-specific settings for a route.\n"},"slack":{"$ref":"#/types/grafana:onCall/IntegrationDefaultRouteSlack:IntegrationDefaultRouteSlack","description":"Slack-specific settings for a route.\n"},"telegram":{"$ref":"#/types/grafana:onCall/IntegrationDefaultRouteTelegram:IntegrationDefaultRouteTelegram","description":"Telegram-specific settings for a route.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["id"]}}},"grafana:onCall/IntegrationDefaultRouteMsteams:IntegrationDefaultRouteMsteams":{"properties":{"enabled":{"type":"boolean","description":"Enable notification in MS teams. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"id":{"type":"string","description":"MS teams channel id. Alerts will be directed to this channel in Microsoft teams.\n"}},"type":"object"},"grafana:onCall/IntegrationDefaultRouteSlack:IntegrationDefaultRouteSlack":{"properties":{"channelId":{"type":"string","description":"Slack channel id. Alerts will be directed to this channel in Slack.\n"},"enabled":{"type":"boolean","description":"Enable notification in Slack. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"}},"type":"object"},"grafana:onCall/IntegrationDefaultRouteTelegram:IntegrationDefaultRouteTelegram":{"properties":{"enabled":{"type":"boolean","description":"Enable notification in Telegram. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"id":{"type":"string","description":"Telegram channel id. Alerts will be directed to this channel in Telegram.\n"}},"type":"object"},"grafana:onCall/IntegrationTemplates:IntegrationTemplates":{"properties":{"acknowledgeSignal":{"type":"string","description":"Template for sending a signal to acknowledge the Incident.\n"},"email":{"$ref":"#/types/grafana:onCall/IntegrationTemplatesEmail:IntegrationTemplatesEmail","description":"Templates for Email.\n"},"groupingKey":{"type":"string","description":"Template for the key by which alerts are grouped.\n"},"microsoftTeams":{"$ref":"#/types/grafana:onCall/IntegrationTemplatesMicrosoftTeams:IntegrationTemplatesMicrosoftTeams","description":"Templates for Microsoft Teams. **NOTE**: Microsoft Teams templates are only available on Grafana Cloud.\n"},"mobileApp":{"$ref":"#/types/grafana:onCall/IntegrationTemplatesMobileApp:IntegrationTemplatesMobileApp","description":"Templates for Mobile app push notifications.\n"},"phoneCall":{"$ref":"#/types/grafana:onCall/IntegrationTemplatesPhoneCall:IntegrationTemplatesPhoneCall","description":"Templates for Phone Call.\n"},"resolveSignal":{"type":"string","description":"Template for sending a signal to resolve the Incident.\n"},"slack":{"$ref":"#/types/grafana:onCall/IntegrationTemplatesSlack:IntegrationTemplatesSlack","description":"Templates for Slack.\n"},"sms":{"$ref":"#/types/grafana:onCall/IntegrationTemplatesSms:IntegrationTemplatesSms","description":"Templates for SMS.\n"},"sourceLink":{"type":"string","description":"Template for a source link.\n"},"telegram":{"$ref":"#/types/grafana:onCall/IntegrationTemplatesTelegram:IntegrationTemplatesTelegram","description":"Templates for Telegram.\n"},"web":{"$ref":"#/types/grafana:onCall/IntegrationTemplatesWeb:IntegrationTemplatesWeb","description":"Templates for Web.\n"}},"type":"object"},"grafana:onCall/IntegrationTemplatesEmail:IntegrationTemplatesEmail":{"properties":{"message":{"type":"string","description":"Template for Alert message.\n"},"title":{"type":"string","description":"Template for Alert title.\n"}},"type":"object"},"grafana:onCall/IntegrationTemplatesMicrosoftTeams:IntegrationTemplatesMicrosoftTeams":{"properties":{"imageUrl":{"type":"string","description":"Template for Alert image url.\n"},"message":{"type":"string","description":"Template for Alert message.\n"},"title":{"type":"string","description":"Template for Alert title.\n"}},"type":"object"},"grafana:onCall/IntegrationTemplatesMobileApp:IntegrationTemplatesMobileApp":{"properties":{"message":{"type":"string","description":"Template for Alert message.\n"},"title":{"type":"string","description":"Template for Alert title.\n"}},"type":"object"},"grafana:onCall/IntegrationTemplatesPhoneCall:IntegrationTemplatesPhoneCall":{"properties":{"title":{"type":"string","description":"Template for Alert title.\n"}},"type":"object"},"grafana:onCall/IntegrationTemplatesSlack:IntegrationTemplatesSlack":{"properties":{"imageUrl":{"type":"string","description":"Template for Alert image url.\n"},"message":{"type":"string","description":"Template for Alert message.\n"},"title":{"type":"string","description":"Template for Alert title.\n"}},"type":"object"},"grafana:onCall/IntegrationTemplatesSms:IntegrationTemplatesSms":{"properties":{"title":{"type":"string","description":"Template for Alert title.\n"}},"type":"object"},"grafana:onCall/IntegrationTemplatesTelegram:IntegrationTemplatesTelegram":{"properties":{"imageUrl":{"type":"string","description":"Template for Alert image url.\n"},"message":{"type":"string","description":"Template for Alert message.\n"},"title":{"type":"string","description":"Template for Alert title.\n"}},"type":"object"},"grafana:onCall/IntegrationTemplatesWeb:IntegrationTemplatesWeb":{"properties":{"imageUrl":{"type":"string","description":"Template for Alert image url.\n"},"message":{"type":"string","description":"Template for Alert message.\n"},"title":{"type":"string","description":"Template for Alert title.\n"}},"type":"object"},"grafana:onCall/RouteMsteams:RouteMsteams":{"properties":{"enabled":{"type":"boolean","description":"Enable notification in MS teams. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"id":{"type":"string","description":"MS teams channel id. Alerts will be directed to this channel in Microsoft teams.\n"}},"type":"object"},"grafana:onCall/RouteSlack:RouteSlack":{"properties":{"channelId":{"type":"string","description":"Slack channel id. Alerts will be directed to this channel in Slack.\n"},"enabled":{"type":"boolean","description":"Enable notification in Slack. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"}},"type":"object"},"grafana:onCall/RouteTelegram:RouteTelegram":{"properties":{"enabled":{"type":"boolean","description":"Enable notification in Telegram. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"id":{"type":"string","description":"Telegram channel id. Alerts will be directed to this channel in Telegram.\n"}},"type":"object"},"grafana:onCall/ScheduleSlack:ScheduleSlack":{"properties":{"channelId":{"type":"string","description":"Slack channel id. Reminder about schedule shifts will be directed to this channel in Slack.\n"},"userGroupId":{"type":"string","description":"Slack user group id. Members of user group will be updated when on-call users change.\n"}},"type":"object"},"grafana:onCall/getUsersUser:getUsersUser":{"properties":{"email":{"type":"string"},"id":{"type":"string"},"role":{"type":"string"},"username":{"type":"string"}},"type":"object","required":["email","id","role","username"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:oss/DashboardPermissionPermission:DashboardPermissionPermission":{"properties":{"permission":{"type":"string","description":"Permission to associate with item. Must be one of `View`, `Edit`, or `Admin`.\n"},"role":{"type":"string","description":"Name of the basic role to manage permissions for. Options: `Viewer`, `Editor` or `Admin`.\n"},"teamId":{"type":"string","description":"ID of the team to manage permissions for. Defaults to \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e.\n"},"userId":{"type":"string","description":"ID of the user or service account to manage permissions for. Defaults to \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e.\n"}},"type":"object","required":["permission"]},"grafana:oss/FolderPermissionPermission:FolderPermissionPermission":{"properties":{"permission":{"type":"string","description":"Permission to associate with item. Must be one of `View`, `Edit`, or `Admin`.\n"},"role":{"type":"string","description":"Name of the basic role to manage permissions for. Options: `Viewer`, `Editor` or `Admin`.\n"},"teamId":{"type":"string","description":"ID of the team to manage permissions for. Defaults to \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e.\n"},"userId":{"type":"string","description":"ID of the user or service account to manage permissions for. Defaults to \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e.\n"}},"type":"object","required":["permission"]},"grafana:oss/PlaylistItem:PlaylistItem":{"properties":{"id":{"type":"string"},"order":{"type":"integer"},"type":{"type":"string"},"value":{"type":"string"}},"type":"object","required":["order"],"language":{"nodejs":{"requiredOutputs":["id","order"]}}},"grafana:oss/ServiceAccountPermissionPermission:ServiceAccountPermissionPermission":{"properties":{"permission":{"type":"string","description":"Permission to associate with item. Must be one of `View`, `Edit`, or `Admin`.\n"},"teamId":{"type":"string","description":"ID of the team to manage permissions for. Defaults to \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e.\n"},"userId":{"type":"string","description":"ID of the user or service account to manage permissions for. Defaults to \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e.\n"}},"type":"object","required":["permission"]},"grafana:oss/SsoSettingsLdapSettings:SsoSettingsLdapSettings":{"properties":{"allowSignUp":{"type":"boolean","description":"Whether to allow new Grafana user creation through LDAP login. If set to false, then only existing Grafana users can log in with LDAP.\n"},"config":{"$ref":"#/types/grafana:oss/SsoSettingsLdapSettingsConfig:SsoSettingsLdapSettingsConfig","description":"The LDAP configuration.\n"},"enabled":{"type":"boolean","description":"Define whether this configuration is enabled for LDAP. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"skipOrgRoleSync":{"type":"boolean","description":"Prevent synchronizing users’ organization roles from LDAP.\n"}},"type":"object","required":["config"]},"grafana:oss/SsoSettingsLdapSettingsConfig:SsoSettingsLdapSettingsConfig":{"properties":{"servers":{"type":"array","items":{"$ref":"#/types/grafana:oss/SsoSettingsLdapSettingsConfigServer:SsoSettingsLdapSettingsConfigServer"},"description":"The LDAP servers configuration.\n"}},"type":"object","required":["servers"]},"grafana:oss/SsoSettingsLdapSettingsConfigServer:SsoSettingsLdapSettingsConfigServer":{"properties":{"attributes":{"type":"object","additionalProperties":{"type":"string"},"description":"The LDAP server attributes. The following attributes can be configured: email, member_of, name, surname, username.\n"},"bindDn":{"type":"string","description":"The search user bind DN.\n"},"bindPassword":{"type":"string","description":"The search user bind password.\n","secret":true},"clientCert":{"type":"string","description":"The path to the client certificate.\n"},"clientCertValue":{"type":"string","description":"The Base64 encoded value of the client certificate.\n"},"clientKey":{"type":"string","description":"The path to the client private key.\n","secret":true},"clientKeyValue":{"type":"string","description":"The Base64 encoded value of the client private key.\n","secret":true},"groupMappings":{"type":"array","items":{"$ref":"#/types/grafana:oss/SsoSettingsLdapSettingsConfigServerGroupMapping:SsoSettingsLdapSettingsConfigServerGroupMapping"},"description":"For mapping an LDAP group to a Grafana organization and role.\n"},"groupSearchBaseDns":{"type":"array","items":{"type":"string"},"description":"An array of the base DNs to search through for groups. Typically uses ou=groups.\n"},"groupSearchFilter":{"type":"string","description":"Group search filter, to retrieve the groups of which the user is a member (only set if memberOf attribute is not available).\n"},"groupSearchFilterUserAttribute":{"type":"string","description":"The %s in the search filter will be replaced with the attribute defined in this field.\n"},"host":{"type":"string","description":"The LDAP server host.\n"},"minTlsVersion":{"type":"string","description":"Minimum TLS version allowed. Accepted values are: TLS1.2, TLS1.3.\n"},"port":{"type":"integer","description":"The LDAP server port.\n"},"rootCaCert":{"type":"string","description":"The path to the root CA certificate.\n"},"rootCaCertValues":{"type":"array","items":{"type":"string"},"description":"The Base64 encoded values of the root CA certificates.\n"},"searchBaseDns":{"type":"array","items":{"type":"string"},"description":"An array of base DNs to search through.\n"},"searchFilter":{"type":"string","description":"The user search filter, for example \"(cn=%s)\" or \"(sAMAccountName=%s)\" or \"(uid=%s)\".\n"},"sslSkipVerify":{"type":"boolean","description":"If set to true, the SSL cert validation will be skipped.\n"},"startTls":{"type":"boolean","description":"If set to true, use LDAP with STARTTLS instead of LDAPS.\n"},"timeout":{"type":"integer","description":"The timeout in seconds for connecting to the LDAP host.\n"},"tlsCiphers":{"type":"array","items":{"type":"string"},"description":"Accepted TLS ciphers. For a complete list of supported ciphers, refer to: https://go.dev/src/crypto/tls/cipher_suites.go.\n"},"useSsl":{"type":"boolean","description":"Set to true if LDAP server should use an encrypted TLS connection (either with STARTTLS or LDAPS).\n"}},"type":"object","required":["host","searchBaseDns","searchFilter"]},"grafana:oss/SsoSettingsLdapSettingsConfigServerGroupMapping:SsoSettingsLdapSettingsConfigServerGroupMapping":{"properties":{"grafanaAdmin":{"type":"boolean","description":"If set to true, it makes the user of\u003cspan pulumi-lang-nodejs=\" groupDn \" pulumi-lang-dotnet=\" GroupDn \" pulumi-lang-go=\" groupDn \" pulumi-lang-python=\" group_dn \" pulumi-lang-yaml=\" groupDn \" pulumi-lang-java=\" groupDn \"\u003e group_dn \u003c/span\u003eGrafana server admin.\n"},"groupDn":{"type":"string","description":"LDAP distinguished name (DN) of LDAP group. If you want to match all (or no LDAP groups) then you can use wildcard (\"*\").\n"},"orgId":{"type":"integer","description":"The Grafana organization database id.\n"},"orgRole":{"type":"string","description":"Assign users of\u003cspan pulumi-lang-nodejs=\" groupDn \" pulumi-lang-dotnet=\" GroupDn \" pulumi-lang-go=\" groupDn \" pulumi-lang-python=\" group_dn \" pulumi-lang-yaml=\" groupDn \" pulumi-lang-java=\" groupDn \"\u003e group_dn \u003c/span\u003ethe organization role Admin, Editor, or Viewer.\n"}},"type":"object","required":["groupDn","orgRole"]},"grafana:oss/SsoSettingsOauth2Settings:SsoSettingsOauth2Settings":{"properties":{"allowAssignGrafanaAdmin":{"type":"boolean","description":"If enabled, it will automatically sync the Grafana server administrator role.\n"},"allowSignUp":{"type":"boolean","description":"If not enabled, only existing Grafana users can log in using OAuth.\n"},"allowedDomains":{"type":"string","description":"List of comma- or space-separated domains. The user should belong to at least one domain to log in.\n"},"allowedGroups":{"type":"string","description":"List of comma- or space-separated groups. The user should be a member of at least one group to log in. For Generic OAuth, if you configure allowed*groups, you must also configure groups*attribute_path.\n"},"allowedOrganizations":{"type":"string","description":"List of comma- or space-separated organizations. The user should be a member of at least one organization to log in.\n"},"apiUrl":{"type":"string","description":"The user information endpoint of your OAuth2 provider. Required for okta and\u003cspan pulumi-lang-nodejs=\" genericOauth \" pulumi-lang-dotnet=\" GenericOauth \" pulumi-lang-go=\" genericOauth \" pulumi-lang-python=\" generic_oauth \" pulumi-lang-yaml=\" genericOauth \" pulumi-lang-java=\" genericOauth \"\u003e generic_oauth \u003c/span\u003eproviders.\n"},"authStyle":{"type":"string","description":"It determines how client*id and client*secret are sent to Oauth2 provider. Possible values are AutoDetect, InParams, InHeader. Default is AutoDetect.\n"},"authUrl":{"type":"string","description":"The authorization endpoint of your OAuth2 provider. Required for azuread, okta and\u003cspan pulumi-lang-nodejs=\" genericOauth \" pulumi-lang-dotnet=\" GenericOauth \" pulumi-lang-go=\" genericOauth \" pulumi-lang-python=\" generic_oauth \" pulumi-lang-yaml=\" genericOauth \" pulumi-lang-java=\" genericOauth \"\u003e generic_oauth \u003c/span\u003eproviders.\n"},"autoLogin":{"type":"boolean","description":"Log in automatically, skipping the login screen.\n"},"clientId":{"type":"string","description":"The client Id of your OAuth2 app.\n"},"clientSecret":{"type":"string","description":"The client secret of your OAuth2 app.\n","secret":true},"custom":{"type":"object","additionalProperties":{"type":"string"},"description":"Custom fields to configure for OAuth2 such as the [force*use*graph_api](https://grafana.com/docs/grafana/latest/setup-grafana/configure-security/configure-authentication/azuread/#force-fetching-groups-from-microsoft-graph-api) field.\n"},"defineAllowedGroups":{"type":"boolean","description":"Define allowed groups.\n"},"defineAllowedTeamsIds":{"type":"boolean","description":"Define allowed teams ids.\n"},"emailAttributeName":{"type":"string","description":"Name of the key to use for user email lookup within the attributes map of OAuth2 ID token. Only applicable to Generic OAuth.\n"},"emailAttributePath":{"type":"string","description":"JMESPath expression to use for user email lookup from the user information. Only applicable to Generic OAuth.\n"},"emptyScopes":{"type":"boolean","description":"If enabled, no scopes will be sent to the OAuth2 provider.\n"},"enabled":{"type":"boolean","description":"Define whether this configuration is enabled for the specified provider. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"groupsAttributePath":{"type":"string","description":"JMESPath expression to use for user group lookup. If you configure allowed*groups, you must also configure groups*attribute_path.\n"},"idTokenAttributeName":{"type":"string","description":"The name of the key used to extract the ID token from the returned OAuth2 token. Only applicable to Generic OAuth.\n"},"loginAttributePath":{"type":"string","description":"JMESPath expression to use for user login lookup from the user ID token. Only applicable to Generic OAuth.\n"},"loginPrompt":{"type":"string","description":"Indicates the type of user interaction when the user logs in with the IdP. Available values are \u003cspan pulumi-lang-nodejs=\"`login`\" pulumi-lang-dotnet=\"`Login`\" pulumi-lang-go=\"`login`\" pulumi-lang-python=\"`login`\" pulumi-lang-yaml=\"`login`\" pulumi-lang-java=\"`login`\"\u003e`login`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`consent`\" pulumi-lang-dotnet=\"`Consent`\" pulumi-lang-go=\"`consent`\" pulumi-lang-python=\"`consent`\" pulumi-lang-yaml=\"`consent`\" pulumi-lang-java=\"`consent`\"\u003e`consent`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`selectAccount`\" pulumi-lang-dotnet=\"`SelectAccount`\" pulumi-lang-go=\"`selectAccount`\" pulumi-lang-python=\"`select_account`\" pulumi-lang-yaml=\"`selectAccount`\" pulumi-lang-java=\"`selectAccount`\"\u003e`select_account`\u003c/span\u003e.\n"},"name":{"type":"string","description":"Helpful if you use more than one identity providers or SSO protocols.\n"},"nameAttributePath":{"type":"string","description":"JMESPath expression to use for user name lookup from the user ID token. This name will be used as the user’s display name. Only applicable to Generic OAuth.\n"},"orgAttributePath":{"type":"string","description":"JMESPath expression to use for the organization mapping lookup from the user ID token. The extracted list will be used for the organization mapping (to match \"Organization\" in the \u003cspan pulumi-lang-nodejs=\"\"orgMapping\"\" pulumi-lang-dotnet=\"\"OrgMapping\"\" pulumi-lang-go=\"\"orgMapping\"\" pulumi-lang-python=\"\"org_mapping\"\" pulumi-lang-yaml=\"\"orgMapping\"\" pulumi-lang-java=\"\"orgMapping\"\"\u003e\"org_mapping\"\u003c/span\u003e). Only applicable to Generic OAuth and Okta.\n"},"orgMapping":{"type":"string","description":"List of comma- or space-separated Organization:OrgIdOrOrgName:Role mappings. Organization can be * meaning “All users”. Role is optional and can have the following values: None, Viewer, Editor or Admin.\n"},"roleAttributePath":{"type":"string","description":"JMESPath expression to use for Grafana role lookup.\n"},"roleAttributeStrict":{"type":"boolean","description":"If enabled, denies user login if the Grafana role cannot be extracted using Role attribute path.\n"},"scopes":{"type":"string","description":"List of comma- or space-separated OAuth2 scopes.\n"},"signoutRedirectUrl":{"type":"string","description":"The URL to redirect the user to after signing out from Grafana.\n"},"skipOrgRoleSync":{"type":"boolean","description":"Prevent synchronizing users’ organization roles from your IdP.\n"},"teamIds":{"type":"string","description":"String list of Team Ids. If set, the user must be a member of one of the given teams to log in. If you configure team*ids, you must also configure teams*url and team*ids*attribute_path.\n"},"teamIdsAttributePath":{"type":"string","description":"The JMESPath expression to use for Grafana Team Id lookup within the results returned by the\u003cspan pulumi-lang-nodejs=\" teamsUrl \" pulumi-lang-dotnet=\" TeamsUrl \" pulumi-lang-go=\" teamsUrl \" pulumi-lang-python=\" teams_url \" pulumi-lang-yaml=\" teamsUrl \" pulumi-lang-java=\" teamsUrl \"\u003e teams_url \u003c/span\u003eendpoint. Only applicable to Generic OAuth.\n"},"teamsUrl":{"type":"string","description":"The URL used to query for Team Ids. If not set, the default value is /teams. If you configure teams*url, you must also configure team*ids*attribute*path. Only applicable to Generic OAuth.\n"},"tlsClientCa":{"type":"string","description":"The path to the trusted certificate authority list. Is not applicable on Grafana Cloud.\n"},"tlsClientCert":{"type":"string","description":"The path to the certificate. Is not applicable on Grafana Cloud.\n"},"tlsClientKey":{"type":"string","description":"The path to the key. Is not applicable on Grafana Cloud.\n"},"tlsSkipVerifyInsecure":{"type":"boolean","description":"If enabled, the client accepts any certificate presented by the server and any host name in that certificate. You should only use this for testing, because this mode leaves SSL/TLS susceptible to man-in-the-middle attacks.\n"},"tokenUrl":{"type":"string","description":"The token endpoint of your OAuth2 provider. Required for azuread, okta and\u003cspan pulumi-lang-nodejs=\" genericOauth \" pulumi-lang-dotnet=\" GenericOauth \" pulumi-lang-go=\" genericOauth \" pulumi-lang-python=\" generic_oauth \" pulumi-lang-yaml=\" genericOauth \" pulumi-lang-java=\" genericOauth \"\u003e generic_oauth \u003c/span\u003eproviders.\n"},"usePkce":{"type":"boolean","description":"If enabled, Grafana will use Proof Key for Code Exchange (PKCE) with the OAuth2 Authorization Code Grant.\n"},"useRefreshToken":{"type":"boolean","description":"If enabled, Grafana will fetch a new access token using the refresh token provided by the OAuth2 provider.\n"}},"type":"object","required":["clientId"]},"grafana:oss/SsoSettingsSamlSettings:SsoSettingsSamlSettings":{"properties":{"allowIdpInitiated":{"type":"boolean","description":"Whether SAML IdP-initiated login is allowed.\n"},"allowSignUp":{"type":"boolean","description":"Whether to allow new Grafana user creation through SAML login. If set to false, then only existing Grafana users can log in with SAML.\n"},"allowedOrganizations":{"type":"string","description":"List of comma- or space-separated organizations. User should be a member of at least one organization to log in.\n"},"assertionAttributeEmail":{"type":"string","description":"Friendly name or name of the attribute within the SAML assertion to use as the user email.\n"},"assertionAttributeExternalUid":{"type":"string","description":"Friendly name of the attribute within the SAML assertion to use as the external user ID. Only used for SCIM provisioned users.\n"},"assertionAttributeGroups":{"type":"string","description":"Friendly name or name of the attribute within the SAML assertion to use as the user groups.\n"},"assertionAttributeLogin":{"type":"string","description":"Friendly name or name of the attribute within the SAML assertion to use as the user login handle.\n"},"assertionAttributeName":{"type":"string","description":"Friendly name or name of the attribute within the SAML assertion to use as the user name. Alternatively, this can be a template with variables that match the names of attributes within the SAML assertion.\n"},"assertionAttributeOrg":{"type":"string","description":"Friendly name or name of the attribute within the SAML assertion to use as the user organization.\n"},"assertionAttributeRole":{"type":"string","description":"Friendly name or name of the attribute within the SAML assertion to use as the user roles.\n"},"autoLogin":{"type":"boolean","description":"Whether SAML auto login is enabled.\n"},"certificate":{"type":"string","description":"Base64-encoded string for the SP X.509 certificate.\n","secret":true},"certificatePath":{"type":"string","description":"Path for the SP X.509 certificate.\n"},"clientId":{"type":"string","description":"The client Id of your OAuth2 app.\n"},"clientSecret":{"type":"string","description":"The client secret of your OAuth2 app.\n"},"enabled":{"type":"boolean","description":"Define whether this configuration is enabled for SAML. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"entityId":{"type":"string","description":"The entity ID is a globally unique identifier for the service provider. It is used to identify the service provider to the identity provider. Defaults to the URL of the Grafana instance if not set.\n"},"forceUseGraphApi":{"type":"boolean","description":"If enabled, Grafana will fetch groups from Microsoft Graph API instead of using the groups claim from the ID token.\n"},"idpMetadata":{"type":"string","description":"Base64-encoded string for the IdP SAML metadata XML.\n"},"idpMetadataPath":{"type":"string","description":"Path for the IdP SAML metadata XML.\n"},"idpMetadataUrl":{"type":"string","description":"URL for the IdP SAML metadata XML.\n"},"maxIssueDelay":{"type":"string","description":"Duration, since the IdP issued a response and the SP is allowed to process it. For example: 90s, 1h.\n"},"metadataValidDuration":{"type":"string","description":"Duration, for how long the SP metadata is valid. For example: 48h, 5d.\n"},"name":{"type":"string","description":"Name used to refer to the SAML authentication.\n"},"nameIdFormat":{"type":"string","description":"The Name ID Format to request within the SAML assertion. Defaults to urn:oasis:names:tc:SAML:2.0:nameid-format:transient\n"},"orgMapping":{"type":"string","description":"List of comma- or space-separated Organization:OrgId:Role mappings. Organization can be * meaning “All users”. Role is optional and can have the following values: Viewer, Editor or Admin.\n"},"privateKey":{"type":"string","description":"Base64-encoded string for the SP private key.\n","secret":true},"privateKeyPath":{"type":"string","description":"Path for the SP private key.\n"},"relayState":{"type":"string","description":"Relay state for IdP-initiated login. Should match relay state configured in IdP.\n"},"roleValuesAdmin":{"type":"string","description":"List of comma- or space-separated roles which will be mapped into the Admin role.\n"},"roleValuesEditor":{"type":"string","description":"List of comma- or space-separated roles which will be mapped into the Editor role.\n"},"roleValuesGrafanaAdmin":{"type":"string","description":"List of comma- or space-separated roles which will be mapped into the Grafana Admin (Super Admin) role.\n"},"roleValuesNone":{"type":"string","description":"List of comma- or space-separated roles which will be mapped into the None role.\n"},"roleValuesViewer":{"type":"string","description":"List of comma- or space-separated roles which will be mapped into the Viewer role.\n"},"signatureAlgorithm":{"type":"string","description":"Signature algorithm used for signing requests to the IdP. Supported values are rsa-sha1, rsa-sha256, rsa-sha512.\n"},"singleLogout":{"type":"boolean","description":"Whether SAML Single Logout is enabled.\n"},"skipOrgRoleSync":{"type":"boolean","description":"Prevent synchronizing users’ organization roles from your IdP.\n"},"tokenUrl":{"type":"string","description":"The token endpoint of your OAuth2 provider. Required for Azure AD providers.\n"}},"type":"object"},"grafana:oss/TeamPreferences:TeamPreferences":{"properties":{"homeDashboardUid":{"type":"string","description":"The UID of the dashboard to display when a team member logs in.\n"},"theme":{"type":"string","description":"The default theme for this team. Available themes are \u003cspan pulumi-lang-nodejs=\"`light`\" pulumi-lang-dotnet=\"`Light`\" pulumi-lang-go=\"`light`\" pulumi-lang-python=\"`light`\" pulumi-lang-yaml=\"`light`\" pulumi-lang-java=\"`light`\"\u003e`light`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`dark`\" pulumi-lang-dotnet=\"`Dark`\" pulumi-lang-go=\"`dark`\" pulumi-lang-python=\"`dark`\" pulumi-lang-yaml=\"`dark`\" pulumi-lang-java=\"`dark`\"\u003e`dark`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`system`\" pulumi-lang-dotnet=\"`System`\" pulumi-lang-go=\"`system`\" pulumi-lang-python=\"`system`\" pulumi-lang-yaml=\"`system`\" pulumi-lang-java=\"`system`\"\u003e`system`\u003c/span\u003e, or an empty string for the default theme.\n"},"timezone":{"type":"string","description":"The default timezone for this team. Available values are \u003cspan pulumi-lang-nodejs=\"`utc`\" pulumi-lang-dotnet=\"`Utc`\" pulumi-lang-go=\"`utc`\" pulumi-lang-python=\"`utc`\" pulumi-lang-yaml=\"`utc`\" pulumi-lang-java=\"`utc`\"\u003e`utc`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`browser`\" pulumi-lang-dotnet=\"`Browser`\" pulumi-lang-go=\"`browser`\" pulumi-lang-python=\"`browser`\" pulumi-lang-yaml=\"`browser`\" pulumi-lang-java=\"`browser`\"\u003e`browser`\u003c/span\u003e, or an empty string for the default.\n"},"weekStart":{"type":"string","description":"The default week start day for this team. Available values are \u003cspan pulumi-lang-nodejs=\"`sunday`\" pulumi-lang-dotnet=\"`Sunday`\" pulumi-lang-go=\"`sunday`\" pulumi-lang-python=\"`sunday`\" pulumi-lang-yaml=\"`sunday`\" pulumi-lang-java=\"`sunday`\"\u003e`sunday`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`monday`\" pulumi-lang-dotnet=\"`Monday`\" pulumi-lang-go=\"`monday`\" pulumi-lang-python=\"`monday`\" pulumi-lang-yaml=\"`monday`\" pulumi-lang-java=\"`monday`\"\u003e`monday`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`saturday`\" pulumi-lang-dotnet=\"`Saturday`\" pulumi-lang-go=\"`saturday`\" pulumi-lang-python=\"`saturday`\" pulumi-lang-yaml=\"`saturday`\" pulumi-lang-java=\"`saturday`\"\u003e`saturday`\u003c/span\u003e, or an empty string for the default.\n"}},"type":"object"},"grafana:oss/TeamTeamSync:TeamTeamSync":{"properties":{"groups":{"type":"array","items":{"type":"string"}}},"type":"object"},"grafana:oss/getDashboardsDashboard:getDashboardsDashboard":{"properties":{"folderTitle":{"type":"string"},"title":{"type":"string"},"uid":{"type":"string"}},"type":"object","required":["folderTitle","title","uid"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:oss/getFoldersFolder:getFoldersFolder":{"properties":{"id":{"type":"integer","description":"The folder ID.\n"},"title":{"type":"string","description":"The folder title.\n"},"uid":{"type":"string","description":"The folder's unique identifier.\n"},"url":{"type":"string","description":"The folder's URL\n"}},"type":"object","required":["id","title","uid","url"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:oss/getLibraryPanelsPanel:getLibraryPanelsPanel":{"properties":{"description":{"type":"string"},"folderUid":{"type":"string"},"modelJson":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"type":"object","required":["description","folderUid","modelJson","name","uid"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:oss/getTeamPreference:getTeamPreference":{"properties":{"homeDashboardUid":{"type":"string","description":"The UID of the dashboard to display when a team member logs in.\n"},"theme":{"type":"string","description":"The default theme for this team. Available themes are \u003cspan pulumi-lang-nodejs=\"`light`\" pulumi-lang-dotnet=\"`Light`\" pulumi-lang-go=\"`light`\" pulumi-lang-python=\"`light`\" pulumi-lang-yaml=\"`light`\" pulumi-lang-java=\"`light`\"\u003e`light`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`dark`\" pulumi-lang-dotnet=\"`Dark`\" pulumi-lang-go=\"`dark`\" pulumi-lang-python=\"`dark`\" pulumi-lang-yaml=\"`dark`\" pulumi-lang-java=\"`dark`\"\u003e`dark`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`system`\" pulumi-lang-dotnet=\"`System`\" pulumi-lang-go=\"`system`\" pulumi-lang-python=\"`system`\" pulumi-lang-yaml=\"`system`\" pulumi-lang-java=\"`system`\"\u003e`system`\u003c/span\u003e, or an empty string for the default theme.\n"},"timezone":{"type":"string","description":"The default timezone for this team. Available values are \u003cspan pulumi-lang-nodejs=\"`utc`\" pulumi-lang-dotnet=\"`Utc`\" pulumi-lang-go=\"`utc`\" pulumi-lang-python=\"`utc`\" pulumi-lang-yaml=\"`utc`\" pulumi-lang-java=\"`utc`\"\u003e`utc`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`browser`\" pulumi-lang-dotnet=\"`Browser`\" pulumi-lang-go=\"`browser`\" pulumi-lang-python=\"`browser`\" pulumi-lang-yaml=\"`browser`\" pulumi-lang-java=\"`browser`\"\u003e`browser`\u003c/span\u003e, or an empty string for the default.\n"},"weekStart":{"type":"string","description":"The default week start day for this team. Available values are \u003cspan pulumi-lang-nodejs=\"`sunday`\" pulumi-lang-dotnet=\"`Sunday`\" pulumi-lang-go=\"`sunday`\" pulumi-lang-python=\"`sunday`\" pulumi-lang-yaml=\"`sunday`\" pulumi-lang-java=\"`sunday`\"\u003e`sunday`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`monday`\" pulumi-lang-dotnet=\"`Monday`\" pulumi-lang-go=\"`monday`\" pulumi-lang-python=\"`monday`\" pulumi-lang-yaml=\"`monday`\" pulumi-lang-java=\"`monday`\"\u003e`monday`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`saturday`\" pulumi-lang-dotnet=\"`Saturday`\" pulumi-lang-go=\"`saturday`\" pulumi-lang-python=\"`saturday`\" pulumi-lang-yaml=\"`saturday`\" pulumi-lang-java=\"`saturday`\"\u003e`saturday`\u003c/span\u003e, or an empty string for the default.\n"}},"type":"object"},"grafana:oss/getTeamTeamSync:getTeamTeamSync":{"properties":{"groups":{"type":"array","items":{"type":"string"}}},"type":"object"},"grafana:oss/getUsersUser:getUsersUser":{"properties":{"email":{"type":"string","description":"The user's email.\n"},"id":{"type":"integer","description":"The user ID.\n"},"isAdmin":{"type":"boolean","description":"Whether the user is admin or not.\n"},"login":{"type":"string","description":"The user's login.\n"},"name":{"type":"string","description":"The user's name.\n"}},"type":"object","required":["email","id","isAdmin","login","name"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:slo/SLOAlerting:SLOAlerting":{"properties":{"advancedOptions":{"$ref":"#/types/grafana:slo/SLOAlertingAdvancedOptions:SLOAlertingAdvancedOptions","description":"Advanced Options for Alert Rules\n"},"annotations":{"type":"array","items":{"$ref":"#/types/grafana:slo/SLOAlertingAnnotation:SLOAlertingAnnotation"},"description":"Annotations will be attached to all alerts generated by any of these rules.\n"},"fastburn":{"$ref":"#/types/grafana:slo/SLOAlertingFastburn:SLOAlertingFastburn","description":"Alerting Rules generated for Fast Burn alerts\n"},"labels":{"type":"array","items":{"$ref":"#/types/grafana:slo/SLOAlertingLabel:SLOAlertingLabel"},"description":"Labels will be attached to all alerts generated by any of these rules.\n"},"slowburn":{"$ref":"#/types/grafana:slo/SLOAlertingSlowburn:SLOAlertingSlowburn","description":"Alerting Rules generated for Slow Burn alerts\n"}},"type":"object"},"grafana:slo/SLOAlertingAdvancedOptions:SLOAlertingAdvancedOptions":{"properties":{"minFailures":{"type":"integer","description":"Minimum number of failed events to trigger an alert\n"}},"type":"object"},"grafana:slo/SLOAlertingAnnotation:SLOAlertingAnnotation":{"properties":{"key":{"type":"string","description":"Key for filtering and identification\n"},"value":{"type":"string","description":"Templatable value\n"}},"type":"object","required":["key","value"]},"grafana:slo/SLOAlertingFastburn:SLOAlertingFastburn":{"properties":{"annotations":{"type":"array","items":{"$ref":"#/types/grafana:slo/SLOAlertingFastburnAnnotation:SLOAlertingFastburnAnnotation"},"description":"Annotations to attach only to Fast Burn alerts.\n"},"labels":{"type":"array","items":{"$ref":"#/types/grafana:slo/SLOAlertingFastburnLabel:SLOAlertingFastburnLabel"},"description":"Labels to attach only to Fast Burn alerts.\n"}},"type":"object"},"grafana:slo/SLOAlertingFastburnAnnotation:SLOAlertingFastburnAnnotation":{"properties":{"key":{"type":"string","description":"Key for filtering and identification\n"},"value":{"type":"string","description":"Templatable value\n"}},"type":"object","required":["key","value"]},"grafana:slo/SLOAlertingFastburnLabel:SLOAlertingFastburnLabel":{"properties":{"key":{"type":"string","description":"Key for filtering and identification\n"},"value":{"type":"string","description":"Templatable value\n"}},"type":"object","required":["key","value"]},"grafana:slo/SLOAlertingLabel:SLOAlertingLabel":{"properties":{"key":{"type":"string","description":"Key for filtering and identification\n"},"value":{"type":"string","description":"Templatable value\n"}},"type":"object","required":["key","value"]},"grafana:slo/SLOAlertingSlowburn:SLOAlertingSlowburn":{"properties":{"annotations":{"type":"array","items":{"$ref":"#/types/grafana:slo/SLOAlertingSlowburnAnnotation:SLOAlertingSlowburnAnnotation"},"description":"Annotations to attach only to Slow Burn alerts.\n"},"labels":{"type":"array","items":{"$ref":"#/types/grafana:slo/SLOAlertingSlowburnLabel:SLOAlertingSlowburnLabel"},"description":"Labels to attach only to Slow Burn alerts.\n"}},"type":"object"},"grafana:slo/SLOAlertingSlowburnAnnotation:SLOAlertingSlowburnAnnotation":{"properties":{"key":{"type":"string","description":"Key for filtering and identification\n"},"value":{"type":"string","description":"Templatable value\n"}},"type":"object","required":["key","value"]},"grafana:slo/SLOAlertingSlowburnLabel:SLOAlertingSlowburnLabel":{"properties":{"key":{"type":"string","description":"Key for filtering and identification\n"},"value":{"type":"string","description":"Templatable value\n"}},"type":"object","required":["key","value"]},"grafana:slo/SLODestinationDatasource:SLODestinationDatasource":{"properties":{"uid":{"type":"string","description":"UID for the Datasource\n"}},"type":"object","required":["uid"]},"grafana:slo/SLOLabel:SLOLabel":{"properties":{"key":{"type":"string","description":"Key for filtering and identification\n"},"value":{"type":"string","description":"Templatable value\n"}},"type":"object","required":["key","value"]},"grafana:slo/SLOObjective:SLOObjective":{"properties":{"value":{"type":"number","description":"Value between 0 and 1. If the value of the query is above the objective, the SLO is met.\n"},"window":{"type":"string","description":"A Prometheus-parsable time duration string like 24h, 60m. This is the time window the objective is measured over.\n"}},"type":"object","required":["value","window"]},"grafana:slo/SLOQuery:SLOQuery":{"properties":{"freeform":{"$ref":"#/types/grafana:slo/SLOQueryFreeform:SLOQueryFreeform"},"grafanaQueries":{"$ref":"#/types/grafana:slo/SLOQueryGrafanaQueries:SLOQueryGrafanaQueries","description":"Array for holding a set of grafana queries\n"},"ratio":{"$ref":"#/types/grafana:slo/SLOQueryRatio:SLOQueryRatio"},"type":{"type":"string","description":"Query type must be one of: \"freeform\", \"query\", \"ratio\", \u003cspan pulumi-lang-nodejs=\"\"grafanaQueries\"\" pulumi-lang-dotnet=\"\"GrafanaQueries\"\" pulumi-lang-go=\"\"grafanaQueries\"\" pulumi-lang-python=\"\"grafana_queries\"\" pulumi-lang-yaml=\"\"grafanaQueries\"\" pulumi-lang-java=\"\"grafanaQueries\"\"\u003e\"grafana_queries\"\u003c/span\u003e or \"threshold\"\n"}},"type":"object","required":["type"]},"grafana:slo/SLOQueryFreeform:SLOQueryFreeform":{"properties":{"query":{"type":"string","description":"Freeform Query Field - valid promQl\n"}},"type":"object","required":["query"]},"grafana:slo/SLOQueryGrafanaQueries:SLOQueryGrafanaQueries":{"properties":{"grafanaQueries":{"type":"string","description":"Query Object - Array of Grafana Query JSON objects\n"}},"type":"object","required":["grafanaQueries"]},"grafana:slo/SLOQueryRatio:SLOQueryRatio":{"properties":{"groupByLabels":{"type":"array","items":{"type":"string"},"description":"Defines Group By Labels used for per-label alerting. These appear as variables on SLO dashboards to enable filtering and aggregation. Labels must adhere to Prometheus label name schema - \"^[a-zA-Z*][a-zA-Z0-9*]*$\"\n"},"successMetric":{"type":"string","description":"Counter metric for success events (numerator)\n"},"totalMetric":{"type":"string","description":"Metric for total events (denominator)\n"}},"type":"object","required":["successMetric","totalMetric"]},"grafana:slo/getSlosSlo:getSlosSlo":{"properties":{"alertings":{"type":"array","items":{"$ref":"#/types/grafana:slo/getSlosSloAlerting:getSlosSloAlerting"},"description":"Configures the alerting rules that will be generated for each\n\t\t\t\ttime window associated with the SLO. Grafana SLOs can generate\n\t\t\t\talerts when the short-term error budget burn is very high, the\n\t\t\t\tlong-term error budget burn rate is high, or when the remaining\n\t\t\t\terror budget is below a certain threshold. Annotations and Labels support templating.\n"},"description":{"type":"string","description":"Description is a free-text field that can provide more context to an SLO.\n"},"destinationDatasources":{"type":"array","items":{"$ref":"#/types/grafana:slo/getSlosSloDestinationDatasource:getSlosSloDestinationDatasource"},"description":"Destination Datasource sets the datasource defined for an SLO\n"},"folderUid":{"type":"string","description":"UID for the SLO folder\n"},"labels":{"type":"array","items":{"$ref":"#/types/grafana:slo/getSlosSloLabel:getSlosSloLabel"},"description":"Additional labels that will be attached to all metrics generated from the query. These labels are useful for grouping SLOs in dashboard views that you create by hand. Labels must adhere to Prometheus label name schema - \"^[a-zA-Z_][a-zA-Z0-9_]*$\"\n"},"name":{"type":"string","description":"Name should be a short description of your indicator. Consider names like \"API Availability\"\n"},"objectives":{"type":"array","items":{"$ref":"#/types/grafana:slo/getSlosSloObjective:getSlosSloObjective"},"description":"Over each rolling time window, the remaining error budget will be calculated, and separate alerts can be generated for each time window based on the SLO burn rate or remaining error budget.\n"},"queries":{"type":"array","items":{"$ref":"#/types/grafana:slo/getSlosSloQuery:getSlosSloQuery"},"description":"Query describes the indicator that will be measured against the objective. Freeform Query types are currently supported.\n"},"searchExpression":{"type":"string","description":"The name of a search expression in Grafana Asserts. This is used in the SLO UI to open the Asserts RCA workbench and in alerts to link to the RCA workbench.\n"},"uuid":{"type":"string","description":"A unique, random identifier. This value will also be the name of the resource stored in the API server. This value is read-only.\n"}},"type":"object","required":["alertings","description","destinationDatasources","folderUid","labels","name","objectives","queries","searchExpression","uuid"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:slo/getSlosSloAlerting:getSlosSloAlerting":{"properties":{"advancedOptions":{"$ref":"#/types/grafana:slo/getSlosSloAlertingAdvancedOptions:getSlosSloAlertingAdvancedOptions","description":"Advanced Options for Alert Rules\n"},"annotations":{"type":"array","items":{"$ref":"#/types/grafana:slo/getSlosSloAlertingAnnotation:getSlosSloAlertingAnnotation"},"description":"Annotations will be attached to all alerts generated by any of these rules.\n"},"fastburn":{"$ref":"#/types/grafana:slo/getSlosSloAlertingFastburn:getSlosSloAlertingFastburn","description":"Alerting Rules generated for Fast Burn alerts\n"},"labels":{"type":"array","items":{"$ref":"#/types/grafana:slo/getSlosSloAlertingLabel:getSlosSloAlertingLabel"},"description":"Labels will be attached to all alerts generated by any of these rules.\n"},"slowburn":{"$ref":"#/types/grafana:slo/getSlosSloAlertingSlowburn:getSlosSloAlertingSlowburn","description":"Alerting Rules generated for Slow Burn alerts\n"}},"type":"object"},"grafana:slo/getSlosSloAlertingAdvancedOptions:getSlosSloAlertingAdvancedOptions":{"properties":{"minFailures":{"type":"integer","description":"Minimum number of failed events to trigger an alert\n"}},"type":"object"},"grafana:slo/getSlosSloAlertingAnnotation:getSlosSloAlertingAnnotation":{"properties":{"key":{"type":"string","description":"Key for filtering and identification\n"},"value":{"type":"string","description":"Templatable value\n"}},"type":"object","required":["key","value"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:slo/getSlosSloAlertingFastburn:getSlosSloAlertingFastburn":{"properties":{"annotations":{"type":"array","items":{"$ref":"#/types/grafana:slo/getSlosSloAlertingFastburnAnnotation:getSlosSloAlertingFastburnAnnotation"},"description":"Annotations to attach only to Fast Burn alerts.\n"},"labels":{"type":"array","items":{"$ref":"#/types/grafana:slo/getSlosSloAlertingFastburnLabel:getSlosSloAlertingFastburnLabel"},"description":"Labels to attach only to Fast Burn alerts.\n"}},"type":"object"},"grafana:slo/getSlosSloAlertingFastburnAnnotation:getSlosSloAlertingFastburnAnnotation":{"properties":{"key":{"type":"string","description":"Key for filtering and identification\n"},"value":{"type":"string","description":"Templatable value\n"}},"type":"object","required":["key","value"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:slo/getSlosSloAlertingFastburnLabel:getSlosSloAlertingFastburnLabel":{"properties":{"key":{"type":"string","description":"Key for filtering and identification\n"},"value":{"type":"string","description":"Templatable value\n"}},"type":"object","required":["key","value"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:slo/getSlosSloAlertingLabel:getSlosSloAlertingLabel":{"properties":{"key":{"type":"string","description":"Key for filtering and identification\n"},"value":{"type":"string","description":"Templatable value\n"}},"type":"object","required":["key","value"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:slo/getSlosSloAlertingSlowburn:getSlosSloAlertingSlowburn":{"properties":{"annotations":{"type":"array","items":{"$ref":"#/types/grafana:slo/getSlosSloAlertingSlowburnAnnotation:getSlosSloAlertingSlowburnAnnotation"},"description":"Annotations to attach only to Slow Burn alerts.\n"},"labels":{"type":"array","items":{"$ref":"#/types/grafana:slo/getSlosSloAlertingSlowburnLabel:getSlosSloAlertingSlowburnLabel"},"description":"Labels to attach only to Slow Burn alerts.\n"}},"type":"object"},"grafana:slo/getSlosSloAlertingSlowburnAnnotation:getSlosSloAlertingSlowburnAnnotation":{"properties":{"key":{"type":"string","description":"Key for filtering and identification\n"},"value":{"type":"string","description":"Templatable value\n"}},"type":"object","required":["key","value"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:slo/getSlosSloAlertingSlowburnLabel:getSlosSloAlertingSlowburnLabel":{"properties":{"key":{"type":"string","description":"Key for filtering and identification\n"},"value":{"type":"string","description":"Templatable value\n"}},"type":"object","required":["key","value"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:slo/getSlosSloDestinationDatasource:getSlosSloDestinationDatasource":{"properties":{"uid":{"type":"string","description":"UID for the Datasource\n"}},"type":"object","required":["uid"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:slo/getSlosSloLabel:getSlosSloLabel":{"properties":{"key":{"type":"string","description":"Key for filtering and identification\n"},"value":{"type":"string","description":"Templatable value\n"}},"type":"object","required":["key","value"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:slo/getSlosSloObjective:getSlosSloObjective":{"properties":{"value":{"type":"number","description":"Value between 0 and 1. If the value of the query is above the objective, the SLO is met.\n"},"window":{"type":"string","description":"A Prometheus-parsable time duration string like 24h, 60m. This is the time window the objective is measured over.\n"}},"type":"object","required":["value","window"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:slo/getSlosSloQuery:getSlosSloQuery":{"properties":{"freeform":{"$ref":"#/types/grafana:slo/getSlosSloQueryFreeform:getSlosSloQueryFreeform"},"grafanaQueries":{"$ref":"#/types/grafana:slo/getSlosSloQueryGrafanaQueries:getSlosSloQueryGrafanaQueries","description":"Array for holding a set of grafana queries\n"},"ratio":{"$ref":"#/types/grafana:slo/getSlosSloQueryRatio:getSlosSloQueryRatio"},"type":{"type":"string","description":"Query type must be one of: \"freeform\", \"query\", \"ratio\", \u003cspan pulumi-lang-nodejs=\"\"grafanaQueries\"\" pulumi-lang-dotnet=\"\"GrafanaQueries\"\" pulumi-lang-go=\"\"grafanaQueries\"\" pulumi-lang-python=\"\"grafana_queries\"\" pulumi-lang-yaml=\"\"grafanaQueries\"\" pulumi-lang-java=\"\"grafanaQueries\"\"\u003e\"grafana_queries\"\u003c/span\u003e or \"threshold\"\n"}},"type":"object","required":["type"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:slo/getSlosSloQueryFreeform:getSlosSloQueryFreeform":{"properties":{"query":{"type":"string","description":"Freeform Query Field - valid promQl\n"}},"type":"object","required":["query"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:slo/getSlosSloQueryGrafanaQueries:getSlosSloQueryGrafanaQueries":{"properties":{"grafanaQueries":{"type":"string","description":"Query Object - Array of Grafana Query JSON objects\n"}},"type":"object","required":["grafanaQueries"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:slo/getSlosSloQueryRatio:getSlosSloQueryRatio":{"properties":{"groupByLabels":{"type":"array","items":{"type":"string"},"description":"Defines Group By Labels used for per-label alerting. These appear as variables on SLO dashboards to enable filtering and aggregation. Labels must adhere to Prometheus label name schema - \"^[a-zA-Z_][a-zA-Z0-9_]*$\"\n"},"successMetric":{"type":"string","description":"Counter metric for success events (numerator)\n"},"totalMetric":{"type":"string","description":"Metric for total events (denominator)\n"}},"type":"object","required":["successMetric","totalMetric"],"language":{"nodejs":{"requiredInputs":[]}}},"grafana:syntheticMonitoring/CheckAlertsAlert:CheckAlertsAlert":{"properties":{"name":{"type":"string","description":"Name of the alert. Required.\n"},"period":{"type":"string","description":"Period for the alert. Required and must be one of: \u003cspan pulumi-lang-nodejs=\"`5m`\" pulumi-lang-dotnet=\"`5m`\" pulumi-lang-go=\"`5m`\" pulumi-lang-python=\"`5m`\" pulumi-lang-yaml=\"`5m`\" pulumi-lang-java=\"`5m`\"\u003e`5m`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`10m`\" pulumi-lang-dotnet=\"`10m`\" pulumi-lang-go=\"`10m`\" pulumi-lang-python=\"`10m`\" pulumi-lang-yaml=\"`10m`\" pulumi-lang-java=\"`10m`\"\u003e`10m`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`15m`\" pulumi-lang-dotnet=\"`15m`\" pulumi-lang-go=\"`15m`\" pulumi-lang-python=\"`15m`\" pulumi-lang-yaml=\"`15m`\" pulumi-lang-java=\"`15m`\"\u003e`15m`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`20m`\" pulumi-lang-dotnet=\"`20m`\" pulumi-lang-go=\"`20m`\" pulumi-lang-python=\"`20m`\" pulumi-lang-yaml=\"`20m`\" pulumi-lang-java=\"`20m`\"\u003e`20m`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`30m`\" pulumi-lang-dotnet=\"`30m`\" pulumi-lang-go=\"`30m`\" pulumi-lang-python=\"`30m`\" pulumi-lang-yaml=\"`30m`\" pulumi-lang-java=\"`30m`\"\u003e`30m`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`1h`\" pulumi-lang-dotnet=\"`1h`\" pulumi-lang-go=\"`1h`\" pulumi-lang-python=\"`1h`\" pulumi-lang-yaml=\"`1h`\" pulumi-lang-java=\"`1h`\"\u003e`1h`\u003c/span\u003e.\n"},"runbookUrl":{"type":"string","description":"URL to runbook documentation for this alert.\n"},"threshold":{"type":"number","description":"Threshold value for the alert.\n"}},"type":"object","required":["name","threshold"]},"grafana:syntheticMonitoring/CheckSettings:CheckSettings":{"properties":{"browser":{"$ref":"#/types/grafana:syntheticMonitoring/CheckSettingsBrowser:CheckSettingsBrowser","description":"Settings for browser check. See https://grafana.com/docs/grafana-cloud/testing/synthetic-monitoring/create-checks/checks/k6-browser/.\n"},"dns":{"$ref":"#/types/grafana:syntheticMonitoring/CheckSettingsDns:CheckSettingsDns","description":"Settings for DNS check. The target must be a valid hostname (or IP address for `PTR` records).\n"},"grpc":{"$ref":"#/types/grafana:syntheticMonitoring/CheckSettingsGrpc:CheckSettingsGrpc","description":"Settings for gRPC Health check. The target must be of the form `\u003chost\u003e:\u003cport\u003e`, where the host portion must be a valid hostname or IP address.\n"},"http":{"$ref":"#/types/grafana:syntheticMonitoring/CheckSettingsHttp:CheckSettingsHttp","description":"Settings for HTTP check. The target must be a URL (http or https).\n"},"multihttp":{"$ref":"#/types/grafana:syntheticMonitoring/CheckSettingsMultihttp:CheckSettingsMultihttp","description":"Settings for MultiHTTP check. The target must be a URL (http or https)\n"},"ping":{"$ref":"#/types/grafana:syntheticMonitoring/CheckSettingsPing:CheckSettingsPing","description":"Settings for ping (ICMP) check. The target must be a valid hostname or IP address.\n"},"scripted":{"$ref":"#/types/grafana:syntheticMonitoring/CheckSettingsScripted:CheckSettingsScripted","description":"Settings for scripted check. See https://grafana.com/docs/grafana-cloud/testing/synthetic-monitoring/create-checks/checks/k6/.\n"},"tcp":{"$ref":"#/types/grafana:syntheticMonitoring/CheckSettingsTcp:CheckSettingsTcp","description":"Settings for TCP check. The target must be of the form `\u003chost\u003e:\u003cport\u003e`, where the host portion must be a valid hostname or IP address.\n"},"traceroute":{"$ref":"#/types/grafana:syntheticMonitoring/CheckSettingsTraceroute:CheckSettingsTraceroute","description":"Settings for traceroute check. The target must be a valid hostname or IP address\n"}},"type":"object"},"grafana:syntheticMonitoring/CheckSettingsBrowser:CheckSettingsBrowser":{"properties":{"script":{"type":"string"}},"type":"object","required":["script"]},"grafana:syntheticMonitoring/CheckSettingsDns:CheckSettingsDns":{"properties":{"ipVersion":{"type":"string","description":"Options are `V4`, `V6`, `Any`. Specifies whether the corresponding check will be performed using IPv4 or IPv6. The `Any` value indicates that IPv6 should be used, falling back to IPv4 if that's not available. Defaults to `V4`.\n"},"port":{"type":"integer","description":"Port to target. Defaults to \u003cspan pulumi-lang-nodejs=\"`53`\" pulumi-lang-dotnet=\"`53`\" pulumi-lang-go=\"`53`\" pulumi-lang-python=\"`53`\" pulumi-lang-yaml=\"`53`\" pulumi-lang-java=\"`53`\"\u003e`53`\u003c/span\u003e.\n"},"protocol":{"type":"string","description":"`TCP` or `UDP`. Defaults to `UDP`.\n"},"recordType":{"type":"string","description":"One of `ANY`, `A`, `AAAA`, `CNAME`, `MX`, `NS`, `PTR`, `SOA`, `SRV`, `TXT`. Defaults to `A`.\n"},"server":{"type":"string","description":"DNS server address to target. Defaults to `8.8.8.8`.\n"},"sourceIpAddress":{"type":"string","description":"Source IP address.\n"},"validRCodes":{"type":"array","items":{"type":"string"},"description":"List of valid response codes. Options include `NOERROR`, `BADALG`, `BADMODE`, `BADKEY`, `BADCOOKIE`, `BADNAME`, `BADSIG`, `BADTIME`, `BADTRUNC`, `BADVERS`, `FORMERR`, `NOTIMP`, `NOTAUTH`, `NOTZONE`, `NXDOMAIN`, `NXRRSET`, `REFUSED`, `SERVFAIL`, `YXDOMAIN`, `YXRRSET`.\n"},"validateAdditionalRrs":{"type":"array","items":{"$ref":"#/types/grafana:syntheticMonitoring/CheckSettingsDnsValidateAdditionalRr:CheckSettingsDnsValidateAdditionalRr"},"description":"Validate additional matches.\n"},"validateAnswerRrs":{"$ref":"#/types/grafana:syntheticMonitoring/CheckSettingsDnsValidateAnswerRrs:CheckSettingsDnsValidateAnswerRrs","description":"Validate response answer.\n"},"validateAuthorityRrs":{"$ref":"#/types/grafana:syntheticMonitoring/CheckSettingsDnsValidateAuthorityRrs:CheckSettingsDnsValidateAuthorityRrs","description":"Validate response authority.\n"}},"type":"object"},"grafana:syntheticMonitoring/CheckSettingsDnsValidateAdditionalRr:CheckSettingsDnsValidateAdditionalRr":{"properties":{"failIfMatchesRegexps":{"type":"array","items":{"type":"string"},"description":"Fail if value matches regex.\n"},"failIfNotMatchesRegexps":{"type":"array","items":{"type":"string"},"description":"Fail if value does not match regex.\n"}},"type":"object"},"grafana:syntheticMonitoring/CheckSettingsDnsValidateAnswerRrs:CheckSettingsDnsValidateAnswerRrs":{"properties":{"failIfMatchesRegexps":{"type":"array","items":{"type":"string"},"description":"Fail if value matches regex.\n"},"failIfNotMatchesRegexps":{"type":"array","items":{"type":"string"},"description":"Fail if value does not match regex.\n"}},"type":"object"},"grafana:syntheticMonitoring/CheckSettingsDnsValidateAuthorityRrs:CheckSettingsDnsValidateAuthorityRrs":{"properties":{"failIfMatchesRegexps":{"type":"array","items":{"type":"string"},"description":"Fail if value matches regex.\n"},"failIfNotMatchesRegexps":{"type":"array","items":{"type":"string"},"description":"Fail if value does not match regex.\n"}},"type":"object"},"grafana:syntheticMonitoring/CheckSettingsGrpc:CheckSettingsGrpc":{"properties":{"ipVersion":{"type":"string","description":"Options are `V4`, `V6`, `Any`. Specifies whether the corresponding check will be performed using IPv4 or IPv6. The `Any` value indicates that IPv6 should be used, falling back to IPv4 if that's not available. Defaults to `V4`.\n"},"service":{"type":"string","description":"gRPC service.\n"},"tls":{"type":"boolean","description":"Whether or not TLS is used when the connection is initiated. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"tlsConfig":{"$ref":"#/types/grafana:syntheticMonitoring/CheckSettingsGrpcTlsConfig:CheckSettingsGrpcTlsConfig","description":"TLS config.\n"}},"type":"object"},"grafana:syntheticMonitoring/CheckSettingsGrpcTlsConfig:CheckSettingsGrpcTlsConfig":{"properties":{"caCert":{"type":"string","description":"CA certificate in PEM format.\n"},"clientCert":{"type":"string","description":"Client certificate in PEM format.\n"},"clientKey":{"type":"string","description":"Client key in PEM format.\n","secret":true},"insecureSkipVerify":{"type":"boolean","description":"Disable target certificate validation. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"serverName":{"type":"string","description":"Used to verify the hostname for the targets.\n"}},"type":"object"},"grafana:syntheticMonitoring/CheckSettingsHttp:CheckSettingsHttp":{"properties":{"basicAuth":{"$ref":"#/types/grafana:syntheticMonitoring/CheckSettingsHttpBasicAuth:CheckSettingsHttpBasicAuth","description":"Basic auth settings.\n"},"bearerToken":{"type":"string","description":"Token for use with bearer authorization header.\n","secret":true},"body":{"type":"string","description":"The body of the HTTP request used in probe.\n"},"cacheBustingQueryParamName":{"type":"string","description":"The name of the query parameter used to prevent the server from using a cached response. Each probe will assign a random value to this parameter each time a request is made.\n"},"compression":{"type":"string","description":"Check fails if the response body is not compressed using this compression algorithm. One of \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`identity`\" pulumi-lang-dotnet=\"`Identity`\" pulumi-lang-go=\"`identity`\" pulumi-lang-python=\"`identity`\" pulumi-lang-yaml=\"`identity`\" pulumi-lang-java=\"`identity`\"\u003e`identity`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`br`\" pulumi-lang-dotnet=\"`Br`\" pulumi-lang-go=\"`br`\" pulumi-lang-python=\"`br`\" pulumi-lang-yaml=\"`br`\" pulumi-lang-java=\"`br`\"\u003e`br`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`gzip`\" pulumi-lang-dotnet=\"`Gzip`\" pulumi-lang-go=\"`gzip`\" pulumi-lang-python=\"`gzip`\" pulumi-lang-yaml=\"`gzip`\" pulumi-lang-java=\"`gzip`\"\u003e`gzip`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`deflate`\" pulumi-lang-dotnet=\"`Deflate`\" pulumi-lang-go=\"`deflate`\" pulumi-lang-python=\"`deflate`\" pulumi-lang-yaml=\"`deflate`\" pulumi-lang-java=\"`deflate`\"\u003e`deflate`\u003c/span\u003e.\n"},"failIfBodyMatchesRegexps":{"type":"array","items":{"type":"string"},"description":"List of regexes. If any match the response body, the check will fail.\n"},"failIfBodyNotMatchesRegexps":{"type":"array","items":{"type":"string"},"description":"List of regexes. If any do not match the response body, the check will fail.\n"},"failIfHeaderMatchesRegexps":{"type":"array","items":{"$ref":"#/types/grafana:syntheticMonitoring/CheckSettingsHttpFailIfHeaderMatchesRegexp:CheckSettingsHttpFailIfHeaderMatchesRegexp"},"description":"Check fails if headers match.\n"},"failIfHeaderNotMatchesRegexps":{"type":"array","items":{"$ref":"#/types/grafana:syntheticMonitoring/CheckSettingsHttpFailIfHeaderNotMatchesRegexp:CheckSettingsHttpFailIfHeaderNotMatchesRegexp"},"description":"Check fails if headers do not match.\n"},"failIfNotSsl":{"type":"boolean","description":"Fail if SSL is not present. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"failIfSsl":{"type":"boolean","description":"Fail if SSL is present. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"headers":{"type":"array","items":{"type":"string"},"description":"The HTTP headers set for the probe.\n"},"ipVersion":{"type":"string","description":"Options are `V4`, `V6`, `Any`. Specifies whether the corresponding check will be performed using IPv4 or IPv6. The `Any` value indicates that IPv6 should be used, falling back to IPv4 if that's not available. Defaults to `V4`.\n"},"method":{"type":"string","description":"Request method. One of `GET`, `CONNECT`, `DELETE`, `HEAD`, `OPTIONS`, `POST`, `PUT`, `TRACE` Defaults to `GET`.\n"},"noFollowRedirects":{"type":"boolean","description":"Do not follow redirects. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"proxyConnectHeaders":{"type":"array","items":{"type":"string"},"description":"The HTTP headers sent to the proxy URL\n"},"proxyUrl":{"type":"string","description":"Proxy URL.\n"},"tlsConfig":{"$ref":"#/types/grafana:syntheticMonitoring/CheckSettingsHttpTlsConfig:CheckSettingsHttpTlsConfig","description":"TLS config.\n"},"validHttpVersions":{"type":"array","items":{"type":"string"},"description":"List of valid HTTP versions. Options include `HTTP/1.0`, `HTTP/1.1`, `HTTP/2.0`\n"},"validStatusCodes":{"type":"array","items":{"type":"integer"},"description":"Accepted status codes. If unset, defaults to 2xx.\n"}},"type":"object"},"grafana:syntheticMonitoring/CheckSettingsHttpBasicAuth:CheckSettingsHttpBasicAuth":{"properties":{"password":{"type":"string","description":"Basic auth password.\n","secret":true},"username":{"type":"string","description":"Basic auth username.\n"}},"type":"object","required":["password","username"]},"grafana:syntheticMonitoring/CheckSettingsHttpFailIfHeaderMatchesRegexp:CheckSettingsHttpFailIfHeaderMatchesRegexp":{"properties":{"allowMissing":{"type":"boolean","description":"Allow header to be missing from responses. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"header":{"type":"string","description":"Header name.\n"},"regexp":{"type":"string","description":"Regex that header value should match.\n"}},"type":"object","required":["header","regexp"]},"grafana:syntheticMonitoring/CheckSettingsHttpFailIfHeaderNotMatchesRegexp:CheckSettingsHttpFailIfHeaderNotMatchesRegexp":{"properties":{"allowMissing":{"type":"boolean","description":"Allow header to be missing from responses. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"header":{"type":"string","description":"Header name.\n"},"regexp":{"type":"string","description":"Regex that header value should match.\n"}},"type":"object","required":["header","regexp"]},"grafana:syntheticMonitoring/CheckSettingsHttpTlsConfig:CheckSettingsHttpTlsConfig":{"properties":{"caCert":{"type":"string","description":"CA certificate in PEM format.\n"},"clientCert":{"type":"string","description":"Client certificate in PEM format.\n"},"clientKey":{"type":"string","description":"Client key in PEM format.\n","secret":true},"insecureSkipVerify":{"type":"boolean","description":"Disable target certificate validation. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"serverName":{"type":"string","description":"Used to verify the hostname for the targets.\n"}},"type":"object"},"grafana:syntheticMonitoring/CheckSettingsMultihttp:CheckSettingsMultihttp":{"properties":{"entries":{"type":"array","items":{"$ref":"#/types/grafana:syntheticMonitoring/CheckSettingsMultihttpEntry:CheckSettingsMultihttpEntry"}}},"type":"object"},"grafana:syntheticMonitoring/CheckSettingsMultihttpEntry:CheckSettingsMultihttpEntry":{"properties":{"assertions":{"type":"array","items":{"$ref":"#/types/grafana:syntheticMonitoring/CheckSettingsMultihttpEntryAssertion:CheckSettingsMultihttpEntryAssertion"},"description":"Assertions to make on the request response\n"},"request":{"$ref":"#/types/grafana:syntheticMonitoring/CheckSettingsMultihttpEntryRequest:CheckSettingsMultihttpEntryRequest","description":"An individual MultiHTTP request\n"},"variables":{"type":"array","items":{"$ref":"#/types/grafana:syntheticMonitoring/CheckSettingsMultihttpEntryVariable:CheckSettingsMultihttpEntryVariable"},"description":"Variables to extract from the request response\n"}},"type":"object"},"grafana:syntheticMonitoring/CheckSettingsMultihttpEntryAssertion:CheckSettingsMultihttpEntryAssertion":{"properties":{"condition":{"type":"string","description":"The condition of the assertion: NOT*CONTAINS, EQUALS, STARTS*WITH, ENDS*WITH, TYPE*OF, CONTAINS\n"},"expression":{"type":"string","description":"The expression of the assertion. Should start with $.\n"},"subject":{"type":"string","description":"The subject of the assertion: RESPONSE*HEADERS, HTTP*STATUS*CODE, RESPONSE*BODY\n"},"type":{"type":"string","description":"The type of assertion to make: TEXT, JSON*PATH*VALUE, JSON*PATH*ASSERTION, REGEX_ASSERTION\n"},"value":{"type":"string","description":"The value of the assertion\n"}},"type":"object","required":["type"]},"grafana:syntheticMonitoring/CheckSettingsMultihttpEntryRequest:CheckSettingsMultihttpEntryRequest":{"properties":{"bodies":{"type":"array","items":{"$ref":"#/types/grafana:syntheticMonitoring/CheckSettingsMultihttpEntryRequestBody:CheckSettingsMultihttpEntryRequestBody"},"description":"The body of the HTTP request used in probe.\n"},"headers":{"type":"array","items":{"$ref":"#/types/grafana:syntheticMonitoring/CheckSettingsMultihttpEntryRequestHeader:CheckSettingsMultihttpEntryRequestHeader"},"description":"The headers to send with the request\n"},"method":{"type":"string","description":"The HTTP method to use\n"},"queryFields":{"type":"array","items":{"$ref":"#/types/grafana:syntheticMonitoring/CheckSettingsMultihttpEntryRequestQueryField:CheckSettingsMultihttpEntryRequestQueryField"},"description":"Query fields to send with the request\n"},"url":{"type":"string","description":"The URL for the request\n"}},"type":"object","required":["method","url"]},"grafana:syntheticMonitoring/CheckSettingsMultihttpEntryRequestBody:CheckSettingsMultihttpEntryRequestBody":{"properties":{"contentEncoding":{"type":"string","description":"The content encoding of the body\n"},"contentType":{"type":"string","description":"The content type of the body\n"},"payload":{"type":"string","description":"The body payload\n"}},"type":"object"},"grafana:syntheticMonitoring/CheckSettingsMultihttpEntryRequestHeader:CheckSettingsMultihttpEntryRequestHeader":{"properties":{"name":{"type":"string","description":"Name of the header to send\n"},"value":{"type":"string","description":"Value of the header to send\n"}},"type":"object","required":["name","value"]},"grafana:syntheticMonitoring/CheckSettingsMultihttpEntryRequestQueryField:CheckSettingsMultihttpEntryRequestQueryField":{"properties":{"name":{"type":"string","description":"Name of the query field to send\n"},"value":{"type":"string","description":"Value of the query field to send\n"}},"type":"object","required":["name","value"]},"grafana:syntheticMonitoring/CheckSettingsMultihttpEntryVariable:CheckSettingsMultihttpEntryVariable":{"properties":{"attribute":{"type":"string","description":"The attribute to use when finding the variable value. Only used when type is CSS_SELECTOR\n"},"expression":{"type":"string","description":"The expression to when finding the variable. Should start with $. Only use when type is JSON_PATH or REGEX\n"},"name":{"type":"string","description":"The name of the variable to extract\n"},"type":{"type":"string","description":"The method of finding the variable value to extract. JSON*PATH, REGEX, CSS*SELECTOR\n"}},"type":"object","required":["type"]},"grafana:syntheticMonitoring/CheckSettingsPing:CheckSettingsPing":{"properties":{"dontFragment":{"type":"boolean","description":"Set the DF-bit in the IP-header. Only works with ipV4. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"ipVersion":{"type":"string","description":"Options are `V4`, `V6`, `Any`. Specifies whether the corresponding check will be performed using IPv4 or IPv6. The `Any` value indicates that IPv6 should be used, falling back to IPv4 if that's not available. Defaults to `V4`.\n"},"payloadSize":{"type":"integer","description":"Payload size. Defaults to \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e.\n"},"sourceIpAddress":{"type":"string","description":"Source IP address.\n"}},"type":"object"},"grafana:syntheticMonitoring/CheckSettingsScripted:CheckSettingsScripted":{"properties":{"script":{"type":"string"}},"type":"object","required":["script"]},"grafana:syntheticMonitoring/CheckSettingsTcp:CheckSettingsTcp":{"properties":{"ipVersion":{"type":"string","description":"Options are `V4`, `V6`, `Any`. Specifies whether the corresponding check will be performed using IPv4 or IPv6. The `Any` value indicates that IPv6 should be used, falling back to IPv4 if that's not available. Defaults to `V4`.\n"},"queryResponses":{"type":"array","items":{"$ref":"#/types/grafana:syntheticMonitoring/CheckSettingsTcpQueryResponse:CheckSettingsTcpQueryResponse"},"description":"The query sent in the TCP probe and the expected associated response.\n"},"sourceIpAddress":{"type":"string","description":"Source IP address.\n"},"tls":{"type":"boolean","description":"Whether or not TLS is used when the connection is initiated. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"tlsConfig":{"$ref":"#/types/grafana:syntheticMonitoring/CheckSettingsTcpTlsConfig:CheckSettingsTcpTlsConfig","description":"TLS config.\n"}},"type":"object"},"grafana:syntheticMonitoring/CheckSettingsTcpQueryResponse:CheckSettingsTcpQueryResponse":{"properties":{"expect":{"type":"string","description":"Response to expect.\n"},"send":{"type":"string","description":"Data to send.\n"},"startTls":{"type":"boolean","description":"Upgrade TCP connection to TLS. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"}},"type":"object","required":["expect","send"]},"grafana:syntheticMonitoring/CheckSettingsTcpTlsConfig:CheckSettingsTcpTlsConfig":{"properties":{"caCert":{"type":"string","description":"CA certificate in PEM format.\n"},"clientCert":{"type":"string","description":"Client certificate in PEM format.\n"},"clientKey":{"type":"string","description":"Client key in PEM format.\n","secret":true},"insecureSkipVerify":{"type":"boolean","description":"Disable target certificate validation. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"serverName":{"type":"string","description":"Used to verify the hostname for the targets.\n"}},"type":"object"},"grafana:syntheticMonitoring/CheckSettingsTraceroute:CheckSettingsTraceroute":{"properties":{"maxHops":{"type":"integer","description":"Maximum TTL for the trace Defaults to \u003cspan pulumi-lang-nodejs=\"`64`\" pulumi-lang-dotnet=\"`64`\" pulumi-lang-go=\"`64`\" pulumi-lang-python=\"`64`\" pulumi-lang-yaml=\"`64`\" pulumi-lang-java=\"`64`\"\u003e`64`\u003c/span\u003e.\n"},"maxUnknownHops":{"type":"integer","description":"Maximum number of hosts to travers that give no response Defaults to \u003cspan pulumi-lang-nodejs=\"`15`\" pulumi-lang-dotnet=\"`15`\" pulumi-lang-go=\"`15`\" pulumi-lang-python=\"`15`\" pulumi-lang-yaml=\"`15`\" pulumi-lang-java=\"`15`\"\u003e`15`\u003c/span\u003e.\n"},"ptrLookup":{"type":"boolean","description":"Reverse lookup hostnames from IP addresses Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"}},"type":"object"}},"provider":{"description":"The provider type for the grafana package. By default, resources use package-wide configuration\nsettings, however an explicit `Provider` instance may be created and passed during resource\nconstruction to achieve fine-grained programmatic control over provider settings. See the\n[documentation](https://www.pulumi.com/docs/reference/programming-model/#providers) for more information.\n","properties":{"auth":{"type":"string","description":"API token, basic auth in the `username:password` format or \u003cspan pulumi-lang-nodejs=\"`anonymous`\" pulumi-lang-dotnet=\"`Anonymous`\" pulumi-lang-go=\"`anonymous`\" pulumi-lang-python=\"`anonymous`\" pulumi-lang-yaml=\"`anonymous`\" pulumi-lang-java=\"`anonymous`\"\u003e`anonymous`\u003c/span\u003e (string literal). May alternatively be set via the `GRAFANA_AUTH` environment variable.","secret":true},"caCert":{"type":"string","description":"Certificate CA bundle (file path or literal value) to use to verify the Grafana server's certificate. May alternatively be set via the `GRAFANA_CA_CERT` environment variable."},"cloudAccessPolicyToken":{"type":"string","description":"Access Policy Token for Grafana Cloud. May alternatively be set via the `GRAFANA_CLOUD_ACCESS_POLICY_TOKEN` environment variable.","secret":true},"cloudApiUrl":{"type":"string","description":"Grafana Cloud's API URL. May alternatively be set via the `GRAFANA_CLOUD_API_URL` environment variable."},"cloudProviderAccessToken":{"type":"string","description":"A Grafana Cloud Provider access token. May alternatively be set via the `GRAFANA_CLOUD_PROVIDER_ACCESS_TOKEN` environment variable.","secret":true},"cloudProviderUrl":{"type":"string","description":"A Grafana Cloud Provider backend address. May alternatively be set via the `GRAFANA_CLOUD_PROVIDER_URL` environment variable."},"connectionsApiAccessToken":{"type":"string","description":"A Grafana Connections API access token. May alternatively be set via the `GRAFANA_CONNECTIONS_API_ACCESS_TOKEN` environment variable.","secret":true},"connectionsApiUrl":{"type":"string","description":"A Grafana Connections API address. May alternatively be set via the `GRAFANA_CONNECTIONS_API_URL` environment variable."},"fleetManagementAuth":{"type":"string","description":"A Grafana Fleet Management basic auth in the `username:password` format. May alternatively be set via the `GRAFANA_FLEET_MANAGEMENT_AUTH` environment variable.","secret":true},"fleetManagementUrl":{"type":"string","description":"A Grafana Fleet Management API address. May alternatively be set via the `GRAFANA_FLEET_MANAGEMENT_URL` environment variable."},"frontendO11yApiAccessToken":{"type":"string","description":"A Grafana Frontend Observability API access token. May alternatively be set via the `GRAFANA_FRONTEND_O11Y_API_ACCESS_TOKEN` environment variable.","secret":true},"frontendO11yApiUrl":{"type":"string","description":"The Grafana Frontend Observability API URL. This is optional, and should only be set to override the default API. May alternatively be set via the `GRAFANA_FRONTEND_O11Y_API_URL` environment variable."},"httpHeaders":{"type":"object","additionalProperties":{"type":"string"},"description":"Optional. HTTP headers mapping keys to values used for accessing the Grafana and Grafana Cloud APIs. May alternatively be set via the `GRAFANA_HTTP_HEADERS` environment variable in JSON format.","secret":true},"insecureSkipVerify":{"type":"boolean","description":"Skip TLS certificate verification. May alternatively be set via the `GRAFANA_INSECURE_SKIP_VERIFY` environment variable."},"k6AccessToken":{"type":"string","description":"The k6 Cloud API token. May alternatively be set via the `GRAFANA_K6_ACCESS_TOKEN` environment variable.","secret":true},"k6Url":{"type":"string","description":"The k6 Cloud API url. May alternatively be set via the `GRAFANA_K6_URL` environment variable."},"oncallAccessToken":{"type":"string","description":"A Grafana OnCall access token. May alternatively be set via the `GRAFANA_ONCALL_ACCESS_TOKEN` environment variable.","secret":true},"oncallUrl":{"type":"string","description":"An Grafana OnCall backend address. May alternatively be set via the `GRAFANA_ONCALL_URL` environment variable."},"orgId":{"type":"integer","description":"The Grafana org ID, if you are using a self-hosted OSS or enterprise Grafana instance. May alternatively be set via the `GRAFANA_ORG_ID` environment variable."},"retries":{"type":"integer","description":"The amount of retries to use for Grafana API and Grafana Cloud API calls. May alternatively be set via the `GRAFANA_RETRIES` environment variable."},"retryStatusCodes":{"type":"array","items":{"type":"string"},"description":"The status codes to retry on for Grafana API and Grafana Cloud API calls. Use \u003cspan pulumi-lang-nodejs=\"`x`\" pulumi-lang-dotnet=\"`X`\" pulumi-lang-go=\"`x`\" pulumi-lang-python=\"`x`\" pulumi-lang-yaml=\"`x`\" pulumi-lang-java=\"`x`\"\u003e`x`\u003c/span\u003e as a digit wildcard. Defaults to 429 and 5xx. May alternatively be set via the `GRAFANA_RETRY_STATUS_CODES` environment variable."},"retryWait":{"type":"integer","description":"The amount of time in seconds to wait between retries for Grafana API and Grafana Cloud API calls. May alternatively be set via the `GRAFANA_RETRY_WAIT` environment variable."},"smAccessToken":{"type":"string","description":"A Synthetic Monitoring access token. May alternatively be set via the `GRAFANA_SM_ACCESS_TOKEN` environment variable.","secret":true},"smUrl":{"type":"string"},"stackId":{"type":"integer","description":"The Grafana stack ID, if you are using a Grafana Cloud stack. May alternatively be set via the `GRAFANA_STACK_ID` environment variable."},"storeDashboardSha256":{"type":"boolean","description":"Set to true if you want to save only the sha256sum instead of complete dashboard model JSON in the tfstate."},"tlsCert":{"type":"string","description":"Client TLS certificate (file path or literal value) to use to authenticate to the Grafana server. May alternatively be set via the `GRAFANA_TLS_CERT` environment variable."},"tlsKey":{"type":"string","description":"Client TLS key (file path or literal value) to use to authenticate to the Grafana server. May alternatively be set via the `GRAFANA_TLS_KEY` environment variable.","secret":true},"url":{"type":"string","description":"The root URL of a Grafana server. May alternatively be set via the `GRAFANA_URL` environment variable."}},"inputProperties":{"auth":{"type":"string","description":"API token, basic auth in the `username:password` format or \u003cspan pulumi-lang-nodejs=\"`anonymous`\" pulumi-lang-dotnet=\"`Anonymous`\" pulumi-lang-go=\"`anonymous`\" pulumi-lang-python=\"`anonymous`\" pulumi-lang-yaml=\"`anonymous`\" pulumi-lang-java=\"`anonymous`\"\u003e`anonymous`\u003c/span\u003e (string literal). May alternatively be set via the `GRAFANA_AUTH` environment variable.","defaultInfo":{"environment":["GRAFANA_AUTH"]},"secret":true},"caCert":{"type":"string","description":"Certificate CA bundle (file path or literal value) to use to verify the Grafana server's certificate. May alternatively be set via the `GRAFANA_CA_CERT` environment variable.","defaultInfo":{"environment":["GRAFANA_CA_CERT"]}},"cloudAccessPolicyToken":{"type":"string","description":"Access Policy Token for Grafana Cloud. May alternatively be set via the `GRAFANA_CLOUD_ACCESS_POLICY_TOKEN` environment variable.","defaultInfo":{"environment":["GRAFANA_CLOUD_ACCESS_POLICY_TOKEN"]},"secret":true},"cloudApiUrl":{"type":"string","description":"Grafana Cloud's API URL. May alternatively be set via the `GRAFANA_CLOUD_API_URL` environment variable.","defaultInfo":{"environment":["GRAFANA_CLOUD_API_URL"]}},"cloudProviderAccessToken":{"type":"string","description":"A Grafana Cloud Provider access token. May alternatively be set via the `GRAFANA_CLOUD_PROVIDER_ACCESS_TOKEN` environment variable.","secret":true},"cloudProviderUrl":{"type":"string","description":"A Grafana Cloud Provider backend address. May alternatively be set via the `GRAFANA_CLOUD_PROVIDER_URL` environment variable."},"connectionsApiAccessToken":{"type":"string","description":"A Grafana Connections API access token. May alternatively be set via the `GRAFANA_CONNECTIONS_API_ACCESS_TOKEN` environment variable.","secret":true},"connectionsApiUrl":{"type":"string","description":"A Grafana Connections API address. May alternatively be set via the `GRAFANA_CONNECTIONS_API_URL` environment variable."},"fleetManagementAuth":{"type":"string","description":"A Grafana Fleet Management basic auth in the `username:password` format. May alternatively be set via the `GRAFANA_FLEET_MANAGEMENT_AUTH` environment variable.","secret":true},"fleetManagementUrl":{"type":"string","description":"A Grafana Fleet Management API address. May alternatively be set via the `GRAFANA_FLEET_MANAGEMENT_URL` environment variable."},"frontendO11yApiAccessToken":{"type":"string","description":"A Grafana Frontend Observability API access token. May alternatively be set via the `GRAFANA_FRONTEND_O11Y_API_ACCESS_TOKEN` environment variable.","secret":true},"frontendO11yApiUrl":{"type":"string","description":"The Grafana Frontend Observability API URL. This is optional, and should only be set to override the default API. May alternatively be set via the `GRAFANA_FRONTEND_O11Y_API_URL` environment variable."},"httpHeaders":{"type":"object","additionalProperties":{"type":"string"},"description":"Optional. HTTP headers mapping keys to values used for accessing the Grafana and Grafana Cloud APIs. May alternatively be set via the `GRAFANA_HTTP_HEADERS` environment variable in JSON format.","secret":true},"insecureSkipVerify":{"type":"boolean","description":"Skip TLS certificate verification. May alternatively be set via the `GRAFANA_INSECURE_SKIP_VERIFY` environment variable.","defaultInfo":{"environment":["GRAFANA_INSECURE_SKIP_VERIFY"]}},"k6AccessToken":{"type":"string","description":"The k6 Cloud API token. May alternatively be set via the `GRAFANA_K6_ACCESS_TOKEN` environment variable.","secret":true},"k6Url":{"type":"string","description":"The k6 Cloud API url. May alternatively be set via the `GRAFANA_K6_URL` environment variable."},"oncallAccessToken":{"type":"string","description":"A Grafana OnCall access token. May alternatively be set via the `GRAFANA_ONCALL_ACCESS_TOKEN` environment variable.","defaultInfo":{"environment":["GRAFANA_ONCALL_ACCESS_TOKEN"]},"secret":true},"oncallUrl":{"type":"string","description":"An Grafana OnCall backend address. May alternatively be set via the `GRAFANA_ONCALL_URL` environment variable.","defaultInfo":{"environment":["GRAFANA_ONCALL_URL"]}},"orgId":{"type":"integer","description":"The Grafana org ID, if you are using a self-hosted OSS or enterprise Grafana instance. May alternatively be set via the `GRAFANA_ORG_ID` environment variable."},"retries":{"type":"integer","description":"The amount of retries to use for Grafana API and Grafana Cloud API calls. May alternatively be set via the `GRAFANA_RETRIES` environment variable.","defaultInfo":{"environment":["GRAFANA_RETRIES"]}},"retryStatusCodes":{"type":"array","items":{"type":"string"},"description":"The status codes to retry on for Grafana API and Grafana Cloud API calls. Use \u003cspan pulumi-lang-nodejs=\"`x`\" pulumi-lang-dotnet=\"`X`\" pulumi-lang-go=\"`x`\" pulumi-lang-python=\"`x`\" pulumi-lang-yaml=\"`x`\" pulumi-lang-java=\"`x`\"\u003e`x`\u003c/span\u003e as a digit wildcard. Defaults to 429 and 5xx. May alternatively be set via the `GRAFANA_RETRY_STATUS_CODES` environment variable."},"retryWait":{"type":"integer","description":"The amount of time in seconds to wait between retries for Grafana API and Grafana Cloud API calls. May alternatively be set via the `GRAFANA_RETRY_WAIT` environment variable.","defaultInfo":{"environment":["GRAFANA_RETRY_WAIT"]}},"smAccessToken":{"type":"string","description":"A Synthetic Monitoring access token. May alternatively be set via the `GRAFANA_SM_ACCESS_TOKEN` environment variable.","defaultInfo":{"environment":["GRAFANA_SM_ACCESS_TOKEN"]},"secret":true},"smUrl":{"type":"string","defaultInfo":{"environment":["GRAFANA_SM_URL"]}},"stackId":{"type":"integer","description":"The Grafana stack ID, if you are using a Grafana Cloud stack. May alternatively be set via the `GRAFANA_STACK_ID` environment variable."},"storeDashboardSha256":{"type":"boolean","description":"Set to true if you want to save only the sha256sum instead of complete dashboard model JSON in the tfstate.","defaultInfo":{"environment":["GRAFANA_STORE_DASHBOARD_SHA256"]}},"tlsCert":{"type":"string","description":"Client TLS certificate (file path or literal value) to use to authenticate to the Grafana server. May alternatively be set via the `GRAFANA_TLS_CERT` environment variable.","defaultInfo":{"environment":["GRAFANA_TLS_CERT"]}},"tlsKey":{"type":"string","description":"Client TLS key (file path or literal value) to use to authenticate to the Grafana server. May alternatively be set via the `GRAFANA_TLS_KEY` environment variable.","defaultInfo":{"environment":["GRAFANA_TLS_KEY"]},"secret":true},"url":{"type":"string","description":"The root URL of a Grafana server. May alternatively be set via the `GRAFANA_URL` environment variable.","defaultInfo":{"environment":["GRAFANA_URL"]}}},"methods":{"terraformConfig":"pulumi:providers:grafana/terraformConfig"}},"resources":{"grafana:alerting/alertEnrichment:AlertEnrichment":{"description":"Manages [Grafana Cloud Alert Enrichment](https://grafana.com/docs/grafana-cloud/alerting-and-irm/alerting/configure-notifications/alert-enrichment/).\n\nAlert enrichment is currently in private preview. Grafana Labs offers support on a best-effort basis, and breaking changes might occur prior to the feature being made generally available\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst enrichment = new grafana.alerting.AlertEnrichment(\"enrichment\", {\n    metadata: {\n        uid: \"test_enrichment\",\n    },\n    spec: {\n        title: \"Comprehensive alert enrichment\",\n        description: \"Demonstrates many enrichment steps and configurations\",\n        alertRuleUids: [\n            \"alert-rule-1\",\n            \"alert-rule-2\",\n        ],\n        receivers: [\n            \"webhook\",\n            \"slack-critical\",\n        ],\n        labelMatchers: [\n            {\n                type: \"=\",\n                name: \"severity\",\n                value: \"critical\",\n            },\n            {\n                type: \"=~\",\n                name: \"team\",\n                value: \"alerting|alerting-team\",\n            },\n        ],\n        annotationMatchers: [{\n            type: \"!=\",\n            name: \"runbook_url\",\n            value: \"\",\n        }],\n        steps: [\n            {\n                assign: {\n                    timeout: \"30s\",\n                    annotations: {\n                        priority: \"high\",\n                        runbook_url: \"https://runbooks.grafana.com/alert-handling\",\n                    },\n                },\n            },\n            {\n                external: {\n                    url: \"https://some-api.grafana.com/alert-enrichment\",\n                },\n            },\n            {\n                dataSource: {\n                    timeout: \"30s\",\n                    logsQuery: {\n                        dataSourceType: \"loki\",\n                        dataSourceUid: \"loki-uid-123\",\n                        expr: \"{job=\\\"my-app\\\"} |= \\\"error\\\"\",\n                        maxLines: 5,\n                    },\n                },\n            },\n            {\n                dataSource: {\n                    timeout: \"30s\",\n                    rawQuery: {\n                        refId: \"A\",\n                        request: JSON.stringify({\n                            datasource: {\n                                type: \"prometheus\",\n                                uid: \"prometheus-uid-456\",\n                            },\n                            expr: \"rate(http_requests_total[5m])\",\n                            refId: \"A\",\n                            intervalMs: 1000,\n                            maxDataPoints: 43200,\n                        }),\n                    },\n                },\n            },\n            {\n                sift: {},\n            },\n            {\n                explain: {\n                    annotation: \"ai_explanation\",\n                },\n            },\n            {\n                assistantInvestigations: {},\n            },\n            {\n                conditional: {\n                    \"if\": {\n                        labelMatchers: [{\n                            type: \"=\",\n                            name: \"severity\",\n                            value: \"critical\",\n                        }],\n                    },\n                    then: {\n                        steps: [\n                            {\n                                assign: {\n                                    annotations: {\n                                        escalation_level: \"immediate\",\n                                    },\n                                },\n                            },\n                            {\n                                external: {\n                                    url: \"https://irm.grafana.com/create-incident\",\n                                },\n                            },\n                        ],\n                    },\n                    \"else\": {\n                        steps: [{\n                            assign: {\n                                annotations: {\n                                    escalation_level: \"standard\",\n                                },\n                            },\n                        }],\n                    },\n                },\n            },\n        ],\n    },\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumiverse_grafana as grafana\n\nenrichment = grafana.alerting.AlertEnrichment(\"enrichment\",\n    metadata={\n        \"uid\": \"test_enrichment\",\n    },\n    spec={\n        \"title\": \"Comprehensive alert enrichment\",\n        \"description\": \"Demonstrates many enrichment steps and configurations\",\n        \"alert_rule_uids\": [\n            \"alert-rule-1\",\n            \"alert-rule-2\",\n        ],\n        \"receivers\": [\n            \"webhook\",\n            \"slack-critical\",\n        ],\n        \"label_matchers\": [\n            {\n                \"type\": \"=\",\n                \"name\": \"severity\",\n                \"value\": \"critical\",\n            },\n            {\n                \"type\": \"=~\",\n                \"name\": \"team\",\n                \"value\": \"alerting|alerting-team\",\n            },\n        ],\n        \"annotation_matchers\": [{\n            \"type\": \"!=\",\n            \"name\": \"runbook_url\",\n            \"value\": \"\",\n        }],\n        \"steps\": [\n            {\n                \"assign\": {\n                    \"timeout\": \"30s\",\n                    \"annotations\": {\n                        \"priority\": \"high\",\n                        \"runbook_url\": \"https://runbooks.grafana.com/alert-handling\",\n                    },\n                },\n            },\n            {\n                \"external\": {\n                    \"url\": \"https://some-api.grafana.com/alert-enrichment\",\n                },\n            },\n            {\n                \"data_source\": {\n                    \"timeout\": \"30s\",\n                    \"logs_query\": {\n                        \"data_source_type\": \"loki\",\n                        \"data_source_uid\": \"loki-uid-123\",\n                        \"expr\": \"{job=\\\"my-app\\\"} |= \\\"error\\\"\",\n                        \"max_lines\": 5,\n                    },\n                },\n            },\n            {\n                \"data_source\": {\n                    \"timeout\": \"30s\",\n                    \"raw_query\": {\n                        \"ref_id\": \"A\",\n                        \"request\": json.dumps({\n                            \"datasource\": {\n                                \"type\": \"prometheus\",\n                                \"uid\": \"prometheus-uid-456\",\n                            },\n                            \"expr\": \"rate(http_requests_total[5m])\",\n                            \"refId\": \"A\",\n                            \"intervalMs\": 1000,\n                            \"maxDataPoints\": 43200,\n                        }),\n                    },\n                },\n            },\n            {\n                \"sift\": {},\n            },\n            {\n                \"explain\": {\n                    \"annotation\": \"ai_explanation\",\n                },\n            },\n            {\n                \"assistant_investigations\": {},\n            },\n            {\n                \"conditional\": {\n                    \"if_\": {\n                        \"label_matchers\": [{\n                            \"type\": \"=\",\n                            \"name\": \"severity\",\n                            \"value\": \"critical\",\n                        }],\n                    },\n                    \"then\": {\n                        \"steps\": [\n                            {\n                                \"assign\": {\n                                    \"annotations\": {\n                                        \"escalation_level\": \"immediate\",\n                                    },\n                                },\n                            },\n                            {\n                                \"external\": {\n                                    \"url\": \"https://irm.grafana.com/create-incident\",\n                                },\n                            },\n                        ],\n                    },\n                    \"else_\": {\n                        \"steps\": [{\n                            \"assign\": {\n                                \"annotations\": {\n                                    \"escalation_level\": \"standard\",\n                                },\n                            },\n                        }],\n                    },\n                },\n            },\n        ],\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var enrichment = new Grafana.Alerting.AlertEnrichment(\"enrichment\", new()\n    {\n        Metadata = new Grafana.Alerting.Inputs.AlertEnrichmentMetadataArgs\n        {\n            Uid = \"test_enrichment\",\n        },\n        Spec = new Grafana.Alerting.Inputs.AlertEnrichmentSpecArgs\n        {\n            Title = \"Comprehensive alert enrichment\",\n            Description = \"Demonstrates many enrichment steps and configurations\",\n            AlertRuleUids = new[]\n            {\n                \"alert-rule-1\",\n                \"alert-rule-2\",\n            },\n            Receivers = new[]\n            {\n                \"webhook\",\n                \"slack-critical\",\n            },\n            LabelMatchers = new[]\n            {\n                new Grafana.Alerting.Inputs.AlertEnrichmentSpecLabelMatcherArgs\n                {\n                    Type = \"=\",\n                    Name = \"severity\",\n                    Value = \"critical\",\n                },\n                new Grafana.Alerting.Inputs.AlertEnrichmentSpecLabelMatcherArgs\n                {\n                    Type = \"=~\",\n                    Name = \"team\",\n                    Value = \"alerting|alerting-team\",\n                },\n            },\n            AnnotationMatchers = new[]\n            {\n                new Grafana.Alerting.Inputs.AlertEnrichmentSpecAnnotationMatcherArgs\n                {\n                    Type = \"!=\",\n                    Name = \"runbook_url\",\n                    Value = \"\",\n                },\n            },\n            Steps = new[]\n            {\n                new Grafana.Alerting.Inputs.AlertEnrichmentSpecStepArgs\n                {\n                    Assign = new Grafana.Alerting.Inputs.AlertEnrichmentSpecStepAssignArgs\n                    {\n                        Timeout = \"30s\",\n                        Annotations = \n                        {\n                            { \"priority\", \"high\" },\n                            { \"runbook_url\", \"https://runbooks.grafana.com/alert-handling\" },\n                        },\n                    },\n                },\n                new Grafana.Alerting.Inputs.AlertEnrichmentSpecStepArgs\n                {\n                    External = new Grafana.Alerting.Inputs.AlertEnrichmentSpecStepExternalArgs\n                    {\n                        Url = \"https://some-api.grafana.com/alert-enrichment\",\n                    },\n                },\n                new Grafana.Alerting.Inputs.AlertEnrichmentSpecStepArgs\n                {\n                    DataSource = new Grafana.Alerting.Inputs.AlertEnrichmentSpecStepDataSourceArgs\n                    {\n                        Timeout = \"30s\",\n                        LogsQuery = new Grafana.Alerting.Inputs.AlertEnrichmentSpecStepDataSourceLogsQueryArgs\n                        {\n                            DataSourceType = \"loki\",\n                            DataSourceUid = \"loki-uid-123\",\n                            Expr = \"{job=\\\"my-app\\\"} |= \\\"error\\\"\",\n                            MaxLines = 5,\n                        },\n                    },\n                },\n                new Grafana.Alerting.Inputs.AlertEnrichmentSpecStepArgs\n                {\n                    DataSource = new Grafana.Alerting.Inputs.AlertEnrichmentSpecStepDataSourceArgs\n                    {\n                        Timeout = \"30s\",\n                        RawQuery = new Grafana.Alerting.Inputs.AlertEnrichmentSpecStepDataSourceRawQueryArgs\n                        {\n                            RefId = \"A\",\n                            Request = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n                            {\n                                [\"datasource\"] = new Dictionary\u003cstring, object?\u003e\n                                {\n                                    [\"type\"] = \"prometheus\",\n                                    [\"uid\"] = \"prometheus-uid-456\",\n                                },\n                                [\"expr\"] = \"rate(http_requests_total[5m])\",\n                                [\"refId\"] = \"A\",\n                                [\"intervalMs\"] = 1000,\n                                [\"maxDataPoints\"] = 43200,\n                            }),\n                        },\n                    },\n                },\n                new Grafana.Alerting.Inputs.AlertEnrichmentSpecStepArgs\n                {\n                    Sift = null,\n                },\n                new Grafana.Alerting.Inputs.AlertEnrichmentSpecStepArgs\n                {\n                    Explain = new Grafana.Alerting.Inputs.AlertEnrichmentSpecStepExplainArgs\n                    {\n                        Annotation = \"ai_explanation\",\n                    },\n                },\n                new Grafana.Alerting.Inputs.AlertEnrichmentSpecStepArgs\n                {\n                    AssistantInvestigations = null,\n                },\n                new Grafana.Alerting.Inputs.AlertEnrichmentSpecStepArgs\n                {\n                    Conditional = new Grafana.Alerting.Inputs.AlertEnrichmentSpecStepConditionalArgs\n                    {\n                        If = new Grafana.Alerting.Inputs.AlertEnrichmentSpecStepConditionalIfArgs\n                        {\n                            LabelMatchers = new[]\n                            {\n                                new Grafana.Alerting.Inputs.AlertEnrichmentSpecStepConditionalIfLabelMatcherArgs\n                                {\n                                    Type = \"=\",\n                                    Name = \"severity\",\n                                    Value = \"critical\",\n                                },\n                            },\n                        },\n                        Then = new Grafana.Alerting.Inputs.AlertEnrichmentSpecStepConditionalThenArgs\n                        {\n                            Steps = new[]\n                            {\n                                new Grafana.Alerting.Inputs.AlertEnrichmentSpecStepConditionalThenStepArgs\n                                {\n                                    Assign = new Grafana.Alerting.Inputs.AlertEnrichmentSpecStepConditionalThenStepAssignArgs\n                                    {\n                                        Annotations = \n                                        {\n                                            { \"escalation_level\", \"immediate\" },\n                                        },\n                                    },\n                                },\n                                new Grafana.Alerting.Inputs.AlertEnrichmentSpecStepConditionalThenStepArgs\n                                {\n                                    External = new Grafana.Alerting.Inputs.AlertEnrichmentSpecStepConditionalThenStepExternalArgs\n                                    {\n                                        Url = \"https://irm.grafana.com/create-incident\",\n                                    },\n                                },\n                            },\n                        },\n                        Else = new Grafana.Alerting.Inputs.AlertEnrichmentSpecStepConditionalElseArgs\n                        {\n                            Steps = new[]\n                            {\n                                new Grafana.Alerting.Inputs.AlertEnrichmentSpecStepConditionalElseStepArgs\n                                {\n                                    Assign = new Grafana.Alerting.Inputs.AlertEnrichmentSpecStepConditionalElseStepAssignArgs\n                                    {\n                                        Annotations = \n                                        {\n                                            { \"escalation_level\", \"standard\" },\n                                        },\n                                    },\n                                },\n                            },\n                        },\n                    },\n                },\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/alerting\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"datasource\": map[string]interface{}{\n\t\t\t\t\"type\": \"prometheus\",\n\t\t\t\t\"uid\":  \"prometheus-uid-456\",\n\t\t\t},\n\t\t\t\"expr\":          \"rate(http_requests_total[5m])\",\n\t\t\t\"refId\":         \"A\",\n\t\t\t\"intervalMs\":    1000,\n\t\t\t\"maxDataPoints\": 43200,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\t_, err = alerting.NewAlertEnrichment(ctx, \"enrichment\", \u0026alerting.AlertEnrichmentArgs{\n\t\t\tMetadata: \u0026alerting.AlertEnrichmentMetadataArgs{\n\t\t\t\tUid: pulumi.String(\"test_enrichment\"),\n\t\t\t},\n\t\t\tSpec: \u0026alerting.AlertEnrichmentSpecArgs{\n\t\t\t\tTitle:       pulumi.String(\"Comprehensive alert enrichment\"),\n\t\t\t\tDescription: pulumi.String(\"Demonstrates many enrichment steps and configurations\"),\n\t\t\t\tAlertRuleUids: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"alert-rule-1\"),\n\t\t\t\t\tpulumi.String(\"alert-rule-2\"),\n\t\t\t\t},\n\t\t\t\tReceivers: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"webhook\"),\n\t\t\t\t\tpulumi.String(\"slack-critical\"),\n\t\t\t\t},\n\t\t\t\tLabelMatchers: alerting.AlertEnrichmentSpecLabelMatcherArray{\n\t\t\t\t\t\u0026alerting.AlertEnrichmentSpecLabelMatcherArgs{\n\t\t\t\t\t\tType:  pulumi.String(\"=\"),\n\t\t\t\t\t\tName:  pulumi.String(\"severity\"),\n\t\t\t\t\t\tValue: pulumi.String(\"critical\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026alerting.AlertEnrichmentSpecLabelMatcherArgs{\n\t\t\t\t\t\tType:  pulumi.String(\"=~\"),\n\t\t\t\t\t\tName:  pulumi.String(\"team\"),\n\t\t\t\t\t\tValue: pulumi.String(\"alerting|alerting-team\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tAnnotationMatchers: alerting.AlertEnrichmentSpecAnnotationMatcherArray{\n\t\t\t\t\t\u0026alerting.AlertEnrichmentSpecAnnotationMatcherArgs{\n\t\t\t\t\t\tType:  pulumi.String(\"!=\"),\n\t\t\t\t\t\tName:  pulumi.String(\"runbook_url\"),\n\t\t\t\t\t\tValue: pulumi.String(\"\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tSteps: alerting.AlertEnrichmentSpecStepArray{\n\t\t\t\t\t\u0026alerting.AlertEnrichmentSpecStepArgs{\n\t\t\t\t\t\tAssign: \u0026alerting.AlertEnrichmentSpecStepAssignArgs{\n\t\t\t\t\t\t\tTimeout: pulumi.String(\"30s\"),\n\t\t\t\t\t\t\tAnnotations: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\"priority\":    pulumi.String(\"high\"),\n\t\t\t\t\t\t\t\t\"runbook_url\": pulumi.String(\"https://runbooks.grafana.com/alert-handling\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026alerting.AlertEnrichmentSpecStepArgs{\n\t\t\t\t\t\tExternal: \u0026alerting.AlertEnrichmentSpecStepExternalArgs{\n\t\t\t\t\t\t\tUrl: pulumi.String(\"https://some-api.grafana.com/alert-enrichment\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026alerting.AlertEnrichmentSpecStepArgs{\n\t\t\t\t\t\tDataSource: \u0026alerting.AlertEnrichmentSpecStepDataSourceArgs{\n\t\t\t\t\t\t\tTimeout: pulumi.String(\"30s\"),\n\t\t\t\t\t\t\tLogsQuery: \u0026alerting.AlertEnrichmentSpecStepDataSourceLogsQueryArgs{\n\t\t\t\t\t\t\t\tDataSourceType: pulumi.String(\"loki\"),\n\t\t\t\t\t\t\t\tDataSourceUid:  pulumi.String(\"loki-uid-123\"),\n\t\t\t\t\t\t\t\tExpr:           pulumi.String(\"{job=\\\"my-app\\\"} |= \\\"error\\\"\"),\n\t\t\t\t\t\t\t\tMaxLines:       pulumi.Int(5),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026alerting.AlertEnrichmentSpecStepArgs{\n\t\t\t\t\t\tDataSource: \u0026alerting.AlertEnrichmentSpecStepDataSourceArgs{\n\t\t\t\t\t\t\tTimeout: pulumi.String(\"30s\"),\n\t\t\t\t\t\t\tRawQuery: \u0026alerting.AlertEnrichmentSpecStepDataSourceRawQueryArgs{\n\t\t\t\t\t\t\t\tRefId:   pulumi.String(\"A\"),\n\t\t\t\t\t\t\t\tRequest: pulumi.String(json0),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026alerting.AlertEnrichmentSpecStepArgs{\n\t\t\t\t\t\tSift: \u0026alerting.AlertEnrichmentSpecStepSiftArgs{},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026alerting.AlertEnrichmentSpecStepArgs{\n\t\t\t\t\t\tExplain: \u0026alerting.AlertEnrichmentSpecStepExplainArgs{\n\t\t\t\t\t\t\tAnnotation: pulumi.String(\"ai_explanation\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026alerting.AlertEnrichmentSpecStepArgs{\n\t\t\t\t\t\tAssistantInvestigations: \u0026alerting.AlertEnrichmentSpecStepAssistantInvestigationsArgs{},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026alerting.AlertEnrichmentSpecStepArgs{\n\t\t\t\t\t\tConditional: \u0026alerting.AlertEnrichmentSpecStepConditionalArgs{\n\t\t\t\t\t\t\tIf: \u0026alerting.AlertEnrichmentSpecStepConditionalIfArgs{\n\t\t\t\t\t\t\t\tLabelMatchers: alerting.AlertEnrichmentSpecStepConditionalIfLabelMatcherArray{\n\t\t\t\t\t\t\t\t\t\u0026alerting.AlertEnrichmentSpecStepConditionalIfLabelMatcherArgs{\n\t\t\t\t\t\t\t\t\t\tType:  pulumi.String(\"=\"),\n\t\t\t\t\t\t\t\t\t\tName:  pulumi.String(\"severity\"),\n\t\t\t\t\t\t\t\t\t\tValue: pulumi.String(\"critical\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tThen: \u0026alerting.AlertEnrichmentSpecStepConditionalThenArgs{\n\t\t\t\t\t\t\t\tSteps: alerting.AlertEnrichmentSpecStepConditionalThenStepArray{\n\t\t\t\t\t\t\t\t\t\u0026alerting.AlertEnrichmentSpecStepConditionalThenStepArgs{\n\t\t\t\t\t\t\t\t\t\tAssign: \u0026alerting.AlertEnrichmentSpecStepConditionalThenStepAssignArgs{\n\t\t\t\t\t\t\t\t\t\t\tAnnotations: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\t\t\t\t\"escalation_level\": pulumi.String(\"immediate\"),\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\u0026alerting.AlertEnrichmentSpecStepConditionalThenStepArgs{\n\t\t\t\t\t\t\t\t\t\tExternal: \u0026alerting.AlertEnrichmentSpecStepConditionalThenStepExternalArgs{\n\t\t\t\t\t\t\t\t\t\t\tUrl: pulumi.String(\"https://irm.grafana.com/create-incident\"),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tElse: \u0026alerting.AlertEnrichmentSpecStepConditionalElseArgs{\n\t\t\t\t\t\t\t\tSteps: alerting.AlertEnrichmentSpecStepConditionalElseStepArray{\n\t\t\t\t\t\t\t\t\t\u0026alerting.AlertEnrichmentSpecStepConditionalElseStepArgs{\n\t\t\t\t\t\t\t\t\t\tAssign: \u0026alerting.AlertEnrichmentSpecStepConditionalElseStepAssignArgs{\n\t\t\t\t\t\t\t\t\t\t\tAnnotations: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\t\t\t\t\"escalation_level\": pulumi.String(\"standard\"),\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.alerting.AlertEnrichment;\nimport com.pulumi.grafana.alerting.AlertEnrichmentArgs;\nimport com.pulumi.grafana.alerting.inputs.AlertEnrichmentMetadataArgs;\nimport com.pulumi.grafana.alerting.inputs.AlertEnrichmentSpecArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var enrichment = new AlertEnrichment(\"enrichment\", AlertEnrichmentArgs.builder()\n            .metadata(AlertEnrichmentMetadataArgs.builder()\n                .uid(\"test_enrichment\")\n                .build())\n            .spec(AlertEnrichmentSpecArgs.builder()\n                .title(\"Comprehensive alert enrichment\")\n                .description(\"Demonstrates many enrichment steps and configurations\")\n                .alertRuleUids(                \n                    \"alert-rule-1\",\n                    \"alert-rule-2\")\n                .receivers(                \n                    \"webhook\",\n                    \"slack-critical\")\n                .labelMatchers(                \n                    AlertEnrichmentSpecLabelMatcherArgs.builder()\n                        .type(\"=\")\n                        .name(\"severity\")\n                        .value(\"critical\")\n                        .build(),\n                    AlertEnrichmentSpecLabelMatcherArgs.builder()\n                        .type(\"=~\")\n                        .name(\"team\")\n                        .value(\"alerting|alerting-team\")\n                        .build())\n                .annotationMatchers(AlertEnrichmentSpecAnnotationMatcherArgs.builder()\n                    .type(\"!=\")\n                    .name(\"runbook_url\")\n                    .value(\"\")\n                    .build())\n                .steps(                \n                    AlertEnrichmentSpecStepArgs.builder()\n                        .assign(AlertEnrichmentSpecStepAssignArgs.builder()\n                            .timeout(\"30s\")\n                            .annotations(Map.ofEntries(\n                                Map.entry(\"priority\", \"high\"),\n                                Map.entry(\"runbook_url\", \"https://runbooks.grafana.com/alert-handling\")\n                            ))\n                            .build())\n                        .build(),\n                    AlertEnrichmentSpecStepArgs.builder()\n                        .external(AlertEnrichmentSpecStepExternalArgs.builder()\n                            .url(\"https://some-api.grafana.com/alert-enrichment\")\n                            .build())\n                        .build(),\n                    AlertEnrichmentSpecStepArgs.builder()\n                        .dataSource(AlertEnrichmentSpecStepDataSourceArgs.builder()\n                            .timeout(\"30s\")\n                            .logsQuery(AlertEnrichmentSpecStepDataSourceLogsQueryArgs.builder()\n                                .dataSourceType(\"loki\")\n                                .dataSourceUid(\"loki-uid-123\")\n                                .expr(\"{job=\\\"my-app\\\"} |= \\\"error\\\"\")\n                                .maxLines(5)\n                                .build())\n                            .build())\n                        .build(),\n                    AlertEnrichmentSpecStepArgs.builder()\n                        .dataSource(AlertEnrichmentSpecStepDataSourceArgs.builder()\n                            .timeout(\"30s\")\n                            .rawQuery(AlertEnrichmentSpecStepDataSourceRawQueryArgs.builder()\n                                .refId(\"A\")\n                                .request(serializeJson(\n                                    jsonObject(\n                                        jsonProperty(\"datasource\", jsonObject(\n                                            jsonProperty(\"type\", \"prometheus\"),\n                                            jsonProperty(\"uid\", \"prometheus-uid-456\")\n                                        )),\n                                        jsonProperty(\"expr\", \"rate(http_requests_total[5m])\"),\n                                        jsonProperty(\"refId\", \"A\"),\n                                        jsonProperty(\"intervalMs\", 1000),\n                                        jsonProperty(\"maxDataPoints\", 43200)\n                                    )))\n                                .build())\n                            .build())\n                        .build(),\n                    AlertEnrichmentSpecStepArgs.builder()\n                        .sift(AlertEnrichmentSpecStepSiftArgs.builder()\n                            .build())\n                        .build(),\n                    AlertEnrichmentSpecStepArgs.builder()\n                        .explain(AlertEnrichmentSpecStepExplainArgs.builder()\n                            .annotation(\"ai_explanation\")\n                            .build())\n                        .build(),\n                    AlertEnrichmentSpecStepArgs.builder()\n                        .assistantInvestigations(AlertEnrichmentSpecStepAssistantInvestigationsArgs.builder()\n                            .build())\n                        .build(),\n                    AlertEnrichmentSpecStepArgs.builder()\n                        .conditional(AlertEnrichmentSpecStepConditionalArgs.builder()\n                            .if_(AlertEnrichmentSpecStepConditionalIfArgs.builder()\n                                .labelMatchers(AlertEnrichmentSpecStepConditionalIfLabelMatcherArgs.builder()\n                                    .type(\"=\")\n                                    .name(\"severity\")\n                                    .value(\"critical\")\n                                    .build())\n                                .build())\n                            .then(AlertEnrichmentSpecStepConditionalThenArgs.builder()\n                                .steps(                                \n                                    AlertEnrichmentSpecStepConditionalThenStepArgs.builder()\n                                        .assign(AlertEnrichmentSpecStepConditionalThenStepAssignArgs.builder()\n                                            .annotations(Map.of(\"escalation_level\", \"immediate\"))\n                                            .build())\n                                        .build(),\n                                    AlertEnrichmentSpecStepConditionalThenStepArgs.builder()\n                                        .external(AlertEnrichmentSpecStepConditionalThenStepExternalArgs.builder()\n                                            .url(\"https://irm.grafana.com/create-incident\")\n                                            .build())\n                                        .build())\n                                .build())\n                            .else_(AlertEnrichmentSpecStepConditionalElseArgs.builder()\n                                .steps(AlertEnrichmentSpecStepConditionalElseStepArgs.builder()\n                                    .assign(AlertEnrichmentSpecStepConditionalElseStepAssignArgs.builder()\n                                        .annotations(Map.of(\"escalation_level\", \"standard\"))\n                                        .build())\n                                    .build())\n                                .build())\n                            .build())\n                        .build())\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  enrichment:\n    type: grafana:alerting:AlertEnrichment\n    properties:\n      metadata:\n        uid: test_enrichment\n      spec:\n        title: Comprehensive alert enrichment\n        description: Demonstrates many enrichment steps and configurations\n        alertRuleUids:\n          - alert-rule-1\n          - alert-rule-2\n        receivers:\n          - webhook\n          - slack-critical\n        labelMatchers:\n          - type: =\n            name: severity\n            value: critical\n          - type: =~\n            name: team\n            value: alerting|alerting-team\n        annotationMatchers:\n          - type: '!='\n            name: runbook_url\n            value: \"\"\n        steps:\n          - assign:\n              timeout: 30s\n              annotations:\n                priority: high\n                runbook_url: https://runbooks.grafana.com/alert-handling\n          - external:\n              url: https://some-api.grafana.com/alert-enrichment\n          - dataSource:\n              timeout: 30s\n              logsQuery:\n                dataSourceType: loki\n                dataSourceUid: loki-uid-123\n                expr: '{job=\"my-app\"} |= \"error\"'\n                maxLines: 5\n          - dataSource:\n              timeout: 30s\n              rawQuery:\n                refId: A\n                request:\n                  fn::toJSON:\n                    datasource:\n                      type: prometheus\n                      uid: prometheus-uid-456\n                    expr: rate(http_requests_total[5m])\n                    refId: A\n                    intervalMs: 1000\n                    maxDataPoints: 43200\n          - sift: {}\n          - explain:\n              annotation: ai_explanation\n          - assistantInvestigations: {}\n          - conditional:\n              if:\n                labelMatchers:\n                  - type: =\n                    name: severity\n                    value: critical\n              then:\n                steps:\n                  - assign:\n                      annotations:\n                        escalation_level: immediate\n                  - external:\n                      url: https://irm.grafana.com/create-incident\n              else:\n                steps:\n                  - assign:\n                      annotations:\n                        escalation_level: standard\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"metadata":{"$ref":"#/types/grafana:alerting/AlertEnrichmentMetadata:AlertEnrichmentMetadata","description":"The metadata of the resource.\n"},"options":{"$ref":"#/types/grafana:alerting/AlertEnrichmentOptions:AlertEnrichmentOptions","description":"Options for applying the resource.\n"},"spec":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpec:AlertEnrichmentSpec","description":"The spec of the resource.\n"}},"inputProperties":{"metadata":{"$ref":"#/types/grafana:alerting/AlertEnrichmentMetadata:AlertEnrichmentMetadata","description":"The metadata of the resource.\n"},"options":{"$ref":"#/types/grafana:alerting/AlertEnrichmentOptions:AlertEnrichmentOptions","description":"Options for applying the resource.\n"},"spec":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpec:AlertEnrichmentSpec","description":"The spec of the resource.\n"}},"stateInputs":{"description":"Input properties used for looking up and filtering AlertEnrichment resources.\n","properties":{"metadata":{"$ref":"#/types/grafana:alerting/AlertEnrichmentMetadata:AlertEnrichmentMetadata","description":"The metadata of the resource.\n"},"options":{"$ref":"#/types/grafana:alerting/AlertEnrichmentOptions:AlertEnrichmentOptions","description":"Options for applying the resource.\n"},"spec":{"$ref":"#/types/grafana:alerting/AlertEnrichmentSpec:AlertEnrichmentSpec","description":"The spec of the resource.\n"}},"type":"object"}},"grafana:alerting/alertRuleV0Alpha1:AlertRuleV0Alpha1":{"description":"This resource is currently under development. Documentation will be provided in a future release.\n","properties":{"metadata":{"$ref":"#/types/grafana:alerting/AlertRuleV0Alpha1Metadata:AlertRuleV0Alpha1Metadata","description":"The metadata of the resource."},"options":{"$ref":"#/types/grafana:alerting/AlertRuleV0Alpha1Options:AlertRuleV0Alpha1Options","description":"Options for applying the resource."},"spec":{"$ref":"#/types/grafana:alerting/AlertRuleV0Alpha1Spec:AlertRuleV0Alpha1Spec","description":"The spec of the resource."}},"inputProperties":{"metadata":{"$ref":"#/types/grafana:alerting/AlertRuleV0Alpha1Metadata:AlertRuleV0Alpha1Metadata","description":"The metadata of the resource."},"options":{"$ref":"#/types/grafana:alerting/AlertRuleV0Alpha1Options:AlertRuleV0Alpha1Options","description":"Options for applying the resource."},"spec":{"$ref":"#/types/grafana:alerting/AlertRuleV0Alpha1Spec:AlertRuleV0Alpha1Spec","description":"The spec of the resource."}},"stateInputs":{"description":"Input properties used for looking up and filtering AlertRuleV0Alpha1 resources.\n","properties":{"metadata":{"$ref":"#/types/grafana:alerting/AlertRuleV0Alpha1Metadata:AlertRuleV0Alpha1Metadata","description":"The metadata of the resource."},"options":{"$ref":"#/types/grafana:alerting/AlertRuleV0Alpha1Options:AlertRuleV0Alpha1Options","description":"Options for applying the resource."},"spec":{"$ref":"#/types/grafana:alerting/AlertRuleV0Alpha1Spec:AlertRuleV0Alpha1Spec","description":"The spec of the resource."}},"type":"object"}},"grafana:alerting/contactPoint:ContactPoint":{"description":"Manages Grafana Alerting contact points.\n\n* Official documentation\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/alerting_provisioning/#contact-points)\n\nThis resource requires Grafana 9.1.0 or later.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst myContactPoint = new grafana.alerting.ContactPoint(\"my_contact_point\", {\n    name: \"My Contact Point\",\n    emails: [{\n        addresses: [\n            \"one@company.org\",\n            \"two@company.org\",\n        ],\n        message: \"{{ len .Alerts.Firing }} firing.\",\n        subject: \"{{ template \\\"default.title\\\" .}}\",\n        singleEmail: true,\n        disableResolveMessage: false,\n    }],\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\nmy_contact_point = grafana.alerting.ContactPoint(\"my_contact_point\",\n    name=\"My Contact Point\",\n    emails=[{\n        \"addresses\": [\n            \"one@company.org\",\n            \"two@company.org\",\n        ],\n        \"message\": \"{{ len .Alerts.Firing }} firing.\",\n        \"subject\": \"{{ template \\\"default.title\\\" .}}\",\n        \"single_email\": True,\n        \"disable_resolve_message\": False,\n    }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var myContactPoint = new Grafana.Alerting.ContactPoint(\"my_contact_point\", new()\n    {\n        Name = \"My Contact Point\",\n        Emails = new[]\n        {\n            new Grafana.Alerting.Inputs.ContactPointEmailArgs\n            {\n                Addresses = new[]\n                {\n                    \"one@company.org\",\n                    \"two@company.org\",\n                },\n                Message = \"{{ len .Alerts.Firing }} firing.\",\n                Subject = \"{{ template \\\"default.title\\\" .}}\",\n                SingleEmail = true,\n                DisableResolveMessage = false,\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/alerting\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := alerting.NewContactPoint(ctx, \"my_contact_point\", \u0026alerting.ContactPointArgs{\n\t\t\tName: pulumi.String(\"My Contact Point\"),\n\t\t\tEmails: alerting.ContactPointEmailArray{\n\t\t\t\t\u0026alerting.ContactPointEmailArgs{\n\t\t\t\t\tAddresses: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"one@company.org\"),\n\t\t\t\t\t\tpulumi.String(\"two@company.org\"),\n\t\t\t\t\t},\n\t\t\t\t\tMessage:               pulumi.String(\"{{ len .Alerts.Firing }} firing.\"),\n\t\t\t\t\tSubject:               pulumi.String(\"{{ template \\\"default.title\\\" .}}\"),\n\t\t\t\t\tSingleEmail:           pulumi.Bool(true),\n\t\t\t\t\tDisableResolveMessage: pulumi.Bool(false),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.alerting.ContactPoint;\nimport com.pulumi.grafana.alerting.ContactPointArgs;\nimport com.pulumi.grafana.alerting.inputs.ContactPointEmailArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var myContactPoint = new ContactPoint(\"myContactPoint\", ContactPointArgs.builder()\n            .name(\"My Contact Point\")\n            .emails(ContactPointEmailArgs.builder()\n                .addresses(                \n                    \"one@company.org\",\n                    \"two@company.org\")\n                .message(\"{{ len .Alerts.Firing }} firing.\")\n                .subject(\"{{ template \\\"default.title\\\" .}}\")\n                .singleEmail(true)\n                .disableResolveMessage(false)\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  myContactPoint:\n    type: grafana:alerting:ContactPoint\n    name: my_contact_point\n    properties:\n      name: My Contact Point\n      emails:\n        - addresses:\n            - one@company.org\n            - two@company.org\n          message: '{{ len .Alerts.Firing }} firing.'\n          subject: '{{ template \"default.title\" .}}'\n          singleEmail: true\n          disableResolveMessage: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:alerting/contactPoint:ContactPoint name \"{{ name }}\"\n```\n\n```sh\n$ pulumi import grafana:alerting/contactPoint:ContactPoint name \"{{ orgID }}:{{ name }}\"\n```\n\n","properties":{"alertmanagers":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointAlertmanager:ContactPointAlertmanager"},"description":"A contact point that sends notifications to other Alertmanager instances.\n"},"dingdings":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointDingding:ContactPointDingding"},"description":"A contact point that sends notifications to DingDing.\n"},"disableProvenance":{"type":"boolean"},"discords":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointDiscord:ContactPointDiscord"},"description":"A contact point that sends notifications as Discord messages\n"},"emails":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointEmail:ContactPointEmail"},"description":"A contact point that sends notifications to an email address.\n"},"googlechats":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointGooglechat:ContactPointGooglechat"},"description":"A contact point that sends notifications to Google Chat.\n"},"jiras":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointJira:ContactPointJira"},"description":"A contact point that sends notifications to Jira.\n"},"kafkas":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointKafka:ContactPointKafka"},"description":"A contact point that publishes notifications to Apache Kafka topics.\n"},"lines":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointLine:ContactPointLine"},"description":"A contact point that sends notifications to LINE.me.\n"},"name":{"type":"string","description":"The name of the contact point.\n"},"oncalls":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointOncall:ContactPointOncall"},"description":"A contact point that sends notifications to Grafana On-Call.\n"},"opsgenies":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointOpsgeny:ContactPointOpsgeny"},"description":"A contact point that sends notifications to OpsGenie.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n"},"pagerduties":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointPagerduty:ContactPointPagerduty"},"description":"A contact point that sends notifications to PagerDuty.\n"},"pushovers":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointPushover:ContactPointPushover"},"description":"A contact point that sends notifications to Pushover.\n"},"sensugos":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointSensugo:ContactPointSensugo"},"description":"A contact point that sends notifications to SensuGo.\n"},"slacks":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointSlack:ContactPointSlack"},"description":"A contact point that sends notifications to Slack.\n"},"sns":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointSn:ContactPointSn"},"description":"A contact point that sends notifications to Amazon SNS. Requires Amazon Managed Grafana.\n"},"teams":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointTeam:ContactPointTeam"},"description":"A contact point that sends notifications to Microsoft Teams.\n"},"telegrams":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointTelegram:ContactPointTelegram"},"description":"A contact point that sends notifications to Telegram.\n"},"threemas":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointThreema:ContactPointThreema"},"description":"A contact point that sends notifications to Threema.\n"},"victorops":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointVictorop:ContactPointVictorop"},"description":"A contact point that sends notifications to VictorOps (now known as Splunk OnCall).\n"},"webexes":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointWebex:ContactPointWebex"},"description":"A contact point that sends notifications to Cisco Webex.\n"},"webhooks":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointWebhook:ContactPointWebhook"},"description":"A contact point that sends notifications to an arbitrary webhook, using the Prometheus webhook format defined here: https://prometheus.io/docs/alerting/latest/configuration/#webhook_config\n"},"wecoms":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointWecom:ContactPointWecom"},"description":"A contact point that sends notifications to WeCom.\n"}},"required":["name"],"inputProperties":{"alertmanagers":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointAlertmanager:ContactPointAlertmanager"},"description":"A contact point that sends notifications to other Alertmanager instances.\n"},"dingdings":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointDingding:ContactPointDingding"},"description":"A contact point that sends notifications to DingDing.\n"},"disableProvenance":{"type":"boolean","willReplaceOnChanges":true},"discords":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointDiscord:ContactPointDiscord"},"description":"A contact point that sends notifications as Discord messages\n"},"emails":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointEmail:ContactPointEmail"},"description":"A contact point that sends notifications to an email address.\n"},"googlechats":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointGooglechat:ContactPointGooglechat"},"description":"A contact point that sends notifications to Google Chat.\n"},"jiras":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointJira:ContactPointJira"},"description":"A contact point that sends notifications to Jira.\n"},"kafkas":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointKafka:ContactPointKafka"},"description":"A contact point that publishes notifications to Apache Kafka topics.\n"},"lines":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointLine:ContactPointLine"},"description":"A contact point that sends notifications to LINE.me.\n"},"name":{"type":"string","description":"The name of the contact point.\n","willReplaceOnChanges":true},"oncalls":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointOncall:ContactPointOncall"},"description":"A contact point that sends notifications to Grafana On-Call.\n"},"opsgenies":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointOpsgeny:ContactPointOpsgeny"},"description":"A contact point that sends notifications to OpsGenie.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"pagerduties":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointPagerduty:ContactPointPagerduty"},"description":"A contact point that sends notifications to PagerDuty.\n"},"pushovers":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointPushover:ContactPointPushover"},"description":"A contact point that sends notifications to Pushover.\n"},"sensugos":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointSensugo:ContactPointSensugo"},"description":"A contact point that sends notifications to SensuGo.\n"},"slacks":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointSlack:ContactPointSlack"},"description":"A contact point that sends notifications to Slack.\n"},"sns":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointSn:ContactPointSn"},"description":"A contact point that sends notifications to Amazon SNS. Requires Amazon Managed Grafana.\n"},"teams":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointTeam:ContactPointTeam"},"description":"A contact point that sends notifications to Microsoft Teams.\n"},"telegrams":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointTelegram:ContactPointTelegram"},"description":"A contact point that sends notifications to Telegram.\n"},"threemas":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointThreema:ContactPointThreema"},"description":"A contact point that sends notifications to Threema.\n"},"victorops":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointVictorop:ContactPointVictorop"},"description":"A contact point that sends notifications to VictorOps (now known as Splunk OnCall).\n"},"webexes":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointWebex:ContactPointWebex"},"description":"A contact point that sends notifications to Cisco Webex.\n"},"webhooks":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointWebhook:ContactPointWebhook"},"description":"A contact point that sends notifications to an arbitrary webhook, using the Prometheus webhook format defined here: https://prometheus.io/docs/alerting/latest/configuration/#webhook_config\n"},"wecoms":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointWecom:ContactPointWecom"},"description":"A contact point that sends notifications to WeCom.\n"}},"stateInputs":{"description":"Input properties used for looking up and filtering ContactPoint resources.\n","properties":{"alertmanagers":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointAlertmanager:ContactPointAlertmanager"},"description":"A contact point that sends notifications to other Alertmanager instances.\n"},"dingdings":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointDingding:ContactPointDingding"},"description":"A contact point that sends notifications to DingDing.\n"},"disableProvenance":{"type":"boolean","willReplaceOnChanges":true},"discords":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointDiscord:ContactPointDiscord"},"description":"A contact point that sends notifications as Discord messages\n"},"emails":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointEmail:ContactPointEmail"},"description":"A contact point that sends notifications to an email address.\n"},"googlechats":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointGooglechat:ContactPointGooglechat"},"description":"A contact point that sends notifications to Google Chat.\n"},"jiras":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointJira:ContactPointJira"},"description":"A contact point that sends notifications to Jira.\n"},"kafkas":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointKafka:ContactPointKafka"},"description":"A contact point that publishes notifications to Apache Kafka topics.\n"},"lines":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointLine:ContactPointLine"},"description":"A contact point that sends notifications to LINE.me.\n"},"name":{"type":"string","description":"The name of the contact point.\n","willReplaceOnChanges":true},"oncalls":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointOncall:ContactPointOncall"},"description":"A contact point that sends notifications to Grafana On-Call.\n"},"opsgenies":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointOpsgeny:ContactPointOpsgeny"},"description":"A contact point that sends notifications to OpsGenie.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"pagerduties":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointPagerduty:ContactPointPagerduty"},"description":"A contact point that sends notifications to PagerDuty.\n"},"pushovers":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointPushover:ContactPointPushover"},"description":"A contact point that sends notifications to Pushover.\n"},"sensugos":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointSensugo:ContactPointSensugo"},"description":"A contact point that sends notifications to SensuGo.\n"},"slacks":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointSlack:ContactPointSlack"},"description":"A contact point that sends notifications to Slack.\n"},"sns":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointSn:ContactPointSn"},"description":"A contact point that sends notifications to Amazon SNS. Requires Amazon Managed Grafana.\n"},"teams":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointTeam:ContactPointTeam"},"description":"A contact point that sends notifications to Microsoft Teams.\n"},"telegrams":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointTelegram:ContactPointTelegram"},"description":"A contact point that sends notifications to Telegram.\n"},"threemas":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointThreema:ContactPointThreema"},"description":"A contact point that sends notifications to Threema.\n"},"victorops":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointVictorop:ContactPointVictorop"},"description":"A contact point that sends notifications to VictorOps (now known as Splunk OnCall).\n"},"webexes":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointWebex:ContactPointWebex"},"description":"A contact point that sends notifications to Cisco Webex.\n"},"webhooks":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointWebhook:ContactPointWebhook"},"description":"A contact point that sends notifications to an arbitrary webhook, using the Prometheus webhook format defined here: https://prometheus.io/docs/alerting/latest/configuration/#webhook_config\n"},"wecoms":{"type":"array","items":{"$ref":"#/types/grafana:alerting/ContactPointWecom:ContactPointWecom"},"description":"A contact point that sends notifications to WeCom.\n"}},"type":"object"},"aliases":[{"type":"grafana:index/contactPoint:ContactPoint"}]},"grafana:alerting/messageTemplate:MessageTemplate":{"description":"Manages Grafana Alerting notification template groups, including notification templates.\n\n* Official documentation\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/alerting_provisioning/#notification-template-groups)\n\nThis resource requires Grafana 9.1.0 or later.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst myTemplate = new grafana.alerting.MessageTemplate(\"my_template\", {\n    name: \"My Notification Template Group\",\n    template: `{{define \"custom.message\" }}\n template content\n{{ end }}`,\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\nmy_template = grafana.alerting.MessageTemplate(\"my_template\",\n    name=\"My Notification Template Group\",\n    template=\"\"\"{{define \"custom.message\" }}\n template content\n{{ end }}\"\"\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var myTemplate = new Grafana.Alerting.MessageTemplate(\"my_template\", new()\n    {\n        Name = \"My Notification Template Group\",\n        Template = @\"{{define \"\"custom.message\"\" }}\n template content\n{{ end }}\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/alerting\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := alerting.NewMessageTemplate(ctx, \"my_template\", \u0026alerting.MessageTemplateArgs{\n\t\t\tName:     pulumi.String(\"My Notification Template Group\"),\n\t\t\tTemplate: pulumi.String(\"{{define \\\"custom.message\\\" }}\\n template content\\n{{ end }}\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.alerting.MessageTemplate;\nimport com.pulumi.grafana.alerting.MessageTemplateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var myTemplate = new MessageTemplate(\"myTemplate\", MessageTemplateArgs.builder()\n            .name(\"My Notification Template Group\")\n            .template(\"\"\"\n{{define \"custom.message\" }}\n template content\n{{ end }}            \"\"\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  myTemplate:\n    type: grafana:alerting:MessageTemplate\n    name: my_template\n    properties:\n      name: My Notification Template Group\n      template: |-\n        {{define \"custom.message\" }}\n         template content\n        {{ end }}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:alerting/messageTemplate:MessageTemplate name \"{{ name }}\"\n```\n\n```sh\n$ pulumi import grafana:alerting/messageTemplate:MessageTemplate name \"{{ orgID }}:{{ name }}\"\n```\n\n","properties":{"disableProvenance":{"type":"boolean"},"name":{"type":"string","description":"The name of the notification template group.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n"},"template":{"type":"string","description":"The content of the notification template group.\n"}},"required":["name","template"],"inputProperties":{"disableProvenance":{"type":"boolean","willReplaceOnChanges":true},"name":{"type":"string","description":"The name of the notification template group.\n","willReplaceOnChanges":true},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"template":{"type":"string","description":"The content of the notification template group.\n"}},"requiredInputs":["template"],"stateInputs":{"description":"Input properties used for looking up and filtering MessageTemplate resources.\n","properties":{"disableProvenance":{"type":"boolean","willReplaceOnChanges":true},"name":{"type":"string","description":"The name of the notification template group.\n","willReplaceOnChanges":true},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"template":{"type":"string","description":"The content of the notification template group.\n"}},"type":"object"},"aliases":[{"type":"grafana:index/messageTemplate:MessageTemplate"}]},"grafana:alerting/muteTiming:MuteTiming":{"description":"Manages Grafana Alerting mute timings.\n\n* Official documentation\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/alerting_provisioning/#mute-timings)\n\nThis resource requires Grafana 9.1.0 or later.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst myMuteTiming = new grafana.alerting.MuteTiming(\"my_mute_timing\", {\n    name: \"My Mute Timing\",\n    intervals: [{\n        times: [{\n            start: \"04:56\",\n            end: \"14:17\",\n        }],\n        weekdays: [\n            \"monday\",\n            \"tuesday:thursday\",\n        ],\n        daysOfMonths: [\n            \"1:7\",\n            \"-1\",\n        ],\n        months: [\n            \"1:3\",\n            \"december\",\n        ],\n        years: [\n            \"2030\",\n            \"2025:2026\",\n        ],\n        location: \"America/New_York\",\n    }],\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\nmy_mute_timing = grafana.alerting.MuteTiming(\"my_mute_timing\",\n    name=\"My Mute Timing\",\n    intervals=[{\n        \"times\": [{\n            \"start\": \"04:56\",\n            \"end\": \"14:17\",\n        }],\n        \"weekdays\": [\n            \"monday\",\n            \"tuesday:thursday\",\n        ],\n        \"days_of_months\": [\n            \"1:7\",\n            \"-1\",\n        ],\n        \"months\": [\n            \"1:3\",\n            \"december\",\n        ],\n        \"years\": [\n            \"2030\",\n            \"2025:2026\",\n        ],\n        \"location\": \"America/New_York\",\n    }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var myMuteTiming = new Grafana.Alerting.MuteTiming(\"my_mute_timing\", new()\n    {\n        Name = \"My Mute Timing\",\n        Intervals = new[]\n        {\n            new Grafana.Alerting.Inputs.MuteTimingIntervalArgs\n            {\n                Times = new[]\n                {\n                    new Grafana.Alerting.Inputs.MuteTimingIntervalTimeArgs\n                    {\n                        Start = \"04:56\",\n                        End = \"14:17\",\n                    },\n                },\n                Weekdays = new[]\n                {\n                    \"monday\",\n                    \"tuesday:thursday\",\n                },\n                DaysOfMonths = new[]\n                {\n                    \"1:7\",\n                    \"-1\",\n                },\n                Months = new[]\n                {\n                    \"1:3\",\n                    \"december\",\n                },\n                Years = new[]\n                {\n                    \"2030\",\n                    \"2025:2026\",\n                },\n                Location = \"America/New_York\",\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/alerting\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := alerting.NewMuteTiming(ctx, \"my_mute_timing\", \u0026alerting.MuteTimingArgs{\n\t\t\tName: pulumi.String(\"My Mute Timing\"),\n\t\t\tIntervals: alerting.MuteTimingIntervalArray{\n\t\t\t\t\u0026alerting.MuteTimingIntervalArgs{\n\t\t\t\t\tTimes: alerting.MuteTimingIntervalTimeArray{\n\t\t\t\t\t\t\u0026alerting.MuteTimingIntervalTimeArgs{\n\t\t\t\t\t\t\tStart: pulumi.String(\"04:56\"),\n\t\t\t\t\t\t\tEnd:   pulumi.String(\"14:17\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tWeekdays: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"monday\"),\n\t\t\t\t\t\tpulumi.String(\"tuesday:thursday\"),\n\t\t\t\t\t},\n\t\t\t\t\tDaysOfMonths: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"1:7\"),\n\t\t\t\t\t\tpulumi.String(\"-1\"),\n\t\t\t\t\t},\n\t\t\t\t\tMonths: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"1:3\"),\n\t\t\t\t\t\tpulumi.String(\"december\"),\n\t\t\t\t\t},\n\t\t\t\t\tYears: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"2030\"),\n\t\t\t\t\t\tpulumi.String(\"2025:2026\"),\n\t\t\t\t\t},\n\t\t\t\t\tLocation: pulumi.String(\"America/New_York\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.alerting.MuteTiming;\nimport com.pulumi.grafana.alerting.MuteTimingArgs;\nimport com.pulumi.grafana.alerting.inputs.MuteTimingIntervalArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var myMuteTiming = new MuteTiming(\"myMuteTiming\", MuteTimingArgs.builder()\n            .name(\"My Mute Timing\")\n            .intervals(MuteTimingIntervalArgs.builder()\n                .times(MuteTimingIntervalTimeArgs.builder()\n                    .start(\"04:56\")\n                    .end(\"14:17\")\n                    .build())\n                .weekdays(                \n                    \"monday\",\n                    \"tuesday:thursday\")\n                .daysOfMonths(                \n                    \"1:7\",\n                    \"-1\")\n                .months(                \n                    \"1:3\",\n                    \"december\")\n                .years(                \n                    \"2030\",\n                    \"2025:2026\")\n                .location(\"America/New_York\")\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  myMuteTiming:\n    type: grafana:alerting:MuteTiming\n    name: my_mute_timing\n    properties:\n      name: My Mute Timing\n      intervals:\n        - times:\n            - start: 04:56\n              end: 14:17\n          weekdays:\n            - monday\n            - tuesday:thursday\n          daysOfMonths:\n            - 1:7\n            - '-1'\n          months:\n            - 1:3\n            - december\n          years:\n            - '2030'\n            - 2025:2026\n          location: America/New_York\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:alerting/muteTiming:MuteTiming name \"{{ name }}\"\n```\n\n```sh\n$ pulumi import grafana:alerting/muteTiming:MuteTiming name \"{{ orgID }}:{{ name }}\"\n```\n\n","properties":{"disableProvenance":{"type":"boolean"},"intervals":{"type":"array","items":{"$ref":"#/types/grafana:alerting/MuteTimingInterval:MuteTimingInterval"},"description":"The time intervals at which to mute notifications. Use an empty block to mute all the time.\n"},"name":{"type":"string","description":"The name of the mute timing.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n"}},"required":["name"],"inputProperties":{"disableProvenance":{"type":"boolean","willReplaceOnChanges":true},"intervals":{"type":"array","items":{"$ref":"#/types/grafana:alerting/MuteTimingInterval:MuteTimingInterval"},"description":"The time intervals at which to mute notifications. Use an empty block to mute all the time.\n"},"name":{"type":"string","description":"The name of the mute timing.\n","willReplaceOnChanges":true},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true}},"stateInputs":{"description":"Input properties used for looking up and filtering MuteTiming resources.\n","properties":{"disableProvenance":{"type":"boolean","willReplaceOnChanges":true},"intervals":{"type":"array","items":{"$ref":"#/types/grafana:alerting/MuteTimingInterval:MuteTimingInterval"},"description":"The time intervals at which to mute notifications. Use an empty block to mute all the time.\n"},"name":{"type":"string","description":"The name of the mute timing.\n","willReplaceOnChanges":true},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true}},"type":"object"},"aliases":[{"type":"grafana:index/muteTiming:MuteTiming"}]},"grafana:alerting/notificationPolicy:NotificationPolicy":{"description":"Sets the global notification policy for Grafana.\n\n!\u003e This resource manages the entire notification policy tree and overwrites its policies. However, it does not overwrite internal policies created when alert rules directly set a contact point for notifications.\n\n* Official documentation\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/alerting_provisioning/#notification-policies)\n\nThis resource requires Grafana 9.1.0 or later.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst aContactPoint = new grafana.alerting.ContactPoint(\"a_contact_point\", {\n    name: \"A Contact Point\",\n    emails: [{\n        addresses: [\n            \"one@company.org\",\n            \"two@company.org\",\n        ],\n        message: \"{{ len .Alerts.Firing }} firing.\",\n    }],\n});\nconst aMuteTiming = new grafana.alerting.MuteTiming(\"a_mute_timing\", {\n    name: \"Some Mute Timing\",\n    intervals: [{\n        weekdays: [\"monday\"],\n    }],\n});\nconst workingHours = new grafana.alerting.MuteTiming(\"working_hours\", {\n    name: \"Working Hours\",\n    intervals: [{\n        times: [{\n            start: \"09:00\",\n            end: \"18:00\",\n        }],\n    }],\n});\nconst myNotificationPolicy = new grafana.alerting.NotificationPolicy(\"my_notification_policy\", {\n    groupBies: [\"...\"],\n    contactPoint: aContactPoint.name,\n    groupWait: \"45s\",\n    groupInterval: \"6m\",\n    repeatInterval: \"3h\",\n    policies: [\n        {\n            matchers: [\n                {\n                    label: \"mylabel\",\n                    match: \"=\",\n                    value: \"myvalue\",\n                },\n                {\n                    label: \"alertname\",\n                    match: \"=\",\n                    value: \"CPU Usage\",\n                },\n                {\n                    label: \"Name\",\n                    match: \"=~\",\n                    value: \"host.*|host-b.*\",\n                },\n            ],\n            contactPoint: aContactPoint.name,\n            \"continue\": true,\n            muteTimings: [aMuteTiming.name],\n            activeTimings: [workingHours.name],\n            groupWait: \"45s\",\n            groupInterval: \"6m\",\n            repeatInterval: \"3h\",\n            policies: [{\n                matchers: [{\n                    label: \"sublabel\",\n                    match: \"=\",\n                    value: \"subvalue\",\n                }],\n                contactPoint: aContactPoint.name,\n                groupBies: [\"...\"],\n            }],\n        },\n        {\n            matchers: [{\n                label: \"anotherlabel\",\n                match: \"=~\",\n                value: \"another value.*\",\n            }],\n            contactPoint: aContactPoint.name,\n            groupBies: [\"...\"],\n        },\n    ],\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\na_contact_point = grafana.alerting.ContactPoint(\"a_contact_point\",\n    name=\"A Contact Point\",\n    emails=[{\n        \"addresses\": [\n            \"one@company.org\",\n            \"two@company.org\",\n        ],\n        \"message\": \"{{ len .Alerts.Firing }} firing.\",\n    }])\na_mute_timing = grafana.alerting.MuteTiming(\"a_mute_timing\",\n    name=\"Some Mute Timing\",\n    intervals=[{\n        \"weekdays\": [\"monday\"],\n    }])\nworking_hours = grafana.alerting.MuteTiming(\"working_hours\",\n    name=\"Working Hours\",\n    intervals=[{\n        \"times\": [{\n            \"start\": \"09:00\",\n            \"end\": \"18:00\",\n        }],\n    }])\nmy_notification_policy = grafana.alerting.NotificationPolicy(\"my_notification_policy\",\n    group_bies=[\"...\"],\n    contact_point=a_contact_point.name,\n    group_wait=\"45s\",\n    group_interval=\"6m\",\n    repeat_interval=\"3h\",\n    policies=[\n        {\n            \"matchers\": [\n                {\n                    \"label\": \"mylabel\",\n                    \"match\": \"=\",\n                    \"value\": \"myvalue\",\n                },\n                {\n                    \"label\": \"alertname\",\n                    \"match\": \"=\",\n                    \"value\": \"CPU Usage\",\n                },\n                {\n                    \"label\": \"Name\",\n                    \"match\": \"=~\",\n                    \"value\": \"host.*|host-b.*\",\n                },\n            ],\n            \"contact_point\": a_contact_point.name,\n            \"continue_\": True,\n            \"mute_timings\": [a_mute_timing.name],\n            \"active_timings\": [working_hours.name],\n            \"group_wait\": \"45s\",\n            \"group_interval\": \"6m\",\n            \"repeat_interval\": \"3h\",\n            \"policies\": [{\n                \"matchers\": [{\n                    \"label\": \"sublabel\",\n                    \"match\": \"=\",\n                    \"value\": \"subvalue\",\n                }],\n                \"contact_point\": a_contact_point.name,\n                \"group_bies\": [\"...\"],\n            }],\n        },\n        {\n            \"matchers\": [{\n                \"label\": \"anotherlabel\",\n                \"match\": \"=~\",\n                \"value\": \"another value.*\",\n            }],\n            \"contact_point\": a_contact_point.name,\n            \"group_bies\": [\"...\"],\n        },\n    ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var aContactPoint = new Grafana.Alerting.ContactPoint(\"a_contact_point\", new()\n    {\n        Name = \"A Contact Point\",\n        Emails = new[]\n        {\n            new Grafana.Alerting.Inputs.ContactPointEmailArgs\n            {\n                Addresses = new[]\n                {\n                    \"one@company.org\",\n                    \"two@company.org\",\n                },\n                Message = \"{{ len .Alerts.Firing }} firing.\",\n            },\n        },\n    });\n\n    var aMuteTiming = new Grafana.Alerting.MuteTiming(\"a_mute_timing\", new()\n    {\n        Name = \"Some Mute Timing\",\n        Intervals = new[]\n        {\n            new Grafana.Alerting.Inputs.MuteTimingIntervalArgs\n            {\n                Weekdays = new[]\n                {\n                    \"monday\",\n                },\n            },\n        },\n    });\n\n    var workingHours = new Grafana.Alerting.MuteTiming(\"working_hours\", new()\n    {\n        Name = \"Working Hours\",\n        Intervals = new[]\n        {\n            new Grafana.Alerting.Inputs.MuteTimingIntervalArgs\n            {\n                Times = new[]\n                {\n                    new Grafana.Alerting.Inputs.MuteTimingIntervalTimeArgs\n                    {\n                        Start = \"09:00\",\n                        End = \"18:00\",\n                    },\n                },\n            },\n        },\n    });\n\n    var myNotificationPolicy = new Grafana.Alerting.NotificationPolicy(\"my_notification_policy\", new()\n    {\n        GroupBies = new[]\n        {\n            \"...\",\n        },\n        ContactPoint = aContactPoint.Name,\n        GroupWait = \"45s\",\n        GroupInterval = \"6m\",\n        RepeatInterval = \"3h\",\n        Policies = new[]\n        {\n            new Grafana.Alerting.Inputs.NotificationPolicyPolicyArgs\n            {\n                Matchers = new[]\n                {\n                    new Grafana.Alerting.Inputs.NotificationPolicyPolicyMatcherArgs\n                    {\n                        Label = \"mylabel\",\n                        Match = \"=\",\n                        Value = \"myvalue\",\n                    },\n                    new Grafana.Alerting.Inputs.NotificationPolicyPolicyMatcherArgs\n                    {\n                        Label = \"alertname\",\n                        Match = \"=\",\n                        Value = \"CPU Usage\",\n                    },\n                    new Grafana.Alerting.Inputs.NotificationPolicyPolicyMatcherArgs\n                    {\n                        Label = \"Name\",\n                        Match = \"=~\",\n                        Value = \"host.*|host-b.*\",\n                    },\n                },\n                ContactPoint = aContactPoint.Name,\n                Continue = true,\n                MuteTimings = new[]\n                {\n                    aMuteTiming.Name,\n                },\n                ActiveTimings = new[]\n                {\n                    workingHours.Name,\n                },\n                GroupWait = \"45s\",\n                GroupInterval = \"6m\",\n                RepeatInterval = \"3h\",\n                Policies = new[]\n                {\n                    new Grafana.Alerting.Inputs.NotificationPolicyPolicyPolicyArgs\n                    {\n                        Matchers = new[]\n                        {\n                            new Grafana.Alerting.Inputs.NotificationPolicyPolicyPolicyMatcherArgs\n                            {\n                                Label = \"sublabel\",\n                                Match = \"=\",\n                                Value = \"subvalue\",\n                            },\n                        },\n                        ContactPoint = aContactPoint.Name,\n                        GroupBies = new[]\n                        {\n                            \"...\",\n                        },\n                    },\n                },\n            },\n            new Grafana.Alerting.Inputs.NotificationPolicyPolicyArgs\n            {\n                Matchers = new[]\n                {\n                    new Grafana.Alerting.Inputs.NotificationPolicyPolicyMatcherArgs\n                    {\n                        Label = \"anotherlabel\",\n                        Match = \"=~\",\n                        Value = \"another value.*\",\n                    },\n                },\n                ContactPoint = aContactPoint.Name,\n                GroupBies = new[]\n                {\n                    \"...\",\n                },\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/alerting\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\taContactPoint, err := alerting.NewContactPoint(ctx, \"a_contact_point\", \u0026alerting.ContactPointArgs{\n\t\t\tName: pulumi.String(\"A Contact Point\"),\n\t\t\tEmails: alerting.ContactPointEmailArray{\n\t\t\t\t\u0026alerting.ContactPointEmailArgs{\n\t\t\t\t\tAddresses: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"one@company.org\"),\n\t\t\t\t\t\tpulumi.String(\"two@company.org\"),\n\t\t\t\t\t},\n\t\t\t\t\tMessage: pulumi.String(\"{{ len .Alerts.Firing }} firing.\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\taMuteTiming, err := alerting.NewMuteTiming(ctx, \"a_mute_timing\", \u0026alerting.MuteTimingArgs{\n\t\t\tName: pulumi.String(\"Some Mute Timing\"),\n\t\t\tIntervals: alerting.MuteTimingIntervalArray{\n\t\t\t\t\u0026alerting.MuteTimingIntervalArgs{\n\t\t\t\t\tWeekdays: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"monday\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tworkingHours, err := alerting.NewMuteTiming(ctx, \"working_hours\", \u0026alerting.MuteTimingArgs{\n\t\t\tName: pulumi.String(\"Working Hours\"),\n\t\t\tIntervals: alerting.MuteTimingIntervalArray{\n\t\t\t\t\u0026alerting.MuteTimingIntervalArgs{\n\t\t\t\t\tTimes: alerting.MuteTimingIntervalTimeArray{\n\t\t\t\t\t\t\u0026alerting.MuteTimingIntervalTimeArgs{\n\t\t\t\t\t\t\tStart: pulumi.String(\"09:00\"),\n\t\t\t\t\t\t\tEnd:   pulumi.String(\"18:00\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = alerting.NewNotificationPolicy(ctx, \"my_notification_policy\", \u0026alerting.NotificationPolicyArgs{\n\t\t\tGroupBies: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"...\"),\n\t\t\t},\n\t\t\tContactPoint:   aContactPoint.Name,\n\t\t\tGroupWait:      pulumi.String(\"45s\"),\n\t\t\tGroupInterval:  pulumi.String(\"6m\"),\n\t\t\tRepeatInterval: pulumi.String(\"3h\"),\n\t\t\tPolicies: alerting.NotificationPolicyPolicyArray{\n\t\t\t\t\u0026alerting.NotificationPolicyPolicyArgs{\n\t\t\t\t\tMatchers: alerting.NotificationPolicyPolicyMatcherArray{\n\t\t\t\t\t\t\u0026alerting.NotificationPolicyPolicyMatcherArgs{\n\t\t\t\t\t\t\tLabel: pulumi.String(\"mylabel\"),\n\t\t\t\t\t\t\tMatch: pulumi.String(\"=\"),\n\t\t\t\t\t\t\tValue: pulumi.String(\"myvalue\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026alerting.NotificationPolicyPolicyMatcherArgs{\n\t\t\t\t\t\t\tLabel: pulumi.String(\"alertname\"),\n\t\t\t\t\t\t\tMatch: pulumi.String(\"=\"),\n\t\t\t\t\t\t\tValue: pulumi.String(\"CPU Usage\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026alerting.NotificationPolicyPolicyMatcherArgs{\n\t\t\t\t\t\t\tLabel: pulumi.String(\"Name\"),\n\t\t\t\t\t\t\tMatch: pulumi.String(\"=~\"),\n\t\t\t\t\t\t\tValue: pulumi.String(\"host.*|host-b.*\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tContactPoint: aContactPoint.Name,\n\t\t\t\t\tContinue:     pulumi.Bool(true),\n\t\t\t\t\tMuteTimings: pulumi.StringArray{\n\t\t\t\t\t\taMuteTiming.Name,\n\t\t\t\t\t},\n\t\t\t\t\tActiveTimings: pulumi.StringArray{\n\t\t\t\t\t\tworkingHours.Name,\n\t\t\t\t\t},\n\t\t\t\t\tGroupWait:      pulumi.String(\"45s\"),\n\t\t\t\t\tGroupInterval:  pulumi.String(\"6m\"),\n\t\t\t\t\tRepeatInterval: pulumi.String(\"3h\"),\n\t\t\t\t\tPolicies: alerting.NotificationPolicyPolicyPolicyArray{\n\t\t\t\t\t\t\u0026alerting.NotificationPolicyPolicyPolicyArgs{\n\t\t\t\t\t\t\tMatchers: alerting.NotificationPolicyPolicyPolicyMatcherArray{\n\t\t\t\t\t\t\t\t\u0026alerting.NotificationPolicyPolicyPolicyMatcherArgs{\n\t\t\t\t\t\t\t\t\tLabel: pulumi.String(\"sublabel\"),\n\t\t\t\t\t\t\t\t\tMatch: pulumi.String(\"=\"),\n\t\t\t\t\t\t\t\t\tValue: pulumi.String(\"subvalue\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tContactPoint: aContactPoint.Name,\n\t\t\t\t\t\t\tGroupBies: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"...\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026alerting.NotificationPolicyPolicyArgs{\n\t\t\t\t\tMatchers: alerting.NotificationPolicyPolicyMatcherArray{\n\t\t\t\t\t\t\u0026alerting.NotificationPolicyPolicyMatcherArgs{\n\t\t\t\t\t\t\tLabel: pulumi.String(\"anotherlabel\"),\n\t\t\t\t\t\t\tMatch: pulumi.String(\"=~\"),\n\t\t\t\t\t\t\tValue: pulumi.String(\"another value.*\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tContactPoint: aContactPoint.Name,\n\t\t\t\t\tGroupBies: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"...\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.alerting.ContactPoint;\nimport com.pulumi.grafana.alerting.ContactPointArgs;\nimport com.pulumi.grafana.alerting.inputs.ContactPointEmailArgs;\nimport com.pulumi.grafana.alerting.MuteTiming;\nimport com.pulumi.grafana.alerting.MuteTimingArgs;\nimport com.pulumi.grafana.alerting.inputs.MuteTimingIntervalArgs;\nimport com.pulumi.grafana.alerting.NotificationPolicy;\nimport com.pulumi.grafana.alerting.NotificationPolicyArgs;\nimport com.pulumi.grafana.alerting.inputs.NotificationPolicyPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var aContactPoint = new ContactPoint(\"aContactPoint\", ContactPointArgs.builder()\n            .name(\"A Contact Point\")\n            .emails(ContactPointEmailArgs.builder()\n                .addresses(                \n                    \"one@company.org\",\n                    \"two@company.org\")\n                .message(\"{{ len .Alerts.Firing }} firing.\")\n                .build())\n            .build());\n\n        var aMuteTiming = new MuteTiming(\"aMuteTiming\", MuteTimingArgs.builder()\n            .name(\"Some Mute Timing\")\n            .intervals(MuteTimingIntervalArgs.builder()\n                .weekdays(\"monday\")\n                .build())\n            .build());\n\n        var workingHours = new MuteTiming(\"workingHours\", MuteTimingArgs.builder()\n            .name(\"Working Hours\")\n            .intervals(MuteTimingIntervalArgs.builder()\n                .times(MuteTimingIntervalTimeArgs.builder()\n                    .start(\"09:00\")\n                    .end(\"18:00\")\n                    .build())\n                .build())\n            .build());\n\n        var myNotificationPolicy = new NotificationPolicy(\"myNotificationPolicy\", NotificationPolicyArgs.builder()\n            .groupBies(\"...\")\n            .contactPoint(aContactPoint.name())\n            .groupWait(\"45s\")\n            .groupInterval(\"6m\")\n            .repeatInterval(\"3h\")\n            .policies(            \n                NotificationPolicyPolicyArgs.builder()\n                    .matchers(                    \n                        NotificationPolicyPolicyMatcherArgs.builder()\n                            .label(\"mylabel\")\n                            .match(\"=\")\n                            .value(\"myvalue\")\n                            .build(),\n                        NotificationPolicyPolicyMatcherArgs.builder()\n                            .label(\"alertname\")\n                            .match(\"=\")\n                            .value(\"CPU Usage\")\n                            .build(),\n                        NotificationPolicyPolicyMatcherArgs.builder()\n                            .label(\"Name\")\n                            .match(\"=~\")\n                            .value(\"host.*|host-b.*\")\n                            .build())\n                    .contactPoint(aContactPoint.name())\n                    .continue_(true)\n                    .muteTimings(aMuteTiming.name())\n                    .activeTimings(workingHours.name())\n                    .groupWait(\"45s\")\n                    .groupInterval(\"6m\")\n                    .repeatInterval(\"3h\")\n                    .policies(NotificationPolicyPolicyPolicyArgs.builder()\n                        .matchers(NotificationPolicyPolicyPolicyMatcherArgs.builder()\n                            .label(\"sublabel\")\n                            .match(\"=\")\n                            .value(\"subvalue\")\n                            .build())\n                        .contactPoint(aContactPoint.name())\n                        .groupBies(\"...\")\n                        .build())\n                    .build(),\n                NotificationPolicyPolicyArgs.builder()\n                    .matchers(NotificationPolicyPolicyMatcherArgs.builder()\n                        .label(\"anotherlabel\")\n                        .match(\"=~\")\n                        .value(\"another value.*\")\n                        .build())\n                    .contactPoint(aContactPoint.name())\n                    .groupBies(\"...\")\n                    .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  aContactPoint:\n    type: grafana:alerting:ContactPoint\n    name: a_contact_point\n    properties:\n      name: A Contact Point\n      emails:\n        - addresses:\n            - one@company.org\n            - two@company.org\n          message: '{{ len .Alerts.Firing }} firing.'\n  aMuteTiming:\n    type: grafana:alerting:MuteTiming\n    name: a_mute_timing\n    properties:\n      name: Some Mute Timing\n      intervals:\n        - weekdays:\n            - monday\n  workingHours:\n    type: grafana:alerting:MuteTiming\n    name: working_hours\n    properties:\n      name: Working Hours\n      intervals:\n        - times:\n            - start: 09:00\n              end: 18:00\n  myNotificationPolicy:\n    type: grafana:alerting:NotificationPolicy\n    name: my_notification_policy\n    properties:\n      groupBies:\n        - '...'\n      contactPoint: ${aContactPoint.name}\n      groupWait: 45s\n      groupInterval: 6m\n      repeatInterval: 3h\n      policies:\n        - matchers:\n            - label: mylabel\n              match: =\n              value: myvalue\n            - label: alertname\n              match: =\n              value: CPU Usage\n            - label: Name\n              match: =~\n              value: host.*|host-b.*\n          contactPoint: ${aContactPoint.name}\n          continue: true\n          muteTimings:\n            - ${aMuteTiming.name}\n          activeTimings:\n            - ${workingHours.name}\n          groupWait: 45s\n          groupInterval: 6m\n          repeatInterval: 3h\n          policies:\n            - matchers:\n                - label: sublabel\n                  match: =\n                  value: subvalue\n              contactPoint: ${aContactPoint.name}\n              groupBies:\n                - '...'\n        - matchers:\n            - label: anotherlabel\n              match: =~\n              value: another value.*\n          contactPoint: ${aContactPoint.name}\n          groupBies:\n            - '...'\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:alerting/notificationPolicy:NotificationPolicy name \"{{ anyString }}\"\n```\n\n```sh\n$ pulumi import grafana:alerting/notificationPolicy:NotificationPolicy name \"{{ orgID }}:{{ anyString }}\"\n```\n\n","properties":{"contactPoint":{"type":"string","description":"The default contact point to route all unmatched notifications to.\n"},"disableProvenance":{"type":"boolean"},"groupBies":{"type":"array","items":{"type":"string"},"description":"A list of alert labels to group alerts into notifications by. Use the special label `...` to group alerts by all labels, effectively disabling grouping.\n"},"groupInterval":{"type":"string","description":"Minimum time interval between two notifications for the same group. Default is 5 minutes.\n"},"groupWait":{"type":"string","description":"Time to wait to buffer alerts of the same group before sending a notification. Default is 30 seconds.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n"},"policies":{"type":"array","items":{"$ref":"#/types/grafana:alerting/NotificationPolicyPolicy:NotificationPolicyPolicy"},"description":"Routing rules for specific label sets.\n"},"repeatInterval":{"type":"string","description":"Minimum time interval for re-sending a notification if an alert is still firing. Default is 4 hours.\n"}},"required":["contactPoint","groupBies"],"inputProperties":{"contactPoint":{"type":"string","description":"The default contact point to route all unmatched notifications to.\n"},"disableProvenance":{"type":"boolean"},"groupBies":{"type":"array","items":{"type":"string"},"description":"A list of alert labels to group alerts into notifications by. Use the special label `...` to group alerts by all labels, effectively disabling grouping.\n"},"groupInterval":{"type":"string","description":"Minimum time interval between two notifications for the same group. Default is 5 minutes.\n"},"groupWait":{"type":"string","description":"Time to wait to buffer alerts of the same group before sending a notification. Default is 30 seconds.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"policies":{"type":"array","items":{"$ref":"#/types/grafana:alerting/NotificationPolicyPolicy:NotificationPolicyPolicy"},"description":"Routing rules for specific label sets.\n"},"repeatInterval":{"type":"string","description":"Minimum time interval for re-sending a notification if an alert is still firing. Default is 4 hours.\n"}},"requiredInputs":["contactPoint","groupBies"],"stateInputs":{"description":"Input properties used for looking up and filtering NotificationPolicy resources.\n","properties":{"contactPoint":{"type":"string","description":"The default contact point to route all unmatched notifications to.\n"},"disableProvenance":{"type":"boolean"},"groupBies":{"type":"array","items":{"type":"string"},"description":"A list of alert labels to group alerts into notifications by. Use the special label `...` to group alerts by all labels, effectively disabling grouping.\n"},"groupInterval":{"type":"string","description":"Minimum time interval between two notifications for the same group. Default is 5 minutes.\n"},"groupWait":{"type":"string","description":"Time to wait to buffer alerts of the same group before sending a notification. Default is 30 seconds.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"policies":{"type":"array","items":{"$ref":"#/types/grafana:alerting/NotificationPolicyPolicy:NotificationPolicyPolicy"},"description":"Routing rules for specific label sets.\n"},"repeatInterval":{"type":"string","description":"Minimum time interval for re-sending a notification if an alert is still firing. Default is 4 hours.\n"}},"type":"object"},"aliases":[{"type":"grafana:index/notificationPolicy:NotificationPolicy"}]},"grafana:alerting/recordingRuleV0Alpha1:RecordingRuleV0Alpha1":{"description":"Manages Grafana Recording Rules.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst recordingruleFolder = new grafana.oss.Folder(\"recordingrule_folder\", {title: \"Alert Rule Folder\"});\nconst example = new grafana.alerting.RecordingRuleV0Alpha1(\"example\", {\n    metadata: {\n        uid: \"example-recording-rule\",\n        folderUid: recordingruleFolder.uid,\n    },\n    spec: {\n        title: \"Example Recording Rule\",\n        trigger: {\n            interval: \"1m\",\n        },\n        paused: true,\n        expressions: {\n            A: JSON.stringify({\n                model: {\n                    editorMode: \"code\",\n                    expr: \"count(up{})\",\n                    instant: true,\n                    intervalMs: 1000,\n                    legendFormat: \"__auto\",\n                    maxDataPoints: 43200,\n                    range: false,\n                    refId: \"A\",\n                },\n                datasource_uid: \"ds_uid\",\n                relative_time_range: {\n                    from: \"600s\",\n                    to: \"0s\",\n                },\n                query_type: \"\",\n                source: true,\n            }),\n        },\n        targetDatasourceUid: \"target_ds_uid\",\n        metric: \"tf-metric\",\n        labels: {\n            foo: \"bar\",\n        },\n    },\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumiverse_grafana as grafana\n\nrecordingrule_folder = grafana.oss.Folder(\"recordingrule_folder\", title=\"Alert Rule Folder\")\nexample = grafana.alerting.RecordingRuleV0Alpha1(\"example\",\n    metadata={\n        \"uid\": \"example-recording-rule\",\n        \"folder_uid\": recordingrule_folder.uid,\n    },\n    spec={\n        \"title\": \"Example Recording Rule\",\n        \"trigger\": {\n            \"interval\": \"1m\",\n        },\n        \"paused\": True,\n        \"expressions\": {\n            \"A\": json.dumps({\n                \"model\": {\n                    \"editorMode\": \"code\",\n                    \"expr\": \"count(up{})\",\n                    \"instant\": True,\n                    \"intervalMs\": 1000,\n                    \"legendFormat\": \"__auto\",\n                    \"maxDataPoints\": 43200,\n                    \"range\": False,\n                    \"refId\": \"A\",\n                },\n                \"datasource_uid\": \"ds_uid\",\n                \"relative_time_range\": {\n                    \"from\": \"600s\",\n                    \"to\": \"0s\",\n                },\n                \"query_type\": \"\",\n                \"source\": True,\n            }),\n        },\n        \"target_datasource_uid\": \"target_ds_uid\",\n        \"metric\": \"tf-metric\",\n        \"labels\": {\n            \"foo\": \"bar\",\n        },\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var recordingruleFolder = new Grafana.Oss.Folder(\"recordingrule_folder\", new()\n    {\n        Title = \"Alert Rule Folder\",\n    });\n\n    var example = new Grafana.Alerting.RecordingRuleV0Alpha1(\"example\", new()\n    {\n        Metadata = new Grafana.Alerting.Inputs.RecordingRuleV0Alpha1MetadataArgs\n        {\n            Uid = \"example-recording-rule\",\n            FolderUid = recordingruleFolder.Uid,\n        },\n        Spec = new Grafana.Alerting.Inputs.RecordingRuleV0Alpha1SpecArgs\n        {\n            Title = \"Example Recording Rule\",\n            Trigger = new Grafana.Alerting.Inputs.RecordingRuleV0Alpha1SpecTriggerArgs\n            {\n                Interval = \"1m\",\n            },\n            Paused = true,\n            Expressions = \n            {\n                { \"A\", JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n                {\n                    [\"model\"] = new Dictionary\u003cstring, object?\u003e\n                    {\n                        [\"editorMode\"] = \"code\",\n                        [\"expr\"] = \"count(up{})\",\n                        [\"instant\"] = true,\n                        [\"intervalMs\"] = 1000,\n                        [\"legendFormat\"] = \"__auto\",\n                        [\"maxDataPoints\"] = 43200,\n                        [\"range\"] = false,\n                        [\"refId\"] = \"A\",\n                    },\n                    [\"datasource_uid\"] = \"ds_uid\",\n                    [\"relative_time_range\"] = new Dictionary\u003cstring, object?\u003e\n                    {\n                        [\"from\"] = \"600s\",\n                        [\"to\"] = \"0s\",\n                    },\n                    [\"query_type\"] = \"\",\n                    [\"source\"] = true,\n                }) },\n            },\n            TargetDatasourceUid = \"target_ds_uid\",\n            Metric = \"tf-metric\",\n            Labels = \n            {\n                { \"foo\", \"bar\" },\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/alerting\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\trecordingruleFolder, err := oss.NewFolder(ctx, \"recordingrule_folder\", \u0026oss.FolderArgs{\n\t\t\tTitle: pulumi.String(\"Alert Rule Folder\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"model\": map[string]interface{}{\n\t\t\t\t\"editorMode\":    \"code\",\n\t\t\t\t\"expr\":          \"count(up{})\",\n\t\t\t\t\"instant\":       true,\n\t\t\t\t\"intervalMs\":    1000,\n\t\t\t\t\"legendFormat\":  \"__auto\",\n\t\t\t\t\"maxDataPoints\": 43200,\n\t\t\t\t\"range\":         false,\n\t\t\t\t\"refId\":         \"A\",\n\t\t\t},\n\t\t\t\"datasource_uid\": \"ds_uid\",\n\t\t\t\"relative_time_range\": map[string]interface{}{\n\t\t\t\t\"from\": \"600s\",\n\t\t\t\t\"to\":   \"0s\",\n\t\t\t},\n\t\t\t\"query_type\": \"\",\n\t\t\t\"source\":     true,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\t_, err = alerting.NewRecordingRuleV0Alpha1(ctx, \"example\", \u0026alerting.RecordingRuleV0Alpha1Args{\n\t\t\tMetadata: \u0026alerting.RecordingRuleV0Alpha1MetadataArgs{\n\t\t\t\tUid:       pulumi.String(\"example-recording-rule\"),\n\t\t\t\tFolderUid: recordingruleFolder.Uid,\n\t\t\t},\n\t\t\tSpec: \u0026alerting.RecordingRuleV0Alpha1SpecArgs{\n\t\t\t\tTitle: pulumi.String(\"Example Recording Rule\"),\n\t\t\t\tTrigger: \u0026alerting.RecordingRuleV0Alpha1SpecTriggerArgs{\n\t\t\t\t\tInterval: pulumi.String(\"1m\"),\n\t\t\t\t},\n\t\t\t\tPaused: pulumi.Bool(true),\n\t\t\t\tExpressions: pulumi.StringMap{\n\t\t\t\t\t\"A\": pulumi.String(json0),\n\t\t\t\t},\n\t\t\t\tTargetDatasourceUid: pulumi.String(\"target_ds_uid\"),\n\t\t\t\tMetric:              pulumi.String(\"tf-metric\"),\n\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.Folder;\nimport com.pulumi.grafana.oss.FolderArgs;\nimport com.pulumi.grafana.alerting.RecordingRuleV0Alpha1;\nimport com.pulumi.grafana.alerting.RecordingRuleV0Alpha1Args;\nimport com.pulumi.grafana.alerting.inputs.RecordingRuleV0Alpha1MetadataArgs;\nimport com.pulumi.grafana.alerting.inputs.RecordingRuleV0Alpha1SpecArgs;\nimport com.pulumi.grafana.alerting.inputs.RecordingRuleV0Alpha1SpecTriggerArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var recordingruleFolder = new Folder(\"recordingruleFolder\", FolderArgs.builder()\n            .title(\"Alert Rule Folder\")\n            .build());\n\n        var example = new RecordingRuleV0Alpha1(\"example\", RecordingRuleV0Alpha1Args.builder()\n            .metadata(RecordingRuleV0Alpha1MetadataArgs.builder()\n                .uid(\"example-recording-rule\")\n                .folderUid(recordingruleFolder.uid())\n                .build())\n            .spec(RecordingRuleV0Alpha1SpecArgs.builder()\n                .title(\"Example Recording Rule\")\n                .trigger(RecordingRuleV0Alpha1SpecTriggerArgs.builder()\n                    .interval(\"1m\")\n                    .build())\n                .paused(true)\n                .expressions(Map.of(\"A\", serializeJson(\n                    jsonObject(\n                        jsonProperty(\"model\", jsonObject(\n                            jsonProperty(\"editorMode\", \"code\"),\n                            jsonProperty(\"expr\", \"count(up{})\"),\n                            jsonProperty(\"instant\", true),\n                            jsonProperty(\"intervalMs\", 1000),\n                            jsonProperty(\"legendFormat\", \"__auto\"),\n                            jsonProperty(\"maxDataPoints\", 43200),\n                            jsonProperty(\"range\", false),\n                            jsonProperty(\"refId\", \"A\")\n                        )),\n                        jsonProperty(\"datasource_uid\", \"ds_uid\"),\n                        jsonProperty(\"relative_time_range\", jsonObject(\n                            jsonProperty(\"from\", \"600s\"),\n                            jsonProperty(\"to\", \"0s\")\n                        )),\n                        jsonProperty(\"query_type\", \"\"),\n                        jsonProperty(\"source\", true)\n                    ))))\n                .targetDatasourceUid(\"target_ds_uid\")\n                .metric(\"tf-metric\")\n                .labels(Map.of(\"foo\", \"bar\"))\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  recordingruleFolder:\n    type: grafana:oss:Folder\n    name: recordingrule_folder\n    properties:\n      title: Alert Rule Folder\n  example:\n    type: grafana:alerting:RecordingRuleV0Alpha1\n    properties:\n      metadata:\n        uid: example-recording-rule\n        folderUid: ${recordingruleFolder.uid}\n      spec:\n        title: Example Recording Rule\n        trigger:\n          interval: 1m\n        paused: true\n        expressions:\n          A:\n            fn::toJSON:\n              model:\n                editorMode: code\n                expr: count(up{})\n                instant: true\n                intervalMs: 1000\n                legendFormat: __auto\n                maxDataPoints: 43200\n                range: false\n                refId: A\n              datasource_uid: ds_uid\n              relative_time_range:\n                from: 600s\n                to: 0s\n              query_type: \"\"\n              source: true\n        targetDatasourceUid: target_ds_uid\n        metric: tf-metric\n        labels:\n          foo: bar\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"metadata":{"$ref":"#/types/grafana:alerting/RecordingRuleV0Alpha1Metadata:RecordingRuleV0Alpha1Metadata","description":"The metadata of the resource.\n"},"options":{"$ref":"#/types/grafana:alerting/RecordingRuleV0Alpha1Options:RecordingRuleV0Alpha1Options","description":"Options for applying the resource.\n"},"spec":{"$ref":"#/types/grafana:alerting/RecordingRuleV0Alpha1Spec:RecordingRuleV0Alpha1Spec","description":"The spec of the resource.\n"}},"inputProperties":{"metadata":{"$ref":"#/types/grafana:alerting/RecordingRuleV0Alpha1Metadata:RecordingRuleV0Alpha1Metadata","description":"The metadata of the resource.\n"},"options":{"$ref":"#/types/grafana:alerting/RecordingRuleV0Alpha1Options:RecordingRuleV0Alpha1Options","description":"Options for applying the resource.\n"},"spec":{"$ref":"#/types/grafana:alerting/RecordingRuleV0Alpha1Spec:RecordingRuleV0Alpha1Spec","description":"The spec of the resource.\n"}},"stateInputs":{"description":"Input properties used for looking up and filtering RecordingRuleV0Alpha1 resources.\n","properties":{"metadata":{"$ref":"#/types/grafana:alerting/RecordingRuleV0Alpha1Metadata:RecordingRuleV0Alpha1Metadata","description":"The metadata of the resource.\n"},"options":{"$ref":"#/types/grafana:alerting/RecordingRuleV0Alpha1Options:RecordingRuleV0Alpha1Options","description":"Options for applying the resource.\n"},"spec":{"$ref":"#/types/grafana:alerting/RecordingRuleV0Alpha1Spec:RecordingRuleV0Alpha1Spec","description":"The spec of the resource.\n"}},"type":"object"}},"grafana:alerting/ruleGroup:RuleGroup":{"description":"Manages Grafana Alerting rule groups.\n\n* Official documentation\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/alerting_provisioning/#alert-rules)\n\nThis resource requires Grafana 9.1.0 or later.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst ruleFolder = new grafana.oss.Folder(\"rule_folder\", {title: \"My Alert Rule Folder\"});\nconst myAlertRule = new grafana.alerting.RuleGroup(\"my_alert_rule\", {\n    name: \"My Rule Group\",\n    folderUid: ruleFolder.uid,\n    intervalSeconds: 240,\n    orgId: \"1\",\n    rules: [{\n        name: \"My Alert Rule 1\",\n        \"for\": \"2m\",\n        condition: \"B\",\n        noDataState: \"NoData\",\n        execErrState: \"Alerting\",\n        annotations: {\n            a: \"b\",\n            c: \"d\",\n        },\n        labels: {\n            e: \"f\",\n            g: \"h\",\n        },\n        isPaused: false,\n        datas: [\n            {\n                refId: \"A\",\n                queryType: \"\",\n                relativeTimeRange: {\n                    from: 600,\n                    to: 0,\n                },\n                datasourceUid: \"PD8C576611E62080A\",\n                model: JSON.stringify({\n                    hide: false,\n                    intervalMs: 1000,\n                    maxDataPoints: 43200,\n                    refId: \"A\",\n                }),\n            },\n            {\n                refId: \"B\",\n                queryType: \"\",\n                relativeTimeRange: {\n                    from: 0,\n                    to: 0,\n                },\n                datasourceUid: \"-100\",\n                model: `{\n    \\\\\"conditions\\\\\": [\n        {\n        \\\\\"evaluator\\\\\": {\n            \\\\\"params\\\\\": [\n            3\n            ],\n            \\\\\"type\\\\\": \\\\\"gt\\\\\"\n        },\n        \\\\\"operator\\\\\": {\n            \\\\\"type\\\\\": \\\\\"and\\\\\"\n        },\n        \\\\\"query\\\\\": {\n            \\\\\"params\\\\\": [\n            \\\\\"A\\\\\"\n            ]\n        },\n        \\\\\"reducer\\\\\": {\n            \\\\\"params\\\\\": [],\n            \\\\\"type\\\\\": \\\\\"last\\\\\"\n        },\n        \\\\\"type\\\\\": \\\\\"query\\\\\"\n        }\n    ],\n    \\\\\"datasource\\\\\": {\n        \\\\\"type\\\\\": \\\\\"__expr__\\\\\",\n        \\\\\"uid\\\\\": \\\\\"-100\\\\\"\n    },\n    \\\\\"hide\\\\\": false,\n    \\\\\"intervalMs\\\\\": 1000,\n    \\\\\"maxDataPoints\\\\\": 43200,\n    \\\\\"refId\\\\\": \\\\\"B\\\\\",\n    \\\\\"type\\\\\": \\\\\"classic_conditions\\\\\"\n}\n`,\n            },\n        ],\n    }],\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumiverse_grafana as grafana\n\nrule_folder = grafana.oss.Folder(\"rule_folder\", title=\"My Alert Rule Folder\")\nmy_alert_rule = grafana.alerting.RuleGroup(\"my_alert_rule\",\n    name=\"My Rule Group\",\n    folder_uid=rule_folder.uid,\n    interval_seconds=240,\n    org_id=\"1\",\n    rules=[{\n        \"name\": \"My Alert Rule 1\",\n        \"for_\": \"2m\",\n        \"condition\": \"B\",\n        \"no_data_state\": \"NoData\",\n        \"exec_err_state\": \"Alerting\",\n        \"annotations\": {\n            \"a\": \"b\",\n            \"c\": \"d\",\n        },\n        \"labels\": {\n            \"e\": \"f\",\n            \"g\": \"h\",\n        },\n        \"is_paused\": False,\n        \"datas\": [\n            {\n                \"ref_id\": \"A\",\n                \"query_type\": \"\",\n                \"relative_time_range\": {\n                    \"from_\": 600,\n                    \"to\": 0,\n                },\n                \"datasource_uid\": \"PD8C576611E62080A\",\n                \"model\": json.dumps({\n                    \"hide\": False,\n                    \"intervalMs\": 1000,\n                    \"maxDataPoints\": 43200,\n                    \"refId\": \"A\",\n                }),\n            },\n            {\n                \"ref_id\": \"B\",\n                \"query_type\": \"\",\n                \"relative_time_range\": {\n                    \"from_\": 0,\n                    \"to\": 0,\n                },\n                \"datasource_uid\": \"-100\",\n                \"model\": \"\"\"{\n    \\\"conditions\\\": [\n        {\n        \\\"evaluator\\\": {\n            \\\"params\\\": [\n            3\n            ],\n            \\\"type\\\": \\\"gt\\\"\n        },\n        \\\"operator\\\": {\n            \\\"type\\\": \\\"and\\\"\n        },\n        \\\"query\\\": {\n            \\\"params\\\": [\n            \\\"A\\\"\n            ]\n        },\n        \\\"reducer\\\": {\n            \\\"params\\\": [],\n            \\\"type\\\": \\\"last\\\"\n        },\n        \\\"type\\\": \\\"query\\\"\n        }\n    ],\n    \\\"datasource\\\": {\n        \\\"type\\\": \\\"__expr__\\\",\n        \\\"uid\\\": \\\"-100\\\"\n    },\n    \\\"hide\\\": false,\n    \\\"intervalMs\\\": 1000,\n    \\\"maxDataPoints\\\": 43200,\n    \\\"refId\\\": \\\"B\\\",\n    \\\"type\\\": \\\"classic_conditions\\\"\n}\n\"\"\",\n            },\n        ],\n    }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var ruleFolder = new Grafana.Oss.Folder(\"rule_folder\", new()\n    {\n        Title = \"My Alert Rule Folder\",\n    });\n\n    var myAlertRule = new Grafana.Alerting.RuleGroup(\"my_alert_rule\", new()\n    {\n        Name = \"My Rule Group\",\n        FolderUid = ruleFolder.Uid,\n        IntervalSeconds = 240,\n        OrgId = \"1\",\n        Rules = new[]\n        {\n            new Grafana.Alerting.Inputs.RuleGroupRuleArgs\n            {\n                Name = \"My Alert Rule 1\",\n                For = \"2m\",\n                Condition = \"B\",\n                NoDataState = \"NoData\",\n                ExecErrState = \"Alerting\",\n                Annotations = \n                {\n                    { \"a\", \"b\" },\n                    { \"c\", \"d\" },\n                },\n                Labels = \n                {\n                    { \"e\", \"f\" },\n                    { \"g\", \"h\" },\n                },\n                IsPaused = false,\n                Datas = new[]\n                {\n                    new Grafana.Alerting.Inputs.RuleGroupRuleDataArgs\n                    {\n                        RefId = \"A\",\n                        QueryType = \"\",\n                        RelativeTimeRange = new Grafana.Alerting.Inputs.RuleGroupRuleDataRelativeTimeRangeArgs\n                        {\n                            From = 600,\n                            To = 0,\n                        },\n                        DatasourceUid = \"PD8C576611E62080A\",\n                        Model = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n                        {\n                            [\"hide\"] = false,\n                            [\"intervalMs\"] = 1000,\n                            [\"maxDataPoints\"] = 43200,\n                            [\"refId\"] = \"A\",\n                        }),\n                    },\n                    new Grafana.Alerting.Inputs.RuleGroupRuleDataArgs\n                    {\n                        RefId = \"B\",\n                        QueryType = \"\",\n                        RelativeTimeRange = new Grafana.Alerting.Inputs.RuleGroupRuleDataRelativeTimeRangeArgs\n                        {\n                            From = 0,\n                            To = 0,\n                        },\n                        DatasourceUid = \"-100\",\n                        Model = @\"{\n    \\\"\"conditions\\\"\": [\n        {\n        \\\"\"evaluator\\\"\": {\n            \\\"\"params\\\"\": [\n            3\n            ],\n            \\\"\"type\\\"\": \\\"\"gt\\\"\"\n        },\n        \\\"\"operator\\\"\": {\n            \\\"\"type\\\"\": \\\"\"and\\\"\"\n        },\n        \\\"\"query\\\"\": {\n            \\\"\"params\\\"\": [\n            \\\"\"A\\\"\"\n            ]\n        },\n        \\\"\"reducer\\\"\": {\n            \\\"\"params\\\"\": [],\n            \\\"\"type\\\"\": \\\"\"last\\\"\"\n        },\n        \\\"\"type\\\"\": \\\"\"query\\\"\"\n        }\n    ],\n    \\\"\"datasource\\\"\": {\n        \\\"\"type\\\"\": \\\"\"__expr__\\\"\",\n        \\\"\"uid\\\"\": \\\"\"-100\\\"\"\n    },\n    \\\"\"hide\\\"\": false,\n    \\\"\"intervalMs\\\"\": 1000,\n    \\\"\"maxDataPoints\\\"\": 43200,\n    \\\"\"refId\\\"\": \\\"\"B\\\"\",\n    \\\"\"type\\\"\": \\\"\"classic_conditions\\\"\"\n}\n\",\n                    },\n                },\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/alerting\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\truleFolder, err := oss.NewFolder(ctx, \"rule_folder\", \u0026oss.FolderArgs{\n\t\t\tTitle: pulumi.String(\"My Alert Rule Folder\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"hide\":          false,\n\t\t\t\"intervalMs\":    1000,\n\t\t\t\"maxDataPoints\": 43200,\n\t\t\t\"refId\":         \"A\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\t_, err = alerting.NewRuleGroup(ctx, \"my_alert_rule\", \u0026alerting.RuleGroupArgs{\n\t\t\tName:            pulumi.String(\"My Rule Group\"),\n\t\t\tFolderUid:       ruleFolder.Uid,\n\t\t\tIntervalSeconds: pulumi.Int(240),\n\t\t\tOrgId:           pulumi.String(\"1\"),\n\t\t\tRules: alerting.RuleGroupRuleArray{\n\t\t\t\t\u0026alerting.RuleGroupRuleArgs{\n\t\t\t\t\tName:         pulumi.String(\"My Alert Rule 1\"),\n\t\t\t\t\tFor:          pulumi.String(\"2m\"),\n\t\t\t\t\tCondition:    pulumi.String(\"B\"),\n\t\t\t\t\tNoDataState:  pulumi.String(\"NoData\"),\n\t\t\t\t\tExecErrState: pulumi.String(\"Alerting\"),\n\t\t\t\t\tAnnotations: pulumi.StringMap{\n\t\t\t\t\t\t\"a\": pulumi.String(\"b\"),\n\t\t\t\t\t\t\"c\": pulumi.String(\"d\"),\n\t\t\t\t\t},\n\t\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\t\"e\": pulumi.String(\"f\"),\n\t\t\t\t\t\t\"g\": pulumi.String(\"h\"),\n\t\t\t\t\t},\n\t\t\t\t\tIsPaused: pulumi.Bool(false),\n\t\t\t\t\tDatas: alerting.RuleGroupRuleDataArray{\n\t\t\t\t\t\t\u0026alerting.RuleGroupRuleDataArgs{\n\t\t\t\t\t\t\tRefId:     pulumi.String(\"A\"),\n\t\t\t\t\t\t\tQueryType: pulumi.String(\"\"),\n\t\t\t\t\t\t\tRelativeTimeRange: \u0026alerting.RuleGroupRuleDataRelativeTimeRangeArgs{\n\t\t\t\t\t\t\t\tFrom: pulumi.Int(600),\n\t\t\t\t\t\t\t\tTo:   pulumi.Int(0),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tDatasourceUid: pulumi.String(\"PD8C576611E62080A\"),\n\t\t\t\t\t\t\tModel:         pulumi.String(json0),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026alerting.RuleGroupRuleDataArgs{\n\t\t\t\t\t\t\tRefId:     pulumi.String(\"B\"),\n\t\t\t\t\t\t\tQueryType: pulumi.String(\"\"),\n\t\t\t\t\t\t\tRelativeTimeRange: \u0026alerting.RuleGroupRuleDataRelativeTimeRangeArgs{\n\t\t\t\t\t\t\t\tFrom: pulumi.Int(0),\n\t\t\t\t\t\t\t\tTo:   pulumi.Int(0),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tDatasourceUid: pulumi.String(\"-100\"),\n\t\t\t\t\t\t\tModel: pulumi.String(`{\n    \\\"conditions\\\": [\n        {\n        \\\"evaluator\\\": {\n            \\\"params\\\": [\n            3\n            ],\n            \\\"type\\\": \\\"gt\\\"\n        },\n        \\\"operator\\\": {\n            \\\"type\\\": \\\"and\\\"\n        },\n        \\\"query\\\": {\n            \\\"params\\\": [\n            \\\"A\\\"\n            ]\n        },\n        \\\"reducer\\\": {\n            \\\"params\\\": [],\n            \\\"type\\\": \\\"last\\\"\n        },\n        \\\"type\\\": \\\"query\\\"\n        }\n    ],\n    \\\"datasource\\\": {\n        \\\"type\\\": \\\"__expr__\\\",\n        \\\"uid\\\": \\\"-100\\\"\n    },\n    \\\"hide\\\": false,\n    \\\"intervalMs\\\": 1000,\n    \\\"maxDataPoints\\\": 43200,\n    \\\"refId\\\": \\\"B\\\",\n    \\\"type\\\": \\\"classic_conditions\\\"\n}\n`),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.Folder;\nimport com.pulumi.grafana.oss.FolderArgs;\nimport com.pulumi.grafana.alerting.RuleGroup;\nimport com.pulumi.grafana.alerting.RuleGroupArgs;\nimport com.pulumi.grafana.alerting.inputs.RuleGroupRuleArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var ruleFolder = new Folder(\"ruleFolder\", FolderArgs.builder()\n            .title(\"My Alert Rule Folder\")\n            .build());\n\n        var myAlertRule = new RuleGroup(\"myAlertRule\", RuleGroupArgs.builder()\n            .name(\"My Rule Group\")\n            .folderUid(ruleFolder.uid())\n            .intervalSeconds(240)\n            .orgId(\"1\")\n            .rules(RuleGroupRuleArgs.builder()\n                .name(\"My Alert Rule 1\")\n                .for_(\"2m\")\n                .condition(\"B\")\n                .noDataState(\"NoData\")\n                .execErrState(\"Alerting\")\n                .annotations(Map.ofEntries(\n                    Map.entry(\"a\", \"b\"),\n                    Map.entry(\"c\", \"d\")\n                ))\n                .labels(Map.ofEntries(\n                    Map.entry(\"e\", \"f\"),\n                    Map.entry(\"g\", \"h\")\n                ))\n                .isPaused(false)\n                .datas(                \n                    RuleGroupRuleDataArgs.builder()\n                        .refId(\"A\")\n                        .queryType(\"\")\n                        .relativeTimeRange(RuleGroupRuleDataRelativeTimeRangeArgs.builder()\n                            .from(600)\n                            .to(0)\n                            .build())\n                        .datasourceUid(\"PD8C576611E62080A\")\n                        .model(serializeJson(\n                            jsonObject(\n                                jsonProperty(\"hide\", false),\n                                jsonProperty(\"intervalMs\", 1000),\n                                jsonProperty(\"maxDataPoints\", 43200),\n                                jsonProperty(\"refId\", \"A\")\n                            )))\n                        .build(),\n                    RuleGroupRuleDataArgs.builder()\n                        .refId(\"B\")\n                        .queryType(\"\")\n                        .relativeTimeRange(RuleGroupRuleDataRelativeTimeRangeArgs.builder()\n                            .from(0)\n                            .to(0)\n                            .build())\n                        .datasourceUid(\"-100\")\n                        .model(\"\"\"\n{\n    \\\"conditions\\\": [\n        {\n        \\\"evaluator\\\": {\n            \\\"params\\\": [\n            3\n            ],\n            \\\"type\\\": \\\"gt\\\"\n        },\n        \\\"operator\\\": {\n            \\\"type\\\": \\\"and\\\"\n        },\n        \\\"query\\\": {\n            \\\"params\\\": [\n            \\\"A\\\"\n            ]\n        },\n        \\\"reducer\\\": {\n            \\\"params\\\": [],\n            \\\"type\\\": \\\"last\\\"\n        },\n        \\\"type\\\": \\\"query\\\"\n        }\n    ],\n    \\\"datasource\\\": {\n        \\\"type\\\": \\\"__expr__\\\",\n        \\\"uid\\\": \\\"-100\\\"\n    },\n    \\\"hide\\\": false,\n    \\\"intervalMs\\\": 1000,\n    \\\"maxDataPoints\\\": 43200,\n    \\\"refId\\\": \\\"B\\\",\n    \\\"type\\\": \\\"classic_conditions\\\"\n}\n                        \"\"\")\n                        .build())\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  ruleFolder:\n    type: grafana:oss:Folder\n    name: rule_folder\n    properties:\n      title: My Alert Rule Folder\n  myAlertRule:\n    type: grafana:alerting:RuleGroup\n    name: my_alert_rule\n    properties:\n      name: My Rule Group\n      folderUid: ${ruleFolder.uid}\n      intervalSeconds: 240\n      orgId: 1\n      rules:\n        - name: My Alert Rule 1\n          for: 2m\n          condition: B\n          noDataState: NoData\n          execErrState: Alerting\n          annotations:\n            a: b\n            c: d\n          labels:\n            e: f\n            g: h\n          isPaused: false\n          datas:\n            - refId: A\n              queryType: \"\"\n              relativeTimeRange:\n                from: 600\n                to: 0\n              datasourceUid: PD8C576611E62080A\n              model:\n                fn::toJSON:\n                  hide: false\n                  intervalMs: 1000\n                  maxDataPoints: 43200\n                  refId: A\n            - refId: B\n              queryType: \"\"\n              relativeTimeRange:\n                from: 0\n                to: 0\n              datasourceUid: '-100'\n              model: |\n                {\n                    \\\"conditions\\\": [\n                        {\n                        \\\"evaluator\\\": {\n                            \\\"params\\\": [\n                            3\n                            ],\n                            \\\"type\\\": \\\"gt\\\"\n                        },\n                        \\\"operator\\\": {\n                            \\\"type\\\": \\\"and\\\"\n                        },\n                        \\\"query\\\": {\n                            \\\"params\\\": [\n                            \\\"A\\\"\n                            ]\n                        },\n                        \\\"reducer\\\": {\n                            \\\"params\\\": [],\n                            \\\"type\\\": \\\"last\\\"\n                        },\n                        \\\"type\\\": \\\"query\\\"\n                        }\n                    ],\n                    \\\"datasource\\\": {\n                        \\\"type\\\": \\\"__expr__\\\",\n                        \\\"uid\\\": \\\"-100\\\"\n                    },\n                    \\\"hide\\\": false,\n                    \\\"intervalMs\\\": 1000,\n                    \\\"maxDataPoints\\\": 43200,\n                    \\\"refId\\\": \\\"B\\\",\n                    \\\"type\\\": \\\"classic_conditions\\\"\n                }\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:alerting/ruleGroup:RuleGroup name \"{{ folderUID }}:{{ title }}\"\n```\n\n```sh\n$ pulumi import grafana:alerting/ruleGroup:RuleGroup name \"{{ orgID }}:{{ folderUID }}:{{ title }}\"\n```\n\n","properties":{"disableProvenance":{"type":"boolean"},"folderUid":{"type":"string","description":"The UID of the folder that the group belongs to.\n"},"intervalSeconds":{"type":"integer","description":"The interval, in seconds, at which all rules in the group are evaluated. If a group contains many rules, the rules are evaluated sequentially.\n"},"name":{"type":"string","description":"The name of the rule group.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n"},"rules":{"type":"array","items":{"$ref":"#/types/grafana:alerting/RuleGroupRule:RuleGroupRule"},"description":"The rules within the group.\n"}},"required":["folderUid","intervalSeconds","name","rules"],"inputProperties":{"disableProvenance":{"type":"boolean"},"folderUid":{"type":"string","description":"The UID of the folder that the group belongs to.\n","willReplaceOnChanges":true},"intervalSeconds":{"type":"integer","description":"The interval, in seconds, at which all rules in the group are evaluated. If a group contains many rules, the rules are evaluated sequentially.\n"},"name":{"type":"string","description":"The name of the rule group.\n","willReplaceOnChanges":true},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"rules":{"type":"array","items":{"$ref":"#/types/grafana:alerting/RuleGroupRule:RuleGroupRule"},"description":"The rules within the group.\n"}},"requiredInputs":["folderUid","intervalSeconds","rules"],"stateInputs":{"description":"Input properties used for looking up and filtering RuleGroup resources.\n","properties":{"disableProvenance":{"type":"boolean"},"folderUid":{"type":"string","description":"The UID of the folder that the group belongs to.\n","willReplaceOnChanges":true},"intervalSeconds":{"type":"integer","description":"The interval, in seconds, at which all rules in the group are evaluated. If a group contains many rules, the rules are evaluated sequentially.\n"},"name":{"type":"string","description":"The name of the rule group.\n","willReplaceOnChanges":true},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"rules":{"type":"array","items":{"$ref":"#/types/grafana:alerting/RuleGroupRule:RuleGroupRule"},"description":"The rules within the group.\n"}},"type":"object"},"aliases":[{"type":"grafana:index/ruleGroup:RuleGroup"}]},"grafana:assert/customModelRules:CustomModelRules":{"description":"Manages Knowledge Graph Custom Model Rules through the Grafana API.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst test = new grafana.assert.CustomModelRules(\"test\", {\n    name: \"test-anything\",\n    rules: {\n        entities: [{\n            type: \"Service\",\n            name: \"workload | service | job\",\n            scope: {\n                namespace: \"namespace\",\n                env: \"asserts_env\",\n                site: \"asserts_site\",\n            },\n            lookup: {\n                workload: \"workload | deployment | statefulset | daemonset | replicaset\",\n                service: \"service\",\n                job: \"job\",\n                proxy_job: \"job\",\n            },\n            definedBies: [\n                {\n                    query: \"up{job!=''}\",\n                    disabled: false,\n                    labelValues: {\n                        service: \"service\",\n                        job: \"job\",\n                    },\n                    literals: {\n                        _source: \"up_query\",\n                    },\n                },\n                {\n                    query: \"up{job='disabled'}\",\n                    disabled: true,\n                },\n            ],\n        }],\n    },\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\ntest = grafana.assert_.CustomModelRules(\"test\",\n    name=\"test-anything\",\n    rules={\n        \"entities\": [{\n            \"type\": \"Service\",\n            \"name\": \"workload | service | job\",\n            \"scope\": {\n                \"namespace\": \"namespace\",\n                \"env\": \"asserts_env\",\n                \"site\": \"asserts_site\",\n            },\n            \"lookup\": {\n                \"workload\": \"workload | deployment | statefulset | daemonset | replicaset\",\n                \"service\": \"service\",\n                \"job\": \"job\",\n                \"proxy_job\": \"job\",\n            },\n            \"defined_bies\": [\n                {\n                    \"query\": \"up{job!=''}\",\n                    \"disabled\": False,\n                    \"label_values\": {\n                        \"service\": \"service\",\n                        \"job\": \"job\",\n                    },\n                    \"literals\": {\n                        \"_source\": \"up_query\",\n                    },\n                },\n                {\n                    \"query\": \"up{job='disabled'}\",\n                    \"disabled\": True,\n                },\n            ],\n        }],\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var test = new Grafana.Assert.CustomModelRules(\"test\", new()\n    {\n        Name = \"test-anything\",\n        Rules = new Grafana.Assert.Inputs.CustomModelRulesRulesArgs\n        {\n            Entities = new[]\n            {\n                new Grafana.Assert.Inputs.CustomModelRulesRulesEntityArgs\n                {\n                    Type = \"Service\",\n                    Name = \"workload | service | job\",\n                    Scope = \n                    {\n                        { \"namespace\", \"namespace\" },\n                        { \"env\", \"asserts_env\" },\n                        { \"site\", \"asserts_site\" },\n                    },\n                    Lookup = \n                    {\n                        { \"workload\", \"workload | deployment | statefulset | daemonset | replicaset\" },\n                        { \"service\", \"service\" },\n                        { \"job\", \"job\" },\n                        { \"proxy_job\", \"job\" },\n                    },\n                    DefinedBies = new[]\n                    {\n                        new Grafana.Assert.Inputs.CustomModelRulesRulesEntityDefinedByArgs\n                        {\n                            Query = \"up{job!=''}\",\n                            Disabled = false,\n                            LabelValues = \n                            {\n                                { \"service\", \"service\" },\n                                { \"job\", \"job\" },\n                            },\n                            Literals = \n                            {\n                                { \"_source\", \"up_query\" },\n                            },\n                        },\n                        new Grafana.Assert.Inputs.CustomModelRulesRulesEntityDefinedByArgs\n                        {\n                            Query = \"up{job='disabled'}\",\n                            Disabled = true,\n                        },\n                    },\n                },\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/assert\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := assert.NewCustomModelRules(ctx, \"test\", \u0026assert.CustomModelRulesArgs{\n\t\t\tName: pulumi.String(\"test-anything\"),\n\t\t\tRules: \u0026assert.CustomModelRulesRulesArgs{\n\t\t\t\tEntities: assert.CustomModelRulesRulesEntityArray{\n\t\t\t\t\t\u0026assert.CustomModelRulesRulesEntityArgs{\n\t\t\t\t\t\tType: pulumi.String(\"Service\"),\n\t\t\t\t\t\tName: pulumi.String(\"workload | service | job\"),\n\t\t\t\t\t\tScope: pulumi.StringMap{\n\t\t\t\t\t\t\t\"namespace\": pulumi.String(\"namespace\"),\n\t\t\t\t\t\t\t\"env\":       pulumi.String(\"asserts_env\"),\n\t\t\t\t\t\t\t\"site\":      pulumi.String(\"asserts_site\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tLookup: pulumi.StringMap{\n\t\t\t\t\t\t\t\"workload\":  pulumi.String(\"workload | deployment | statefulset | daemonset | replicaset\"),\n\t\t\t\t\t\t\t\"service\":   pulumi.String(\"service\"),\n\t\t\t\t\t\t\t\"job\":       pulumi.String(\"job\"),\n\t\t\t\t\t\t\t\"proxy_job\": pulumi.String(\"job\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDefinedBies: assert.CustomModelRulesRulesEntityDefinedByArray{\n\t\t\t\t\t\t\t\u0026assert.CustomModelRulesRulesEntityDefinedByArgs{\n\t\t\t\t\t\t\t\tQuery:    pulumi.String(\"up{job!=''}\"),\n\t\t\t\t\t\t\t\tDisabled: pulumi.Bool(false),\n\t\t\t\t\t\t\t\tLabelValues: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\t\"service\": pulumi.String(\"service\"),\n\t\t\t\t\t\t\t\t\t\"job\":     pulumi.String(\"job\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tLiterals: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\t\"_source\": pulumi.String(\"up_query\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\u0026assert.CustomModelRulesRulesEntityDefinedByArgs{\n\t\t\t\t\t\t\t\tQuery:    pulumi.String(\"up{job='disabled'}\"),\n\t\t\t\t\t\t\t\tDisabled: pulumi.Bool(true),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.assert.CustomModelRules;\nimport com.pulumi.grafana.assert.CustomModelRulesArgs;\nimport com.pulumi.grafana.assert.inputs.CustomModelRulesRulesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var test = new CustomModelRules(\"test\", CustomModelRulesArgs.builder()\n            .name(\"test-anything\")\n            .rules(CustomModelRulesRulesArgs.builder()\n                .entities(CustomModelRulesRulesEntityArgs.builder()\n                    .type(\"Service\")\n                    .name(\"workload | service | job\")\n                    .scope(Map.ofEntries(\n                        Map.entry(\"namespace\", \"namespace\"),\n                        Map.entry(\"env\", \"asserts_env\"),\n                        Map.entry(\"site\", \"asserts_site\")\n                    ))\n                    .lookup(Map.ofEntries(\n                        Map.entry(\"workload\", \"workload | deployment | statefulset | daemonset | replicaset\"),\n                        Map.entry(\"service\", \"service\"),\n                        Map.entry(\"job\", \"job\"),\n                        Map.entry(\"proxy_job\", \"job\")\n                    ))\n                    .definedBies(                    \n                        CustomModelRulesRulesEntityDefinedByArgs.builder()\n                            .query(\"up{job!=''}\")\n                            .disabled(false)\n                            .labelValues(Map.ofEntries(\n                                Map.entry(\"service\", \"service\"),\n                                Map.entry(\"job\", \"job\")\n                            ))\n                            .literals(Map.of(\"_source\", \"up_query\"))\n                            .build(),\n                        CustomModelRulesRulesEntityDefinedByArgs.builder()\n                            .query(\"up{job='disabled'}\")\n                            .disabled(true)\n                            .build())\n                    .build())\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  test:\n    type: grafana:assert:CustomModelRules\n    properties:\n      name: test-anything\n      rules:\n        entities:\n          - type: Service\n            name: workload | service | job\n            scope:\n              namespace: namespace\n              env: asserts_env\n              site: asserts_site\n            lookup:\n              workload: workload | deployment | statefulset | daemonset | replicaset\n              service: service\n              job: job\n              proxy_job: job\n            definedBies:\n              - query: up{job!=''}\n                disabled: false\n                labelValues:\n                  service: service\n                  job: job\n                literals:\n                  _source: up_query\n              - query: up{job='disabled'}\n                disabled: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:assert/customModelRules:CustomModelRules name \"{{ name }}\"\n```\n\n","properties":{"name":{"type":"string","description":"The name of the custom model rules.\n"},"rules":{"$ref":"#/types/grafana:assert/CustomModelRulesRules:CustomModelRulesRules","description":"The rules configuration for the custom model rules.\n"}},"required":["name","rules"],"inputProperties":{"name":{"type":"string","description":"The name of the custom model rules.\n","willReplaceOnChanges":true},"rules":{"$ref":"#/types/grafana:assert/CustomModelRulesRules:CustomModelRulesRules","description":"The rules configuration for the custom model rules.\n"}},"requiredInputs":["rules"],"stateInputs":{"description":"Input properties used for looking up and filtering CustomModelRules resources.\n","properties":{"name":{"type":"string","description":"The name of the custom model rules.\n","willReplaceOnChanges":true},"rules":{"$ref":"#/types/grafana:assert/CustomModelRulesRules:CustomModelRulesRules","description":"The rules configuration for the custom model rules.\n"}},"type":"object"}},"grafana:assert/logConfig:LogConfig":{"description":"Manages Knowledge Graph Log Configuration through Grafana API.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst production = new grafana.assert.LogConfig(\"production\", {\n    name: \"production\",\n    priority: 1000,\n    defaultConfig: false,\n    dataSourceUid: \"grafanacloud-logs\",\n    errorLabel: \"error\",\n    matches: [\n        {\n            property: \"asserts_entity_type\",\n            op: \"=\",\n            values: [\"Service\"],\n        },\n        {\n            property: \"environment\",\n            op: \"=\",\n            values: [\n                \"production\",\n                \"staging\",\n            ],\n        },\n        {\n            property: \"site\",\n            op: \"=\",\n            values: [\n                \"us-east-1\",\n                \"us-west-2\",\n            ],\n        },\n    ],\n    entityPropertyToLogLabelMapping: {\n        otel_namespace: \"service_namespace\",\n        otel_service: \"service_name\",\n        environment: \"env\",\n        site: \"region\",\n    },\n    filterBySpanId: true,\n    filterByTraceId: true,\n});\nconst development = new grafana.assert.LogConfig(\"development\", {\n    name: \"development\",\n    priority: 2000,\n    defaultConfig: true,\n    dataSourceUid: \"elasticsearch-dev\",\n    errorLabel: \"error\",\n    matches: [\n        {\n            property: \"asserts_entity_type\",\n            op: \"=\",\n            values: [\"Service\"],\n        },\n        {\n            property: \"environment\",\n            op: \"=\",\n            values: [\n                \"development\",\n                \"testing\",\n            ],\n        },\n        {\n            property: \"site\",\n            op: \"=\",\n            values: [\"us-east-1\"],\n        },\n        {\n            property: \"service\",\n            op: \"=\",\n            values: [\"api\"],\n        },\n    ],\n    entityPropertyToLogLabelMapping: {\n        otel_namespace: \"service_namespace\",\n        otel_service: \"service_name\",\n        environment: \"env\",\n        site: \"region\",\n        service: \"app\",\n    },\n    filterBySpanId: true,\n    filterByTraceId: true,\n});\nconst minimal = new grafana.assert.LogConfig(\"minimal\", {\n    name: \"minimal\",\n    priority: 3000,\n    defaultConfig: false,\n    dataSourceUid: \"loki-minimal\",\n    matches: [{\n        property: \"asserts_entity_type\",\n        op: \"IS NOT NULL\",\n        values: [],\n    }],\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\nproduction = grafana.assert_.LogConfig(\"production\",\n    name=\"production\",\n    priority=1000,\n    default_config=False,\n    data_source_uid=\"grafanacloud-logs\",\n    error_label=\"error\",\n    matches=[\n        {\n            \"property\": \"asserts_entity_type\",\n            \"op\": \"=\",\n            \"values\": [\"Service\"],\n        },\n        {\n            \"property\": \"environment\",\n            \"op\": \"=\",\n            \"values\": [\n                \"production\",\n                \"staging\",\n            ],\n        },\n        {\n            \"property\": \"site\",\n            \"op\": \"=\",\n            \"values\": [\n                \"us-east-1\",\n                \"us-west-2\",\n            ],\n        },\n    ],\n    entity_property_to_log_label_mapping={\n        \"otel_namespace\": \"service_namespace\",\n        \"otel_service\": \"service_name\",\n        \"environment\": \"env\",\n        \"site\": \"region\",\n    },\n    filter_by_span_id=True,\n    filter_by_trace_id=True)\ndevelopment = grafana.assert_.LogConfig(\"development\",\n    name=\"development\",\n    priority=2000,\n    default_config=True,\n    data_source_uid=\"elasticsearch-dev\",\n    error_label=\"error\",\n    matches=[\n        {\n            \"property\": \"asserts_entity_type\",\n            \"op\": \"=\",\n            \"values\": [\"Service\"],\n        },\n        {\n            \"property\": \"environment\",\n            \"op\": \"=\",\n            \"values\": [\n                \"development\",\n                \"testing\",\n            ],\n        },\n        {\n            \"property\": \"site\",\n            \"op\": \"=\",\n            \"values\": [\"us-east-1\"],\n        },\n        {\n            \"property\": \"service\",\n            \"op\": \"=\",\n            \"values\": [\"api\"],\n        },\n    ],\n    entity_property_to_log_label_mapping={\n        \"otel_namespace\": \"service_namespace\",\n        \"otel_service\": \"service_name\",\n        \"environment\": \"env\",\n        \"site\": \"region\",\n        \"service\": \"app\",\n    },\n    filter_by_span_id=True,\n    filter_by_trace_id=True)\nminimal = grafana.assert_.LogConfig(\"minimal\",\n    name=\"minimal\",\n    priority=3000,\n    default_config=False,\n    data_source_uid=\"loki-minimal\",\n    matches=[{\n        \"property\": \"asserts_entity_type\",\n        \"op\": \"IS NOT NULL\",\n        \"values\": [],\n    }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var production = new Grafana.Assert.LogConfig(\"production\", new()\n    {\n        Name = \"production\",\n        Priority = 1000,\n        DefaultConfig = false,\n        DataSourceUid = \"grafanacloud-logs\",\n        ErrorLabel = \"error\",\n        Matches = new[]\n        {\n            new Grafana.Assert.Inputs.LogConfigMatchArgs\n            {\n                Property = \"asserts_entity_type\",\n                Op = \"=\",\n                Values = new[]\n                {\n                    \"Service\",\n                },\n            },\n            new Grafana.Assert.Inputs.LogConfigMatchArgs\n            {\n                Property = \"environment\",\n                Op = \"=\",\n                Values = new[]\n                {\n                    \"production\",\n                    \"staging\",\n                },\n            },\n            new Grafana.Assert.Inputs.LogConfigMatchArgs\n            {\n                Property = \"site\",\n                Op = \"=\",\n                Values = new[]\n                {\n                    \"us-east-1\",\n                    \"us-west-2\",\n                },\n            },\n        },\n        EntityPropertyToLogLabelMapping = \n        {\n            { \"otel_namespace\", \"service_namespace\" },\n            { \"otel_service\", \"service_name\" },\n            { \"environment\", \"env\" },\n            { \"site\", \"region\" },\n        },\n        FilterBySpanId = true,\n        FilterByTraceId = true,\n    });\n\n    var development = new Grafana.Assert.LogConfig(\"development\", new()\n    {\n        Name = \"development\",\n        Priority = 2000,\n        DefaultConfig = true,\n        DataSourceUid = \"elasticsearch-dev\",\n        ErrorLabel = \"error\",\n        Matches = new[]\n        {\n            new Grafana.Assert.Inputs.LogConfigMatchArgs\n            {\n                Property = \"asserts_entity_type\",\n                Op = \"=\",\n                Values = new[]\n                {\n                    \"Service\",\n                },\n            },\n            new Grafana.Assert.Inputs.LogConfigMatchArgs\n            {\n                Property = \"environment\",\n                Op = \"=\",\n                Values = new[]\n                {\n                    \"development\",\n                    \"testing\",\n                },\n            },\n            new Grafana.Assert.Inputs.LogConfigMatchArgs\n            {\n                Property = \"site\",\n                Op = \"=\",\n                Values = new[]\n                {\n                    \"us-east-1\",\n                },\n            },\n            new Grafana.Assert.Inputs.LogConfigMatchArgs\n            {\n                Property = \"service\",\n                Op = \"=\",\n                Values = new[]\n                {\n                    \"api\",\n                },\n            },\n        },\n        EntityPropertyToLogLabelMapping = \n        {\n            { \"otel_namespace\", \"service_namespace\" },\n            { \"otel_service\", \"service_name\" },\n            { \"environment\", \"env\" },\n            { \"site\", \"region\" },\n            { \"service\", \"app\" },\n        },\n        FilterBySpanId = true,\n        FilterByTraceId = true,\n    });\n\n    var minimal = new Grafana.Assert.LogConfig(\"minimal\", new()\n    {\n        Name = \"minimal\",\n        Priority = 3000,\n        DefaultConfig = false,\n        DataSourceUid = \"loki-minimal\",\n        Matches = new[]\n        {\n            new Grafana.Assert.Inputs.LogConfigMatchArgs\n            {\n                Property = \"asserts_entity_type\",\n                Op = \"IS NOT NULL\",\n                Values = new() { },\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/assert\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := assert.NewLogConfig(ctx, \"production\", \u0026assert.LogConfigArgs{\n\t\t\tName:          pulumi.String(\"production\"),\n\t\t\tPriority:      pulumi.Int(1000),\n\t\t\tDefaultConfig: pulumi.Bool(false),\n\t\t\tDataSourceUid: pulumi.String(\"grafanacloud-logs\"),\n\t\t\tErrorLabel:    pulumi.String(\"error\"),\n\t\t\tMatches: assert.LogConfigMatchArray{\n\t\t\t\t\u0026assert.LogConfigMatchArgs{\n\t\t\t\t\tProperty: pulumi.String(\"asserts_entity_type\"),\n\t\t\t\t\tOp:       pulumi.String(\"=\"),\n\t\t\t\t\tValues: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"Service\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026assert.LogConfigMatchArgs{\n\t\t\t\t\tProperty: pulumi.String(\"environment\"),\n\t\t\t\t\tOp:       pulumi.String(\"=\"),\n\t\t\t\t\tValues: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"production\"),\n\t\t\t\t\t\tpulumi.String(\"staging\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026assert.LogConfigMatchArgs{\n\t\t\t\t\tProperty: pulumi.String(\"site\"),\n\t\t\t\t\tOp:       pulumi.String(\"=\"),\n\t\t\t\t\tValues: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"us-east-1\"),\n\t\t\t\t\t\tpulumi.String(\"us-west-2\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tEntityPropertyToLogLabelMapping: pulumi.StringMap{\n\t\t\t\t\"otel_namespace\": pulumi.String(\"service_namespace\"),\n\t\t\t\t\"otel_service\":   pulumi.String(\"service_name\"),\n\t\t\t\t\"environment\":    pulumi.String(\"env\"),\n\t\t\t\t\"site\":           pulumi.String(\"region\"),\n\t\t\t},\n\t\t\tFilterBySpanId:  pulumi.Bool(true),\n\t\t\tFilterByTraceId: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = assert.NewLogConfig(ctx, \"development\", \u0026assert.LogConfigArgs{\n\t\t\tName:          pulumi.String(\"development\"),\n\t\t\tPriority:      pulumi.Int(2000),\n\t\t\tDefaultConfig: pulumi.Bool(true),\n\t\t\tDataSourceUid: pulumi.String(\"elasticsearch-dev\"),\n\t\t\tErrorLabel:    pulumi.String(\"error\"),\n\t\t\tMatches: assert.LogConfigMatchArray{\n\t\t\t\t\u0026assert.LogConfigMatchArgs{\n\t\t\t\t\tProperty: pulumi.String(\"asserts_entity_type\"),\n\t\t\t\t\tOp:       pulumi.String(\"=\"),\n\t\t\t\t\tValues: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"Service\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026assert.LogConfigMatchArgs{\n\t\t\t\t\tProperty: pulumi.String(\"environment\"),\n\t\t\t\t\tOp:       pulumi.String(\"=\"),\n\t\t\t\t\tValues: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"development\"),\n\t\t\t\t\t\tpulumi.String(\"testing\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026assert.LogConfigMatchArgs{\n\t\t\t\t\tProperty: pulumi.String(\"site\"),\n\t\t\t\t\tOp:       pulumi.String(\"=\"),\n\t\t\t\t\tValues: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"us-east-1\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026assert.LogConfigMatchArgs{\n\t\t\t\t\tProperty: pulumi.String(\"service\"),\n\t\t\t\t\tOp:       pulumi.String(\"=\"),\n\t\t\t\t\tValues: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"api\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tEntityPropertyToLogLabelMapping: pulumi.StringMap{\n\t\t\t\t\"otel_namespace\": pulumi.String(\"service_namespace\"),\n\t\t\t\t\"otel_service\":   pulumi.String(\"service_name\"),\n\t\t\t\t\"environment\":    pulumi.String(\"env\"),\n\t\t\t\t\"site\":           pulumi.String(\"region\"),\n\t\t\t\t\"service\":        pulumi.String(\"app\"),\n\t\t\t},\n\t\t\tFilterBySpanId:  pulumi.Bool(true),\n\t\t\tFilterByTraceId: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = assert.NewLogConfig(ctx, \"minimal\", \u0026assert.LogConfigArgs{\n\t\t\tName:          pulumi.String(\"minimal\"),\n\t\t\tPriority:      pulumi.Int(3000),\n\t\t\tDefaultConfig: pulumi.Bool(false),\n\t\t\tDataSourceUid: pulumi.String(\"loki-minimal\"),\n\t\t\tMatches: assert.LogConfigMatchArray{\n\t\t\t\t\u0026assert.LogConfigMatchArgs{\n\t\t\t\t\tProperty: pulumi.String(\"asserts_entity_type\"),\n\t\t\t\t\tOp:       pulumi.String(\"IS NOT NULL\"),\n\t\t\t\t\tValues:   pulumi.StringArray{},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.assert.LogConfig;\nimport com.pulumi.grafana.assert.LogConfigArgs;\nimport com.pulumi.grafana.assert.inputs.LogConfigMatchArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var production = new LogConfig(\"production\", LogConfigArgs.builder()\n            .name(\"production\")\n            .priority(1000)\n            .defaultConfig(false)\n            .dataSourceUid(\"grafanacloud-logs\")\n            .errorLabel(\"error\")\n            .matches(            \n                LogConfigMatchArgs.builder()\n                    .property(\"asserts_entity_type\")\n                    .op(\"=\")\n                    .values(\"Service\")\n                    .build(),\n                LogConfigMatchArgs.builder()\n                    .property(\"environment\")\n                    .op(\"=\")\n                    .values(                    \n                        \"production\",\n                        \"staging\")\n                    .build(),\n                LogConfigMatchArgs.builder()\n                    .property(\"site\")\n                    .op(\"=\")\n                    .values(                    \n                        \"us-east-1\",\n                        \"us-west-2\")\n                    .build())\n            .entityPropertyToLogLabelMapping(Map.ofEntries(\n                Map.entry(\"otel_namespace\", \"service_namespace\"),\n                Map.entry(\"otel_service\", \"service_name\"),\n                Map.entry(\"environment\", \"env\"),\n                Map.entry(\"site\", \"region\")\n            ))\n            .filterBySpanId(true)\n            .filterByTraceId(true)\n            .build());\n\n        var development = new LogConfig(\"development\", LogConfigArgs.builder()\n            .name(\"development\")\n            .priority(2000)\n            .defaultConfig(true)\n            .dataSourceUid(\"elasticsearch-dev\")\n            .errorLabel(\"error\")\n            .matches(            \n                LogConfigMatchArgs.builder()\n                    .property(\"asserts_entity_type\")\n                    .op(\"=\")\n                    .values(\"Service\")\n                    .build(),\n                LogConfigMatchArgs.builder()\n                    .property(\"environment\")\n                    .op(\"=\")\n                    .values(                    \n                        \"development\",\n                        \"testing\")\n                    .build(),\n                LogConfigMatchArgs.builder()\n                    .property(\"site\")\n                    .op(\"=\")\n                    .values(\"us-east-1\")\n                    .build(),\n                LogConfigMatchArgs.builder()\n                    .property(\"service\")\n                    .op(\"=\")\n                    .values(\"api\")\n                    .build())\n            .entityPropertyToLogLabelMapping(Map.ofEntries(\n                Map.entry(\"otel_namespace\", \"service_namespace\"),\n                Map.entry(\"otel_service\", \"service_name\"),\n                Map.entry(\"environment\", \"env\"),\n                Map.entry(\"site\", \"region\"),\n                Map.entry(\"service\", \"app\")\n            ))\n            .filterBySpanId(true)\n            .filterByTraceId(true)\n            .build());\n\n        var minimal = new LogConfig(\"minimal\", LogConfigArgs.builder()\n            .name(\"minimal\")\n            .priority(3000)\n            .defaultConfig(false)\n            .dataSourceUid(\"loki-minimal\")\n            .matches(LogConfigMatchArgs.builder()\n                .property(\"asserts_entity_type\")\n                .op(\"IS NOT NULL\")\n                .values()\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  production:\n    type: grafana:assert:LogConfig\n    properties:\n      name: production\n      priority: 1000\n      defaultConfig: false\n      dataSourceUid: grafanacloud-logs\n      errorLabel: error\n      matches:\n        - property: asserts_entity_type\n          op: =\n          values:\n            - Service\n        - property: environment\n          op: =\n          values:\n            - production\n            - staging\n        - property: site\n          op: =\n          values:\n            - us-east-1\n            - us-west-2\n      entityPropertyToLogLabelMapping:\n        otel_namespace: service_namespace\n        otel_service: service_name\n        environment: env\n        site: region\n      filterBySpanId: true\n      filterByTraceId: true\n  development:\n    type: grafana:assert:LogConfig\n    properties:\n      name: development\n      priority: 2000\n      defaultConfig: true\n      dataSourceUid: elasticsearch-dev\n      errorLabel: error\n      matches:\n        - property: asserts_entity_type\n          op: =\n          values:\n            - Service\n        - property: environment\n          op: =\n          values:\n            - development\n            - testing\n        - property: site\n          op: =\n          values:\n            - us-east-1\n        - property: service\n          op: =\n          values:\n            - api\n      entityPropertyToLogLabelMapping:\n        otel_namespace: service_namespace\n        otel_service: service_name\n        environment: env\n        site: region\n        service: app\n      filterBySpanId: true\n      filterByTraceId: true\n  minimal:\n    type: grafana:assert:LogConfig\n    properties:\n      name: minimal\n      priority: 3000\n      defaultConfig: false\n      dataSourceUid: loki-minimal\n      matches:\n        - property: asserts_entity_type\n          op: IS NOT NULL\n          values: []\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:assert/logConfig:LogConfig name \"{{ name }}\"\n```\n\n","properties":{"dataSourceUid":{"type":"string","description":"DataSource to be queried (e.g., a Loki instance).\n"},"defaultConfig":{"type":"boolean","description":"Is it the default config, therefore undeletable?\n"},"entityPropertyToLogLabelMapping":{"type":"object","additionalProperties":{"type":"string"},"description":"Mapping of entity properties to log labels.\n"},"errorLabel":{"type":"string","description":"Error label to filter logs.\n"},"filterBySpanId":{"type":"boolean","description":"Filter logs by span ID.\n"},"filterByTraceId":{"type":"boolean","description":"Filter logs by trace ID.\n"},"matches":{"type":"array","items":{"$ref":"#/types/grafana:assert/LogConfigMatch:LogConfigMatch"},"description":"List of match rules for entity properties.\n"},"name":{"type":"string","description":"The name of the log configuration.\n"},"priority":{"type":"integer","description":"Priority of the log configuration. A lower number means a higher priority.\n"}},"required":["dataSourceUid","defaultConfig","name","priority"],"inputProperties":{"dataSourceUid":{"type":"string","description":"DataSource to be queried (e.g., a Loki instance).\n"},"defaultConfig":{"type":"boolean","description":"Is it the default config, therefore undeletable?\n"},"entityPropertyToLogLabelMapping":{"type":"object","additionalProperties":{"type":"string"},"description":"Mapping of entity properties to log labels.\n"},"errorLabel":{"type":"string","description":"Error label to filter logs.\n"},"filterBySpanId":{"type":"boolean","description":"Filter logs by span ID.\n"},"filterByTraceId":{"type":"boolean","description":"Filter logs by trace ID.\n"},"matches":{"type":"array","items":{"$ref":"#/types/grafana:assert/LogConfigMatch:LogConfigMatch"},"description":"List of match rules for entity properties.\n"},"name":{"type":"string","description":"The name of the log configuration.\n","willReplaceOnChanges":true},"priority":{"type":"integer","description":"Priority of the log configuration. A lower number means a higher priority.\n"}},"requiredInputs":["dataSourceUid","defaultConfig","priority"],"stateInputs":{"description":"Input properties used for looking up and filtering LogConfig resources.\n","properties":{"dataSourceUid":{"type":"string","description":"DataSource to be queried (e.g., a Loki instance).\n"},"defaultConfig":{"type":"boolean","description":"Is it the default config, therefore undeletable?\n"},"entityPropertyToLogLabelMapping":{"type":"object","additionalProperties":{"type":"string"},"description":"Mapping of entity properties to log labels.\n"},"errorLabel":{"type":"string","description":"Error label to filter logs.\n"},"filterBySpanId":{"type":"boolean","description":"Filter logs by span ID.\n"},"filterByTraceId":{"type":"boolean","description":"Filter logs by trace ID.\n"},"matches":{"type":"array","items":{"$ref":"#/types/grafana:assert/LogConfigMatch:LogConfigMatch"},"description":"List of match rules for entity properties.\n"},"name":{"type":"string","description":"The name of the log configuration.\n","willReplaceOnChanges":true},"priority":{"type":"integer","description":"Priority of the log configuration. A lower number means a higher priority.\n"}},"type":"object"}},"grafana:assert/notificationAlertsConfig:NotificationAlertsConfig":{"description":"Manages Knowledge Graph Alert Configurations through Grafana API.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\n// Basic alert configuration with silencing\nconst prometheusRemoteStorageFailures = new grafana.assert.NotificationAlertsConfig(\"prometheus_remote_storage_failures\", {\n    name: \"PrometheusRemoteStorageFailures\",\n    matchLabels: {\n        alertname: \"PrometheusRemoteStorageFailures\",\n        alertgroup: \"prometheus.alerts\",\n        asserts_env: \"prod\",\n    },\n    silenced: true,\n});\n// High severity alert with specific job and context matching\nconst errorBuildupNotify = new grafana.assert.NotificationAlertsConfig(\"error_buildup_notify\", {\n    name: \"ErrorBuildupNotify\",\n    matchLabels: {\n        alertname: \"ErrorBuildup\",\n        job: \"acai\",\n        asserts_request_type: \"inbound\",\n        asserts_request_context: \"/auth\",\n    },\n    silenced: false,\n});\n// Alert with additional labels and custom duration\nconst paymentTestAlert = new grafana.assert.NotificationAlertsConfig(\"payment_test_alert\", {\n    name: \"PaymentTestAlert\",\n    matchLabels: {\n        alertname: \"PaymentTestAlert\",\n        additional_labels: \"asserts_severity=~\\\"critical\\\"\",\n        alertgroup: \"alex-k8s-integration-test.alerts\",\n    },\n    alertLabels: {\n        testing: \"onetwothree\",\n    },\n    duration: \"5m\",\n    silenced: false,\n});\n// Latency alert for shipping service\nconst highShippingLatency = new grafana.assert.NotificationAlertsConfig(\"high_shipping_latency\", {\n    name: \"high shipping latency\",\n    matchLabels: {\n        alertname: \"LatencyP99ErrorBuildup\",\n        job: \"shipping\",\n        asserts_request_type: \"inbound\",\n    },\n    silenced: false,\n});\n// CPU throttling alert with warning severity\nconst cpuThrottlingSustained = new grafana.assert.NotificationAlertsConfig(\"cpu_throttling_sustained\", {\n    name: \"CPUThrottlingSustained\",\n    matchLabels: {\n        alertname: \"CPUThrottlingSustained\",\n        additional_labels: \"asserts_severity=~\\\"warning\\\"\",\n    },\n    silenced: true,\n});\n// Ingress error rate alert\nconst ingressError = new grafana.assert.NotificationAlertsConfig(\"ingress_error\", {\n    name: \"ingress error\",\n    matchLabels: {\n        alertname: \"ErrorRatioBreach\",\n        job: \"ingress-nginx-controller-metrics\",\n        asserts_request_type: \"inbound\",\n    },\n    silenced: false,\n});\n// MySQL Galera cluster alert\nconst mysqlGaleraNotReady = new grafana.assert.NotificationAlertsConfig(\"mysql_galera_not_ready\", {\n    name: \"MySQLGaleraNotReady\",\n    matchLabels: {\n        alertname: \"MySQLGaleraNotReady\",\n    },\n    silenced: false,\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\n# Basic alert configuration with silencing\nprometheus_remote_storage_failures = grafana.assert_.NotificationAlertsConfig(\"prometheus_remote_storage_failures\",\n    name=\"PrometheusRemoteStorageFailures\",\n    match_labels={\n        \"alertname\": \"PrometheusRemoteStorageFailures\",\n        \"alertgroup\": \"prometheus.alerts\",\n        \"asserts_env\": \"prod\",\n    },\n    silenced=True)\n# High severity alert with specific job and context matching\nerror_buildup_notify = grafana.assert_.NotificationAlertsConfig(\"error_buildup_notify\",\n    name=\"ErrorBuildupNotify\",\n    match_labels={\n        \"alertname\": \"ErrorBuildup\",\n        \"job\": \"acai\",\n        \"asserts_request_type\": \"inbound\",\n        \"asserts_request_context\": \"/auth\",\n    },\n    silenced=False)\n# Alert with additional labels and custom duration\npayment_test_alert = grafana.assert_.NotificationAlertsConfig(\"payment_test_alert\",\n    name=\"PaymentTestAlert\",\n    match_labels={\n        \"alertname\": \"PaymentTestAlert\",\n        \"additional_labels\": \"asserts_severity=~\\\"critical\\\"\",\n        \"alertgroup\": \"alex-k8s-integration-test.alerts\",\n    },\n    alert_labels={\n        \"testing\": \"onetwothree\",\n    },\n    duration=\"5m\",\n    silenced=False)\n# Latency alert for shipping service\nhigh_shipping_latency = grafana.assert_.NotificationAlertsConfig(\"high_shipping_latency\",\n    name=\"high shipping latency\",\n    match_labels={\n        \"alertname\": \"LatencyP99ErrorBuildup\",\n        \"job\": \"shipping\",\n        \"asserts_request_type\": \"inbound\",\n    },\n    silenced=False)\n# CPU throttling alert with warning severity\ncpu_throttling_sustained = grafana.assert_.NotificationAlertsConfig(\"cpu_throttling_sustained\",\n    name=\"CPUThrottlingSustained\",\n    match_labels={\n        \"alertname\": \"CPUThrottlingSustained\",\n        \"additional_labels\": \"asserts_severity=~\\\"warning\\\"\",\n    },\n    silenced=True)\n# Ingress error rate alert\ningress_error = grafana.assert_.NotificationAlertsConfig(\"ingress_error\",\n    name=\"ingress error\",\n    match_labels={\n        \"alertname\": \"ErrorRatioBreach\",\n        \"job\": \"ingress-nginx-controller-metrics\",\n        \"asserts_request_type\": \"inbound\",\n    },\n    silenced=False)\n# MySQL Galera cluster alert\nmysql_galera_not_ready = grafana.assert_.NotificationAlertsConfig(\"mysql_galera_not_ready\",\n    name=\"MySQLGaleraNotReady\",\n    match_labels={\n        \"alertname\": \"MySQLGaleraNotReady\",\n    },\n    silenced=False)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    // Basic alert configuration with silencing\n    var prometheusRemoteStorageFailures = new Grafana.Assert.NotificationAlertsConfig(\"prometheus_remote_storage_failures\", new()\n    {\n        Name = \"PrometheusRemoteStorageFailures\",\n        MatchLabels = \n        {\n            { \"alertname\", \"PrometheusRemoteStorageFailures\" },\n            { \"alertgroup\", \"prometheus.alerts\" },\n            { \"asserts_env\", \"prod\" },\n        },\n        Silenced = true,\n    });\n\n    // High severity alert with specific job and context matching\n    var errorBuildupNotify = new Grafana.Assert.NotificationAlertsConfig(\"error_buildup_notify\", new()\n    {\n        Name = \"ErrorBuildupNotify\",\n        MatchLabels = \n        {\n            { \"alertname\", \"ErrorBuildup\" },\n            { \"job\", \"acai\" },\n            { \"asserts_request_type\", \"inbound\" },\n            { \"asserts_request_context\", \"/auth\" },\n        },\n        Silenced = false,\n    });\n\n    // Alert with additional labels and custom duration\n    var paymentTestAlert = new Grafana.Assert.NotificationAlertsConfig(\"payment_test_alert\", new()\n    {\n        Name = \"PaymentTestAlert\",\n        MatchLabels = \n        {\n            { \"alertname\", \"PaymentTestAlert\" },\n            { \"additional_labels\", \"asserts_severity=~\\\"critical\\\"\" },\n            { \"alertgroup\", \"alex-k8s-integration-test.alerts\" },\n        },\n        AlertLabels = \n        {\n            { \"testing\", \"onetwothree\" },\n        },\n        Duration = \"5m\",\n        Silenced = false,\n    });\n\n    // Latency alert for shipping service\n    var highShippingLatency = new Grafana.Assert.NotificationAlertsConfig(\"high_shipping_latency\", new()\n    {\n        Name = \"high shipping latency\",\n        MatchLabels = \n        {\n            { \"alertname\", \"LatencyP99ErrorBuildup\" },\n            { \"job\", \"shipping\" },\n            { \"asserts_request_type\", \"inbound\" },\n        },\n        Silenced = false,\n    });\n\n    // CPU throttling alert with warning severity\n    var cpuThrottlingSustained = new Grafana.Assert.NotificationAlertsConfig(\"cpu_throttling_sustained\", new()\n    {\n        Name = \"CPUThrottlingSustained\",\n        MatchLabels = \n        {\n            { \"alertname\", \"CPUThrottlingSustained\" },\n            { \"additional_labels\", \"asserts_severity=~\\\"warning\\\"\" },\n        },\n        Silenced = true,\n    });\n\n    // Ingress error rate alert\n    var ingressError = new Grafana.Assert.NotificationAlertsConfig(\"ingress_error\", new()\n    {\n        Name = \"ingress error\",\n        MatchLabels = \n        {\n            { \"alertname\", \"ErrorRatioBreach\" },\n            { \"job\", \"ingress-nginx-controller-metrics\" },\n            { \"asserts_request_type\", \"inbound\" },\n        },\n        Silenced = false,\n    });\n\n    // MySQL Galera cluster alert\n    var mysqlGaleraNotReady = new Grafana.Assert.NotificationAlertsConfig(\"mysql_galera_not_ready\", new()\n    {\n        Name = \"MySQLGaleraNotReady\",\n        MatchLabels = \n        {\n            { \"alertname\", \"MySQLGaleraNotReady\" },\n        },\n        Silenced = false,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/assert\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t// Basic alert configuration with silencing\n\t\t_, err := assert.NewNotificationAlertsConfig(ctx, \"prometheus_remote_storage_failures\", \u0026assert.NotificationAlertsConfigArgs{\n\t\t\tName: pulumi.String(\"PrometheusRemoteStorageFailures\"),\n\t\t\tMatchLabels: pulumi.StringMap{\n\t\t\t\t\"alertname\":   pulumi.String(\"PrometheusRemoteStorageFailures\"),\n\t\t\t\t\"alertgroup\":  pulumi.String(\"prometheus.alerts\"),\n\t\t\t\t\"asserts_env\": pulumi.String(\"prod\"),\n\t\t\t},\n\t\t\tSilenced: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// High severity alert with specific job and context matching\n\t\t_, err = assert.NewNotificationAlertsConfig(ctx, \"error_buildup_notify\", \u0026assert.NotificationAlertsConfigArgs{\n\t\t\tName: pulumi.String(\"ErrorBuildupNotify\"),\n\t\t\tMatchLabels: pulumi.StringMap{\n\t\t\t\t\"alertname\":               pulumi.String(\"ErrorBuildup\"),\n\t\t\t\t\"job\":                     pulumi.String(\"acai\"),\n\t\t\t\t\"asserts_request_type\":    pulumi.String(\"inbound\"),\n\t\t\t\t\"asserts_request_context\": pulumi.String(\"/auth\"),\n\t\t\t},\n\t\t\tSilenced: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Alert with additional labels and custom duration\n\t\t_, err = assert.NewNotificationAlertsConfig(ctx, \"payment_test_alert\", \u0026assert.NotificationAlertsConfigArgs{\n\t\t\tName: pulumi.String(\"PaymentTestAlert\"),\n\t\t\tMatchLabels: pulumi.StringMap{\n\t\t\t\t\"alertname\":         pulumi.String(\"PaymentTestAlert\"),\n\t\t\t\t\"additional_labels\": pulumi.String(\"asserts_severity=~\\\"critical\\\"\"),\n\t\t\t\t\"alertgroup\":        pulumi.String(\"alex-k8s-integration-test.alerts\"),\n\t\t\t},\n\t\t\tAlertLabels: pulumi.StringMap{\n\t\t\t\t\"testing\": pulumi.String(\"onetwothree\"),\n\t\t\t},\n\t\t\tDuration: pulumi.String(\"5m\"),\n\t\t\tSilenced: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Latency alert for shipping service\n\t\t_, err = assert.NewNotificationAlertsConfig(ctx, \"high_shipping_latency\", \u0026assert.NotificationAlertsConfigArgs{\n\t\t\tName: pulumi.String(\"high shipping latency\"),\n\t\t\tMatchLabels: pulumi.StringMap{\n\t\t\t\t\"alertname\":            pulumi.String(\"LatencyP99ErrorBuildup\"),\n\t\t\t\t\"job\":                  pulumi.String(\"shipping\"),\n\t\t\t\t\"asserts_request_type\": pulumi.String(\"inbound\"),\n\t\t\t},\n\t\t\tSilenced: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// CPU throttling alert with warning severity\n\t\t_, err = assert.NewNotificationAlertsConfig(ctx, \"cpu_throttling_sustained\", \u0026assert.NotificationAlertsConfigArgs{\n\t\t\tName: pulumi.String(\"CPUThrottlingSustained\"),\n\t\t\tMatchLabels: pulumi.StringMap{\n\t\t\t\t\"alertname\":         pulumi.String(\"CPUThrottlingSustained\"),\n\t\t\t\t\"additional_labels\": pulumi.String(\"asserts_severity=~\\\"warning\\\"\"),\n\t\t\t},\n\t\t\tSilenced: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Ingress error rate alert\n\t\t_, err = assert.NewNotificationAlertsConfig(ctx, \"ingress_error\", \u0026assert.NotificationAlertsConfigArgs{\n\t\t\tName: pulumi.String(\"ingress error\"),\n\t\t\tMatchLabels: pulumi.StringMap{\n\t\t\t\t\"alertname\":            pulumi.String(\"ErrorRatioBreach\"),\n\t\t\t\t\"job\":                  pulumi.String(\"ingress-nginx-controller-metrics\"),\n\t\t\t\t\"asserts_request_type\": pulumi.String(\"inbound\"),\n\t\t\t},\n\t\t\tSilenced: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// MySQL Galera cluster alert\n\t\t_, err = assert.NewNotificationAlertsConfig(ctx, \"mysql_galera_not_ready\", \u0026assert.NotificationAlertsConfigArgs{\n\t\t\tName: pulumi.String(\"MySQLGaleraNotReady\"),\n\t\t\tMatchLabels: pulumi.StringMap{\n\t\t\t\t\"alertname\": pulumi.String(\"MySQLGaleraNotReady\"),\n\t\t\t},\n\t\t\tSilenced: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.assert.NotificationAlertsConfig;\nimport com.pulumi.grafana.assert.NotificationAlertsConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        // Basic alert configuration with silencing\n        var prometheusRemoteStorageFailures = new NotificationAlertsConfig(\"prometheusRemoteStorageFailures\", NotificationAlertsConfigArgs.builder()\n            .name(\"PrometheusRemoteStorageFailures\")\n            .matchLabels(Map.ofEntries(\n                Map.entry(\"alertname\", \"PrometheusRemoteStorageFailures\"),\n                Map.entry(\"alertgroup\", \"prometheus.alerts\"),\n                Map.entry(\"asserts_env\", \"prod\")\n            ))\n            .silenced(true)\n            .build());\n\n        // High severity alert with specific job and context matching\n        var errorBuildupNotify = new NotificationAlertsConfig(\"errorBuildupNotify\", NotificationAlertsConfigArgs.builder()\n            .name(\"ErrorBuildupNotify\")\n            .matchLabels(Map.ofEntries(\n                Map.entry(\"alertname\", \"ErrorBuildup\"),\n                Map.entry(\"job\", \"acai\"),\n                Map.entry(\"asserts_request_type\", \"inbound\"),\n                Map.entry(\"asserts_request_context\", \"/auth\")\n            ))\n            .silenced(false)\n            .build());\n\n        // Alert with additional labels and custom duration\n        var paymentTestAlert = new NotificationAlertsConfig(\"paymentTestAlert\", NotificationAlertsConfigArgs.builder()\n            .name(\"PaymentTestAlert\")\n            .matchLabels(Map.ofEntries(\n                Map.entry(\"alertname\", \"PaymentTestAlert\"),\n                Map.entry(\"additional_labels\", \"asserts_severity=~\\\"critical\\\"\"),\n                Map.entry(\"alertgroup\", \"alex-k8s-integration-test.alerts\")\n            ))\n            .alertLabels(Map.of(\"testing\", \"onetwothree\"))\n            .duration(\"5m\")\n            .silenced(false)\n            .build());\n\n        // Latency alert for shipping service\n        var highShippingLatency = new NotificationAlertsConfig(\"highShippingLatency\", NotificationAlertsConfigArgs.builder()\n            .name(\"high shipping latency\")\n            .matchLabels(Map.ofEntries(\n                Map.entry(\"alertname\", \"LatencyP99ErrorBuildup\"),\n                Map.entry(\"job\", \"shipping\"),\n                Map.entry(\"asserts_request_type\", \"inbound\")\n            ))\n            .silenced(false)\n            .build());\n\n        // CPU throttling alert with warning severity\n        var cpuThrottlingSustained = new NotificationAlertsConfig(\"cpuThrottlingSustained\", NotificationAlertsConfigArgs.builder()\n            .name(\"CPUThrottlingSustained\")\n            .matchLabels(Map.ofEntries(\n                Map.entry(\"alertname\", \"CPUThrottlingSustained\"),\n                Map.entry(\"additional_labels\", \"asserts_severity=~\\\"warning\\\"\")\n            ))\n            .silenced(true)\n            .build());\n\n        // Ingress error rate alert\n        var ingressError = new NotificationAlertsConfig(\"ingressError\", NotificationAlertsConfigArgs.builder()\n            .name(\"ingress error\")\n            .matchLabels(Map.ofEntries(\n                Map.entry(\"alertname\", \"ErrorRatioBreach\"),\n                Map.entry(\"job\", \"ingress-nginx-controller-metrics\"),\n                Map.entry(\"asserts_request_type\", \"inbound\")\n            ))\n            .silenced(false)\n            .build());\n\n        // MySQL Galera cluster alert\n        var mysqlGaleraNotReady = new NotificationAlertsConfig(\"mysqlGaleraNotReady\", NotificationAlertsConfigArgs.builder()\n            .name(\"MySQLGaleraNotReady\")\n            .matchLabels(Map.of(\"alertname\", \"MySQLGaleraNotReady\"))\n            .silenced(false)\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  # Basic alert configuration with silencing\n  prometheusRemoteStorageFailures:\n    type: grafana:assert:NotificationAlertsConfig\n    name: prometheus_remote_storage_failures\n    properties:\n      name: PrometheusRemoteStorageFailures\n      matchLabels:\n        alertname: PrometheusRemoteStorageFailures\n        alertgroup: prometheus.alerts\n        asserts_env: prod\n      silenced: true\n  # High severity alert with specific job and context matching\n  errorBuildupNotify:\n    type: grafana:assert:NotificationAlertsConfig\n    name: error_buildup_notify\n    properties:\n      name: ErrorBuildupNotify\n      matchLabels:\n        alertname: ErrorBuildup\n        job: acai\n        asserts_request_type: inbound\n        asserts_request_context: /auth\n      silenced: false\n  # Alert with additional labels and custom duration\n  paymentTestAlert:\n    type: grafana:assert:NotificationAlertsConfig\n    name: payment_test_alert\n    properties:\n      name: PaymentTestAlert\n      matchLabels:\n        alertname: PaymentTestAlert\n        additional_labels: asserts_severity=~\"critical\"\n        alertgroup: alex-k8s-integration-test.alerts\n      alertLabels:\n        testing: onetwothree\n      duration: 5m\n      silenced: false\n  # Latency alert for shipping service\n  highShippingLatency:\n    type: grafana:assert:NotificationAlertsConfig\n    name: high_shipping_latency\n    properties:\n      name: high shipping latency\n      matchLabels:\n        alertname: LatencyP99ErrorBuildup\n        job: shipping\n        asserts_request_type: inbound\n      silenced: false\n  # CPU throttling alert with warning severity\n  cpuThrottlingSustained:\n    type: grafana:assert:NotificationAlertsConfig\n    name: cpu_throttling_sustained\n    properties:\n      name: CPUThrottlingSustained\n      matchLabels:\n        alertname: CPUThrottlingSustained\n        additional_labels: asserts_severity=~\"warning\"\n      silenced: true\n  # Ingress error rate alert\n  ingressError:\n    type: grafana:assert:NotificationAlertsConfig\n    name: ingress_error\n    properties:\n      name: ingress error\n      matchLabels:\n        alertname: ErrorRatioBreach\n        job: ingress-nginx-controller-metrics\n        asserts_request_type: inbound\n      silenced: false\n  # MySQL Galera cluster alert\n  mysqlGaleraNotReady:\n    type: grafana:assert:NotificationAlertsConfig\n    name: mysql_galera_not_ready\n    properties:\n      name: MySQLGaleraNotReady\n      matchLabels:\n        alertname: MySQLGaleraNotReady\n      silenced: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:assert/notificationAlertsConfig:NotificationAlertsConfig name \"{{ name }}\"\n```\n\n","properties":{"alertLabels":{"type":"object","additionalProperties":{"type":"string"},"description":"Labels to add to alerts generated by this configuration.\n"},"duration":{"type":"string","description":"Duration for which the condition must be true before firing (e.g., '5m', '30s'). Maps to 'for' in Asserts API.\n"},"matchLabels":{"type":"object","additionalProperties":{"type":"string"},"description":"Labels to match for this alert configuration.\n"},"name":{"type":"string","description":"The name of the alert configuration.\n"},"silenced":{"type":"boolean","description":"Whether this alert configuration is silenced. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"}},"required":["name"],"inputProperties":{"alertLabels":{"type":"object","additionalProperties":{"type":"string"},"description":"Labels to add to alerts generated by this configuration.\n"},"duration":{"type":"string","description":"Duration for which the condition must be true before firing (e.g., '5m', '30s'). Maps to 'for' in Asserts API.\n"},"matchLabels":{"type":"object","additionalProperties":{"type":"string"},"description":"Labels to match for this alert configuration.\n"},"name":{"type":"string","description":"The name of the alert configuration.\n","willReplaceOnChanges":true},"silenced":{"type":"boolean","description":"Whether this alert configuration is silenced. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"}},"stateInputs":{"description":"Input properties used for looking up and filtering NotificationAlertsConfig resources.\n","properties":{"alertLabels":{"type":"object","additionalProperties":{"type":"string"},"description":"Labels to add to alerts generated by this configuration.\n"},"duration":{"type":"string","description":"Duration for which the condition must be true before firing (e.g., '5m', '30s'). Maps to 'for' in Asserts API.\n"},"matchLabels":{"type":"object","additionalProperties":{"type":"string"},"description":"Labels to match for this alert configuration.\n"},"name":{"type":"string","description":"The name of the alert configuration.\n","willReplaceOnChanges":true},"silenced":{"type":"boolean","description":"Whether this alert configuration is silenced. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"}},"type":"object"}},"grafana:assert/profileConfig:ProfileConfig":{"description":"Manages Knowledge Graph Profile Configuration through Grafana API.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst production = new grafana.assert.ProfileConfig(\"production\", {\n    name: \"production\",\n    priority: 1000,\n    defaultConfig: false,\n    dataSourceUid: \"grafanacloud-profiles\",\n    matches: [\n        {\n            property: \"asserts_entity_type\",\n            op: \"=\",\n            values: [\"Service\"],\n        },\n        {\n            property: \"deployment_environment\",\n            op: \"=\",\n            values: [\n                \"production\",\n                \"staging\",\n            ],\n        },\n        {\n            property: \"asserts_site\",\n            op: \"=\",\n            values: [\n                \"us-east-1\",\n                \"us-west-2\",\n            ],\n        },\n    ],\n    entityPropertyToProfileLabelMapping: {\n        cluster: \"k8s_cluster_name\",\n        namespace: \"k8s_namespace_name\",\n        container: \"k8s_container_name\",\n        otel_service: \"service_name\",\n        otel_namespace: \"service_namespace\",\n    },\n});\nconst development = new grafana.assert.ProfileConfig(\"development\", {\n    name: \"development\",\n    priority: 2000,\n    defaultConfig: false,\n    dataSourceUid: \"grafanacloud-profiles\",\n    matches: [\n        {\n            property: \"asserts_entity_type\",\n            op: \"=\",\n            values: [\"Service\"],\n        },\n        {\n            property: \"deployment_environment\",\n            op: \"=\",\n            values: [\n                \"development\",\n                \"testing\",\n            ],\n        },\n        {\n            property: \"asserts_site\",\n            op: \"=\",\n            values: [\"us-east-1\"],\n        },\n        {\n            property: \"service\",\n            op: \"=\",\n            values: [\"my sample api\"],\n        },\n    ],\n    entityPropertyToProfileLabelMapping: {\n        cluster: \"k8s_cluster_name\",\n        namespace: \"k8s_namespace_name\",\n        container: \"k8s_container_name\",\n        otel_service: \"service_name\",\n        otel_namespace: \"service_namespace\",\n        pod: \"k8s_pod_name\",\n    },\n});\nconst minimal = new grafana.assert.ProfileConfig(\"minimal\", {\n    name: \"minimal\",\n    priority: 3000,\n    dataSourceUid: \"pyroscope-minimal\",\n    matches: [{\n        property: \"asserts_entity_type\",\n        op: \"IS NOT NULL\",\n    }],\n    entityPropertyToProfileLabelMapping: {\n        cluster: \"k8s_cluster_name\",\n        otel_service: \"service_name\",\n        otel_namespace: \"service_namespace\",\n    },\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\nproduction = grafana.assert_.ProfileConfig(\"production\",\n    name=\"production\",\n    priority=1000,\n    default_config=False,\n    data_source_uid=\"grafanacloud-profiles\",\n    matches=[\n        {\n            \"property\": \"asserts_entity_type\",\n            \"op\": \"=\",\n            \"values\": [\"Service\"],\n        },\n        {\n            \"property\": \"deployment_environment\",\n            \"op\": \"=\",\n            \"values\": [\n                \"production\",\n                \"staging\",\n            ],\n        },\n        {\n            \"property\": \"asserts_site\",\n            \"op\": \"=\",\n            \"values\": [\n                \"us-east-1\",\n                \"us-west-2\",\n            ],\n        },\n    ],\n    entity_property_to_profile_label_mapping={\n        \"cluster\": \"k8s_cluster_name\",\n        \"namespace\": \"k8s_namespace_name\",\n        \"container\": \"k8s_container_name\",\n        \"otel_service\": \"service_name\",\n        \"otel_namespace\": \"service_namespace\",\n    })\ndevelopment = grafana.assert_.ProfileConfig(\"development\",\n    name=\"development\",\n    priority=2000,\n    default_config=False,\n    data_source_uid=\"grafanacloud-profiles\",\n    matches=[\n        {\n            \"property\": \"asserts_entity_type\",\n            \"op\": \"=\",\n            \"values\": [\"Service\"],\n        },\n        {\n            \"property\": \"deployment_environment\",\n            \"op\": \"=\",\n            \"values\": [\n                \"development\",\n                \"testing\",\n            ],\n        },\n        {\n            \"property\": \"asserts_site\",\n            \"op\": \"=\",\n            \"values\": [\"us-east-1\"],\n        },\n        {\n            \"property\": \"service\",\n            \"op\": \"=\",\n            \"values\": [\"my sample api\"],\n        },\n    ],\n    entity_property_to_profile_label_mapping={\n        \"cluster\": \"k8s_cluster_name\",\n        \"namespace\": \"k8s_namespace_name\",\n        \"container\": \"k8s_container_name\",\n        \"otel_service\": \"service_name\",\n        \"otel_namespace\": \"service_namespace\",\n        \"pod\": \"k8s_pod_name\",\n    })\nminimal = grafana.assert_.ProfileConfig(\"minimal\",\n    name=\"minimal\",\n    priority=3000,\n    data_source_uid=\"pyroscope-minimal\",\n    matches=[{\n        \"property\": \"asserts_entity_type\",\n        \"op\": \"IS NOT NULL\",\n    }],\n    entity_property_to_profile_label_mapping={\n        \"cluster\": \"k8s_cluster_name\",\n        \"otel_service\": \"service_name\",\n        \"otel_namespace\": \"service_namespace\",\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var production = new Grafana.Assert.ProfileConfig(\"production\", new()\n    {\n        Name = \"production\",\n        Priority = 1000,\n        DefaultConfig = false,\n        DataSourceUid = \"grafanacloud-profiles\",\n        Matches = new[]\n        {\n            new Grafana.Assert.Inputs.ProfileConfigMatchArgs\n            {\n                Property = \"asserts_entity_type\",\n                Op = \"=\",\n                Values = new[]\n                {\n                    \"Service\",\n                },\n            },\n            new Grafana.Assert.Inputs.ProfileConfigMatchArgs\n            {\n                Property = \"deployment_environment\",\n                Op = \"=\",\n                Values = new[]\n                {\n                    \"production\",\n                    \"staging\",\n                },\n            },\n            new Grafana.Assert.Inputs.ProfileConfigMatchArgs\n            {\n                Property = \"asserts_site\",\n                Op = \"=\",\n                Values = new[]\n                {\n                    \"us-east-1\",\n                    \"us-west-2\",\n                },\n            },\n        },\n        EntityPropertyToProfileLabelMapping = \n        {\n            { \"cluster\", \"k8s_cluster_name\" },\n            { \"namespace\", \"k8s_namespace_name\" },\n            { \"container\", \"k8s_container_name\" },\n            { \"otel_service\", \"service_name\" },\n            { \"otel_namespace\", \"service_namespace\" },\n        },\n    });\n\n    var development = new Grafana.Assert.ProfileConfig(\"development\", new()\n    {\n        Name = \"development\",\n        Priority = 2000,\n        DefaultConfig = false,\n        DataSourceUid = \"grafanacloud-profiles\",\n        Matches = new[]\n        {\n            new Grafana.Assert.Inputs.ProfileConfigMatchArgs\n            {\n                Property = \"asserts_entity_type\",\n                Op = \"=\",\n                Values = new[]\n                {\n                    \"Service\",\n                },\n            },\n            new Grafana.Assert.Inputs.ProfileConfigMatchArgs\n            {\n                Property = \"deployment_environment\",\n                Op = \"=\",\n                Values = new[]\n                {\n                    \"development\",\n                    \"testing\",\n                },\n            },\n            new Grafana.Assert.Inputs.ProfileConfigMatchArgs\n            {\n                Property = \"asserts_site\",\n                Op = \"=\",\n                Values = new[]\n                {\n                    \"us-east-1\",\n                },\n            },\n            new Grafana.Assert.Inputs.ProfileConfigMatchArgs\n            {\n                Property = \"service\",\n                Op = \"=\",\n                Values = new[]\n                {\n                    \"my sample api\",\n                },\n            },\n        },\n        EntityPropertyToProfileLabelMapping = \n        {\n            { \"cluster\", \"k8s_cluster_name\" },\n            { \"namespace\", \"k8s_namespace_name\" },\n            { \"container\", \"k8s_container_name\" },\n            { \"otel_service\", \"service_name\" },\n            { \"otel_namespace\", \"service_namespace\" },\n            { \"pod\", \"k8s_pod_name\" },\n        },\n    });\n\n    var minimal = new Grafana.Assert.ProfileConfig(\"minimal\", new()\n    {\n        Name = \"minimal\",\n        Priority = 3000,\n        DataSourceUid = \"pyroscope-minimal\",\n        Matches = new[]\n        {\n            new Grafana.Assert.Inputs.ProfileConfigMatchArgs\n            {\n                Property = \"asserts_entity_type\",\n                Op = \"IS NOT NULL\",\n            },\n        },\n        EntityPropertyToProfileLabelMapping = \n        {\n            { \"cluster\", \"k8s_cluster_name\" },\n            { \"otel_service\", \"service_name\" },\n            { \"otel_namespace\", \"service_namespace\" },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/assert\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := assert.NewProfileConfig(ctx, \"production\", \u0026assert.ProfileConfigArgs{\n\t\t\tName:          pulumi.String(\"production\"),\n\t\t\tPriority:      pulumi.Int(1000),\n\t\t\tDefaultConfig: pulumi.Bool(false),\n\t\t\tDataSourceUid: pulumi.String(\"grafanacloud-profiles\"),\n\t\t\tMatches: assert.ProfileConfigMatchArray{\n\t\t\t\t\u0026assert.ProfileConfigMatchArgs{\n\t\t\t\t\tProperty: pulumi.String(\"asserts_entity_type\"),\n\t\t\t\t\tOp:       pulumi.String(\"=\"),\n\t\t\t\t\tValues: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"Service\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026assert.ProfileConfigMatchArgs{\n\t\t\t\t\tProperty: pulumi.String(\"deployment_environment\"),\n\t\t\t\t\tOp:       pulumi.String(\"=\"),\n\t\t\t\t\tValues: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"production\"),\n\t\t\t\t\t\tpulumi.String(\"staging\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026assert.ProfileConfigMatchArgs{\n\t\t\t\t\tProperty: pulumi.String(\"asserts_site\"),\n\t\t\t\t\tOp:       pulumi.String(\"=\"),\n\t\t\t\t\tValues: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"us-east-1\"),\n\t\t\t\t\t\tpulumi.String(\"us-west-2\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tEntityPropertyToProfileLabelMapping: pulumi.StringMap{\n\t\t\t\t\"cluster\":        pulumi.String(\"k8s_cluster_name\"),\n\t\t\t\t\"namespace\":      pulumi.String(\"k8s_namespace_name\"),\n\t\t\t\t\"container\":      pulumi.String(\"k8s_container_name\"),\n\t\t\t\t\"otel_service\":   pulumi.String(\"service_name\"),\n\t\t\t\t\"otel_namespace\": pulumi.String(\"service_namespace\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = assert.NewProfileConfig(ctx, \"development\", \u0026assert.ProfileConfigArgs{\n\t\t\tName:          pulumi.String(\"development\"),\n\t\t\tPriority:      pulumi.Int(2000),\n\t\t\tDefaultConfig: pulumi.Bool(false),\n\t\t\tDataSourceUid: pulumi.String(\"grafanacloud-profiles\"),\n\t\t\tMatches: assert.ProfileConfigMatchArray{\n\t\t\t\t\u0026assert.ProfileConfigMatchArgs{\n\t\t\t\t\tProperty: pulumi.String(\"asserts_entity_type\"),\n\t\t\t\t\tOp:       pulumi.String(\"=\"),\n\t\t\t\t\tValues: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"Service\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026assert.ProfileConfigMatchArgs{\n\t\t\t\t\tProperty: pulumi.String(\"deployment_environment\"),\n\t\t\t\t\tOp:       pulumi.String(\"=\"),\n\t\t\t\t\tValues: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"development\"),\n\t\t\t\t\t\tpulumi.String(\"testing\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026assert.ProfileConfigMatchArgs{\n\t\t\t\t\tProperty: pulumi.String(\"asserts_site\"),\n\t\t\t\t\tOp:       pulumi.String(\"=\"),\n\t\t\t\t\tValues: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"us-east-1\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026assert.ProfileConfigMatchArgs{\n\t\t\t\t\tProperty: pulumi.String(\"service\"),\n\t\t\t\t\tOp:       pulumi.String(\"=\"),\n\t\t\t\t\tValues: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"my sample api\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tEntityPropertyToProfileLabelMapping: pulumi.StringMap{\n\t\t\t\t\"cluster\":        pulumi.String(\"k8s_cluster_name\"),\n\t\t\t\t\"namespace\":      pulumi.String(\"k8s_namespace_name\"),\n\t\t\t\t\"container\":      pulumi.String(\"k8s_container_name\"),\n\t\t\t\t\"otel_service\":   pulumi.String(\"service_name\"),\n\t\t\t\t\"otel_namespace\": pulumi.String(\"service_namespace\"),\n\t\t\t\t\"pod\":            pulumi.String(\"k8s_pod_name\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = assert.NewProfileConfig(ctx, \"minimal\", \u0026assert.ProfileConfigArgs{\n\t\t\tName:          pulumi.String(\"minimal\"),\n\t\t\tPriority:      pulumi.Int(3000),\n\t\t\tDataSourceUid: pulumi.String(\"pyroscope-minimal\"),\n\t\t\tMatches: assert.ProfileConfigMatchArray{\n\t\t\t\t\u0026assert.ProfileConfigMatchArgs{\n\t\t\t\t\tProperty: pulumi.String(\"asserts_entity_type\"),\n\t\t\t\t\tOp:       pulumi.String(\"IS NOT NULL\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tEntityPropertyToProfileLabelMapping: pulumi.StringMap{\n\t\t\t\t\"cluster\":        pulumi.String(\"k8s_cluster_name\"),\n\t\t\t\t\"otel_service\":   pulumi.String(\"service_name\"),\n\t\t\t\t\"otel_namespace\": pulumi.String(\"service_namespace\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.assert.ProfileConfig;\nimport com.pulumi.grafana.assert.ProfileConfigArgs;\nimport com.pulumi.grafana.assert.inputs.ProfileConfigMatchArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var production = new ProfileConfig(\"production\", ProfileConfigArgs.builder()\n            .name(\"production\")\n            .priority(1000)\n            .defaultConfig(false)\n            .dataSourceUid(\"grafanacloud-profiles\")\n            .matches(            \n                ProfileConfigMatchArgs.builder()\n                    .property(\"asserts_entity_type\")\n                    .op(\"=\")\n                    .values(\"Service\")\n                    .build(),\n                ProfileConfigMatchArgs.builder()\n                    .property(\"deployment_environment\")\n                    .op(\"=\")\n                    .values(                    \n                        \"production\",\n                        \"staging\")\n                    .build(),\n                ProfileConfigMatchArgs.builder()\n                    .property(\"asserts_site\")\n                    .op(\"=\")\n                    .values(                    \n                        \"us-east-1\",\n                        \"us-west-2\")\n                    .build())\n            .entityPropertyToProfileLabelMapping(Map.ofEntries(\n                Map.entry(\"cluster\", \"k8s_cluster_name\"),\n                Map.entry(\"namespace\", \"k8s_namespace_name\"),\n                Map.entry(\"container\", \"k8s_container_name\"),\n                Map.entry(\"otel_service\", \"service_name\"),\n                Map.entry(\"otel_namespace\", \"service_namespace\")\n            ))\n            .build());\n\n        var development = new ProfileConfig(\"development\", ProfileConfigArgs.builder()\n            .name(\"development\")\n            .priority(2000)\n            .defaultConfig(false)\n            .dataSourceUid(\"grafanacloud-profiles\")\n            .matches(            \n                ProfileConfigMatchArgs.builder()\n                    .property(\"asserts_entity_type\")\n                    .op(\"=\")\n                    .values(\"Service\")\n                    .build(),\n                ProfileConfigMatchArgs.builder()\n                    .property(\"deployment_environment\")\n                    .op(\"=\")\n                    .values(                    \n                        \"development\",\n                        \"testing\")\n                    .build(),\n                ProfileConfigMatchArgs.builder()\n                    .property(\"asserts_site\")\n                    .op(\"=\")\n                    .values(\"us-east-1\")\n                    .build(),\n                ProfileConfigMatchArgs.builder()\n                    .property(\"service\")\n                    .op(\"=\")\n                    .values(\"my sample api\")\n                    .build())\n            .entityPropertyToProfileLabelMapping(Map.ofEntries(\n                Map.entry(\"cluster\", \"k8s_cluster_name\"),\n                Map.entry(\"namespace\", \"k8s_namespace_name\"),\n                Map.entry(\"container\", \"k8s_container_name\"),\n                Map.entry(\"otel_service\", \"service_name\"),\n                Map.entry(\"otel_namespace\", \"service_namespace\"),\n                Map.entry(\"pod\", \"k8s_pod_name\")\n            ))\n            .build());\n\n        var minimal = new ProfileConfig(\"minimal\", ProfileConfigArgs.builder()\n            .name(\"minimal\")\n            .priority(3000)\n            .dataSourceUid(\"pyroscope-minimal\")\n            .matches(ProfileConfigMatchArgs.builder()\n                .property(\"asserts_entity_type\")\n                .op(\"IS NOT NULL\")\n                .build())\n            .entityPropertyToProfileLabelMapping(Map.ofEntries(\n                Map.entry(\"cluster\", \"k8s_cluster_name\"),\n                Map.entry(\"otel_service\", \"service_name\"),\n                Map.entry(\"otel_namespace\", \"service_namespace\")\n            ))\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  production:\n    type: grafana:assert:ProfileConfig\n    properties:\n      name: production\n      priority: 1000\n      defaultConfig: false\n      dataSourceUid: grafanacloud-profiles\n      matches:\n        - property: asserts_entity_type\n          op: =\n          values:\n            - Service\n        - property: deployment_environment\n          op: =\n          values:\n            - production\n            - staging\n        - property: asserts_site\n          op: =\n          values:\n            - us-east-1\n            - us-west-2\n      entityPropertyToProfileLabelMapping:\n        cluster: k8s_cluster_name\n        namespace: k8s_namespace_name\n        container: k8s_container_name\n        otel_service: service_name\n        otel_namespace: service_namespace\n  development:\n    type: grafana:assert:ProfileConfig\n    properties:\n      name: development\n      priority: 2000\n      defaultConfig: false\n      dataSourceUid: grafanacloud-profiles\n      matches:\n        - property: asserts_entity_type\n          op: =\n          values:\n            - Service\n        - property: deployment_environment\n          op: =\n          values:\n            - development\n            - testing\n        - property: asserts_site\n          op: =\n          values:\n            - us-east-1\n        - property: service\n          op: =\n          values:\n            - my sample api\n      entityPropertyToProfileLabelMapping:\n        cluster: k8s_cluster_name\n        namespace: k8s_namespace_name\n        container: k8s_container_name\n        otel_service: service_name\n        otel_namespace: service_namespace\n        pod: k8s_pod_name\n  minimal:\n    type: grafana:assert:ProfileConfig\n    properties:\n      name: minimal\n      priority: 3000\n      dataSourceUid: pyroscope-minimal\n      matches:\n        - property: asserts_entity_type\n          op: IS NOT NULL\n      entityPropertyToProfileLabelMapping:\n        cluster: k8s_cluster_name\n        otel_service: service_name\n        otel_namespace: service_namespace\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:assert/profileConfig:ProfileConfig name \"{{ name }}\"\n```\n\n","properties":{"dataSourceUid":{"type":"string","description":"DataSource to be queried (e.g., a Pyroscope instance).\n"},"defaultConfig":{"type":"boolean","description":"Is it the default config, therefore undeletable?\n"},"entityPropertyToProfileLabelMapping":{"type":"object","additionalProperties":{"type":"string"},"description":"Mapping of entity properties to profile labels.\n"},"matches":{"type":"array","items":{"$ref":"#/types/grafana:assert/ProfileConfigMatch:ProfileConfigMatch"},"description":"List of match rules for entity properties.\n"},"name":{"type":"string","description":"The name of the profile configuration.\n"},"priority":{"type":"integer","description":"Priority of the profile configuration. A lower number means a higher priority.\n"}},"required":["dataSourceUid","defaultConfig","name","priority"],"inputProperties":{"dataSourceUid":{"type":"string","description":"DataSource to be queried (e.g., a Pyroscope instance).\n"},"defaultConfig":{"type":"boolean","description":"Is it the default config, therefore undeletable?\n"},"entityPropertyToProfileLabelMapping":{"type":"object","additionalProperties":{"type":"string"},"description":"Mapping of entity properties to profile labels.\n"},"matches":{"type":"array","items":{"$ref":"#/types/grafana:assert/ProfileConfigMatch:ProfileConfigMatch"},"description":"List of match rules for entity properties.\n"},"name":{"type":"string","description":"The name of the profile configuration.\n","willReplaceOnChanges":true},"priority":{"type":"integer","description":"Priority of the profile configuration. A lower number means a higher priority.\n"}},"requiredInputs":["dataSourceUid","defaultConfig","priority"],"stateInputs":{"description":"Input properties used for looking up and filtering ProfileConfig resources.\n","properties":{"dataSourceUid":{"type":"string","description":"DataSource to be queried (e.g., a Pyroscope instance).\n"},"defaultConfig":{"type":"boolean","description":"Is it the default config, therefore undeletable?\n"},"entityPropertyToProfileLabelMapping":{"type":"object","additionalProperties":{"type":"string"},"description":"Mapping of entity properties to profile labels.\n"},"matches":{"type":"array","items":{"$ref":"#/types/grafana:assert/ProfileConfigMatch:ProfileConfigMatch"},"description":"List of match rules for entity properties.\n"},"name":{"type":"string","description":"The name of the profile configuration.\n","willReplaceOnChanges":true},"priority":{"type":"integer","description":"Priority of the profile configuration. A lower number means a higher priority.\n"}},"type":"object"}},"grafana:assert/promRuleFile:PromRuleFile":{"description":"Manages Prometheus Rules configurations through Grafana Asserts API. Allows creation and management of custom Prometheus recording and alerting rules.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\n// Basic recording rule for latency metrics\nconst latencyMetrics = new grafana.assert.PromRuleFile(\"latency_metrics\", {\n    name: \"custom-latency-metrics\",\n    active: true,\n    groups: [{\n        name: \"latency_recording_rules\",\n        interval: \"30s\",\n        rules: [\n            {\n                record: \"custom:latency:p95\",\n                expr: \"histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m]))\",\n                labels: {\n                    source: \"custom_instrumentation\",\n                    severity: \"info\",\n                },\n            },\n            {\n                record: \"custom:latency:p99\",\n                expr: \"histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m]))\",\n                labels: {\n                    source: \"custom_instrumentation\",\n                    severity: \"info\",\n                },\n            },\n        ],\n    }],\n});\n// Alert rules for high latency\nconst latencyAlerts = new grafana.assert.PromRuleFile(\"latency_alerts\", {\n    name: \"custom-latency-alerts\",\n    active: true,\n    groups: [{\n        name: \"latency_alerting\",\n        interval: \"30s\",\n        rules: [\n            {\n                alert: \"HighLatency\",\n                expr: \"histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m])) \u003e 0.5\",\n                duration: \"5m\",\n                labels: {\n                    severity: \"warning\",\n                    category: \"Latency\",\n                },\n                annotations: {\n                    summary: \"High latency detected\",\n                    description: \"P99 latency is above 500ms for 5 minutes\",\n                },\n            },\n            {\n                alert: \"VeryHighLatency\",\n                expr: \"histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m])) \u003e 1.0\",\n                duration: \"2m\",\n                labels: {\n                    severity: \"critical\",\n                    category: \"Latency\",\n                },\n                annotations: {\n                    summary: \"Very high latency detected\",\n                    description: \"P99 latency is above 1 second\",\n                },\n            },\n        ],\n    }],\n});\n// Comprehensive monitoring rules with multiple groups\nconst comprehensiveMonitoring = new grafana.assert.PromRuleFile(\"comprehensive_monitoring\", {\n    name: \"custom-comprehensive-monitoring\",\n    active: true,\n    groups: [\n        {\n            name: \"latency_monitoring\",\n            interval: \"30s\",\n            rules: [\n                {\n                    record: \"custom:latency:p99\",\n                    expr: \"histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m]))\",\n                    labels: {\n                        source: \"custom\",\n                    },\n                },\n                {\n                    alert: \"HighLatency\",\n                    expr: \"custom:latency:p99 \u003e 0.5\",\n                    duration: \"5m\",\n                    labels: {\n                        severity: \"warning\",\n                    },\n                    annotations: {\n                        summary: \"High latency detected\",\n                    },\n                },\n            ],\n        },\n        {\n            name: \"error_monitoring\",\n            interval: \"1m\",\n            rules: [\n                {\n                    record: \"custom:error:rate\",\n                    expr: \"rate(http_requests_total{status=~\\\"5..\\\"}[5m])\",\n                    labels: {\n                        source: \"custom\",\n                    },\n                },\n                {\n                    alert: \"HighErrorRate\",\n                    expr: \"custom:error:rate \u003e 0.1\",\n                    duration: \"10m\",\n                    labels: {\n                        severity: \"critical\",\n                        category: \"Errors\",\n                    },\n                    annotations: {\n                        summary: \"High error rate detected\",\n                        description: \"Error rate is above 10%\",\n                    },\n                },\n            ],\n        },\n        {\n            name: \"throughput_monitoring\",\n            interval: \"1m\",\n            rules: [\n                {\n                    record: \"custom:throughput:total\",\n                    expr: \"sum(rate(http_requests_total[5m]))\",\n                    labels: {\n                        source: \"custom\",\n                    },\n                },\n                {\n                    alert: \"LowThroughput\",\n                    expr: \"custom:throughput:total \u003c 10\",\n                    duration: \"5m\",\n                    labels: {\n                        severity: \"warning\",\n                        category: \"Throughput\",\n                    },\n                    annotations: {\n                        summary: \"Low throughput detected\",\n                        description: \"Request throughput is below 10 requests/second\",\n                    },\n                },\n            ],\n        },\n    ],\n});\n// Rules with conditional enablement\nconst conditionalRules = new grafana.assert.PromRuleFile(\"conditional_rules\", {\n    name: \"custom-conditional-rules\",\n    active: true,\n    groups: [{\n        name: \"environment_specific_rules\",\n        interval: \"30s\",\n        rules: [\n            {\n                alert: \"TestAlert\",\n                expr: \"up == 0\",\n                duration: \"1m\",\n                labels: {\n                    severity: \"info\",\n                },\n                annotations: {\n                    summary: \"Test alert that is disabled in production\",\n                },\n                disableInGroups: [\"production\"],\n            },\n            {\n                alert: \"CriticalAlert\",\n                expr: \"up == 0\",\n                duration: \"30s\",\n                labels: {\n                    severity: \"critical\",\n                },\n                annotations: {\n                    summary: \"Critical alert that fires in all environments\",\n                },\n            },\n        ],\n    }],\n});\n// Inactive rules (for staging/testing)\nconst stagingRules = new grafana.assert.PromRuleFile(\"staging_rules\", {\n    name: \"custom-staging-rules\",\n    active: false,\n    groups: [{\n        name: \"staging_tests\",\n        interval: \"1m\",\n        rules: [{\n            record: \"staging:test:metric\",\n            expr: \"up\",\n            labels: {\n                environment: \"staging\",\n            },\n        }],\n    }],\n});\n// SLO-based alerting\nconst sloAlerts = new grafana.assert.PromRuleFile(\"slo_alerts\", {\n    name: \"custom-slo-alerts\",\n    active: true,\n    groups: [{\n        name: \"slo_monitoring\",\n        interval: \"1m\",\n        rules: [\n            {\n                record: \"custom:slo:availability\",\n                expr: \"sum(rate(http_requests_total{status!~\\\"5..\\\"}[5m])) / sum(rate(http_requests_total[5m]))\",\n                labels: {\n                    slo_type: \"availability\",\n                },\n            },\n            {\n                alert: \"SLOAvailabilityBreach\",\n                expr: \"custom:slo:availability \u003c 0.995\",\n                duration: \"5m\",\n                labels: {\n                    severity: \"critical\",\n                    category: \"SLO\",\n                },\n                annotations: {\n                    summary: \"SLO availability breach\",\n                    description: \"Availability is below 99.5% SLO target\",\n                    runbook_url: \"https://docs.example.com/runbooks/availability-breach\",\n                },\n            },\n        ],\n    }],\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\n# Basic recording rule for latency metrics\nlatency_metrics = grafana.assert_.PromRuleFile(\"latency_metrics\",\n    name=\"custom-latency-metrics\",\n    active=True,\n    groups=[{\n        \"name\": \"latency_recording_rules\",\n        \"interval\": \"30s\",\n        \"rules\": [\n            {\n                \"record\": \"custom:latency:p95\",\n                \"expr\": \"histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m]))\",\n                \"labels\": {\n                    \"source\": \"custom_instrumentation\",\n                    \"severity\": \"info\",\n                },\n            },\n            {\n                \"record\": \"custom:latency:p99\",\n                \"expr\": \"histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m]))\",\n                \"labels\": {\n                    \"source\": \"custom_instrumentation\",\n                    \"severity\": \"info\",\n                },\n            },\n        ],\n    }])\n# Alert rules for high latency\nlatency_alerts = grafana.assert_.PromRuleFile(\"latency_alerts\",\n    name=\"custom-latency-alerts\",\n    active=True,\n    groups=[{\n        \"name\": \"latency_alerting\",\n        \"interval\": \"30s\",\n        \"rules\": [\n            {\n                \"alert\": \"HighLatency\",\n                \"expr\": \"histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m])) \u003e 0.5\",\n                \"duration\": \"5m\",\n                \"labels\": {\n                    \"severity\": \"warning\",\n                    \"category\": \"Latency\",\n                },\n                \"annotations\": {\n                    \"summary\": \"High latency detected\",\n                    \"description\": \"P99 latency is above 500ms for 5 minutes\",\n                },\n            },\n            {\n                \"alert\": \"VeryHighLatency\",\n                \"expr\": \"histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m])) \u003e 1.0\",\n                \"duration\": \"2m\",\n                \"labels\": {\n                    \"severity\": \"critical\",\n                    \"category\": \"Latency\",\n                },\n                \"annotations\": {\n                    \"summary\": \"Very high latency detected\",\n                    \"description\": \"P99 latency is above 1 second\",\n                },\n            },\n        ],\n    }])\n# Comprehensive monitoring rules with multiple groups\ncomprehensive_monitoring = grafana.assert_.PromRuleFile(\"comprehensive_monitoring\",\n    name=\"custom-comprehensive-monitoring\",\n    active=True,\n    groups=[\n        {\n            \"name\": \"latency_monitoring\",\n            \"interval\": \"30s\",\n            \"rules\": [\n                {\n                    \"record\": \"custom:latency:p99\",\n                    \"expr\": \"histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m]))\",\n                    \"labels\": {\n                        \"source\": \"custom\",\n                    },\n                },\n                {\n                    \"alert\": \"HighLatency\",\n                    \"expr\": \"custom:latency:p99 \u003e 0.5\",\n                    \"duration\": \"5m\",\n                    \"labels\": {\n                        \"severity\": \"warning\",\n                    },\n                    \"annotations\": {\n                        \"summary\": \"High latency detected\",\n                    },\n                },\n            ],\n        },\n        {\n            \"name\": \"error_monitoring\",\n            \"interval\": \"1m\",\n            \"rules\": [\n                {\n                    \"record\": \"custom:error:rate\",\n                    \"expr\": \"rate(http_requests_total{status=~\\\"5..\\\"}[5m])\",\n                    \"labels\": {\n                        \"source\": \"custom\",\n                    },\n                },\n                {\n                    \"alert\": \"HighErrorRate\",\n                    \"expr\": \"custom:error:rate \u003e 0.1\",\n                    \"duration\": \"10m\",\n                    \"labels\": {\n                        \"severity\": \"critical\",\n                        \"category\": \"Errors\",\n                    },\n                    \"annotations\": {\n                        \"summary\": \"High error rate detected\",\n                        \"description\": \"Error rate is above 10%\",\n                    },\n                },\n            ],\n        },\n        {\n            \"name\": \"throughput_monitoring\",\n            \"interval\": \"1m\",\n            \"rules\": [\n                {\n                    \"record\": \"custom:throughput:total\",\n                    \"expr\": \"sum(rate(http_requests_total[5m]))\",\n                    \"labels\": {\n                        \"source\": \"custom\",\n                    },\n                },\n                {\n                    \"alert\": \"LowThroughput\",\n                    \"expr\": \"custom:throughput:total \u003c 10\",\n                    \"duration\": \"5m\",\n                    \"labels\": {\n                        \"severity\": \"warning\",\n                        \"category\": \"Throughput\",\n                    },\n                    \"annotations\": {\n                        \"summary\": \"Low throughput detected\",\n                        \"description\": \"Request throughput is below 10 requests/second\",\n                    },\n                },\n            ],\n        },\n    ])\n# Rules with conditional enablement\nconditional_rules = grafana.assert_.PromRuleFile(\"conditional_rules\",\n    name=\"custom-conditional-rules\",\n    active=True,\n    groups=[{\n        \"name\": \"environment_specific_rules\",\n        \"interval\": \"30s\",\n        \"rules\": [\n            {\n                \"alert\": \"TestAlert\",\n                \"expr\": \"up == 0\",\n                \"duration\": \"1m\",\n                \"labels\": {\n                    \"severity\": \"info\",\n                },\n                \"annotations\": {\n                    \"summary\": \"Test alert that is disabled in production\",\n                },\n                \"disable_in_groups\": [\"production\"],\n            },\n            {\n                \"alert\": \"CriticalAlert\",\n                \"expr\": \"up == 0\",\n                \"duration\": \"30s\",\n                \"labels\": {\n                    \"severity\": \"critical\",\n                },\n                \"annotations\": {\n                    \"summary\": \"Critical alert that fires in all environments\",\n                },\n            },\n        ],\n    }])\n# Inactive rules (for staging/testing)\nstaging_rules = grafana.assert_.PromRuleFile(\"staging_rules\",\n    name=\"custom-staging-rules\",\n    active=False,\n    groups=[{\n        \"name\": \"staging_tests\",\n        \"interval\": \"1m\",\n        \"rules\": [{\n            \"record\": \"staging:test:metric\",\n            \"expr\": \"up\",\n            \"labels\": {\n                \"environment\": \"staging\",\n            },\n        }],\n    }])\n# SLO-based alerting\nslo_alerts = grafana.assert_.PromRuleFile(\"slo_alerts\",\n    name=\"custom-slo-alerts\",\n    active=True,\n    groups=[{\n        \"name\": \"slo_monitoring\",\n        \"interval\": \"1m\",\n        \"rules\": [\n            {\n                \"record\": \"custom:slo:availability\",\n                \"expr\": \"sum(rate(http_requests_total{status!~\\\"5..\\\"}[5m])) / sum(rate(http_requests_total[5m]))\",\n                \"labels\": {\n                    \"slo_type\": \"availability\",\n                },\n            },\n            {\n                \"alert\": \"SLOAvailabilityBreach\",\n                \"expr\": \"custom:slo:availability \u003c 0.995\",\n                \"duration\": \"5m\",\n                \"labels\": {\n                    \"severity\": \"critical\",\n                    \"category\": \"SLO\",\n                },\n                \"annotations\": {\n                    \"summary\": \"SLO availability breach\",\n                    \"description\": \"Availability is below 99.5% SLO target\",\n                    \"runbook_url\": \"https://docs.example.com/runbooks/availability-breach\",\n                },\n            },\n        ],\n    }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    // Basic recording rule for latency metrics\n    var latencyMetrics = new Grafana.Assert.PromRuleFile(\"latency_metrics\", new()\n    {\n        Name = \"custom-latency-metrics\",\n        Active = true,\n        Groups = new[]\n        {\n            new Grafana.Assert.Inputs.PromRuleFileGroupArgs\n            {\n                Name = \"latency_recording_rules\",\n                Interval = \"30s\",\n                Rules = new[]\n                {\n                    new Grafana.Assert.Inputs.PromRuleFileGroupRuleArgs\n                    {\n                        Record = \"custom:latency:p95\",\n                        Expr = \"histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m]))\",\n                        Labels = \n                        {\n                            { \"source\", \"custom_instrumentation\" },\n                            { \"severity\", \"info\" },\n                        },\n                    },\n                    new Grafana.Assert.Inputs.PromRuleFileGroupRuleArgs\n                    {\n                        Record = \"custom:latency:p99\",\n                        Expr = \"histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m]))\",\n                        Labels = \n                        {\n                            { \"source\", \"custom_instrumentation\" },\n                            { \"severity\", \"info\" },\n                        },\n                    },\n                },\n            },\n        },\n    });\n\n    // Alert rules for high latency\n    var latencyAlerts = new Grafana.Assert.PromRuleFile(\"latency_alerts\", new()\n    {\n        Name = \"custom-latency-alerts\",\n        Active = true,\n        Groups = new[]\n        {\n            new Grafana.Assert.Inputs.PromRuleFileGroupArgs\n            {\n                Name = \"latency_alerting\",\n                Interval = \"30s\",\n                Rules = new[]\n                {\n                    new Grafana.Assert.Inputs.PromRuleFileGroupRuleArgs\n                    {\n                        Alert = \"HighLatency\",\n                        Expr = \"histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m])) \u003e 0.5\",\n                        Duration = \"5m\",\n                        Labels = \n                        {\n                            { \"severity\", \"warning\" },\n                            { \"category\", \"Latency\" },\n                        },\n                        Annotations = \n                        {\n                            { \"summary\", \"High latency detected\" },\n                            { \"description\", \"P99 latency is above 500ms for 5 minutes\" },\n                        },\n                    },\n                    new Grafana.Assert.Inputs.PromRuleFileGroupRuleArgs\n                    {\n                        Alert = \"VeryHighLatency\",\n                        Expr = \"histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m])) \u003e 1.0\",\n                        Duration = \"2m\",\n                        Labels = \n                        {\n                            { \"severity\", \"critical\" },\n                            { \"category\", \"Latency\" },\n                        },\n                        Annotations = \n                        {\n                            { \"summary\", \"Very high latency detected\" },\n                            { \"description\", \"P99 latency is above 1 second\" },\n                        },\n                    },\n                },\n            },\n        },\n    });\n\n    // Comprehensive monitoring rules with multiple groups\n    var comprehensiveMonitoring = new Grafana.Assert.PromRuleFile(\"comprehensive_monitoring\", new()\n    {\n        Name = \"custom-comprehensive-monitoring\",\n        Active = true,\n        Groups = new[]\n        {\n            new Grafana.Assert.Inputs.PromRuleFileGroupArgs\n            {\n                Name = \"latency_monitoring\",\n                Interval = \"30s\",\n                Rules = new[]\n                {\n                    new Grafana.Assert.Inputs.PromRuleFileGroupRuleArgs\n                    {\n                        Record = \"custom:latency:p99\",\n                        Expr = \"histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m]))\",\n                        Labels = \n                        {\n                            { \"source\", \"custom\" },\n                        },\n                    },\n                    new Grafana.Assert.Inputs.PromRuleFileGroupRuleArgs\n                    {\n                        Alert = \"HighLatency\",\n                        Expr = \"custom:latency:p99 \u003e 0.5\",\n                        Duration = \"5m\",\n                        Labels = \n                        {\n                            { \"severity\", \"warning\" },\n                        },\n                        Annotations = \n                        {\n                            { \"summary\", \"High latency detected\" },\n                        },\n                    },\n                },\n            },\n            new Grafana.Assert.Inputs.PromRuleFileGroupArgs\n            {\n                Name = \"error_monitoring\",\n                Interval = \"1m\",\n                Rules = new[]\n                {\n                    new Grafana.Assert.Inputs.PromRuleFileGroupRuleArgs\n                    {\n                        Record = \"custom:error:rate\",\n                        Expr = \"rate(http_requests_total{status=~\\\"5..\\\"}[5m])\",\n                        Labels = \n                        {\n                            { \"source\", \"custom\" },\n                        },\n                    },\n                    new Grafana.Assert.Inputs.PromRuleFileGroupRuleArgs\n                    {\n                        Alert = \"HighErrorRate\",\n                        Expr = \"custom:error:rate \u003e 0.1\",\n                        Duration = \"10m\",\n                        Labels = \n                        {\n                            { \"severity\", \"critical\" },\n                            { \"category\", \"Errors\" },\n                        },\n                        Annotations = \n                        {\n                            { \"summary\", \"High error rate detected\" },\n                            { \"description\", \"Error rate is above 10%\" },\n                        },\n                    },\n                },\n            },\n            new Grafana.Assert.Inputs.PromRuleFileGroupArgs\n            {\n                Name = \"throughput_monitoring\",\n                Interval = \"1m\",\n                Rules = new[]\n                {\n                    new Grafana.Assert.Inputs.PromRuleFileGroupRuleArgs\n                    {\n                        Record = \"custom:throughput:total\",\n                        Expr = \"sum(rate(http_requests_total[5m]))\",\n                        Labels = \n                        {\n                            { \"source\", \"custom\" },\n                        },\n                    },\n                    new Grafana.Assert.Inputs.PromRuleFileGroupRuleArgs\n                    {\n                        Alert = \"LowThroughput\",\n                        Expr = \"custom:throughput:total \u003c 10\",\n                        Duration = \"5m\",\n                        Labels = \n                        {\n                            { \"severity\", \"warning\" },\n                            { \"category\", \"Throughput\" },\n                        },\n                        Annotations = \n                        {\n                            { \"summary\", \"Low throughput detected\" },\n                            { \"description\", \"Request throughput is below 10 requests/second\" },\n                        },\n                    },\n                },\n            },\n        },\n    });\n\n    // Rules with conditional enablement\n    var conditionalRules = new Grafana.Assert.PromRuleFile(\"conditional_rules\", new()\n    {\n        Name = \"custom-conditional-rules\",\n        Active = true,\n        Groups = new[]\n        {\n            new Grafana.Assert.Inputs.PromRuleFileGroupArgs\n            {\n                Name = \"environment_specific_rules\",\n                Interval = \"30s\",\n                Rules = new[]\n                {\n                    new Grafana.Assert.Inputs.PromRuleFileGroupRuleArgs\n                    {\n                        Alert = \"TestAlert\",\n                        Expr = \"up == 0\",\n                        Duration = \"1m\",\n                        Labels = \n                        {\n                            { \"severity\", \"info\" },\n                        },\n                        Annotations = \n                        {\n                            { \"summary\", \"Test alert that is disabled in production\" },\n                        },\n                        DisableInGroups = new[]\n                        {\n                            \"production\",\n                        },\n                    },\n                    new Grafana.Assert.Inputs.PromRuleFileGroupRuleArgs\n                    {\n                        Alert = \"CriticalAlert\",\n                        Expr = \"up == 0\",\n                        Duration = \"30s\",\n                        Labels = \n                        {\n                            { \"severity\", \"critical\" },\n                        },\n                        Annotations = \n                        {\n                            { \"summary\", \"Critical alert that fires in all environments\" },\n                        },\n                    },\n                },\n            },\n        },\n    });\n\n    // Inactive rules (for staging/testing)\n    var stagingRules = new Grafana.Assert.PromRuleFile(\"staging_rules\", new()\n    {\n        Name = \"custom-staging-rules\",\n        Active = false,\n        Groups = new[]\n        {\n            new Grafana.Assert.Inputs.PromRuleFileGroupArgs\n            {\n                Name = \"staging_tests\",\n                Interval = \"1m\",\n                Rules = new[]\n                {\n                    new Grafana.Assert.Inputs.PromRuleFileGroupRuleArgs\n                    {\n                        Record = \"staging:test:metric\",\n                        Expr = \"up\",\n                        Labels = \n                        {\n                            { \"environment\", \"staging\" },\n                        },\n                    },\n                },\n            },\n        },\n    });\n\n    // SLO-based alerting\n    var sloAlerts = new Grafana.Assert.PromRuleFile(\"slo_alerts\", new()\n    {\n        Name = \"custom-slo-alerts\",\n        Active = true,\n        Groups = new[]\n        {\n            new Grafana.Assert.Inputs.PromRuleFileGroupArgs\n            {\n                Name = \"slo_monitoring\",\n                Interval = \"1m\",\n                Rules = new[]\n                {\n                    new Grafana.Assert.Inputs.PromRuleFileGroupRuleArgs\n                    {\n                        Record = \"custom:slo:availability\",\n                        Expr = \"sum(rate(http_requests_total{status!~\\\"5..\\\"}[5m])) / sum(rate(http_requests_total[5m]))\",\n                        Labels = \n                        {\n                            { \"slo_type\", \"availability\" },\n                        },\n                    },\n                    new Grafana.Assert.Inputs.PromRuleFileGroupRuleArgs\n                    {\n                        Alert = \"SLOAvailabilityBreach\",\n                        Expr = \"custom:slo:availability \u003c 0.995\",\n                        Duration = \"5m\",\n                        Labels = \n                        {\n                            { \"severity\", \"critical\" },\n                            { \"category\", \"SLO\" },\n                        },\n                        Annotations = \n                        {\n                            { \"summary\", \"SLO availability breach\" },\n                            { \"description\", \"Availability is below 99.5% SLO target\" },\n                            { \"runbook_url\", \"https://docs.example.com/runbooks/availability-breach\" },\n                        },\n                    },\n                },\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/assert\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t// Basic recording rule for latency metrics\n\t\t_, err := assert.NewPromRuleFile(ctx, \"latency_metrics\", \u0026assert.PromRuleFileArgs{\n\t\t\tName:   pulumi.String(\"custom-latency-metrics\"),\n\t\t\tActive: pulumi.Bool(true),\n\t\t\tGroups: assert.PromRuleFileGroupArray{\n\t\t\t\t\u0026assert.PromRuleFileGroupArgs{\n\t\t\t\t\tName:     pulumi.String(\"latency_recording_rules\"),\n\t\t\t\t\tInterval: pulumi.String(\"30s\"),\n\t\t\t\t\tRules: assert.PromRuleFileGroupRuleArray{\n\t\t\t\t\t\t\u0026assert.PromRuleFileGroupRuleArgs{\n\t\t\t\t\t\t\tRecord: pulumi.String(\"custom:latency:p95\"),\n\t\t\t\t\t\t\tExpr:   pulumi.String(\"histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m]))\"),\n\t\t\t\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\"source\":   pulumi.String(\"custom_instrumentation\"),\n\t\t\t\t\t\t\t\t\"severity\": pulumi.String(\"info\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026assert.PromRuleFileGroupRuleArgs{\n\t\t\t\t\t\t\tRecord: pulumi.String(\"custom:latency:p99\"),\n\t\t\t\t\t\t\tExpr:   pulumi.String(\"histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m]))\"),\n\t\t\t\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\"source\":   pulumi.String(\"custom_instrumentation\"),\n\t\t\t\t\t\t\t\t\"severity\": pulumi.String(\"info\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Alert rules for high latency\n\t\t_, err = assert.NewPromRuleFile(ctx, \"latency_alerts\", \u0026assert.PromRuleFileArgs{\n\t\t\tName:   pulumi.String(\"custom-latency-alerts\"),\n\t\t\tActive: pulumi.Bool(true),\n\t\t\tGroups: assert.PromRuleFileGroupArray{\n\t\t\t\t\u0026assert.PromRuleFileGroupArgs{\n\t\t\t\t\tName:     pulumi.String(\"latency_alerting\"),\n\t\t\t\t\tInterval: pulumi.String(\"30s\"),\n\t\t\t\t\tRules: assert.PromRuleFileGroupRuleArray{\n\t\t\t\t\t\t\u0026assert.PromRuleFileGroupRuleArgs{\n\t\t\t\t\t\t\tAlert:    pulumi.String(\"HighLatency\"),\n\t\t\t\t\t\t\tExpr:     pulumi.String(\"histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m])) \u003e 0.5\"),\n\t\t\t\t\t\t\tDuration: pulumi.String(\"5m\"),\n\t\t\t\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\"severity\": pulumi.String(\"warning\"),\n\t\t\t\t\t\t\t\t\"category\": pulumi.String(\"Latency\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tAnnotations: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\"summary\":     pulumi.String(\"High latency detected\"),\n\t\t\t\t\t\t\t\t\"description\": pulumi.String(\"P99 latency is above 500ms for 5 minutes\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026assert.PromRuleFileGroupRuleArgs{\n\t\t\t\t\t\t\tAlert:    pulumi.String(\"VeryHighLatency\"),\n\t\t\t\t\t\t\tExpr:     pulumi.String(\"histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m])) \u003e 1.0\"),\n\t\t\t\t\t\t\tDuration: pulumi.String(\"2m\"),\n\t\t\t\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\"severity\": pulumi.String(\"critical\"),\n\t\t\t\t\t\t\t\t\"category\": pulumi.String(\"Latency\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tAnnotations: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\"summary\":     pulumi.String(\"Very high latency detected\"),\n\t\t\t\t\t\t\t\t\"description\": pulumi.String(\"P99 latency is above 1 second\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Comprehensive monitoring rules with multiple groups\n\t\t_, err = assert.NewPromRuleFile(ctx, \"comprehensive_monitoring\", \u0026assert.PromRuleFileArgs{\n\t\t\tName:   pulumi.String(\"custom-comprehensive-monitoring\"),\n\t\t\tActive: pulumi.Bool(true),\n\t\t\tGroups: assert.PromRuleFileGroupArray{\n\t\t\t\t\u0026assert.PromRuleFileGroupArgs{\n\t\t\t\t\tName:     pulumi.String(\"latency_monitoring\"),\n\t\t\t\t\tInterval: pulumi.String(\"30s\"),\n\t\t\t\t\tRules: assert.PromRuleFileGroupRuleArray{\n\t\t\t\t\t\t\u0026assert.PromRuleFileGroupRuleArgs{\n\t\t\t\t\t\t\tRecord: pulumi.String(\"custom:latency:p99\"),\n\t\t\t\t\t\t\tExpr:   pulumi.String(\"histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m]))\"),\n\t\t\t\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\"source\": pulumi.String(\"custom\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026assert.PromRuleFileGroupRuleArgs{\n\t\t\t\t\t\t\tAlert:    pulumi.String(\"HighLatency\"),\n\t\t\t\t\t\t\tExpr:     pulumi.String(\"custom:latency:p99 \u003e 0.5\"),\n\t\t\t\t\t\t\tDuration: pulumi.String(\"5m\"),\n\t\t\t\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\"severity\": pulumi.String(\"warning\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tAnnotations: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\"summary\": pulumi.String(\"High latency detected\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026assert.PromRuleFileGroupArgs{\n\t\t\t\t\tName:     pulumi.String(\"error_monitoring\"),\n\t\t\t\t\tInterval: pulumi.String(\"1m\"),\n\t\t\t\t\tRules: assert.PromRuleFileGroupRuleArray{\n\t\t\t\t\t\t\u0026assert.PromRuleFileGroupRuleArgs{\n\t\t\t\t\t\t\tRecord: pulumi.String(\"custom:error:rate\"),\n\t\t\t\t\t\t\tExpr:   pulumi.String(\"rate(http_requests_total{status=~\\\"5..\\\"}[5m])\"),\n\t\t\t\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\"source\": pulumi.String(\"custom\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026assert.PromRuleFileGroupRuleArgs{\n\t\t\t\t\t\t\tAlert:    pulumi.String(\"HighErrorRate\"),\n\t\t\t\t\t\t\tExpr:     pulumi.String(\"custom:error:rate \u003e 0.1\"),\n\t\t\t\t\t\t\tDuration: pulumi.String(\"10m\"),\n\t\t\t\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\"severity\": pulumi.String(\"critical\"),\n\t\t\t\t\t\t\t\t\"category\": pulumi.String(\"Errors\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tAnnotations: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\"summary\":     pulumi.String(\"High error rate detected\"),\n\t\t\t\t\t\t\t\t\"description\": pulumi.String(\"Error rate is above 10%\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026assert.PromRuleFileGroupArgs{\n\t\t\t\t\tName:     pulumi.String(\"throughput_monitoring\"),\n\t\t\t\t\tInterval: pulumi.String(\"1m\"),\n\t\t\t\t\tRules: assert.PromRuleFileGroupRuleArray{\n\t\t\t\t\t\t\u0026assert.PromRuleFileGroupRuleArgs{\n\t\t\t\t\t\t\tRecord: pulumi.String(\"custom:throughput:total\"),\n\t\t\t\t\t\t\tExpr:   pulumi.String(\"sum(rate(http_requests_total[5m]))\"),\n\t\t\t\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\"source\": pulumi.String(\"custom\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026assert.PromRuleFileGroupRuleArgs{\n\t\t\t\t\t\t\tAlert:    pulumi.String(\"LowThroughput\"),\n\t\t\t\t\t\t\tExpr:     pulumi.String(\"custom:throughput:total \u003c 10\"),\n\t\t\t\t\t\t\tDuration: pulumi.String(\"5m\"),\n\t\t\t\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\"severity\": pulumi.String(\"warning\"),\n\t\t\t\t\t\t\t\t\"category\": pulumi.String(\"Throughput\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tAnnotations: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\"summary\":     pulumi.String(\"Low throughput detected\"),\n\t\t\t\t\t\t\t\t\"description\": pulumi.String(\"Request throughput is below 10 requests/second\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Rules with conditional enablement\n\t\t_, err = assert.NewPromRuleFile(ctx, \"conditional_rules\", \u0026assert.PromRuleFileArgs{\n\t\t\tName:   pulumi.String(\"custom-conditional-rules\"),\n\t\t\tActive: pulumi.Bool(true),\n\t\t\tGroups: assert.PromRuleFileGroupArray{\n\t\t\t\t\u0026assert.PromRuleFileGroupArgs{\n\t\t\t\t\tName:     pulumi.String(\"environment_specific_rules\"),\n\t\t\t\t\tInterval: pulumi.String(\"30s\"),\n\t\t\t\t\tRules: assert.PromRuleFileGroupRuleArray{\n\t\t\t\t\t\t\u0026assert.PromRuleFileGroupRuleArgs{\n\t\t\t\t\t\t\tAlert:    pulumi.String(\"TestAlert\"),\n\t\t\t\t\t\t\tExpr:     pulumi.String(\"up == 0\"),\n\t\t\t\t\t\t\tDuration: pulumi.String(\"1m\"),\n\t\t\t\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\"severity\": pulumi.String(\"info\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tAnnotations: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\"summary\": pulumi.String(\"Test alert that is disabled in production\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tDisableInGroups: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"production\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026assert.PromRuleFileGroupRuleArgs{\n\t\t\t\t\t\t\tAlert:    pulumi.String(\"CriticalAlert\"),\n\t\t\t\t\t\t\tExpr:     pulumi.String(\"up == 0\"),\n\t\t\t\t\t\t\tDuration: pulumi.String(\"30s\"),\n\t\t\t\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\"severity\": pulumi.String(\"critical\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tAnnotations: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\"summary\": pulumi.String(\"Critical alert that fires in all environments\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Inactive rules (for staging/testing)\n\t\t_, err = assert.NewPromRuleFile(ctx, \"staging_rules\", \u0026assert.PromRuleFileArgs{\n\t\t\tName:   pulumi.String(\"custom-staging-rules\"),\n\t\t\tActive: pulumi.Bool(false),\n\t\t\tGroups: assert.PromRuleFileGroupArray{\n\t\t\t\t\u0026assert.PromRuleFileGroupArgs{\n\t\t\t\t\tName:     pulumi.String(\"staging_tests\"),\n\t\t\t\t\tInterval: pulumi.String(\"1m\"),\n\t\t\t\t\tRules: assert.PromRuleFileGroupRuleArray{\n\t\t\t\t\t\t\u0026assert.PromRuleFileGroupRuleArgs{\n\t\t\t\t\t\t\tRecord: pulumi.String(\"staging:test:metric\"),\n\t\t\t\t\t\t\tExpr:   pulumi.String(\"up\"),\n\t\t\t\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\"environment\": pulumi.String(\"staging\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// SLO-based alerting\n\t\t_, err = assert.NewPromRuleFile(ctx, \"slo_alerts\", \u0026assert.PromRuleFileArgs{\n\t\t\tName:   pulumi.String(\"custom-slo-alerts\"),\n\t\t\tActive: pulumi.Bool(true),\n\t\t\tGroups: assert.PromRuleFileGroupArray{\n\t\t\t\t\u0026assert.PromRuleFileGroupArgs{\n\t\t\t\t\tName:     pulumi.String(\"slo_monitoring\"),\n\t\t\t\t\tInterval: pulumi.String(\"1m\"),\n\t\t\t\t\tRules: assert.PromRuleFileGroupRuleArray{\n\t\t\t\t\t\t\u0026assert.PromRuleFileGroupRuleArgs{\n\t\t\t\t\t\t\tRecord: pulumi.String(\"custom:slo:availability\"),\n\t\t\t\t\t\t\tExpr:   pulumi.String(\"sum(rate(http_requests_total{status!~\\\"5..\\\"}[5m])) / sum(rate(http_requests_total[5m]))\"),\n\t\t\t\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\"slo_type\": pulumi.String(\"availability\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026assert.PromRuleFileGroupRuleArgs{\n\t\t\t\t\t\t\tAlert:    pulumi.String(\"SLOAvailabilityBreach\"),\n\t\t\t\t\t\t\tExpr:     pulumi.String(\"custom:slo:availability \u003c 0.995\"),\n\t\t\t\t\t\t\tDuration: pulumi.String(\"5m\"),\n\t\t\t\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\"severity\": pulumi.String(\"critical\"),\n\t\t\t\t\t\t\t\t\"category\": pulumi.String(\"SLO\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tAnnotations: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\"summary\":     pulumi.String(\"SLO availability breach\"),\n\t\t\t\t\t\t\t\t\"description\": pulumi.String(\"Availability is below 99.5% SLO target\"),\n\t\t\t\t\t\t\t\t\"runbook_url\": pulumi.String(\"https://docs.example.com/runbooks/availability-breach\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.assert.PromRuleFile;\nimport com.pulumi.grafana.assert.PromRuleFileArgs;\nimport com.pulumi.grafana.assert.inputs.PromRuleFileGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        // Basic recording rule for latency metrics\n        var latencyMetrics = new PromRuleFile(\"latencyMetrics\", PromRuleFileArgs.builder()\n            .name(\"custom-latency-metrics\")\n            .active(true)\n            .groups(PromRuleFileGroupArgs.builder()\n                .name(\"latency_recording_rules\")\n                .interval(\"30s\")\n                .rules(                \n                    PromRuleFileGroupRuleArgs.builder()\n                        .record(\"custom:latency:p95\")\n                        .expr(\"histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m]))\")\n                        .labels(Map.ofEntries(\n                            Map.entry(\"source\", \"custom_instrumentation\"),\n                            Map.entry(\"severity\", \"info\")\n                        ))\n                        .build(),\n                    PromRuleFileGroupRuleArgs.builder()\n                        .record(\"custom:latency:p99\")\n                        .expr(\"histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m]))\")\n                        .labels(Map.ofEntries(\n                            Map.entry(\"source\", \"custom_instrumentation\"),\n                            Map.entry(\"severity\", \"info\")\n                        ))\n                        .build())\n                .build())\n            .build());\n\n        // Alert rules for high latency\n        var latencyAlerts = new PromRuleFile(\"latencyAlerts\", PromRuleFileArgs.builder()\n            .name(\"custom-latency-alerts\")\n            .active(true)\n            .groups(PromRuleFileGroupArgs.builder()\n                .name(\"latency_alerting\")\n                .interval(\"30s\")\n                .rules(                \n                    PromRuleFileGroupRuleArgs.builder()\n                        .alert(\"HighLatency\")\n                        .expr(\"histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m])) \u003e 0.5\")\n                        .duration(\"5m\")\n                        .labels(Map.ofEntries(\n                            Map.entry(\"severity\", \"warning\"),\n                            Map.entry(\"category\", \"Latency\")\n                        ))\n                        .annotations(Map.ofEntries(\n                            Map.entry(\"summary\", \"High latency detected\"),\n                            Map.entry(\"description\", \"P99 latency is above 500ms for 5 minutes\")\n                        ))\n                        .build(),\n                    PromRuleFileGroupRuleArgs.builder()\n                        .alert(\"VeryHighLatency\")\n                        .expr(\"histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m])) \u003e 1.0\")\n                        .duration(\"2m\")\n                        .labels(Map.ofEntries(\n                            Map.entry(\"severity\", \"critical\"),\n                            Map.entry(\"category\", \"Latency\")\n                        ))\n                        .annotations(Map.ofEntries(\n                            Map.entry(\"summary\", \"Very high latency detected\"),\n                            Map.entry(\"description\", \"P99 latency is above 1 second\")\n                        ))\n                        .build())\n                .build())\n            .build());\n\n        // Comprehensive monitoring rules with multiple groups\n        var comprehensiveMonitoring = new PromRuleFile(\"comprehensiveMonitoring\", PromRuleFileArgs.builder()\n            .name(\"custom-comprehensive-monitoring\")\n            .active(true)\n            .groups(            \n                PromRuleFileGroupArgs.builder()\n                    .name(\"latency_monitoring\")\n                    .interval(\"30s\")\n                    .rules(                    \n                        PromRuleFileGroupRuleArgs.builder()\n                            .record(\"custom:latency:p99\")\n                            .expr(\"histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m]))\")\n                            .labels(Map.of(\"source\", \"custom\"))\n                            .build(),\n                        PromRuleFileGroupRuleArgs.builder()\n                            .alert(\"HighLatency\")\n                            .expr(\"custom:latency:p99 \u003e 0.5\")\n                            .duration(\"5m\")\n                            .labels(Map.of(\"severity\", \"warning\"))\n                            .annotations(Map.of(\"summary\", \"High latency detected\"))\n                            .build())\n                    .build(),\n                PromRuleFileGroupArgs.builder()\n                    .name(\"error_monitoring\")\n                    .interval(\"1m\")\n                    .rules(                    \n                        PromRuleFileGroupRuleArgs.builder()\n                            .record(\"custom:error:rate\")\n                            .expr(\"rate(http_requests_total{status=~\\\"5..\\\"}[5m])\")\n                            .labels(Map.of(\"source\", \"custom\"))\n                            .build(),\n                        PromRuleFileGroupRuleArgs.builder()\n                            .alert(\"HighErrorRate\")\n                            .expr(\"custom:error:rate \u003e 0.1\")\n                            .duration(\"10m\")\n                            .labels(Map.ofEntries(\n                                Map.entry(\"severity\", \"critical\"),\n                                Map.entry(\"category\", \"Errors\")\n                            ))\n                            .annotations(Map.ofEntries(\n                                Map.entry(\"summary\", \"High error rate detected\"),\n                                Map.entry(\"description\", \"Error rate is above 10%\")\n                            ))\n                            .build())\n                    .build(),\n                PromRuleFileGroupArgs.builder()\n                    .name(\"throughput_monitoring\")\n                    .interval(\"1m\")\n                    .rules(                    \n                        PromRuleFileGroupRuleArgs.builder()\n                            .record(\"custom:throughput:total\")\n                            .expr(\"sum(rate(http_requests_total[5m]))\")\n                            .labels(Map.of(\"source\", \"custom\"))\n                            .build(),\n                        PromRuleFileGroupRuleArgs.builder()\n                            .alert(\"LowThroughput\")\n                            .expr(\"custom:throughput:total \u003c 10\")\n                            .duration(\"5m\")\n                            .labels(Map.ofEntries(\n                                Map.entry(\"severity\", \"warning\"),\n                                Map.entry(\"category\", \"Throughput\")\n                            ))\n                            .annotations(Map.ofEntries(\n                                Map.entry(\"summary\", \"Low throughput detected\"),\n                                Map.entry(\"description\", \"Request throughput is below 10 requests/second\")\n                            ))\n                            .build())\n                    .build())\n            .build());\n\n        // Rules with conditional enablement\n        var conditionalRules = new PromRuleFile(\"conditionalRules\", PromRuleFileArgs.builder()\n            .name(\"custom-conditional-rules\")\n            .active(true)\n            .groups(PromRuleFileGroupArgs.builder()\n                .name(\"environment_specific_rules\")\n                .interval(\"30s\")\n                .rules(                \n                    PromRuleFileGroupRuleArgs.builder()\n                        .alert(\"TestAlert\")\n                        .expr(\"up == 0\")\n                        .duration(\"1m\")\n                        .labels(Map.of(\"severity\", \"info\"))\n                        .annotations(Map.of(\"summary\", \"Test alert that is disabled in production\"))\n                        .disableInGroups(\"production\")\n                        .build(),\n                    PromRuleFileGroupRuleArgs.builder()\n                        .alert(\"CriticalAlert\")\n                        .expr(\"up == 0\")\n                        .duration(\"30s\")\n                        .labels(Map.of(\"severity\", \"critical\"))\n                        .annotations(Map.of(\"summary\", \"Critical alert that fires in all environments\"))\n                        .build())\n                .build())\n            .build());\n\n        // Inactive rules (for staging/testing)\n        var stagingRules = new PromRuleFile(\"stagingRules\", PromRuleFileArgs.builder()\n            .name(\"custom-staging-rules\")\n            .active(false)\n            .groups(PromRuleFileGroupArgs.builder()\n                .name(\"staging_tests\")\n                .interval(\"1m\")\n                .rules(PromRuleFileGroupRuleArgs.builder()\n                    .record(\"staging:test:metric\")\n                    .expr(\"up\")\n                    .labels(Map.of(\"environment\", \"staging\"))\n                    .build())\n                .build())\n            .build());\n\n        // SLO-based alerting\n        var sloAlerts = new PromRuleFile(\"sloAlerts\", PromRuleFileArgs.builder()\n            .name(\"custom-slo-alerts\")\n            .active(true)\n            .groups(PromRuleFileGroupArgs.builder()\n                .name(\"slo_monitoring\")\n                .interval(\"1m\")\n                .rules(                \n                    PromRuleFileGroupRuleArgs.builder()\n                        .record(\"custom:slo:availability\")\n                        .expr(\"sum(rate(http_requests_total{status!~\\\"5..\\\"}[5m])) / sum(rate(http_requests_total[5m]))\")\n                        .labels(Map.of(\"slo_type\", \"availability\"))\n                        .build(),\n                    PromRuleFileGroupRuleArgs.builder()\n                        .alert(\"SLOAvailabilityBreach\")\n                        .expr(\"custom:slo:availability \u003c 0.995\")\n                        .duration(\"5m\")\n                        .labels(Map.ofEntries(\n                            Map.entry(\"severity\", \"critical\"),\n                            Map.entry(\"category\", \"SLO\")\n                        ))\n                        .annotations(Map.ofEntries(\n                            Map.entry(\"summary\", \"SLO availability breach\"),\n                            Map.entry(\"description\", \"Availability is below 99.5% SLO target\"),\n                            Map.entry(\"runbook_url\", \"https://docs.example.com/runbooks/availability-breach\")\n                        ))\n                        .build())\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  # Basic recording rule for latency metrics\n  latencyMetrics:\n    type: grafana:assert:PromRuleFile\n    name: latency_metrics\n    properties:\n      name: custom-latency-metrics\n      active: true\n      groups:\n        - name: latency_recording_rules\n          interval: 30s\n          rules:\n            - record: custom:latency:p95\n              expr: histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m]))\n              labels:\n                source: custom_instrumentation\n                severity: info\n            - record: custom:latency:p99\n              expr: histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m]))\n              labels:\n                source: custom_instrumentation\n                severity: info\n  # Alert rules for high latency\n  latencyAlerts:\n    type: grafana:assert:PromRuleFile\n    name: latency_alerts\n    properties:\n      name: custom-latency-alerts\n      active: true\n      groups:\n        - name: latency_alerting\n          interval: 30s\n          rules:\n            - alert: HighLatency\n              expr: histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m])) \u003e 0.5\n              duration: 5m\n              labels:\n                severity: warning\n                category: Latency\n              annotations:\n                summary: High latency detected\n                description: P99 latency is above 500ms for 5 minutes\n            - alert: VeryHighLatency\n              expr: histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m])) \u003e 1.0\n              duration: 2m\n              labels:\n                severity: critical\n                category: Latency\n              annotations:\n                summary: Very high latency detected\n                description: P99 latency is above 1 second\n  # Comprehensive monitoring rules with multiple groups\n  comprehensiveMonitoring:\n    type: grafana:assert:PromRuleFile\n    name: comprehensive_monitoring\n    properties:\n      name: custom-comprehensive-monitoring\n      active: true # Latency monitoring\n      groups:\n        - name: latency_monitoring\n          interval: 30s\n          rules:\n            - record: custom:latency:p99\n              expr: histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m]))\n              labels:\n                source: custom\n            - alert: HighLatency\n              expr: custom:latency:p99 \u003e 0.5\n              duration: 5m\n              labels:\n                severity: warning\n              annotations:\n                summary: High latency detected\n        - name: error_monitoring\n          interval: 1m\n          rules:\n            - record: custom:error:rate\n              expr: rate(http_requests_total{status=~\"5..\"}[5m])\n              labels:\n                source: custom\n            - alert: HighErrorRate\n              expr: custom:error:rate \u003e 0.1\n              duration: 10m\n              labels:\n                severity: critical\n                category: Errors\n              annotations:\n                summary: High error rate detected\n                description: Error rate is above 10%\n        - name: throughput_monitoring\n          interval: 1m\n          rules:\n            - record: custom:throughput:total\n              expr: sum(rate(http_requests_total[5m]))\n              labels:\n                source: custom\n            - alert: LowThroughput\n              expr: custom:throughput:total \u003c 10\n              duration: 5m\n              labels:\n                severity: warning\n                category: Throughput\n              annotations:\n                summary: Low throughput detected\n                description: Request throughput is below 10 requests/second\n  # Rules with conditional enablement\n  conditionalRules:\n    type: grafana:assert:PromRuleFile\n    name: conditional_rules\n    properties:\n      name: custom-conditional-rules\n      active: true\n      groups:\n        - name: environment_specific_rules\n          interval: 30s\n          rules:\n            - alert: TestAlert\n              expr: up == 0\n              duration: 1m\n              labels:\n                severity: info\n              annotations:\n                summary: Test alert that is disabled in production\n              disableInGroups:\n                - production\n            - alert: CriticalAlert\n              expr: up == 0\n              duration: 30s\n              labels:\n                severity: critical\n              annotations:\n                summary: Critical alert that fires in all environments\n  # Inactive rules (for staging/testing)\n  stagingRules:\n    type: grafana:assert:PromRuleFile\n    name: staging_rules\n    properties:\n      name: custom-staging-rules\n      active: false # Rules file is inactive\n      groups:\n        - name: staging_tests\n          interval: 1m\n          rules:\n            - record: staging:test:metric\n              expr: up\n              labels:\n                environment: staging\n  # SLO-based alerting\n  sloAlerts:\n    type: grafana:assert:PromRuleFile\n    name: slo_alerts\n    properties:\n      name: custom-slo-alerts\n      active: true\n      groups:\n        - name: slo_monitoring\n          interval: 1m\n          rules:\n            - record: custom:slo:availability\n              expr: sum(rate(http_requests_total{status!~\"5..\"}[5m])) / sum(rate(http_requests_total[5m]))\n              labels:\n                slo_type: availability\n            - alert: SLOAvailabilityBreach\n              expr: custom:slo:availability \u003c 0.995\n              duration: 5m\n              labels:\n                severity: critical\n                category: SLO\n              annotations:\n                summary: SLO availability breach\n                description: Availability is below 99.5% SLO target\n                runbook_url: https://docs.example.com/runbooks/availability-breach\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:assert/promRuleFile:PromRuleFile name \"{{ name }}\"\n```\n\n","properties":{"active":{"type":"boolean","description":"Whether the rules file is active. Inactive rules are not evaluated. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"groups":{"type":"array","items":{"$ref":"#/types/grafana:assert/PromRuleFileGroup:PromRuleFileGroup"},"description":"List of Prometheus rule groups. Each group contains one or more rules and can have its own evaluation interval.\n"},"name":{"type":"string","description":"The name of the Prometheus rules file. This will be stored with a .custom extension. Must follow naming validation rules (alphanumeric, hyphens, underscores).\n"}},"required":["groups","name"],"inputProperties":{"active":{"type":"boolean","description":"Whether the rules file is active. Inactive rules are not evaluated. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"groups":{"type":"array","items":{"$ref":"#/types/grafana:assert/PromRuleFileGroup:PromRuleFileGroup"},"description":"List of Prometheus rule groups. Each group contains one or more rules and can have its own evaluation interval.\n"},"name":{"type":"string","description":"The name of the Prometheus rules file. This will be stored with a .custom extension. Must follow naming validation rules (alphanumeric, hyphens, underscores).\n","willReplaceOnChanges":true}},"requiredInputs":["groups"],"stateInputs":{"description":"Input properties used for looking up and filtering PromRuleFile resources.\n","properties":{"active":{"type":"boolean","description":"Whether the rules file is active. Inactive rules are not evaluated. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"groups":{"type":"array","items":{"$ref":"#/types/grafana:assert/PromRuleFileGroup:PromRuleFileGroup"},"description":"List of Prometheus rule groups. Each group contains one or more rules and can have its own evaluation interval.\n"},"name":{"type":"string","description":"The name of the Prometheus rules file. This will be stored with a .custom extension. Must follow naming validation rules (alphanumeric, hyphens, underscores).\n","willReplaceOnChanges":true}},"type":"object"}},"grafana:assert/suppressedAssertionsConfig:SuppressedAssertionsConfig":{"description":"Manages Knowledge Graph Disabled Alert Configurations through Grafana API.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\n// Basic suppressed alert configuration for maintenance\nconst maintenanceWindow = new grafana.assert.SuppressedAssertionsConfig(\"maintenance_window\", {\n    name: \"MaintenanceWindow\",\n    matchLabels: {\n        service: \"api-service\",\n        maintenance: \"true\",\n    },\n});\n// Suppress specific alertname during deployment\nconst deploymentSuppression = new grafana.assert.SuppressedAssertionsConfig(\"deployment_suppression\", {\n    name: \"DeploymentSuppression\",\n    matchLabels: {\n        alertname: \"HighLatency\",\n        job: \"web-service\",\n        env: \"staging\",\n    },\n});\n// Suppress alerts for specific test environment\nconst testEnvironmentSuppression = new grafana.assert.SuppressedAssertionsConfig(\"test_environment_suppression\", {\n    name: \"TestEnvironmentSuppression\",\n    matchLabels: {\n        alertgroup: \"test.alerts\",\n        environment: \"test\",\n    },\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\n# Basic suppressed alert configuration for maintenance\nmaintenance_window = grafana.assert_.SuppressedAssertionsConfig(\"maintenance_window\",\n    name=\"MaintenanceWindow\",\n    match_labels={\n        \"service\": \"api-service\",\n        \"maintenance\": \"true\",\n    })\n# Suppress specific alertname during deployment\ndeployment_suppression = grafana.assert_.SuppressedAssertionsConfig(\"deployment_suppression\",\n    name=\"DeploymentSuppression\",\n    match_labels={\n        \"alertname\": \"HighLatency\",\n        \"job\": \"web-service\",\n        \"env\": \"staging\",\n    })\n# Suppress alerts for specific test environment\ntest_environment_suppression = grafana.assert_.SuppressedAssertionsConfig(\"test_environment_suppression\",\n    name=\"TestEnvironmentSuppression\",\n    match_labels={\n        \"alertgroup\": \"test.alerts\",\n        \"environment\": \"test\",\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    // Basic suppressed alert configuration for maintenance\n    var maintenanceWindow = new Grafana.Assert.SuppressedAssertionsConfig(\"maintenance_window\", new()\n    {\n        Name = \"MaintenanceWindow\",\n        MatchLabels = \n        {\n            { \"service\", \"api-service\" },\n            { \"maintenance\", \"true\" },\n        },\n    });\n\n    // Suppress specific alertname during deployment\n    var deploymentSuppression = new Grafana.Assert.SuppressedAssertionsConfig(\"deployment_suppression\", new()\n    {\n        Name = \"DeploymentSuppression\",\n        MatchLabels = \n        {\n            { \"alertname\", \"HighLatency\" },\n            { \"job\", \"web-service\" },\n            { \"env\", \"staging\" },\n        },\n    });\n\n    // Suppress alerts for specific test environment\n    var testEnvironmentSuppression = new Grafana.Assert.SuppressedAssertionsConfig(\"test_environment_suppression\", new()\n    {\n        Name = \"TestEnvironmentSuppression\",\n        MatchLabels = \n        {\n            { \"alertgroup\", \"test.alerts\" },\n            { \"environment\", \"test\" },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/assert\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t// Basic suppressed alert configuration for maintenance\n\t\t_, err := assert.NewSuppressedAssertionsConfig(ctx, \"maintenance_window\", \u0026assert.SuppressedAssertionsConfigArgs{\n\t\t\tName: pulumi.String(\"MaintenanceWindow\"),\n\t\t\tMatchLabels: pulumi.StringMap{\n\t\t\t\t\"service\":     pulumi.String(\"api-service\"),\n\t\t\t\t\"maintenance\": pulumi.String(\"true\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Suppress specific alertname during deployment\n\t\t_, err = assert.NewSuppressedAssertionsConfig(ctx, \"deployment_suppression\", \u0026assert.SuppressedAssertionsConfigArgs{\n\t\t\tName: pulumi.String(\"DeploymentSuppression\"),\n\t\t\tMatchLabels: pulumi.StringMap{\n\t\t\t\t\"alertname\": pulumi.String(\"HighLatency\"),\n\t\t\t\t\"job\":       pulumi.String(\"web-service\"),\n\t\t\t\t\"env\":       pulumi.String(\"staging\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Suppress alerts for specific test environment\n\t\t_, err = assert.NewSuppressedAssertionsConfig(ctx, \"test_environment_suppression\", \u0026assert.SuppressedAssertionsConfigArgs{\n\t\t\tName: pulumi.String(\"TestEnvironmentSuppression\"),\n\t\t\tMatchLabels: pulumi.StringMap{\n\t\t\t\t\"alertgroup\":  pulumi.String(\"test.alerts\"),\n\t\t\t\t\"environment\": pulumi.String(\"test\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.assert.SuppressedAssertionsConfig;\nimport com.pulumi.grafana.assert.SuppressedAssertionsConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        // Basic suppressed alert configuration for maintenance\n        var maintenanceWindow = new SuppressedAssertionsConfig(\"maintenanceWindow\", SuppressedAssertionsConfigArgs.builder()\n            .name(\"MaintenanceWindow\")\n            .matchLabels(Map.ofEntries(\n                Map.entry(\"service\", \"api-service\"),\n                Map.entry(\"maintenance\", \"true\")\n            ))\n            .build());\n\n        // Suppress specific alertname during deployment\n        var deploymentSuppression = new SuppressedAssertionsConfig(\"deploymentSuppression\", SuppressedAssertionsConfigArgs.builder()\n            .name(\"DeploymentSuppression\")\n            .matchLabels(Map.ofEntries(\n                Map.entry(\"alertname\", \"HighLatency\"),\n                Map.entry(\"job\", \"web-service\"),\n                Map.entry(\"env\", \"staging\")\n            ))\n            .build());\n\n        // Suppress alerts for specific test environment\n        var testEnvironmentSuppression = new SuppressedAssertionsConfig(\"testEnvironmentSuppression\", SuppressedAssertionsConfigArgs.builder()\n            .name(\"TestEnvironmentSuppression\")\n            .matchLabels(Map.ofEntries(\n                Map.entry(\"alertgroup\", \"test.alerts\"),\n                Map.entry(\"environment\", \"test\")\n            ))\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  # Basic suppressed alert configuration for maintenance\n  maintenanceWindow:\n    type: grafana:assert:SuppressedAssertionsConfig\n    name: maintenance_window\n    properties:\n      name: MaintenanceWindow\n      matchLabels:\n        service: api-service\n        maintenance: 'true'\n  # Suppress specific alertname during deployment\n  deploymentSuppression:\n    type: grafana:assert:SuppressedAssertionsConfig\n    name: deployment_suppression\n    properties:\n      name: DeploymentSuppression\n      matchLabels:\n        alertname: HighLatency\n        job: web-service\n        env: staging\n  # Suppress alerts for specific test environment\n  testEnvironmentSuppression:\n    type: grafana:assert:SuppressedAssertionsConfig\n    name: test_environment_suppression\n    properties:\n      name: TestEnvironmentSuppression\n      matchLabels:\n        alertgroup: test.alerts\n        environment: test\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:assert/suppressedAssertionsConfig:SuppressedAssertionsConfig name \"{{ name }}\"\n```\n\n","properties":{"matchLabels":{"type":"object","additionalProperties":{"type":"string"},"description":"Labels to match for this disabled alert configuration.\n"},"name":{"type":"string","description":"The name of the disabled alert configuration.\n"}},"required":["name"],"inputProperties":{"matchLabels":{"type":"object","additionalProperties":{"type":"string"},"description":"Labels to match for this disabled alert configuration.\n"},"name":{"type":"string","description":"The name of the disabled alert configuration.\n","willReplaceOnChanges":true}},"stateInputs":{"description":"Input properties used for looking up and filtering SuppressedAssertionsConfig resources.\n","properties":{"matchLabels":{"type":"object","additionalProperties":{"type":"string"},"description":"Labels to match for this disabled alert configuration.\n"},"name":{"type":"string","description":"The name of the disabled alert configuration.\n","willReplaceOnChanges":true}},"type":"object"}},"grafana:assert/thresholds:Thresholds":{"description":"Manages Knowledge Graph Thresholds configuration (request, resource, health) via bulk endpoints.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst basic = new grafana.assert.Thresholds(\"basic\", {\n    requestThresholds: [{\n        entityName: \"payment-service\",\n        assertionName: \"ErrorRatioBreach\",\n        requestType: \"inbound\",\n        requestContext: \"/charge\",\n        value: 0.01,\n    }],\n    resourceThresholds: [{\n        assertionName: \"Saturation\",\n        resourceType: \"container\",\n        containerName: \"worker\",\n        source: \"metrics\",\n        severity: \"warning\",\n        value: 75,\n    }],\n    healthThresholds: [{\n        assertionName: \"ServiceDown\",\n        expression: \"up \u003c 1\",\n        entityType: \"Service\",\n    }],\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\nbasic = grafana.assert_.Thresholds(\"basic\",\n    request_thresholds=[{\n        \"entity_name\": \"payment-service\",\n        \"assertion_name\": \"ErrorRatioBreach\",\n        \"request_type\": \"inbound\",\n        \"request_context\": \"/charge\",\n        \"value\": 0.01,\n    }],\n    resource_thresholds=[{\n        \"assertion_name\": \"Saturation\",\n        \"resource_type\": \"container\",\n        \"container_name\": \"worker\",\n        \"source\": \"metrics\",\n        \"severity\": \"warning\",\n        \"value\": 75,\n    }],\n    health_thresholds=[{\n        \"assertion_name\": \"ServiceDown\",\n        \"expression\": \"up \u003c 1\",\n        \"entity_type\": \"Service\",\n    }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var basic = new Grafana.Assert.Thresholds(\"basic\", new()\n    {\n        RequestThresholds = new[]\n        {\n            new Grafana.Assert.Inputs.ThresholdsRequestThresholdArgs\n            {\n                EntityName = \"payment-service\",\n                AssertionName = \"ErrorRatioBreach\",\n                RequestType = \"inbound\",\n                RequestContext = \"/charge\",\n                Value = 0.01,\n            },\n        },\n        ResourceThresholds = new[]\n        {\n            new Grafana.Assert.Inputs.ThresholdsResourceThresholdArgs\n            {\n                AssertionName = \"Saturation\",\n                ResourceType = \"container\",\n                ContainerName = \"worker\",\n                Source = \"metrics\",\n                Severity = \"warning\",\n                Value = 75,\n            },\n        },\n        HealthThresholds = new[]\n        {\n            new Grafana.Assert.Inputs.ThresholdsHealthThresholdArgs\n            {\n                AssertionName = \"ServiceDown\",\n                Expression = \"up \u003c 1\",\n                EntityType = \"Service\",\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/assert\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := assert.NewThresholds(ctx, \"basic\", \u0026assert.ThresholdsArgs{\n\t\t\tRequestThresholds: assert.ThresholdsRequestThresholdArray{\n\t\t\t\t\u0026assert.ThresholdsRequestThresholdArgs{\n\t\t\t\t\tEntityName:     pulumi.String(\"payment-service\"),\n\t\t\t\t\tAssertionName:  pulumi.String(\"ErrorRatioBreach\"),\n\t\t\t\t\tRequestType:    pulumi.String(\"inbound\"),\n\t\t\t\t\tRequestContext: pulumi.String(\"/charge\"),\n\t\t\t\t\tValue:          pulumi.Float64(0.01),\n\t\t\t\t},\n\t\t\t},\n\t\t\tResourceThresholds: assert.ThresholdsResourceThresholdArray{\n\t\t\t\t\u0026assert.ThresholdsResourceThresholdArgs{\n\t\t\t\t\tAssertionName: pulumi.String(\"Saturation\"),\n\t\t\t\t\tResourceType:  pulumi.String(\"container\"),\n\t\t\t\t\tContainerName: pulumi.String(\"worker\"),\n\t\t\t\t\tSource:        pulumi.String(\"metrics\"),\n\t\t\t\t\tSeverity:      pulumi.String(\"warning\"),\n\t\t\t\t\tValue:         pulumi.Float64(75),\n\t\t\t\t},\n\t\t\t},\n\t\t\tHealthThresholds: assert.ThresholdsHealthThresholdArray{\n\t\t\t\t\u0026assert.ThresholdsHealthThresholdArgs{\n\t\t\t\t\tAssertionName: pulumi.String(\"ServiceDown\"),\n\t\t\t\t\tExpression:    pulumi.String(\"up \u003c 1\"),\n\t\t\t\t\tEntityType:    pulumi.String(\"Service\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.assert.Thresholds;\nimport com.pulumi.grafana.assert.ThresholdsArgs;\nimport com.pulumi.grafana.assert.inputs.ThresholdsRequestThresholdArgs;\nimport com.pulumi.grafana.assert.inputs.ThresholdsResourceThresholdArgs;\nimport com.pulumi.grafana.assert.inputs.ThresholdsHealthThresholdArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var basic = new Thresholds(\"basic\", ThresholdsArgs.builder()\n            .requestThresholds(ThresholdsRequestThresholdArgs.builder()\n                .entityName(\"payment-service\")\n                .assertionName(\"ErrorRatioBreach\")\n                .requestType(\"inbound\")\n                .requestContext(\"/charge\")\n                .value(0.01)\n                .build())\n            .resourceThresholds(ThresholdsResourceThresholdArgs.builder()\n                .assertionName(\"Saturation\")\n                .resourceType(\"container\")\n                .containerName(\"worker\")\n                .source(\"metrics\")\n                .severity(\"warning\")\n                .value(75.0)\n                .build())\n            .healthThresholds(ThresholdsHealthThresholdArgs.builder()\n                .assertionName(\"ServiceDown\")\n                .expression(\"up \u003c 1\")\n                .entityType(\"Service\")\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  basic:\n    type: grafana:assert:Thresholds\n    properties:\n      requestThresholds:\n        - entityName: payment-service\n          assertionName: ErrorRatioBreach\n          requestType: inbound\n          requestContext: /charge\n          value: 0.01\n      resourceThresholds:\n        - assertionName: Saturation\n          resourceType: container\n          containerName: worker\n          source: metrics\n          severity: warning\n          value: 75\n      healthThresholds:\n        - assertionName: ServiceDown\n          expression: up \u003c 1\n          entityType: Service\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:assert/thresholds:Thresholds name \"{{ id }}\"\n```\n\n","properties":{"healthThresholds":{"type":"array","items":{"$ref":"#/types/grafana:assert/ThresholdsHealthThreshold:ThresholdsHealthThreshold"},"description":"List of health thresholds.\n"},"requestThresholds":{"type":"array","items":{"$ref":"#/types/grafana:assert/ThresholdsRequestThreshold:ThresholdsRequestThreshold"},"description":"List of request thresholds.\n"},"resourceThresholds":{"type":"array","items":{"$ref":"#/types/grafana:assert/ThresholdsResourceThreshold:ThresholdsResourceThreshold"},"description":"List of resource thresholds.\n"}},"inputProperties":{"healthThresholds":{"type":"array","items":{"$ref":"#/types/grafana:assert/ThresholdsHealthThreshold:ThresholdsHealthThreshold"},"description":"List of health thresholds.\n"},"requestThresholds":{"type":"array","items":{"$ref":"#/types/grafana:assert/ThresholdsRequestThreshold:ThresholdsRequestThreshold"},"description":"List of request thresholds.\n"},"resourceThresholds":{"type":"array","items":{"$ref":"#/types/grafana:assert/ThresholdsResourceThreshold:ThresholdsResourceThreshold"},"description":"List of resource thresholds.\n"}},"stateInputs":{"description":"Input properties used for looking up and filtering Thresholds resources.\n","properties":{"healthThresholds":{"type":"array","items":{"$ref":"#/types/grafana:assert/ThresholdsHealthThreshold:ThresholdsHealthThreshold"},"description":"List of health thresholds.\n"},"requestThresholds":{"type":"array","items":{"$ref":"#/types/grafana:assert/ThresholdsRequestThreshold:ThresholdsRequestThreshold"},"description":"List of request thresholds.\n"},"resourceThresholds":{"type":"array","items":{"$ref":"#/types/grafana:assert/ThresholdsResourceThreshold:ThresholdsResourceThreshold"},"description":"List of resource thresholds.\n"}},"type":"object"}},"grafana:assert/traceConfig:TraceConfig":{"description":"Manages Knowledge Graph Trace Configuration through Grafana API.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst production = new grafana.assert.TraceConfig(\"production\", {\n    name: \"production\",\n    priority: 1000,\n    defaultConfig: false,\n    dataSourceUid: \"grafanacloud-traces\",\n    matches: [\n        {\n            property: \"asserts_entity_type\",\n            op: \"=\",\n            values: [\"Service\"],\n        },\n        {\n            property: \"deployment_environment\",\n            op: \"=\",\n            values: [\n                \"production\",\n                \"staging\",\n            ],\n        },\n        {\n            property: \"asserts_site\",\n            op: \"=\",\n            values: [\n                \"us-east-1\",\n                \"us-west-2\",\n            ],\n        },\n    ],\n    entityPropertyToTraceLabelMapping: {\n        cluster: \"resource.k8s.cluster.name\",\n        namespace: \"resource.k8s.namespace\",\n        container: \"resource.container.name\",\n        otel_service: \"resource.service.name\",\n        otel_namespace: \"resource.service.namespace\",\n    },\n});\nconst development = new grafana.assert.TraceConfig(\"development\", {\n    name: \"development\",\n    priority: 2000,\n    defaultConfig: false,\n    dataSourceUid: \"grafanacloud-traces\",\n    matches: [\n        {\n            property: \"asserts_entity_type\",\n            op: \"=\",\n            values: [\"Service\"],\n        },\n        {\n            property: \"deployment_environment\",\n            op: \"=\",\n            values: [\n                \"development\",\n                \"testing\",\n            ],\n        },\n        {\n            property: \"asserts_site\",\n            op: \"=\",\n            values: [\"us-east-1\"],\n        },\n        {\n            property: \"service\",\n            op: \"=\",\n            values: [\"my sample api\"],\n        },\n    ],\n    entityPropertyToTraceLabelMapping: {\n        cluster: \"resource.k8s.cluster.name\",\n        namespace: \"resource.k8s.namespace\",\n        container: \"resource.container.name\",\n        otel_service: \"resource.service.name\",\n        otel_namespace: \"resource.service.namespace\",\n        pod: \"span.k8s.pod.name\",\n    },\n});\nconst minimal = new grafana.assert.TraceConfig(\"minimal\", {\n    name: \"minimal\",\n    priority: 3000,\n    dataSourceUid: \"tempo-minimal\",\n    matches: [{\n        property: \"asserts_entity_type\",\n        op: \"IS NOT NULL\",\n    }],\n    entityPropertyToTraceLabelMapping: {\n        cluster: \"resource.k8s.cluster.name\",\n        otel_service: \"resource.service.name\",\n        otel_namespace: \"resource.service.namespace\",\n    },\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\nproduction = grafana.assert_.TraceConfig(\"production\",\n    name=\"production\",\n    priority=1000,\n    default_config=False,\n    data_source_uid=\"grafanacloud-traces\",\n    matches=[\n        {\n            \"property\": \"asserts_entity_type\",\n            \"op\": \"=\",\n            \"values\": [\"Service\"],\n        },\n        {\n            \"property\": \"deployment_environment\",\n            \"op\": \"=\",\n            \"values\": [\n                \"production\",\n                \"staging\",\n            ],\n        },\n        {\n            \"property\": \"asserts_site\",\n            \"op\": \"=\",\n            \"values\": [\n                \"us-east-1\",\n                \"us-west-2\",\n            ],\n        },\n    ],\n    entity_property_to_trace_label_mapping={\n        \"cluster\": \"resource.k8s.cluster.name\",\n        \"namespace\": \"resource.k8s.namespace\",\n        \"container\": \"resource.container.name\",\n        \"otel_service\": \"resource.service.name\",\n        \"otel_namespace\": \"resource.service.namespace\",\n    })\ndevelopment = grafana.assert_.TraceConfig(\"development\",\n    name=\"development\",\n    priority=2000,\n    default_config=False,\n    data_source_uid=\"grafanacloud-traces\",\n    matches=[\n        {\n            \"property\": \"asserts_entity_type\",\n            \"op\": \"=\",\n            \"values\": [\"Service\"],\n        },\n        {\n            \"property\": \"deployment_environment\",\n            \"op\": \"=\",\n            \"values\": [\n                \"development\",\n                \"testing\",\n            ],\n        },\n        {\n            \"property\": \"asserts_site\",\n            \"op\": \"=\",\n            \"values\": [\"us-east-1\"],\n        },\n        {\n            \"property\": \"service\",\n            \"op\": \"=\",\n            \"values\": [\"my sample api\"],\n        },\n    ],\n    entity_property_to_trace_label_mapping={\n        \"cluster\": \"resource.k8s.cluster.name\",\n        \"namespace\": \"resource.k8s.namespace\",\n        \"container\": \"resource.container.name\",\n        \"otel_service\": \"resource.service.name\",\n        \"otel_namespace\": \"resource.service.namespace\",\n        \"pod\": \"span.k8s.pod.name\",\n    })\nminimal = grafana.assert_.TraceConfig(\"minimal\",\n    name=\"minimal\",\n    priority=3000,\n    data_source_uid=\"tempo-minimal\",\n    matches=[{\n        \"property\": \"asserts_entity_type\",\n        \"op\": \"IS NOT NULL\",\n    }],\n    entity_property_to_trace_label_mapping={\n        \"cluster\": \"resource.k8s.cluster.name\",\n        \"otel_service\": \"resource.service.name\",\n        \"otel_namespace\": \"resource.service.namespace\",\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var production = new Grafana.Assert.TraceConfig(\"production\", new()\n    {\n        Name = \"production\",\n        Priority = 1000,\n        DefaultConfig = false,\n        DataSourceUid = \"grafanacloud-traces\",\n        Matches = new[]\n        {\n            new Grafana.Assert.Inputs.TraceConfigMatchArgs\n            {\n                Property = \"asserts_entity_type\",\n                Op = \"=\",\n                Values = new[]\n                {\n                    \"Service\",\n                },\n            },\n            new Grafana.Assert.Inputs.TraceConfigMatchArgs\n            {\n                Property = \"deployment_environment\",\n                Op = \"=\",\n                Values = new[]\n                {\n                    \"production\",\n                    \"staging\",\n                },\n            },\n            new Grafana.Assert.Inputs.TraceConfigMatchArgs\n            {\n                Property = \"asserts_site\",\n                Op = \"=\",\n                Values = new[]\n                {\n                    \"us-east-1\",\n                    \"us-west-2\",\n                },\n            },\n        },\n        EntityPropertyToTraceLabelMapping = \n        {\n            { \"cluster\", \"resource.k8s.cluster.name\" },\n            { \"namespace\", \"resource.k8s.namespace\" },\n            { \"container\", \"resource.container.name\" },\n            { \"otel_service\", \"resource.service.name\" },\n            { \"otel_namespace\", \"resource.service.namespace\" },\n        },\n    });\n\n    var development = new Grafana.Assert.TraceConfig(\"development\", new()\n    {\n        Name = \"development\",\n        Priority = 2000,\n        DefaultConfig = false,\n        DataSourceUid = \"grafanacloud-traces\",\n        Matches = new[]\n        {\n            new Grafana.Assert.Inputs.TraceConfigMatchArgs\n            {\n                Property = \"asserts_entity_type\",\n                Op = \"=\",\n                Values = new[]\n                {\n                    \"Service\",\n                },\n            },\n            new Grafana.Assert.Inputs.TraceConfigMatchArgs\n            {\n                Property = \"deployment_environment\",\n                Op = \"=\",\n                Values = new[]\n                {\n                    \"development\",\n                    \"testing\",\n                },\n            },\n            new Grafana.Assert.Inputs.TraceConfigMatchArgs\n            {\n                Property = \"asserts_site\",\n                Op = \"=\",\n                Values = new[]\n                {\n                    \"us-east-1\",\n                },\n            },\n            new Grafana.Assert.Inputs.TraceConfigMatchArgs\n            {\n                Property = \"service\",\n                Op = \"=\",\n                Values = new[]\n                {\n                    \"my sample api\",\n                },\n            },\n        },\n        EntityPropertyToTraceLabelMapping = \n        {\n            { \"cluster\", \"resource.k8s.cluster.name\" },\n            { \"namespace\", \"resource.k8s.namespace\" },\n            { \"container\", \"resource.container.name\" },\n            { \"otel_service\", \"resource.service.name\" },\n            { \"otel_namespace\", \"resource.service.namespace\" },\n            { \"pod\", \"span.k8s.pod.name\" },\n        },\n    });\n\n    var minimal = new Grafana.Assert.TraceConfig(\"minimal\", new()\n    {\n        Name = \"minimal\",\n        Priority = 3000,\n        DataSourceUid = \"tempo-minimal\",\n        Matches = new[]\n        {\n            new Grafana.Assert.Inputs.TraceConfigMatchArgs\n            {\n                Property = \"asserts_entity_type\",\n                Op = \"IS NOT NULL\",\n            },\n        },\n        EntityPropertyToTraceLabelMapping = \n        {\n            { \"cluster\", \"resource.k8s.cluster.name\" },\n            { \"otel_service\", \"resource.service.name\" },\n            { \"otel_namespace\", \"resource.service.namespace\" },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/assert\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := assert.NewTraceConfig(ctx, \"production\", \u0026assert.TraceConfigArgs{\n\t\t\tName:          pulumi.String(\"production\"),\n\t\t\tPriority:      pulumi.Int(1000),\n\t\t\tDefaultConfig: pulumi.Bool(false),\n\t\t\tDataSourceUid: pulumi.String(\"grafanacloud-traces\"),\n\t\t\tMatches: assert.TraceConfigMatchArray{\n\t\t\t\t\u0026assert.TraceConfigMatchArgs{\n\t\t\t\t\tProperty: pulumi.String(\"asserts_entity_type\"),\n\t\t\t\t\tOp:       pulumi.String(\"=\"),\n\t\t\t\t\tValues: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"Service\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026assert.TraceConfigMatchArgs{\n\t\t\t\t\tProperty: pulumi.String(\"deployment_environment\"),\n\t\t\t\t\tOp:       pulumi.String(\"=\"),\n\t\t\t\t\tValues: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"production\"),\n\t\t\t\t\t\tpulumi.String(\"staging\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026assert.TraceConfigMatchArgs{\n\t\t\t\t\tProperty: pulumi.String(\"asserts_site\"),\n\t\t\t\t\tOp:       pulumi.String(\"=\"),\n\t\t\t\t\tValues: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"us-east-1\"),\n\t\t\t\t\t\tpulumi.String(\"us-west-2\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tEntityPropertyToTraceLabelMapping: pulumi.StringMap{\n\t\t\t\t\"cluster\":        pulumi.String(\"resource.k8s.cluster.name\"),\n\t\t\t\t\"namespace\":      pulumi.String(\"resource.k8s.namespace\"),\n\t\t\t\t\"container\":      pulumi.String(\"resource.container.name\"),\n\t\t\t\t\"otel_service\":   pulumi.String(\"resource.service.name\"),\n\t\t\t\t\"otel_namespace\": pulumi.String(\"resource.service.namespace\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = assert.NewTraceConfig(ctx, \"development\", \u0026assert.TraceConfigArgs{\n\t\t\tName:          pulumi.String(\"development\"),\n\t\t\tPriority:      pulumi.Int(2000),\n\t\t\tDefaultConfig: pulumi.Bool(false),\n\t\t\tDataSourceUid: pulumi.String(\"grafanacloud-traces\"),\n\t\t\tMatches: assert.TraceConfigMatchArray{\n\t\t\t\t\u0026assert.TraceConfigMatchArgs{\n\t\t\t\t\tProperty: pulumi.String(\"asserts_entity_type\"),\n\t\t\t\t\tOp:       pulumi.String(\"=\"),\n\t\t\t\t\tValues: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"Service\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026assert.TraceConfigMatchArgs{\n\t\t\t\t\tProperty: pulumi.String(\"deployment_environment\"),\n\t\t\t\t\tOp:       pulumi.String(\"=\"),\n\t\t\t\t\tValues: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"development\"),\n\t\t\t\t\t\tpulumi.String(\"testing\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026assert.TraceConfigMatchArgs{\n\t\t\t\t\tProperty: pulumi.String(\"asserts_site\"),\n\t\t\t\t\tOp:       pulumi.String(\"=\"),\n\t\t\t\t\tValues: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"us-east-1\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026assert.TraceConfigMatchArgs{\n\t\t\t\t\tProperty: pulumi.String(\"service\"),\n\t\t\t\t\tOp:       pulumi.String(\"=\"),\n\t\t\t\t\tValues: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"my sample api\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tEntityPropertyToTraceLabelMapping: pulumi.StringMap{\n\t\t\t\t\"cluster\":        pulumi.String(\"resource.k8s.cluster.name\"),\n\t\t\t\t\"namespace\":      pulumi.String(\"resource.k8s.namespace\"),\n\t\t\t\t\"container\":      pulumi.String(\"resource.container.name\"),\n\t\t\t\t\"otel_service\":   pulumi.String(\"resource.service.name\"),\n\t\t\t\t\"otel_namespace\": pulumi.String(\"resource.service.namespace\"),\n\t\t\t\t\"pod\":            pulumi.String(\"span.k8s.pod.name\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = assert.NewTraceConfig(ctx, \"minimal\", \u0026assert.TraceConfigArgs{\n\t\t\tName:          pulumi.String(\"minimal\"),\n\t\t\tPriority:      pulumi.Int(3000),\n\t\t\tDataSourceUid: pulumi.String(\"tempo-minimal\"),\n\t\t\tMatches: assert.TraceConfigMatchArray{\n\t\t\t\t\u0026assert.TraceConfigMatchArgs{\n\t\t\t\t\tProperty: pulumi.String(\"asserts_entity_type\"),\n\t\t\t\t\tOp:       pulumi.String(\"IS NOT NULL\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tEntityPropertyToTraceLabelMapping: pulumi.StringMap{\n\t\t\t\t\"cluster\":        pulumi.String(\"resource.k8s.cluster.name\"),\n\t\t\t\t\"otel_service\":   pulumi.String(\"resource.service.name\"),\n\t\t\t\t\"otel_namespace\": pulumi.String(\"resource.service.namespace\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.assert.TraceConfig;\nimport com.pulumi.grafana.assert.TraceConfigArgs;\nimport com.pulumi.grafana.assert.inputs.TraceConfigMatchArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var production = new TraceConfig(\"production\", TraceConfigArgs.builder()\n            .name(\"production\")\n            .priority(1000)\n            .defaultConfig(false)\n            .dataSourceUid(\"grafanacloud-traces\")\n            .matches(            \n                TraceConfigMatchArgs.builder()\n                    .property(\"asserts_entity_type\")\n                    .op(\"=\")\n                    .values(\"Service\")\n                    .build(),\n                TraceConfigMatchArgs.builder()\n                    .property(\"deployment_environment\")\n                    .op(\"=\")\n                    .values(                    \n                        \"production\",\n                        \"staging\")\n                    .build(),\n                TraceConfigMatchArgs.builder()\n                    .property(\"asserts_site\")\n                    .op(\"=\")\n                    .values(                    \n                        \"us-east-1\",\n                        \"us-west-2\")\n                    .build())\n            .entityPropertyToTraceLabelMapping(Map.ofEntries(\n                Map.entry(\"cluster\", \"resource.k8s.cluster.name\"),\n                Map.entry(\"namespace\", \"resource.k8s.namespace\"),\n                Map.entry(\"container\", \"resource.container.name\"),\n                Map.entry(\"otel_service\", \"resource.service.name\"),\n                Map.entry(\"otel_namespace\", \"resource.service.namespace\")\n            ))\n            .build());\n\n        var development = new TraceConfig(\"development\", TraceConfigArgs.builder()\n            .name(\"development\")\n            .priority(2000)\n            .defaultConfig(false)\n            .dataSourceUid(\"grafanacloud-traces\")\n            .matches(            \n                TraceConfigMatchArgs.builder()\n                    .property(\"asserts_entity_type\")\n                    .op(\"=\")\n                    .values(\"Service\")\n                    .build(),\n                TraceConfigMatchArgs.builder()\n                    .property(\"deployment_environment\")\n                    .op(\"=\")\n                    .values(                    \n                        \"development\",\n                        \"testing\")\n                    .build(),\n                TraceConfigMatchArgs.builder()\n                    .property(\"asserts_site\")\n                    .op(\"=\")\n                    .values(\"us-east-1\")\n                    .build(),\n                TraceConfigMatchArgs.builder()\n                    .property(\"service\")\n                    .op(\"=\")\n                    .values(\"my sample api\")\n                    .build())\n            .entityPropertyToTraceLabelMapping(Map.ofEntries(\n                Map.entry(\"cluster\", \"resource.k8s.cluster.name\"),\n                Map.entry(\"namespace\", \"resource.k8s.namespace\"),\n                Map.entry(\"container\", \"resource.container.name\"),\n                Map.entry(\"otel_service\", \"resource.service.name\"),\n                Map.entry(\"otel_namespace\", \"resource.service.namespace\"),\n                Map.entry(\"pod\", \"span.k8s.pod.name\")\n            ))\n            .build());\n\n        var minimal = new TraceConfig(\"minimal\", TraceConfigArgs.builder()\n            .name(\"minimal\")\n            .priority(3000)\n            .dataSourceUid(\"tempo-minimal\")\n            .matches(TraceConfigMatchArgs.builder()\n                .property(\"asserts_entity_type\")\n                .op(\"IS NOT NULL\")\n                .build())\n            .entityPropertyToTraceLabelMapping(Map.ofEntries(\n                Map.entry(\"cluster\", \"resource.k8s.cluster.name\"),\n                Map.entry(\"otel_service\", \"resource.service.name\"),\n                Map.entry(\"otel_namespace\", \"resource.service.namespace\")\n            ))\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  production:\n    type: grafana:assert:TraceConfig\n    properties:\n      name: production\n      priority: 1000\n      defaultConfig: false\n      dataSourceUid: grafanacloud-traces\n      matches:\n        - property: asserts_entity_type\n          op: =\n          values:\n            - Service\n        - property: deployment_environment\n          op: =\n          values:\n            - production\n            - staging\n        - property: asserts_site\n          op: =\n          values:\n            - us-east-1\n            - us-west-2\n      entityPropertyToTraceLabelMapping:\n        cluster: resource.k8s.cluster.name\n        namespace: resource.k8s.namespace\n        container: resource.container.name\n        otel_service: resource.service.name\n        otel_namespace: resource.service.namespace\n  development:\n    type: grafana:assert:TraceConfig\n    properties:\n      name: development\n      priority: 2000\n      defaultConfig: false\n      dataSourceUid: grafanacloud-traces\n      matches:\n        - property: asserts_entity_type\n          op: =\n          values:\n            - Service\n        - property: deployment_environment\n          op: =\n          values:\n            - development\n            - testing\n        - property: asserts_site\n          op: =\n          values:\n            - us-east-1\n        - property: service\n          op: =\n          values:\n            - my sample api\n      entityPropertyToTraceLabelMapping:\n        cluster: resource.k8s.cluster.name\n        namespace: resource.k8s.namespace\n        container: resource.container.name\n        otel_service: resource.service.name\n        otel_namespace: resource.service.namespace\n        pod: span.k8s.pod.name\n  minimal:\n    type: grafana:assert:TraceConfig\n    properties:\n      name: minimal\n      priority: 3000\n      dataSourceUid: tempo-minimal\n      matches:\n        - property: asserts_entity_type\n          op: IS NOT NULL\n      entityPropertyToTraceLabelMapping:\n        cluster: resource.k8s.cluster.name\n        otel_service: resource.service.name\n        otel_namespace: resource.service.namespace\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:assert/traceConfig:TraceConfig name \"{{ name }}\"\n```\n\n","properties":{"dataSourceUid":{"type":"string","description":"DataSource to be queried (e.g., a Tempo instance).\n"},"defaultConfig":{"type":"boolean","description":"Is it the default config, therefore undeletable?\n"},"entityPropertyToTraceLabelMapping":{"type":"object","additionalProperties":{"type":"string"},"description":"Mapping of entity properties to trace labels.\n"},"matches":{"type":"array","items":{"$ref":"#/types/grafana:assert/TraceConfigMatch:TraceConfigMatch"},"description":"List of match rules for entity properties.\n"},"name":{"type":"string","description":"The name of the trace configuration.\n"},"priority":{"type":"integer","description":"Priority of the trace configuration. A lower number means a higher priority.\n"}},"required":["dataSourceUid","defaultConfig","name","priority"],"inputProperties":{"dataSourceUid":{"type":"string","description":"DataSource to be queried (e.g., a Tempo instance).\n"},"defaultConfig":{"type":"boolean","description":"Is it the default config, therefore undeletable?\n"},"entityPropertyToTraceLabelMapping":{"type":"object","additionalProperties":{"type":"string"},"description":"Mapping of entity properties to trace labels.\n"},"matches":{"type":"array","items":{"$ref":"#/types/grafana:assert/TraceConfigMatch:TraceConfigMatch"},"description":"List of match rules for entity properties.\n"},"name":{"type":"string","description":"The name of the trace configuration.\n","willReplaceOnChanges":true},"priority":{"type":"integer","description":"Priority of the trace configuration. A lower number means a higher priority.\n"}},"requiredInputs":["dataSourceUid","defaultConfig","priority"],"stateInputs":{"description":"Input properties used for looking up and filtering TraceConfig resources.\n","properties":{"dataSourceUid":{"type":"string","description":"DataSource to be queried (e.g., a Tempo instance).\n"},"defaultConfig":{"type":"boolean","description":"Is it the default config, therefore undeletable?\n"},"entityPropertyToTraceLabelMapping":{"type":"object","additionalProperties":{"type":"string"},"description":"Mapping of entity properties to trace labels.\n"},"matches":{"type":"array","items":{"$ref":"#/types/grafana:assert/TraceConfigMatch:TraceConfigMatch"},"description":"List of match rules for entity properties.\n"},"name":{"type":"string","description":"The name of the trace configuration.\n","willReplaceOnChanges":true},"priority":{"type":"integer","description":"Priority of the trace configuration. A lower number means a higher priority.\n"}},"type":"object"}},"grafana:cloud/accessPolicy:AccessPolicy":{"description":"* [Official documentation](https://grafana.com/docs/grafana-cloud/security-and-account-management/authentication-and-permissions/access-policies/)\n* [API documentation](https://grafana.com/docs/grafana-cloud/developer-resources/api-reference/cloud-api/#create-an-access-policy)\n\nRequired access policy scopes:\n\n* accesspolicies:read\n* accesspolicies:write\n* accesspolicies:delete\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst current = grafana.cloud.getOrganization({\n    slug: \"\u003cyour org slug\u003e\",\n});\nconst test = new grafana.cloud.AccessPolicy(\"test\", {\n    region: \"prod-us-east-0\",\n    name: \"my-policy\",\n    displayName: \"My Policy\",\n    scopes: [\n        \"metrics:read\",\n        \"logs:read\",\n    ],\n    realms: [{\n        type: \"org\",\n        identifier: current.then(current =\u003e current.id),\n        labelPolicies: [{\n            selector: \"{namespace=\\\"default\\\"}\",\n        }],\n    }],\n});\nconst testAccessPolicyToken = new grafana.cloud.AccessPolicyToken(\"test\", {\n    region: \"prod-us-east-0\",\n    accessPolicyId: test.policyId,\n    name: \"my-policy-token\",\n    displayName: \"My Policy Token\",\n    expiresAt: \"2023-01-01T00:00:00Z\",\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\ncurrent = grafana.cloud.get_organization(slug=\"\u003cyour org slug\u003e\")\ntest = grafana.cloud.AccessPolicy(\"test\",\n    region=\"prod-us-east-0\",\n    name=\"my-policy\",\n    display_name=\"My Policy\",\n    scopes=[\n        \"metrics:read\",\n        \"logs:read\",\n    ],\n    realms=[{\n        \"type\": \"org\",\n        \"identifier\": current.id,\n        \"label_policies\": [{\n            \"selector\": \"{namespace=\\\"default\\\"}\",\n        }],\n    }])\ntest_access_policy_token = grafana.cloud.AccessPolicyToken(\"test\",\n    region=\"prod-us-east-0\",\n    access_policy_id=test.policy_id,\n    name=\"my-policy-token\",\n    display_name=\"My Policy Token\",\n    expires_at=\"2023-01-01T00:00:00Z\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var current = Grafana.Cloud.GetOrganization.Invoke(new()\n    {\n        Slug = \"\u003cyour org slug\u003e\",\n    });\n\n    var test = new Grafana.Cloud.AccessPolicy(\"test\", new()\n    {\n        Region = \"prod-us-east-0\",\n        Name = \"my-policy\",\n        DisplayName = \"My Policy\",\n        Scopes = new[]\n        {\n            \"metrics:read\",\n            \"logs:read\",\n        },\n        Realms = new[]\n        {\n            new Grafana.Cloud.Inputs.AccessPolicyRealmArgs\n            {\n                Type = \"org\",\n                Identifier = current.Apply(getOrganizationResult =\u003e getOrganizationResult.Id),\n                LabelPolicies = new[]\n                {\n                    new Grafana.Cloud.Inputs.AccessPolicyRealmLabelPolicyArgs\n                    {\n                        Selector = \"{namespace=\\\"default\\\"}\",\n                    },\n                },\n            },\n        },\n    });\n\n    var testAccessPolicyToken = new Grafana.Cloud.AccessPolicyToken(\"test\", new()\n    {\n        Region = \"prod-us-east-0\",\n        AccessPolicyId = test.PolicyId,\n        Name = \"my-policy-token\",\n        DisplayName = \"My Policy Token\",\n        ExpiresAt = \"2023-01-01T00:00:00Z\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/cloud\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcurrent, err := cloud.GetOrganization(ctx, \u0026cloud.GetOrganizationArgs{\n\t\t\tSlug: pulumi.StringRef(\"\u003cyour org slug\u003e\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttest, err := cloud.NewAccessPolicy(ctx, \"test\", \u0026cloud.AccessPolicyArgs{\n\t\t\tRegion:      pulumi.String(\"prod-us-east-0\"),\n\t\t\tName:        pulumi.String(\"my-policy\"),\n\t\t\tDisplayName: pulumi.String(\"My Policy\"),\n\t\t\tScopes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"metrics:read\"),\n\t\t\t\tpulumi.String(\"logs:read\"),\n\t\t\t},\n\t\t\tRealms: cloud.AccessPolicyRealmArray{\n\t\t\t\t\u0026cloud.AccessPolicyRealmArgs{\n\t\t\t\t\tType:       pulumi.String(\"org\"),\n\t\t\t\t\tIdentifier: pulumi.String(current.Id),\n\t\t\t\t\tLabelPolicies: cloud.AccessPolicyRealmLabelPolicyArray{\n\t\t\t\t\t\t\u0026cloud.AccessPolicyRealmLabelPolicyArgs{\n\t\t\t\t\t\t\tSelector: pulumi.String(\"{namespace=\\\"default\\\"}\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloud.NewAccessPolicyToken(ctx, \"test\", \u0026cloud.AccessPolicyTokenArgs{\n\t\t\tRegion:         pulumi.String(\"prod-us-east-0\"),\n\t\t\tAccessPolicyId: test.PolicyId,\n\t\t\tName:           pulumi.String(\"my-policy-token\"),\n\t\t\tDisplayName:    pulumi.String(\"My Policy Token\"),\n\t\t\tExpiresAt:      pulumi.String(\"2023-01-01T00:00:00Z\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.cloud.CloudFunctions;\nimport com.pulumi.grafana.cloud.inputs.GetOrganizationArgs;\nimport com.pulumi.grafana.cloud.AccessPolicy;\nimport com.pulumi.grafana.cloud.AccessPolicyArgs;\nimport com.pulumi.grafana.cloud.inputs.AccessPolicyRealmArgs;\nimport com.pulumi.grafana.cloud.AccessPolicyToken;\nimport com.pulumi.grafana.cloud.AccessPolicyTokenArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var current = CloudFunctions.getOrganization(GetOrganizationArgs.builder()\n            .slug(\"\u003cyour org slug\u003e\")\n            .build());\n\n        var test = new AccessPolicy(\"test\", AccessPolicyArgs.builder()\n            .region(\"prod-us-east-0\")\n            .name(\"my-policy\")\n            .displayName(\"My Policy\")\n            .scopes(            \n                \"metrics:read\",\n                \"logs:read\")\n            .realms(AccessPolicyRealmArgs.builder()\n                .type(\"org\")\n                .identifier(current.id())\n                .labelPolicies(AccessPolicyRealmLabelPolicyArgs.builder()\n                    .selector(\"{namespace=\\\"default\\\"}\")\n                    .build())\n                .build())\n            .build());\n\n        var testAccessPolicyToken = new AccessPolicyToken(\"testAccessPolicyToken\", AccessPolicyTokenArgs.builder()\n            .region(\"prod-us-east-0\")\n            .accessPolicyId(test.policyId())\n            .name(\"my-policy-token\")\n            .displayName(\"My Policy Token\")\n            .expiresAt(\"2023-01-01T00:00:00Z\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  test:\n    type: grafana:cloud:AccessPolicy\n    properties:\n      region: prod-us-east-0\n      name: my-policy\n      displayName: My Policy\n      scopes:\n        - metrics:read\n        - logs:read\n      realms:\n        - type: org\n          identifier: ${current.id}\n          labelPolicies:\n            - selector: '{namespace=\"default\"}'\n  testAccessPolicyToken:\n    type: grafana:cloud:AccessPolicyToken\n    name: test\n    properties:\n      region: prod-us-east-0\n      accessPolicyId: ${test.policyId}\n      name: my-policy-token\n      displayName: My Policy Token\n      expiresAt: 2023-01-01T00:00:00Z\nvariables:\n  current:\n    fn::invoke:\n      function: grafana:cloud:getOrganization\n      arguments:\n        slug: \u003cyour org slug\u003e\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:cloud/accessPolicy:AccessPolicy name \"{{ region }}:{{ policyId }}\"\n```\n\n","properties":{"conditions":{"type":"array","items":{"$ref":"#/types/grafana:cloud/AccessPolicyCondition:AccessPolicyCondition"},"description":"Conditions for the access policy.\n"},"createdAt":{"type":"string","description":"Creation date of the access policy.\n"},"displayName":{"type":"string","description":"Display name of the access policy. Defaults to the name.\n"},"name":{"type":"string","description":"Name of the access policy.\n"},"policyId":{"type":"string","description":"ID of the access policy.\n"},"realms":{"type":"array","items":{"$ref":"#/types/grafana:cloud/AccessPolicyRealm:AccessPolicyRealm"}},"region":{"type":"string","description":"Region where the API is deployed. Generally where the stack is deployed. Use the region list API to get the list of available regions: https://grafana.com/docs/grafana-cloud/developer-resources/api-reference/cloud-api/#list-regions.\n"},"scopes":{"type":"array","items":{"type":"string"},"description":"Scopes of the access policy. See https://grafana.com/docs/grafana-cloud/security-and-account-management/authentication-and-permissions/access-policies/#scopes for possible values.\n"},"updatedAt":{"type":"string","description":"Last update date of the access policy.\n"}},"required":["createdAt","name","policyId","realms","region","scopes","updatedAt"],"inputProperties":{"conditions":{"type":"array","items":{"$ref":"#/types/grafana:cloud/AccessPolicyCondition:AccessPolicyCondition"},"description":"Conditions for the access policy.\n"},"displayName":{"type":"string","description":"Display name of the access policy. Defaults to the name.\n"},"name":{"type":"string","description":"Name of the access policy.\n","willReplaceOnChanges":true},"realms":{"type":"array","items":{"$ref":"#/types/grafana:cloud/AccessPolicyRealm:AccessPolicyRealm"}},"region":{"type":"string","description":"Region where the API is deployed. Generally where the stack is deployed. Use the region list API to get the list of available regions: https://grafana.com/docs/grafana-cloud/developer-resources/api-reference/cloud-api/#list-regions.\n","willReplaceOnChanges":true},"scopes":{"type":"array","items":{"type":"string"},"description":"Scopes of the access policy. See https://grafana.com/docs/grafana-cloud/security-and-account-management/authentication-and-permissions/access-policies/#scopes for possible values.\n"}},"requiredInputs":["realms","region","scopes"],"stateInputs":{"description":"Input properties used for looking up and filtering AccessPolicy resources.\n","properties":{"conditions":{"type":"array","items":{"$ref":"#/types/grafana:cloud/AccessPolicyCondition:AccessPolicyCondition"},"description":"Conditions for the access policy.\n"},"createdAt":{"type":"string","description":"Creation date of the access policy.\n"},"displayName":{"type":"string","description":"Display name of the access policy. Defaults to the name.\n"},"name":{"type":"string","description":"Name of the access policy.\n","willReplaceOnChanges":true},"policyId":{"type":"string","description":"ID of the access policy.\n"},"realms":{"type":"array","items":{"$ref":"#/types/grafana:cloud/AccessPolicyRealm:AccessPolicyRealm"}},"region":{"type":"string","description":"Region where the API is deployed. Generally where the stack is deployed. Use the region list API to get the list of available regions: https://grafana.com/docs/grafana-cloud/developer-resources/api-reference/cloud-api/#list-regions.\n","willReplaceOnChanges":true},"scopes":{"type":"array","items":{"type":"string"},"description":"Scopes of the access policy. See https://grafana.com/docs/grafana-cloud/security-and-account-management/authentication-and-permissions/access-policies/#scopes for possible values.\n"},"updatedAt":{"type":"string","description":"Last update date of the access policy.\n"}},"type":"object"}},"grafana:cloud/accessPolicyRotatingToken:AccessPolicyRotatingToken":{"description":"* [Official documentation](https://grafana.com/docs/grafana-cloud/security-and-account-management/authentication-and-permissions/access-policies/)\n* [API documentation](https://grafana.com/docs/grafana-cloud/developer-resources/api-reference/cloud-api/#create-a-token)\n\nRequired access policy scopes:\n\n* accesspolicies:read\n* accesspolicies:write\n* accesspolicies:delete\n\nThis is similar to the\u003cspan pulumi-lang-nodejs=\" grafana.cloud.AccessPolicyToken \" pulumi-lang-dotnet=\" grafana.cloud.AccessPolicyToken \" pulumi-lang-go=\" cloud.AccessPolicyToken \" pulumi-lang-python=\" cloud.AccessPolicyToken \" pulumi-lang-yaml=\" grafana.cloud.AccessPolicyToken \" pulumi-lang-java=\" grafana.cloud.AccessPolicyToken \"\u003e grafana.cloud.AccessPolicyToken \u003c/span\u003eresource, but it represents a token that will be rotated automatically over time.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst current = grafana.cloud.getOrganization({\n    slug: \"\u003cyour org slug\u003e\",\n});\nconst test = new grafana.cloud.AccessPolicy(\"test\", {\n    region: \"prod-us-east-0\",\n    name: \"my-policy\",\n    displayName: \"My Policy\",\n    scopes: [\n        \"metrics:read\",\n        \"logs:read\",\n    ],\n    realms: [{\n        type: \"org\",\n        identifier: current.then(current =\u003e current.id),\n        labelPolicies: [{\n            selector: \"{namespace=\\\"default\\\"}\",\n        }],\n    }],\n});\nconst testAccessPolicyRotatingToken = new grafana.cloud.AccessPolicyRotatingToken(\"test\", {\n    region: \"prod-us-east-0\",\n    accessPolicyId: test.policyId,\n    namePrefix: \"my-policy-rotating-token\",\n    displayName: \"My Policy Rotating Token\",\n    expireAfter: \"720h\",\n    earlyRotationWindow: \"24h\",\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\ncurrent = grafana.cloud.get_organization(slug=\"\u003cyour org slug\u003e\")\ntest = grafana.cloud.AccessPolicy(\"test\",\n    region=\"prod-us-east-0\",\n    name=\"my-policy\",\n    display_name=\"My Policy\",\n    scopes=[\n        \"metrics:read\",\n        \"logs:read\",\n    ],\n    realms=[{\n        \"type\": \"org\",\n        \"identifier\": current.id,\n        \"label_policies\": [{\n            \"selector\": \"{namespace=\\\"default\\\"}\",\n        }],\n    }])\ntest_access_policy_rotating_token = grafana.cloud.AccessPolicyRotatingToken(\"test\",\n    region=\"prod-us-east-0\",\n    access_policy_id=test.policy_id,\n    name_prefix=\"my-policy-rotating-token\",\n    display_name=\"My Policy Rotating Token\",\n    expire_after=\"720h\",\n    early_rotation_window=\"24h\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var current = Grafana.Cloud.GetOrganization.Invoke(new()\n    {\n        Slug = \"\u003cyour org slug\u003e\",\n    });\n\n    var test = new Grafana.Cloud.AccessPolicy(\"test\", new()\n    {\n        Region = \"prod-us-east-0\",\n        Name = \"my-policy\",\n        DisplayName = \"My Policy\",\n        Scopes = new[]\n        {\n            \"metrics:read\",\n            \"logs:read\",\n        },\n        Realms = new[]\n        {\n            new Grafana.Cloud.Inputs.AccessPolicyRealmArgs\n            {\n                Type = \"org\",\n                Identifier = current.Apply(getOrganizationResult =\u003e getOrganizationResult.Id),\n                LabelPolicies = new[]\n                {\n                    new Grafana.Cloud.Inputs.AccessPolicyRealmLabelPolicyArgs\n                    {\n                        Selector = \"{namespace=\\\"default\\\"}\",\n                    },\n                },\n            },\n        },\n    });\n\n    var testAccessPolicyRotatingToken = new Grafana.Cloud.AccessPolicyRotatingToken(\"test\", new()\n    {\n        Region = \"prod-us-east-0\",\n        AccessPolicyId = test.PolicyId,\n        NamePrefix = \"my-policy-rotating-token\",\n        DisplayName = \"My Policy Rotating Token\",\n        ExpireAfter = \"720h\",\n        EarlyRotationWindow = \"24h\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/cloud\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcurrent, err := cloud.GetOrganization(ctx, \u0026cloud.GetOrganizationArgs{\n\t\t\tSlug: pulumi.StringRef(\"\u003cyour org slug\u003e\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttest, err := cloud.NewAccessPolicy(ctx, \"test\", \u0026cloud.AccessPolicyArgs{\n\t\t\tRegion:      pulumi.String(\"prod-us-east-0\"),\n\t\t\tName:        pulumi.String(\"my-policy\"),\n\t\t\tDisplayName: pulumi.String(\"My Policy\"),\n\t\t\tScopes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"metrics:read\"),\n\t\t\t\tpulumi.String(\"logs:read\"),\n\t\t\t},\n\t\t\tRealms: cloud.AccessPolicyRealmArray{\n\t\t\t\t\u0026cloud.AccessPolicyRealmArgs{\n\t\t\t\t\tType:       pulumi.String(\"org\"),\n\t\t\t\t\tIdentifier: pulumi.String(current.Id),\n\t\t\t\t\tLabelPolicies: cloud.AccessPolicyRealmLabelPolicyArray{\n\t\t\t\t\t\t\u0026cloud.AccessPolicyRealmLabelPolicyArgs{\n\t\t\t\t\t\t\tSelector: pulumi.String(\"{namespace=\\\"default\\\"}\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloud.NewAccessPolicyRotatingToken(ctx, \"test\", \u0026cloud.AccessPolicyRotatingTokenArgs{\n\t\t\tRegion:              pulumi.String(\"prod-us-east-0\"),\n\t\t\tAccessPolicyId:      test.PolicyId,\n\t\t\tNamePrefix:          pulumi.String(\"my-policy-rotating-token\"),\n\t\t\tDisplayName:         pulumi.String(\"My Policy Rotating Token\"),\n\t\t\tExpireAfter:         pulumi.String(\"720h\"),\n\t\t\tEarlyRotationWindow: pulumi.String(\"24h\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.cloud.CloudFunctions;\nimport com.pulumi.grafana.cloud.inputs.GetOrganizationArgs;\nimport com.pulumi.grafana.cloud.AccessPolicy;\nimport com.pulumi.grafana.cloud.AccessPolicyArgs;\nimport com.pulumi.grafana.cloud.inputs.AccessPolicyRealmArgs;\nimport com.pulumi.grafana.cloud.AccessPolicyRotatingToken;\nimport com.pulumi.grafana.cloud.AccessPolicyRotatingTokenArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var current = CloudFunctions.getOrganization(GetOrganizationArgs.builder()\n            .slug(\"\u003cyour org slug\u003e\")\n            .build());\n\n        var test = new AccessPolicy(\"test\", AccessPolicyArgs.builder()\n            .region(\"prod-us-east-0\")\n            .name(\"my-policy\")\n            .displayName(\"My Policy\")\n            .scopes(            \n                \"metrics:read\",\n                \"logs:read\")\n            .realms(AccessPolicyRealmArgs.builder()\n                .type(\"org\")\n                .identifier(current.id())\n                .labelPolicies(AccessPolicyRealmLabelPolicyArgs.builder()\n                    .selector(\"{namespace=\\\"default\\\"}\")\n                    .build())\n                .build())\n            .build());\n\n        var testAccessPolicyRotatingToken = new AccessPolicyRotatingToken(\"testAccessPolicyRotatingToken\", AccessPolicyRotatingTokenArgs.builder()\n            .region(\"prod-us-east-0\")\n            .accessPolicyId(test.policyId())\n            .namePrefix(\"my-policy-rotating-token\")\n            .displayName(\"My Policy Rotating Token\")\n            .expireAfter(\"720h\")\n            .earlyRotationWindow(\"24h\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  test:\n    type: grafana:cloud:AccessPolicy\n    properties:\n      region: prod-us-east-0\n      name: my-policy\n      displayName: My Policy\n      scopes:\n        - metrics:read\n        - logs:read\n      realms:\n        - type: org\n          identifier: ${current.id}\n          labelPolicies:\n            - selector: '{namespace=\"default\"}'\n  testAccessPolicyRotatingToken:\n    type: grafana:cloud:AccessPolicyRotatingToken\n    name: test\n    properties:\n      region: prod-us-east-0\n      accessPolicyId: ${test.policyId}\n      namePrefix: my-policy-rotating-token\n      displayName: My Policy Rotating Token\n      expireAfter: 720h\n      earlyRotationWindow: 24h\nvariables:\n  current:\n    fn::invoke:\n      function: grafana:cloud:getOrganization\n      arguments:\n        slug: \u003cyour org slug\u003e\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:cloud/accessPolicyRotatingToken:AccessPolicyRotatingToken name \"{{ region }}:{{ tokenId }}\"\n```\n\n","properties":{"accessPolicyId":{"type":"string","description":"ID of the access policy for which to create a token.\n"},"createdAt":{"type":"string","description":"Creation date of the access policy token.\n"},"deleteOnDestroy":{"type":"boolean"},"displayName":{"type":"string","description":"Display name of the access policy token. Defaults to the name.\n"},"earlyRotationWindow":{"type":"string","description":"Duration of the window before expiring where the token can be rotated (e.g. '24h', '30m', '1h30m'). Valid units are 's' (seconds), 'm' (minutes) and 'h' (hours).\n"},"expireAfter":{"type":"string","description":"Duration after which the token will expire (e.g. '24h', '30m', '1h30m'). Valid units are 's' (seconds), 'm' (minutes) and 'h' (hours).\n"},"expiresAt":{"type":"string","description":"Expiration date of the access policy token.\n"},"name":{"type":"string","description":"Name of the access policy token.\n"},"namePrefix":{"type":"string","description":"Prefix for the name of the access policy token. The actual name will be stored in the computed field \u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e, which will be in the format '\\n\\n-\\n\\n'\n"},"readyForRotation":{"type":"boolean","description":"Signals that the token is either expired or within the period to be early rotated.\n"},"region":{"type":"string","description":"Region of the access policy. Should be set to the same region as the access policy. Use the region list API to get the list of available regions: https://grafana.com/docs/grafana-cloud/developer-resources/api-reference/cloud-api/#list-regions.\n"},"token":{"type":"string","secret":true},"updatedAt":{"type":"string","description":"Last update date of the access policy token.\n"}},"required":["accessPolicyId","createdAt","earlyRotationWindow","expireAfter","expiresAt","name","namePrefix","readyForRotation","region","token","updatedAt"],"inputProperties":{"accessPolicyId":{"type":"string","description":"ID of the access policy for which to create a token.\n","willReplaceOnChanges":true},"deleteOnDestroy":{"type":"boolean"},"displayName":{"type":"string","description":"Display name of the access policy token. Defaults to the name.\n"},"earlyRotationWindow":{"type":"string","description":"Duration of the window before expiring where the token can be rotated (e.g. '24h', '30m', '1h30m'). Valid units are 's' (seconds), 'm' (minutes) and 'h' (hours).\n"},"expireAfter":{"type":"string","description":"Duration after which the token will expire (e.g. '24h', '30m', '1h30m'). Valid units are 's' (seconds), 'm' (minutes) and 'h' (hours).\n","willReplaceOnChanges":true},"namePrefix":{"type":"string","description":"Prefix for the name of the access policy token. The actual name will be stored in the computed field \u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e, which will be in the format '\\n\\n-\\n\\n'\n","willReplaceOnChanges":true},"region":{"type":"string","description":"Region of the access policy. Should be set to the same region as the access policy. Use the region list API to get the list of available regions: https://grafana.com/docs/grafana-cloud/developer-resources/api-reference/cloud-api/#list-regions.\n","willReplaceOnChanges":true}},"requiredInputs":["accessPolicyId","earlyRotationWindow","expireAfter","namePrefix","region"],"stateInputs":{"description":"Input properties used for looking up and filtering AccessPolicyRotatingToken resources.\n","properties":{"accessPolicyId":{"type":"string","description":"ID of the access policy for which to create a token.\n","willReplaceOnChanges":true},"createdAt":{"type":"string","description":"Creation date of the access policy token.\n"},"deleteOnDestroy":{"type":"boolean"},"displayName":{"type":"string","description":"Display name of the access policy token. Defaults to the name.\n"},"earlyRotationWindow":{"type":"string","description":"Duration of the window before expiring where the token can be rotated (e.g. '24h', '30m', '1h30m'). Valid units are 's' (seconds), 'm' (minutes) and 'h' (hours).\n"},"expireAfter":{"type":"string","description":"Duration after which the token will expire (e.g. '24h', '30m', '1h30m'). Valid units are 's' (seconds), 'm' (minutes) and 'h' (hours).\n","willReplaceOnChanges":true},"expiresAt":{"type":"string","description":"Expiration date of the access policy token.\n"},"name":{"type":"string","description":"Name of the access policy token.\n"},"namePrefix":{"type":"string","description":"Prefix for the name of the access policy token. The actual name will be stored in the computed field \u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e, which will be in the format '\\n\\n-\\n\\n'\n","willReplaceOnChanges":true},"readyForRotation":{"type":"boolean","description":"Signals that the token is either expired or within the period to be early rotated.\n","willReplaceOnChanges":true},"region":{"type":"string","description":"Region of the access policy. Should be set to the same region as the access policy. Use the region list API to get the list of available regions: https://grafana.com/docs/grafana-cloud/developer-resources/api-reference/cloud-api/#list-regions.\n","willReplaceOnChanges":true},"token":{"type":"string","secret":true},"updatedAt":{"type":"string","description":"Last update date of the access policy token.\n"}},"type":"object"}},"grafana:cloud/accessPolicyToken:AccessPolicyToken":{"description":"* [Official documentation](https://grafana.com/docs/grafana-cloud/security-and-account-management/authentication-and-permissions/access-policies/)\n* [API documentation](https://grafana.com/docs/grafana-cloud/developer-resources/api-reference/cloud-api/#create-a-token)\n\nRequired access policy scopes:\n\n* accesspolicies:read\n* accesspolicies:write\n* accesspolicies:delete\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst current = grafana.cloud.getOrganization({\n    slug: \"\u003cyour org slug\u003e\",\n});\nconst test = new grafana.cloud.AccessPolicy(\"test\", {\n    region: \"prod-us-east-0\",\n    name: \"my-policy\",\n    displayName: \"My Policy\",\n    scopes: [\n        \"metrics:read\",\n        \"logs:read\",\n    ],\n    realms: [{\n        type: \"org\",\n        identifier: current.then(current =\u003e current.id),\n        labelPolicies: [{\n            selector: \"{namespace=\\\"default\\\"}\",\n        }],\n    }],\n});\nconst testAccessPolicyToken = new grafana.cloud.AccessPolicyToken(\"test\", {\n    region: \"prod-us-east-0\",\n    accessPolicyId: test.policyId,\n    name: \"my-policy-token\",\n    displayName: \"My Policy Token\",\n    expiresAt: \"2023-01-01T00:00:00Z\",\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\ncurrent = grafana.cloud.get_organization(slug=\"\u003cyour org slug\u003e\")\ntest = grafana.cloud.AccessPolicy(\"test\",\n    region=\"prod-us-east-0\",\n    name=\"my-policy\",\n    display_name=\"My Policy\",\n    scopes=[\n        \"metrics:read\",\n        \"logs:read\",\n    ],\n    realms=[{\n        \"type\": \"org\",\n        \"identifier\": current.id,\n        \"label_policies\": [{\n            \"selector\": \"{namespace=\\\"default\\\"}\",\n        }],\n    }])\ntest_access_policy_token = grafana.cloud.AccessPolicyToken(\"test\",\n    region=\"prod-us-east-0\",\n    access_policy_id=test.policy_id,\n    name=\"my-policy-token\",\n    display_name=\"My Policy Token\",\n    expires_at=\"2023-01-01T00:00:00Z\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var current = Grafana.Cloud.GetOrganization.Invoke(new()\n    {\n        Slug = \"\u003cyour org slug\u003e\",\n    });\n\n    var test = new Grafana.Cloud.AccessPolicy(\"test\", new()\n    {\n        Region = \"prod-us-east-0\",\n        Name = \"my-policy\",\n        DisplayName = \"My Policy\",\n        Scopes = new[]\n        {\n            \"metrics:read\",\n            \"logs:read\",\n        },\n        Realms = new[]\n        {\n            new Grafana.Cloud.Inputs.AccessPolicyRealmArgs\n            {\n                Type = \"org\",\n                Identifier = current.Apply(getOrganizationResult =\u003e getOrganizationResult.Id),\n                LabelPolicies = new[]\n                {\n                    new Grafana.Cloud.Inputs.AccessPolicyRealmLabelPolicyArgs\n                    {\n                        Selector = \"{namespace=\\\"default\\\"}\",\n                    },\n                },\n            },\n        },\n    });\n\n    var testAccessPolicyToken = new Grafana.Cloud.AccessPolicyToken(\"test\", new()\n    {\n        Region = \"prod-us-east-0\",\n        AccessPolicyId = test.PolicyId,\n        Name = \"my-policy-token\",\n        DisplayName = \"My Policy Token\",\n        ExpiresAt = \"2023-01-01T00:00:00Z\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/cloud\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcurrent, err := cloud.GetOrganization(ctx, \u0026cloud.GetOrganizationArgs{\n\t\t\tSlug: pulumi.StringRef(\"\u003cyour org slug\u003e\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttest, err := cloud.NewAccessPolicy(ctx, \"test\", \u0026cloud.AccessPolicyArgs{\n\t\t\tRegion:      pulumi.String(\"prod-us-east-0\"),\n\t\t\tName:        pulumi.String(\"my-policy\"),\n\t\t\tDisplayName: pulumi.String(\"My Policy\"),\n\t\t\tScopes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"metrics:read\"),\n\t\t\t\tpulumi.String(\"logs:read\"),\n\t\t\t},\n\t\t\tRealms: cloud.AccessPolicyRealmArray{\n\t\t\t\t\u0026cloud.AccessPolicyRealmArgs{\n\t\t\t\t\tType:       pulumi.String(\"org\"),\n\t\t\t\t\tIdentifier: pulumi.String(current.Id),\n\t\t\t\t\tLabelPolicies: cloud.AccessPolicyRealmLabelPolicyArray{\n\t\t\t\t\t\t\u0026cloud.AccessPolicyRealmLabelPolicyArgs{\n\t\t\t\t\t\t\tSelector: pulumi.String(\"{namespace=\\\"default\\\"}\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloud.NewAccessPolicyToken(ctx, \"test\", \u0026cloud.AccessPolicyTokenArgs{\n\t\t\tRegion:         pulumi.String(\"prod-us-east-0\"),\n\t\t\tAccessPolicyId: test.PolicyId,\n\t\t\tName:           pulumi.String(\"my-policy-token\"),\n\t\t\tDisplayName:    pulumi.String(\"My Policy Token\"),\n\t\t\tExpiresAt:      pulumi.String(\"2023-01-01T00:00:00Z\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.cloud.CloudFunctions;\nimport com.pulumi.grafana.cloud.inputs.GetOrganizationArgs;\nimport com.pulumi.grafana.cloud.AccessPolicy;\nimport com.pulumi.grafana.cloud.AccessPolicyArgs;\nimport com.pulumi.grafana.cloud.inputs.AccessPolicyRealmArgs;\nimport com.pulumi.grafana.cloud.AccessPolicyToken;\nimport com.pulumi.grafana.cloud.AccessPolicyTokenArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var current = CloudFunctions.getOrganization(GetOrganizationArgs.builder()\n            .slug(\"\u003cyour org slug\u003e\")\n            .build());\n\n        var test = new AccessPolicy(\"test\", AccessPolicyArgs.builder()\n            .region(\"prod-us-east-0\")\n            .name(\"my-policy\")\n            .displayName(\"My Policy\")\n            .scopes(            \n                \"metrics:read\",\n                \"logs:read\")\n            .realms(AccessPolicyRealmArgs.builder()\n                .type(\"org\")\n                .identifier(current.id())\n                .labelPolicies(AccessPolicyRealmLabelPolicyArgs.builder()\n                    .selector(\"{namespace=\\\"default\\\"}\")\n                    .build())\n                .build())\n            .build());\n\n        var testAccessPolicyToken = new AccessPolicyToken(\"testAccessPolicyToken\", AccessPolicyTokenArgs.builder()\n            .region(\"prod-us-east-0\")\n            .accessPolicyId(test.policyId())\n            .name(\"my-policy-token\")\n            .displayName(\"My Policy Token\")\n            .expiresAt(\"2023-01-01T00:00:00Z\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  test:\n    type: grafana:cloud:AccessPolicy\n    properties:\n      region: prod-us-east-0\n      name: my-policy\n      displayName: My Policy\n      scopes:\n        - metrics:read\n        - logs:read\n      realms:\n        - type: org\n          identifier: ${current.id}\n          labelPolicies:\n            - selector: '{namespace=\"default\"}'\n  testAccessPolicyToken:\n    type: grafana:cloud:AccessPolicyToken\n    name: test\n    properties:\n      region: prod-us-east-0\n      accessPolicyId: ${test.policyId}\n      name: my-policy-token\n      displayName: My Policy Token\n      expiresAt: 2023-01-01T00:00:00Z\nvariables:\n  current:\n    fn::invoke:\n      function: grafana:cloud:getOrganization\n      arguments:\n        slug: \u003cyour org slug\u003e\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:cloud/accessPolicyToken:AccessPolicyToken name \"{{ region }}:{{ tokenId }}\"\n```\n\n","properties":{"accessPolicyId":{"type":"string","description":"ID of the access policy for which to create a token.\n"},"createdAt":{"type":"string","description":"Creation date of the access policy token.\n"},"displayName":{"type":"string","description":"Display name of the access policy token. Defaults to the name.\n"},"expiresAt":{"type":"string","description":"Expiration date of the access policy token. Does not expire by default.\n"},"name":{"type":"string","description":"Name of the access policy token.\n"},"region":{"type":"string","description":"Region of the access policy. Should be set to the same region as the access policy. Use the region list API to get the list of available regions: https://grafana.com/docs/grafana-cloud/developer-resources/api-reference/cloud-api/#list-regions.\n"},"token":{"type":"string","secret":true},"updatedAt":{"type":"string","description":"Last update date of the access policy token.\n"}},"required":["accessPolicyId","createdAt","name","region","token","updatedAt"],"inputProperties":{"accessPolicyId":{"type":"string","description":"ID of the access policy for which to create a token.\n","willReplaceOnChanges":true},"displayName":{"type":"string","description":"Display name of the access policy token. Defaults to the name.\n"},"expiresAt":{"type":"string","description":"Expiration date of the access policy token. Does not expire by default.\n","willReplaceOnChanges":true},"name":{"type":"string","description":"Name of the access policy token.\n","willReplaceOnChanges":true},"region":{"type":"string","description":"Region of the access policy. Should be set to the same region as the access policy. Use the region list API to get the list of available regions: https://grafana.com/docs/grafana-cloud/developer-resources/api-reference/cloud-api/#list-regions.\n","willReplaceOnChanges":true}},"requiredInputs":["accessPolicyId","region"],"stateInputs":{"description":"Input properties used for looking up and filtering AccessPolicyToken resources.\n","properties":{"accessPolicyId":{"type":"string","description":"ID of the access policy for which to create a token.\n","willReplaceOnChanges":true},"createdAt":{"type":"string","description":"Creation date of the access policy token.\n"},"displayName":{"type":"string","description":"Display name of the access policy token. Defaults to the name.\n"},"expiresAt":{"type":"string","description":"Expiration date of the access policy token. Does not expire by default.\n","willReplaceOnChanges":true},"name":{"type":"string","description":"Name of the access policy token.\n","willReplaceOnChanges":true},"region":{"type":"string","description":"Region of the access policy. Should be set to the same region as the access policy. Use the region list API to get the list of available regions: https://grafana.com/docs/grafana-cloud/developer-resources/api-reference/cloud-api/#list-regions.\n","willReplaceOnChanges":true},"token":{"type":"string","secret":true},"updatedAt":{"type":"string","description":"Last update date of the access policy token.\n"}},"type":"object"}},"grafana:cloud/orgMember:OrgMember":{"description":"Manages the membership of a user in an organization.\n\n## Import\n\n```sh\n$ pulumi import grafana:cloud/orgMember:OrgMember name \"{{ orgSlugOrID }}:{{ usernameOrID }}\"\n```\n\n","properties":{"org":{"type":"string","description":"The slug or ID of the organization.\n"},"receiveBillingEmails":{"type":"boolean","description":"Whether the user should receive billing emails.\n"},"role":{"type":"string","description":"The role to assign to the user in the organization.\n"},"user":{"type":"string","description":"Username or ID of the user to add to the org's members.\n"}},"required":["org","receiveBillingEmails","role","user"],"inputProperties":{"org":{"type":"string","description":"The slug or ID of the organization.\n"},"receiveBillingEmails":{"type":"boolean","description":"Whether the user should receive billing emails.\n"},"role":{"type":"string","description":"The role to assign to the user in the organization.\n"},"user":{"type":"string","description":"Username or ID of the user to add to the org's members.\n"}},"requiredInputs":["org","role","user"],"stateInputs":{"description":"Input properties used for looking up and filtering OrgMember resources.\n","properties":{"org":{"type":"string","description":"The slug or ID of the organization.\n"},"receiveBillingEmails":{"type":"boolean","description":"Whether the user should receive billing emails.\n"},"role":{"type":"string","description":"The role to assign to the user in the organization.\n"},"user":{"type":"string","description":"Username or ID of the user to add to the org's members.\n"}},"type":"object"}},"grafana:cloud/pluginInstallation:PluginInstallation":{"description":"Manages Grafana Cloud Plugin Installations.\n\n* [Plugin Catalog](https://grafana.com/grafana/plugins/)\n\nRequired access policy scopes:\n\n* stack-plugins:read\n* stack-plugins:write\n* stack-plugins:delete\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst test = new grafana.cloud.PluginInstallation(\"test\", {\n    stackSlug: \"stackname\",\n    slug: \"some-plugin\",\n    version: \"1.2.3\",\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\ntest = grafana.cloud.PluginInstallation(\"test\",\n    stack_slug=\"stackname\",\n    slug=\"some-plugin\",\n    version=\"1.2.3\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var test = new Grafana.Cloud.PluginInstallation(\"test\", new()\n    {\n        StackSlug = \"stackname\",\n        Slug = \"some-plugin\",\n        Version = \"1.2.3\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/cloud\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloud.NewPluginInstallation(ctx, \"test\", \u0026cloud.PluginInstallationArgs{\n\t\t\tStackSlug: pulumi.String(\"stackname\"),\n\t\t\tSlug:      pulumi.String(\"some-plugin\"),\n\t\t\tVersion:   pulumi.String(\"1.2.3\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.cloud.PluginInstallation;\nimport com.pulumi.grafana.cloud.PluginInstallationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var test = new PluginInstallation(\"test\", PluginInstallationArgs.builder()\n            .stackSlug(\"stackname\")\n            .slug(\"some-plugin\")\n            .version(\"1.2.3\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  test:\n    type: grafana:cloud:PluginInstallation\n    properties:\n      stackSlug: stackname\n      slug: some-plugin\n      version: 1.2.3\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:cloud/pluginInstallation:PluginInstallation name \"{{ stackSlug }}:{{ pluginSlug }}\"\n```\n\n","properties":{"slug":{"type":"string","description":"Slug of the plugin to be installed.\n"},"stackSlug":{"type":"string","description":"The stack id to which the plugin should be installed.\n"},"version":{"type":"string"}},"required":["slug","stackSlug"],"inputProperties":{"slug":{"type":"string","description":"Slug of the plugin to be installed.\n","willReplaceOnChanges":true},"stackSlug":{"type":"string","description":"The stack id to which the plugin should be installed.\n","willReplaceOnChanges":true},"version":{"type":"string","willReplaceOnChanges":true}},"requiredInputs":["slug","stackSlug"],"stateInputs":{"description":"Input properties used for looking up and filtering PluginInstallation resources.\n","properties":{"slug":{"type":"string","description":"Slug of the plugin to be installed.\n","willReplaceOnChanges":true},"stackSlug":{"type":"string","description":"The stack id to which the plugin should be installed.\n","willReplaceOnChanges":true},"version":{"type":"string","willReplaceOnChanges":true}},"type":"object"}},"grafana:cloud/privateDataSourceConnectNetwork:PrivateDataSourceConnectNetwork":{"description":"* [Official documentation](https://grafana.com/docs/grafana-cloud/connect-externally-hosted/private-data-source-connect/)\n* [API documentation](https://grafana.com/docs/grafana-cloud/developer-resources/api-reference/cloud-api/#create-an-access-policy)\n\nRequired access policy scopes:\n\n* accesspolicies:read\n* accesspolicies:write\n* accesspolicies:delete\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst current = grafana.cloud.getStack({\n    slug: \"\u003cyour slug\u003e\",\n});\nconst test = new grafana.cloud.PrivateDataSourceConnectNetwork(\"test\", {\n    region: \"prod-us-east-0\",\n    name: \"my-pdc\",\n    displayName: \"My PDC\",\n    stackIdentifier: current.then(current =\u003e current.id),\n});\nconst testPrivateDataSourceConnectNetworkToken = new grafana.cloud.PrivateDataSourceConnectNetworkToken(\"test\", {\n    pdcNetworkId: test.pdcNetworkId,\n    region: test.region,\n    name: \"my-pdc-token\",\n    displayName: \"My PDC Token\",\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\ncurrent = grafana.cloud.get_stack(slug=\"\u003cyour slug\u003e\")\ntest = grafana.cloud.PrivateDataSourceConnectNetwork(\"test\",\n    region=\"prod-us-east-0\",\n    name=\"my-pdc\",\n    display_name=\"My PDC\",\n    stack_identifier=current.id)\ntest_private_data_source_connect_network_token = grafana.cloud.PrivateDataSourceConnectNetworkToken(\"test\",\n    pdc_network_id=test.pdc_network_id,\n    region=test.region,\n    name=\"my-pdc-token\",\n    display_name=\"My PDC Token\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var current = Grafana.Cloud.GetStack.Invoke(new()\n    {\n        Slug = \"\u003cyour slug\u003e\",\n    });\n\n    var test = new Grafana.Cloud.PrivateDataSourceConnectNetwork(\"test\", new()\n    {\n        Region = \"prod-us-east-0\",\n        Name = \"my-pdc\",\n        DisplayName = \"My PDC\",\n        StackIdentifier = current.Apply(getStackResult =\u003e getStackResult.Id),\n    });\n\n    var testPrivateDataSourceConnectNetworkToken = new Grafana.Cloud.PrivateDataSourceConnectNetworkToken(\"test\", new()\n    {\n        PdcNetworkId = test.PdcNetworkId,\n        Region = test.Region,\n        Name = \"my-pdc-token\",\n        DisplayName = \"My PDC Token\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/cloud\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcurrent, err := cloud.LookupStack(ctx, \u0026cloud.LookupStackArgs{\n\t\t\tSlug: \"\u003cyour slug\u003e\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttest, err := cloud.NewPrivateDataSourceConnectNetwork(ctx, \"test\", \u0026cloud.PrivateDataSourceConnectNetworkArgs{\n\t\t\tRegion:          pulumi.String(\"prod-us-east-0\"),\n\t\t\tName:            pulumi.String(\"my-pdc\"),\n\t\t\tDisplayName:     pulumi.String(\"My PDC\"),\n\t\t\tStackIdentifier: pulumi.String(current.Id),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloud.NewPrivateDataSourceConnectNetworkToken(ctx, \"test\", \u0026cloud.PrivateDataSourceConnectNetworkTokenArgs{\n\t\t\tPdcNetworkId: test.PdcNetworkId,\n\t\t\tRegion:       test.Region,\n\t\t\tName:         pulumi.String(\"my-pdc-token\"),\n\t\t\tDisplayName:  pulumi.String(\"My PDC Token\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.cloud.CloudFunctions;\nimport com.pulumi.grafana.cloud.inputs.GetStackArgs;\nimport com.pulumi.grafana.cloud.PrivateDataSourceConnectNetwork;\nimport com.pulumi.grafana.cloud.PrivateDataSourceConnectNetworkArgs;\nimport com.pulumi.grafana.cloud.PrivateDataSourceConnectNetworkToken;\nimport com.pulumi.grafana.cloud.PrivateDataSourceConnectNetworkTokenArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var current = CloudFunctions.getStack(GetStackArgs.builder()\n            .slug(\"\u003cyour slug\u003e\")\n            .build());\n\n        var test = new PrivateDataSourceConnectNetwork(\"test\", PrivateDataSourceConnectNetworkArgs.builder()\n            .region(\"prod-us-east-0\")\n            .name(\"my-pdc\")\n            .displayName(\"My PDC\")\n            .stackIdentifier(current.id())\n            .build());\n\n        var testPrivateDataSourceConnectNetworkToken = new PrivateDataSourceConnectNetworkToken(\"testPrivateDataSourceConnectNetworkToken\", PrivateDataSourceConnectNetworkTokenArgs.builder()\n            .pdcNetworkId(test.pdcNetworkId())\n            .region(test.region())\n            .name(\"my-pdc-token\")\n            .displayName(\"My PDC Token\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  test:\n    type: grafana:cloud:PrivateDataSourceConnectNetwork\n    properties:\n      region: prod-us-east-0\n      name: my-pdc\n      displayName: My PDC\n      stackIdentifier: ${current.id}\n  testPrivateDataSourceConnectNetworkToken:\n    type: grafana:cloud:PrivateDataSourceConnectNetworkToken\n    name: test\n    properties:\n      pdcNetworkId: ${test.pdcNetworkId}\n      region: ${test.region}\n      name: my-pdc-token\n      displayName: My PDC Token\nvariables:\n  current:\n    fn::invoke:\n      function: grafana:cloud:getStack\n      arguments:\n        slug: \u003cyour slug\u003e\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:cloud/privateDataSourceConnectNetwork:PrivateDataSourceConnectNetwork name \"{{ region }}:{{ policyId }}\"\n```\n\n","properties":{"createdAt":{"type":"string","description":"Creation date of the private data source connect network.\n"},"displayName":{"type":"string","description":"Display name of the PDC network. Defaults to the name.\n"},"name":{"type":"string","description":"Name of the PDC network.**Note:** The name must be lowercase and can contain hyphens or underscores. See full requirements here: https://grafana.com/docs/grafana-cloud/developer-resources/api-reference/cloud-api/#request-body\n"},"pdcNetworkId":{"type":"string","description":"ID of the private data source connect network.\n"},"region":{"type":"string","description":"The region where your stack is deployed. Use the instances list API to get the region for your instance - use the regionSlug property: https://grafana.com/docs/grafana-cloud/developer-resources/api-reference/cloud-api/#list-stacks\n"},"stackIdentifier":{"type":"string","description":"The identifier of the stack.\n"},"updatedAt":{"type":"string","description":"Last update date of the private data source connect network.\n"}},"required":["createdAt","name","pdcNetworkId","region","stackIdentifier","updatedAt"],"inputProperties":{"displayName":{"type":"string","description":"Display name of the PDC network. Defaults to the name.\n"},"name":{"type":"string","description":"Name of the PDC network.**Note:** The name must be lowercase and can contain hyphens or underscores. See full requirements here: https://grafana.com/docs/grafana-cloud/developer-resources/api-reference/cloud-api/#request-body\n","willReplaceOnChanges":true},"region":{"type":"string","description":"The region where your stack is deployed. Use the instances list API to get the region for your instance - use the regionSlug property: https://grafana.com/docs/grafana-cloud/developer-resources/api-reference/cloud-api/#list-stacks\n","willReplaceOnChanges":true},"stackIdentifier":{"type":"string","description":"The identifier of the stack.\n"}},"requiredInputs":["region","stackIdentifier"],"stateInputs":{"description":"Input properties used for looking up and filtering PrivateDataSourceConnectNetwork resources.\n","properties":{"createdAt":{"type":"string","description":"Creation date of the private data source connect network.\n"},"displayName":{"type":"string","description":"Display name of the PDC network. Defaults to the name.\n"},"name":{"type":"string","description":"Name of the PDC network.**Note:** The name must be lowercase and can contain hyphens or underscores. See full requirements here: https://grafana.com/docs/grafana-cloud/developer-resources/api-reference/cloud-api/#request-body\n","willReplaceOnChanges":true},"pdcNetworkId":{"type":"string","description":"ID of the private data source connect network.\n"},"region":{"type":"string","description":"The region where your stack is deployed. Use the instances list API to get the region for your instance - use the regionSlug property: https://grafana.com/docs/grafana-cloud/developer-resources/api-reference/cloud-api/#list-stacks\n","willReplaceOnChanges":true},"stackIdentifier":{"type":"string","description":"The identifier of the stack.\n"},"updatedAt":{"type":"string","description":"Last update date of the private data source connect network.\n"}},"type":"object"}},"grafana:cloud/privateDataSourceConnectNetworkToken:PrivateDataSourceConnectNetworkToken":{"description":"* [Official documentation](https://grafana.com/docs/grafana-cloud/connect-externally-hosted/private-data-source-connect/)\n* [API documentation](https://grafana.com/docs/grafana-cloud/developer-resources/api-reference/cloud-api/#create-a-token)\n\nRequired access policy scopes:\n\n* accesspolicies:read\n* accesspolicies:write\n* accesspolicies:delete\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst current = grafana.cloud.getStack({\n    slug: \"\u003cyour slug\u003e\",\n});\nconst test = new grafana.cloud.PrivateDataSourceConnectNetwork(\"test\", {\n    region: \"prod-us-east-0\",\n    name: \"my-pdc\",\n    displayName: \"My PDC\",\n    stackIdentifier: current.then(current =\u003e current.id),\n});\nconst testPrivateDataSourceConnectNetworkToken = new grafana.cloud.PrivateDataSourceConnectNetworkToken(\"test\", {\n    pdcNetworkId: test.pdcNetworkId,\n    region: test.region,\n    name: \"my-pdc-token\",\n    displayName: \"My PDC Token\",\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\ncurrent = grafana.cloud.get_stack(slug=\"\u003cyour slug\u003e\")\ntest = grafana.cloud.PrivateDataSourceConnectNetwork(\"test\",\n    region=\"prod-us-east-0\",\n    name=\"my-pdc\",\n    display_name=\"My PDC\",\n    stack_identifier=current.id)\ntest_private_data_source_connect_network_token = grafana.cloud.PrivateDataSourceConnectNetworkToken(\"test\",\n    pdc_network_id=test.pdc_network_id,\n    region=test.region,\n    name=\"my-pdc-token\",\n    display_name=\"My PDC Token\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var current = Grafana.Cloud.GetStack.Invoke(new()\n    {\n        Slug = \"\u003cyour slug\u003e\",\n    });\n\n    var test = new Grafana.Cloud.PrivateDataSourceConnectNetwork(\"test\", new()\n    {\n        Region = \"prod-us-east-0\",\n        Name = \"my-pdc\",\n        DisplayName = \"My PDC\",\n        StackIdentifier = current.Apply(getStackResult =\u003e getStackResult.Id),\n    });\n\n    var testPrivateDataSourceConnectNetworkToken = new Grafana.Cloud.PrivateDataSourceConnectNetworkToken(\"test\", new()\n    {\n        PdcNetworkId = test.PdcNetworkId,\n        Region = test.Region,\n        Name = \"my-pdc-token\",\n        DisplayName = \"My PDC Token\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/cloud\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcurrent, err := cloud.LookupStack(ctx, \u0026cloud.LookupStackArgs{\n\t\t\tSlug: \"\u003cyour slug\u003e\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttest, err := cloud.NewPrivateDataSourceConnectNetwork(ctx, \"test\", \u0026cloud.PrivateDataSourceConnectNetworkArgs{\n\t\t\tRegion:          pulumi.String(\"prod-us-east-0\"),\n\t\t\tName:            pulumi.String(\"my-pdc\"),\n\t\t\tDisplayName:     pulumi.String(\"My PDC\"),\n\t\t\tStackIdentifier: pulumi.String(current.Id),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloud.NewPrivateDataSourceConnectNetworkToken(ctx, \"test\", \u0026cloud.PrivateDataSourceConnectNetworkTokenArgs{\n\t\t\tPdcNetworkId: test.PdcNetworkId,\n\t\t\tRegion:       test.Region,\n\t\t\tName:         pulumi.String(\"my-pdc-token\"),\n\t\t\tDisplayName:  pulumi.String(\"My PDC Token\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.cloud.CloudFunctions;\nimport com.pulumi.grafana.cloud.inputs.GetStackArgs;\nimport com.pulumi.grafana.cloud.PrivateDataSourceConnectNetwork;\nimport com.pulumi.grafana.cloud.PrivateDataSourceConnectNetworkArgs;\nimport com.pulumi.grafana.cloud.PrivateDataSourceConnectNetworkToken;\nimport com.pulumi.grafana.cloud.PrivateDataSourceConnectNetworkTokenArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var current = CloudFunctions.getStack(GetStackArgs.builder()\n            .slug(\"\u003cyour slug\u003e\")\n            .build());\n\n        var test = new PrivateDataSourceConnectNetwork(\"test\", PrivateDataSourceConnectNetworkArgs.builder()\n            .region(\"prod-us-east-0\")\n            .name(\"my-pdc\")\n            .displayName(\"My PDC\")\n            .stackIdentifier(current.id())\n            .build());\n\n        var testPrivateDataSourceConnectNetworkToken = new PrivateDataSourceConnectNetworkToken(\"testPrivateDataSourceConnectNetworkToken\", PrivateDataSourceConnectNetworkTokenArgs.builder()\n            .pdcNetworkId(test.pdcNetworkId())\n            .region(test.region())\n            .name(\"my-pdc-token\")\n            .displayName(\"My PDC Token\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  test:\n    type: grafana:cloud:PrivateDataSourceConnectNetwork\n    properties:\n      region: prod-us-east-0\n      name: my-pdc\n      displayName: My PDC\n      stackIdentifier: ${current.id}\n  testPrivateDataSourceConnectNetworkToken:\n    type: grafana:cloud:PrivateDataSourceConnectNetworkToken\n    name: test\n    properties:\n      pdcNetworkId: ${test.pdcNetworkId}\n      region: ${test.region}\n      name: my-pdc-token\n      displayName: My PDC Token\nvariables:\n  current:\n    fn::invoke:\n      function: grafana:cloud:getStack\n      arguments:\n        slug: \u003cyour slug\u003e\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:cloud/privateDataSourceConnectNetworkToken:PrivateDataSourceConnectNetworkToken name \"{{ region }}:{{ tokenId }}\"\n```\n\n","properties":{"createdAt":{"type":"string","description":"Creation date of the private data source network token.\n"},"displayName":{"type":"string","description":"Display name of the private data source network token. Defaults to the name.\n"},"expiresAt":{"type":"string","description":"Expiration date of the private data source network token. Does not expire by default.\n"},"name":{"type":"string","description":"Name of the private data source network token.\n"},"pdcNetworkId":{"type":"string","description":"ID of the private data source network for which to create a token.\n"},"region":{"type":"string","description":"Region of the private data source network. Should be set to the same region as the private data source network. Use the region list API to get the list of available regions: https://grafana.com/docs/grafana-cloud/developer-resources/api-reference/cloud-api/#list-regions.\n"},"token":{"type":"string","secret":true},"updatedAt":{"type":"string","description":"Last update date of the private data source network token.\n"}},"required":["createdAt","name","pdcNetworkId","region","token","updatedAt"],"inputProperties":{"displayName":{"type":"string","description":"Display name of the private data source network token. Defaults to the name.\n"},"expiresAt":{"type":"string","description":"Expiration date of the private data source network token. Does not expire by default.\n","willReplaceOnChanges":true},"name":{"type":"string","description":"Name of the private data source network token.\n","willReplaceOnChanges":true},"pdcNetworkId":{"type":"string","description":"ID of the private data source network for which to create a token.\n","willReplaceOnChanges":true},"region":{"type":"string","description":"Region of the private data source network. Should be set to the same region as the private data source network. Use the region list API to get the list of available regions: https://grafana.com/docs/grafana-cloud/developer-resources/api-reference/cloud-api/#list-regions.\n","willReplaceOnChanges":true}},"requiredInputs":["pdcNetworkId","region"],"stateInputs":{"description":"Input properties used for looking up and filtering PrivateDataSourceConnectNetworkToken resources.\n","properties":{"createdAt":{"type":"string","description":"Creation date of the private data source network token.\n"},"displayName":{"type":"string","description":"Display name of the private data source network token. Defaults to the name.\n"},"expiresAt":{"type":"string","description":"Expiration date of the private data source network token. Does not expire by default.\n","willReplaceOnChanges":true},"name":{"type":"string","description":"Name of the private data source network token.\n","willReplaceOnChanges":true},"pdcNetworkId":{"type":"string","description":"ID of the private data source network for which to create a token.\n","willReplaceOnChanges":true},"region":{"type":"string","description":"Region of the private data source network. Should be set to the same region as the private data source network. Use the region list API to get the list of available regions: https://grafana.com/docs/grafana-cloud/developer-resources/api-reference/cloud-api/#list-regions.\n","willReplaceOnChanges":true},"token":{"type":"string","secret":true},"updatedAt":{"type":"string","description":"Last update date of the private data source network token.\n"}},"type":"object"}},"grafana:cloud/productActivationAppO11yConfigV1Alpha1:ProductActivationAppO11yConfigV1Alpha1":{"description":"Manages Grafana Application Observability configurations using the Grafana APIs.\n\nThis resource allows you to enable or disable application observability features.\n\n**Note**: This is a singleton resource. The UID is automatically set to \"global\" and there can only be one per namespace.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst example = new grafana.cloud.ProductActivationAppO11yConfigV1Alpha1(\"example\", {\n    metadata: {\n        uid: \"global\",\n    },\n    spec: {\n        enabled: true,\n    },\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\nexample = grafana.cloud.ProductActivationAppO11yConfigV1Alpha1(\"example\",\n    metadata={\n        \"uid\": \"global\",\n    },\n    spec={\n        \"enabled\": True,\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = new Grafana.Cloud.ProductActivationAppO11yConfigV1Alpha1(\"example\", new()\n    {\n        Metadata = new Grafana.Cloud.Inputs.ProductActivationAppO11yConfigV1Alpha1MetadataArgs\n        {\n            Uid = \"global\",\n        },\n        Spec = new Grafana.Cloud.Inputs.ProductActivationAppO11yConfigV1Alpha1SpecArgs\n        {\n            Enabled = true,\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/cloud\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloud.NewProductActivationAppO11yConfigV1Alpha1(ctx, \"example\", \u0026cloud.ProductActivationAppO11yConfigV1Alpha1Args{\n\t\t\tMetadata: \u0026cloud.ProductActivationAppO11yConfigV1Alpha1MetadataArgs{\n\t\t\t\tUid: pulumi.String(\"global\"),\n\t\t\t},\n\t\t\tSpec: \u0026cloud.ProductActivationAppO11yConfigV1Alpha1SpecArgs{\n\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.cloud.ProductActivationAppO11yConfigV1Alpha1;\nimport com.pulumi.grafana.cloud.ProductActivationAppO11yConfigV1Alpha1Args;\nimport com.pulumi.grafana.cloud.inputs.ProductActivationAppO11yConfigV1Alpha1MetadataArgs;\nimport com.pulumi.grafana.cloud.inputs.ProductActivationAppO11yConfigV1Alpha1SpecArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var example = new ProductActivationAppO11yConfigV1Alpha1(\"example\", ProductActivationAppO11yConfigV1Alpha1Args.builder()\n            .metadata(ProductActivationAppO11yConfigV1Alpha1MetadataArgs.builder()\n                .uid(\"global\")\n                .build())\n            .spec(ProductActivationAppO11yConfigV1Alpha1SpecArgs.builder()\n                .enabled(true)\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: grafana:cloud:ProductActivationAppO11yConfigV1Alpha1\n    properties:\n      metadata:\n        uid: global\n      spec:\n        enabled: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/bin/bash\n\nImport an existing app observability config by its UID\n\n```sh\n$ pulumi import grafana:cloud/productActivationAppO11yConfigV1Alpha1:ProductActivationAppO11yConfigV1Alpha1 example my-app-o11y-config\n```\n\n","properties":{"metadata":{"$ref":"#/types/grafana:cloud/ProductActivationAppO11yConfigV1Alpha1Metadata:ProductActivationAppO11yConfigV1Alpha1Metadata","description":"The metadata of the resource.\n"},"options":{"$ref":"#/types/grafana:cloud/ProductActivationAppO11yConfigV1Alpha1Options:ProductActivationAppO11yConfigV1Alpha1Options","description":"Options for applying the resource.\n"},"spec":{"$ref":"#/types/grafana:cloud/ProductActivationAppO11yConfigV1Alpha1Spec:ProductActivationAppO11yConfigV1Alpha1Spec","description":"The spec of the resource.\n"}},"inputProperties":{"metadata":{"$ref":"#/types/grafana:cloud/ProductActivationAppO11yConfigV1Alpha1Metadata:ProductActivationAppO11yConfigV1Alpha1Metadata","description":"The metadata of the resource.\n"},"options":{"$ref":"#/types/grafana:cloud/ProductActivationAppO11yConfigV1Alpha1Options:ProductActivationAppO11yConfigV1Alpha1Options","description":"Options for applying the resource.\n"},"spec":{"$ref":"#/types/grafana:cloud/ProductActivationAppO11yConfigV1Alpha1Spec:ProductActivationAppO11yConfigV1Alpha1Spec","description":"The spec of the resource.\n"}},"stateInputs":{"description":"Input properties used for looking up and filtering ProductActivationAppO11yConfigV1Alpha1 resources.\n","properties":{"metadata":{"$ref":"#/types/grafana:cloud/ProductActivationAppO11yConfigV1Alpha1Metadata:ProductActivationAppO11yConfigV1Alpha1Metadata","description":"The metadata of the resource.\n"},"options":{"$ref":"#/types/grafana:cloud/ProductActivationAppO11yConfigV1Alpha1Options:ProductActivationAppO11yConfigV1Alpha1Options","description":"Options for applying the resource.\n"},"spec":{"$ref":"#/types/grafana:cloud/ProductActivationAppO11yConfigV1Alpha1Spec:ProductActivationAppO11yConfigV1Alpha1Spec","description":"The spec of the resource.\n"}},"type":"object"}},"grafana:cloud/productActivationK8sO11yConfigV1Alpha1:ProductActivationK8sO11yConfigV1Alpha1":{"description":"Manages Grafana Kubernetes Observability configurations using the Grafana APIs.\n\nThis resource allows you to enable or disable Kubernetes observability features.\n\n**Note**: This is a singleton resource. The UID is automatically set to \"global\" and there can only be one per namespace.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst example = new grafana.cloud.ProductActivationK8sO11yConfigV1Alpha1(\"example\", {\n    metadata: {\n        uid: \"global\",\n    },\n    spec: {\n        enabled: true,\n    },\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\nexample = grafana.cloud.ProductActivationK8sO11yConfigV1Alpha1(\"example\",\n    metadata={\n        \"uid\": \"global\",\n    },\n    spec={\n        \"enabled\": True,\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = new Grafana.Cloud.ProductActivationK8sO11yConfigV1Alpha1(\"example\", new()\n    {\n        Metadata = new Grafana.Cloud.Inputs.ProductActivationK8sO11yConfigV1Alpha1MetadataArgs\n        {\n            Uid = \"global\",\n        },\n        Spec = new Grafana.Cloud.Inputs.ProductActivationK8sO11yConfigV1Alpha1SpecArgs\n        {\n            Enabled = true,\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/cloud\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloud.NewProductActivationK8sO11yConfigV1Alpha1(ctx, \"example\", \u0026cloud.ProductActivationK8sO11yConfigV1Alpha1Args{\n\t\t\tMetadata: \u0026cloud.ProductActivationK8sO11yConfigV1Alpha1MetadataArgs{\n\t\t\t\tUid: pulumi.String(\"global\"),\n\t\t\t},\n\t\t\tSpec: \u0026cloud.ProductActivationK8sO11yConfigV1Alpha1SpecArgs{\n\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.cloud.ProductActivationK8sO11yConfigV1Alpha1;\nimport com.pulumi.grafana.cloud.ProductActivationK8sO11yConfigV1Alpha1Args;\nimport com.pulumi.grafana.cloud.inputs.ProductActivationK8sO11yConfigV1Alpha1MetadataArgs;\nimport com.pulumi.grafana.cloud.inputs.ProductActivationK8sO11yConfigV1Alpha1SpecArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var example = new ProductActivationK8sO11yConfigV1Alpha1(\"example\", ProductActivationK8sO11yConfigV1Alpha1Args.builder()\n            .metadata(ProductActivationK8sO11yConfigV1Alpha1MetadataArgs.builder()\n                .uid(\"global\")\n                .build())\n            .spec(ProductActivationK8sO11yConfigV1Alpha1SpecArgs.builder()\n                .enabled(true)\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: grafana:cloud:ProductActivationK8sO11yConfigV1Alpha1\n    properties:\n      metadata:\n        uid: global\n      spec:\n        enabled: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/bin/bash\n\nImport an existing Kubernetes observability config by its UID\n\n```sh\n$ pulumi import grafana:cloud/productActivationK8sO11yConfigV1Alpha1:ProductActivationK8sO11yConfigV1Alpha1 example my-k8s-o11y-config\n```\n\n","properties":{"metadata":{"$ref":"#/types/grafana:cloud/ProductActivationK8sO11yConfigV1Alpha1Metadata:ProductActivationK8sO11yConfigV1Alpha1Metadata","description":"The metadata of the resource.\n"},"options":{"$ref":"#/types/grafana:cloud/ProductActivationK8sO11yConfigV1Alpha1Options:ProductActivationK8sO11yConfigV1Alpha1Options","description":"Options for applying the resource.\n"},"spec":{"$ref":"#/types/grafana:cloud/ProductActivationK8sO11yConfigV1Alpha1Spec:ProductActivationK8sO11yConfigV1Alpha1Spec","description":"The spec of the resource.\n"}},"inputProperties":{"metadata":{"$ref":"#/types/grafana:cloud/ProductActivationK8sO11yConfigV1Alpha1Metadata:ProductActivationK8sO11yConfigV1Alpha1Metadata","description":"The metadata of the resource.\n"},"options":{"$ref":"#/types/grafana:cloud/ProductActivationK8sO11yConfigV1Alpha1Options:ProductActivationK8sO11yConfigV1Alpha1Options","description":"Options for applying the resource.\n"},"spec":{"$ref":"#/types/grafana:cloud/ProductActivationK8sO11yConfigV1Alpha1Spec:ProductActivationK8sO11yConfigV1Alpha1Spec","description":"The spec of the resource.\n"}},"stateInputs":{"description":"Input properties used for looking up and filtering ProductActivationK8sO11yConfigV1Alpha1 resources.\n","properties":{"metadata":{"$ref":"#/types/grafana:cloud/ProductActivationK8sO11yConfigV1Alpha1Metadata:ProductActivationK8sO11yConfigV1Alpha1Metadata","description":"The metadata of the resource.\n"},"options":{"$ref":"#/types/grafana:cloud/ProductActivationK8sO11yConfigV1Alpha1Options:ProductActivationK8sO11yConfigV1Alpha1Options","description":"Options for applying the resource.\n"},"spec":{"$ref":"#/types/grafana:cloud/ProductActivationK8sO11yConfigV1Alpha1Spec:ProductActivationK8sO11yConfigV1Alpha1Spec","description":"The spec of the resource.\n"}},"type":"object"}},"grafana:cloud/stack:Stack":{"description":"* [Official documentation](https://grafana.com/docs/grafana-cloud/developer-resources/api-reference/cloud-api/#stacks/)\n\nRequired access policy scopes:\n\n* stacks:read\n* stacks:write\n* stacks:delete\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst test = new grafana.cloud.Stack(\"test\", {\n    name: \"gcloudstacktest\",\n    slug: \"gcloudstacktest\",\n    regionSlug: \"eu\",\n    description: \"Test Grafana Cloud Stack\",\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\ntest = grafana.cloud.Stack(\"test\",\n    name=\"gcloudstacktest\",\n    slug=\"gcloudstacktest\",\n    region_slug=\"eu\",\n    description=\"Test Grafana Cloud Stack\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var test = new Grafana.Cloud.Stack(\"test\", new()\n    {\n        Name = \"gcloudstacktest\",\n        Slug = \"gcloudstacktest\",\n        RegionSlug = \"eu\",\n        Description = \"Test Grafana Cloud Stack\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/cloud\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloud.NewStack(ctx, \"test\", \u0026cloud.StackArgs{\n\t\t\tName:        pulumi.String(\"gcloudstacktest\"),\n\t\t\tSlug:        pulumi.String(\"gcloudstacktest\"),\n\t\t\tRegionSlug:  pulumi.String(\"eu\"),\n\t\t\tDescription: pulumi.String(\"Test Grafana Cloud Stack\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.cloud.Stack;\nimport com.pulumi.grafana.cloud.StackArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var test = new Stack(\"test\", StackArgs.builder()\n            .name(\"gcloudstacktest\")\n            .slug(\"gcloudstacktest\")\n            .regionSlug(\"eu\")\n            .description(\"Test Grafana Cloud Stack\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  test:\n    type: grafana:cloud:Stack\n    properties:\n      name: gcloudstacktest\n      slug: gcloudstacktest\n      regionSlug: eu\n      description: Test Grafana Cloud Stack\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:cloud/stack:Stack name \"{{ stackSlugOrID }}\"\n```\n\n","properties":{"alertmanagerIpAllowListCname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the Alertmanager instances (Optional)\n"},"alertmanagerName":{"type":"string","description":"Name of the Alertmanager instance configured for this stack.\n"},"alertmanagerStatus":{"type":"string","description":"Status of the Alertmanager instance configured for this stack.\n"},"alertmanagerUrl":{"type":"string","description":"Base URL of the Alertmanager instance configured for this stack.\n"},"alertmanagerUserId":{"type":"integer","description":"User ID of the Alertmanager instance configured for this stack.\n"},"clusterName":{"type":"string","description":"Name of the cluster where this stack resides.\n"},"clusterSlug":{"type":"string","description":"Slug of the cluster where this stack resides.\n"},"deleteProtection":{"type":"boolean","description":"Whether to enable delete protection for the stack, preventing accidental deletion. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"description":{"type":"string","description":"Description of stack.\n"},"fleetManagementName":{"type":"string","description":"Name of the Fleet Management instance configured for this stack.\n"},"fleetManagementPrivateConnectivityInfoPrivateDns":{"type":"string","description":"Private DNS for Fleet Management when using AWS PrivateLink (only for AWS stacks)\n"},"fleetManagementPrivateConnectivityInfoServiceName":{"type":"string","description":"Service Name for Fleet Management when using AWS PrivateLink (only for AWS stacks)\n"},"fleetManagementStatus":{"type":"string","description":"Status of the Fleet Management instance configured for this stack.\n"},"fleetManagementUrl":{"type":"string","description":"Base URL of the Fleet Management instance configured for this stack.\n"},"fleetManagementUserId":{"type":"integer","description":"User ID of the Fleet Management instance configured for this stack.\n"},"grafanasIpAllowListCname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the grafana instance (Optional)\n"},"graphiteIpAllowListCname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the Graphite instance (Optional)\n"},"graphiteName":{"type":"string"},"graphitePrivateConnectivityInfoPrivateDns":{"type":"string","description":"Private DNS for Graphite when using AWS PrivateLink (only for AWS stacks)\n"},"graphitePrivateConnectivityInfoServiceName":{"type":"string","description":"Service Name for Graphite when using AWS PrivateLink (only for AWS stacks)\n"},"graphiteStatus":{"type":"string"},"graphiteUrl":{"type":"string"},"graphiteUserId":{"type":"integer"},"influxUrl":{"type":"string","description":"Base URL of the InfluxDB instance configured for this stack. The username is the same as the metrics' (\u003cspan pulumi-lang-nodejs=\"`prometheusUserId`\" pulumi-lang-dotnet=\"`PrometheusUserId`\" pulumi-lang-go=\"`prometheusUserId`\" pulumi-lang-python=\"`prometheus_user_id`\" pulumi-lang-yaml=\"`prometheusUserId`\" pulumi-lang-java=\"`prometheusUserId`\"\u003e`prometheus_user_id`\u003c/span\u003e attribute of this resource). See https://grafana.com/docs/grafana-cloud/send-data/metrics/metrics-influxdb/push-from-telegraf/ for docs on how to use this.\n"},"labels":{"type":"object","additionalProperties":{"type":"string"},"description":"A map of labels to assign to the stack. Label keys and values must match the following regexp: \"^[a-zA-Z0-9/\\-._]+$\" and stacks cannot have more than 10 labels.\n"},"logsIpAllowListCname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the Logs instance (Optional)\n"},"logsName":{"type":"string"},"logsPrivateConnectivityInfoPrivateDns":{"type":"string","description":"Private DNS for Logs when using AWS PrivateLink (only for AWS stacks)\n"},"logsPrivateConnectivityInfoServiceName":{"type":"string","description":"Service Name for Logs when using AWS PrivateLink (only for AWS stacks)\n"},"logsStatus":{"type":"string"},"logsUrl":{"type":"string"},"logsUserId":{"type":"integer"},"name":{"type":"string","description":"Name of stack. Conventionally matches the url of the instance (e.g. `\u003cstack_slug\u003e.grafana.net`).\n"},"oncallApiUrl":{"type":"string","description":"Base URL of the OnCall API instance configured for this stack.\n"},"orgId":{"type":"integer","description":"Organization id to assign to this stack.\n"},"orgName":{"type":"string","description":"Organization name to assign to this stack.\n"},"orgSlug":{"type":"string","description":"Organization slug to assign to this stack.\n"},"otlpPrivateConnectivityInfoPrivateDns":{"type":"string","description":"Private DNS for OTLP when using AWS PrivateLink (only for AWS stacks)\n"},"otlpPrivateConnectivityInfoServiceName":{"type":"string","description":"Service Name for OTLP when using AWS PrivateLink (only for AWS stacks)\n"},"otlpUrl":{"type":"string","description":"Base URL of the OTLP instance configured for this stack. The username is the stack's ID (\u003cspan pulumi-lang-nodejs=\"`id`\" pulumi-lang-dotnet=\"`Id`\" pulumi-lang-go=\"`id`\" pulumi-lang-python=\"`id`\" pulumi-lang-yaml=\"`id`\" pulumi-lang-java=\"`id`\"\u003e`id`\u003c/span\u003e attribute of this resource). See https://grafana.com/docs/grafana-cloud/send-data/otlp/send-data-otlp/ for docs on how to use this.\n"},"pdcApiPrivateConnectivityInfoPrivateDns":{"type":"string","description":"Private DNS for PDC's API when using AWS PrivateLink (only for AWS stacks)\n"},"pdcApiPrivateConnectivityInfoServiceName":{"type":"string","description":"Service Name for PDC's API when using AWS PrivateLink (only for AWS stacks)\n"},"pdcGatewayPrivateConnectivityInfoPrivateDns":{"type":"string","description":"Private DNS for PDC's Gateway when using AWS PrivateLink (only for AWS stacks)\n"},"pdcGatewayPrivateConnectivityInfoServiceName":{"type":"string","description":"Service Name for PDC's Gateway when using AWS PrivateLink (only for AWS stacks)\n"},"profilesIpAllowListCname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the Profiles instance (Optional)\n"},"profilesName":{"type":"string"},"profilesPrivateConnectivityInfoPrivateDns":{"type":"string","description":"Private DNS for Profiles when using AWS PrivateLink (only for AWS stacks)\n"},"profilesPrivateConnectivityInfoServiceName":{"type":"string","description":"Service Name for Profiles when using AWS PrivateLink (only for AWS stacks)\n"},"profilesStatus":{"type":"string"},"profilesUrl":{"type":"string"},"profilesUserId":{"type":"integer"},"prometheusIpAllowListCname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the Prometheus instance (Optional)\n"},"prometheusName":{"type":"string","description":"Prometheus name for this instance.\n"},"prometheusPrivateConnectivityInfoPrivateDns":{"type":"string","description":"Private DNS for Prometheus when using AWS PrivateLink (only for AWS stacks)\n"},"prometheusPrivateConnectivityInfoServiceName":{"type":"string","description":"Service Name for Prometheus when using AWS PrivateLink (only for AWS stacks)\n"},"prometheusRemoteEndpoint":{"type":"string","description":"Use this URL to query hosted metrics data e.g. Prometheus data source in Grafana\n"},"prometheusRemoteWriteEndpoint":{"type":"string","description":"Use this URL to send prometheus metrics to Grafana cloud\n"},"prometheusStatus":{"type":"string","description":"Prometheus status for this instance.\n"},"prometheusUrl":{"type":"string","description":"Prometheus url for this instance.\n"},"prometheusUserId":{"type":"integer","description":"Prometheus user ID. Used for e.g. remote_write.\n"},"regionSlug":{"type":"string","description":"Region slug to assign to this stack. Changing region will destroy the existing stack and create a new one in the desired region. Use the region list API to get the list of available regions: https://grafana.com/docs/grafana-cloud/developer-resources/api-reference/cloud-api/#list-regions.\n"},"slug":{"type":"string","description":"Subdomain that the Grafana instance will be available at. Setting slug to `\u003cstack_slug\u003e` will make the instance available at `https://\u003cstack_slug\u003e.grafana.net`.\n"},"status":{"type":"string","description":"Status of the stack.\n"},"tracesIpAllowListCname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the Traces instance (Optional)\n"},"tracesName":{"type":"string"},"tracesPrivateConnectivityInfoPrivateDns":{"type":"string","description":"Private DNS for Traces when using AWS PrivateLink (only for AWS stacks)\n"},"tracesPrivateConnectivityInfoServiceName":{"type":"string","description":"Service Name for Traces when using AWS PrivateLink (only for AWS stacks)\n"},"tracesStatus":{"type":"string"},"tracesUrl":{"type":"string","description":"Base URL of the Traces instance configured for this stack. To use this in the Tempo data source in Grafana, append `/tempo` to the URL.\n"},"tracesUserId":{"type":"integer"},"url":{"type":"string","description":"Custom URL for the Grafana instance. Must have a CNAME setup to point to `.grafana.net` before creating the stack\n"},"waitForReadiness":{"type":"boolean","description":"Whether to wait for readiness of the stack after creating it. The check is a HEAD request to the stack URL (Grafana instance). Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"waitForReadinessTimeout":{"type":"string","description":"How long to wait for readiness (if enabled). Defaults to \u003cspan pulumi-lang-nodejs=\"`5m0s`\" pulumi-lang-dotnet=\"`5m0s`\" pulumi-lang-go=\"`5m0s`\" pulumi-lang-python=\"`5m0s`\" pulumi-lang-yaml=\"`5m0s`\" pulumi-lang-java=\"`5m0s`\"\u003e`5m0s`\u003c/span\u003e.\n"}},"required":["alertmanagerIpAllowListCname","alertmanagerName","alertmanagerStatus","alertmanagerUrl","alertmanagerUserId","clusterName","clusterSlug","fleetManagementName","fleetManagementPrivateConnectivityInfoPrivateDns","fleetManagementPrivateConnectivityInfoServiceName","fleetManagementStatus","fleetManagementUrl","fleetManagementUserId","grafanasIpAllowListCname","graphiteIpAllowListCname","graphiteName","graphitePrivateConnectivityInfoPrivateDns","graphitePrivateConnectivityInfoServiceName","graphiteStatus","graphiteUrl","graphiteUserId","influxUrl","logsIpAllowListCname","logsName","logsPrivateConnectivityInfoPrivateDns","logsPrivateConnectivityInfoServiceName","logsStatus","logsUrl","logsUserId","name","oncallApiUrl","orgId","orgName","orgSlug","otlpPrivateConnectivityInfoPrivateDns","otlpPrivateConnectivityInfoServiceName","otlpUrl","pdcApiPrivateConnectivityInfoPrivateDns","pdcApiPrivateConnectivityInfoServiceName","pdcGatewayPrivateConnectivityInfoPrivateDns","pdcGatewayPrivateConnectivityInfoServiceName","profilesIpAllowListCname","profilesName","profilesPrivateConnectivityInfoPrivateDns","profilesPrivateConnectivityInfoServiceName","profilesStatus","profilesUrl","profilesUserId","prometheusIpAllowListCname","prometheusName","prometheusPrivateConnectivityInfoPrivateDns","prometheusPrivateConnectivityInfoServiceName","prometheusRemoteEndpoint","prometheusRemoteWriteEndpoint","prometheusStatus","prometheusUrl","prometheusUserId","slug","status","tracesIpAllowListCname","tracesName","tracesPrivateConnectivityInfoPrivateDns","tracesPrivateConnectivityInfoServiceName","tracesStatus","tracesUrl","tracesUserId","url"],"inputProperties":{"deleteProtection":{"type":"boolean","description":"Whether to enable delete protection for the stack, preventing accidental deletion. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"description":{"type":"string","description":"Description of stack.\n"},"labels":{"type":"object","additionalProperties":{"type":"string"},"description":"A map of labels to assign to the stack. Label keys and values must match the following regexp: \"^[a-zA-Z0-9/\\-._]+$\" and stacks cannot have more than 10 labels.\n"},"name":{"type":"string","description":"Name of stack. Conventionally matches the url of the instance (e.g. `\u003cstack_slug\u003e.grafana.net`).\n"},"regionSlug":{"type":"string","description":"Region slug to assign to this stack. Changing region will destroy the existing stack and create a new one in the desired region. Use the region list API to get the list of available regions: https://grafana.com/docs/grafana-cloud/developer-resources/api-reference/cloud-api/#list-regions.\n","willReplaceOnChanges":true},"slug":{"type":"string","description":"Subdomain that the Grafana instance will be available at. Setting slug to `\u003cstack_slug\u003e` will make the instance available at `https://\u003cstack_slug\u003e.grafana.net`.\n"},"url":{"type":"string","description":"Custom URL for the Grafana instance. Must have a CNAME setup to point to `.grafana.net` before creating the stack\n"},"waitForReadiness":{"type":"boolean","description":"Whether to wait for readiness of the stack after creating it. The check is a HEAD request to the stack URL (Grafana instance). Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"waitForReadinessTimeout":{"type":"string","description":"How long to wait for readiness (if enabled). Defaults to \u003cspan pulumi-lang-nodejs=\"`5m0s`\" pulumi-lang-dotnet=\"`5m0s`\" pulumi-lang-go=\"`5m0s`\" pulumi-lang-python=\"`5m0s`\" pulumi-lang-yaml=\"`5m0s`\" pulumi-lang-java=\"`5m0s`\"\u003e`5m0s`\u003c/span\u003e.\n"}},"requiredInputs":["slug"],"stateInputs":{"description":"Input properties used for looking up and filtering Stack resources.\n","properties":{"alertmanagerIpAllowListCname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the Alertmanager instances (Optional)\n"},"alertmanagerName":{"type":"string","description":"Name of the Alertmanager instance configured for this stack.\n"},"alertmanagerStatus":{"type":"string","description":"Status of the Alertmanager instance configured for this stack.\n"},"alertmanagerUrl":{"type":"string","description":"Base URL of the Alertmanager instance configured for this stack.\n"},"alertmanagerUserId":{"type":"integer","description":"User ID of the Alertmanager instance configured for this stack.\n"},"clusterName":{"type":"string","description":"Name of the cluster where this stack resides.\n"},"clusterSlug":{"type":"string","description":"Slug of the cluster where this stack resides.\n"},"deleteProtection":{"type":"boolean","description":"Whether to enable delete protection for the stack, preventing accidental deletion. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"description":{"type":"string","description":"Description of stack.\n"},"fleetManagementName":{"type":"string","description":"Name of the Fleet Management instance configured for this stack.\n"},"fleetManagementPrivateConnectivityInfoPrivateDns":{"type":"string","description":"Private DNS for Fleet Management when using AWS PrivateLink (only for AWS stacks)\n"},"fleetManagementPrivateConnectivityInfoServiceName":{"type":"string","description":"Service Name for Fleet Management when using AWS PrivateLink (only for AWS stacks)\n"},"fleetManagementStatus":{"type":"string","description":"Status of the Fleet Management instance configured for this stack.\n"},"fleetManagementUrl":{"type":"string","description":"Base URL of the Fleet Management instance configured for this stack.\n"},"fleetManagementUserId":{"type":"integer","description":"User ID of the Fleet Management instance configured for this stack.\n"},"grafanasIpAllowListCname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the grafana instance (Optional)\n"},"graphiteIpAllowListCname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the Graphite instance (Optional)\n"},"graphiteName":{"type":"string"},"graphitePrivateConnectivityInfoPrivateDns":{"type":"string","description":"Private DNS for Graphite when using AWS PrivateLink (only for AWS stacks)\n"},"graphitePrivateConnectivityInfoServiceName":{"type":"string","description":"Service Name for Graphite when using AWS PrivateLink (only for AWS stacks)\n"},"graphiteStatus":{"type":"string"},"graphiteUrl":{"type":"string"},"graphiteUserId":{"type":"integer"},"influxUrl":{"type":"string","description":"Base URL of the InfluxDB instance configured for this stack. The username is the same as the metrics' (\u003cspan pulumi-lang-nodejs=\"`prometheusUserId`\" pulumi-lang-dotnet=\"`PrometheusUserId`\" pulumi-lang-go=\"`prometheusUserId`\" pulumi-lang-python=\"`prometheus_user_id`\" pulumi-lang-yaml=\"`prometheusUserId`\" pulumi-lang-java=\"`prometheusUserId`\"\u003e`prometheus_user_id`\u003c/span\u003e attribute of this resource). See https://grafana.com/docs/grafana-cloud/send-data/metrics/metrics-influxdb/push-from-telegraf/ for docs on how to use this.\n"},"labels":{"type":"object","additionalProperties":{"type":"string"},"description":"A map of labels to assign to the stack. Label keys and values must match the following regexp: \"^[a-zA-Z0-9/\\-._]+$\" and stacks cannot have more than 10 labels.\n"},"logsIpAllowListCname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the Logs instance (Optional)\n"},"logsName":{"type":"string"},"logsPrivateConnectivityInfoPrivateDns":{"type":"string","description":"Private DNS for Logs when using AWS PrivateLink (only for AWS stacks)\n"},"logsPrivateConnectivityInfoServiceName":{"type":"string","description":"Service Name for Logs when using AWS PrivateLink (only for AWS stacks)\n"},"logsStatus":{"type":"string"},"logsUrl":{"type":"string"},"logsUserId":{"type":"integer"},"name":{"type":"string","description":"Name of stack. Conventionally matches the url of the instance (e.g. `\u003cstack_slug\u003e.grafana.net`).\n"},"oncallApiUrl":{"type":"string","description":"Base URL of the OnCall API instance configured for this stack.\n"},"orgId":{"type":"integer","description":"Organization id to assign to this stack.\n"},"orgName":{"type":"string","description":"Organization name to assign to this stack.\n"},"orgSlug":{"type":"string","description":"Organization slug to assign to this stack.\n"},"otlpPrivateConnectivityInfoPrivateDns":{"type":"string","description":"Private DNS for OTLP when using AWS PrivateLink (only for AWS stacks)\n"},"otlpPrivateConnectivityInfoServiceName":{"type":"string","description":"Service Name for OTLP when using AWS PrivateLink (only for AWS stacks)\n"},"otlpUrl":{"type":"string","description":"Base URL of the OTLP instance configured for this stack. The username is the stack's ID (\u003cspan pulumi-lang-nodejs=\"`id`\" pulumi-lang-dotnet=\"`Id`\" pulumi-lang-go=\"`id`\" pulumi-lang-python=\"`id`\" pulumi-lang-yaml=\"`id`\" pulumi-lang-java=\"`id`\"\u003e`id`\u003c/span\u003e attribute of this resource). See https://grafana.com/docs/grafana-cloud/send-data/otlp/send-data-otlp/ for docs on how to use this.\n"},"pdcApiPrivateConnectivityInfoPrivateDns":{"type":"string","description":"Private DNS for PDC's API when using AWS PrivateLink (only for AWS stacks)\n"},"pdcApiPrivateConnectivityInfoServiceName":{"type":"string","description":"Service Name for PDC's API when using AWS PrivateLink (only for AWS stacks)\n"},"pdcGatewayPrivateConnectivityInfoPrivateDns":{"type":"string","description":"Private DNS for PDC's Gateway when using AWS PrivateLink (only for AWS stacks)\n"},"pdcGatewayPrivateConnectivityInfoServiceName":{"type":"string","description":"Service Name for PDC's Gateway when using AWS PrivateLink (only for AWS stacks)\n"},"profilesIpAllowListCname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the Profiles instance (Optional)\n"},"profilesName":{"type":"string"},"profilesPrivateConnectivityInfoPrivateDns":{"type":"string","description":"Private DNS for Profiles when using AWS PrivateLink (only for AWS stacks)\n"},"profilesPrivateConnectivityInfoServiceName":{"type":"string","description":"Service Name for Profiles when using AWS PrivateLink (only for AWS stacks)\n"},"profilesStatus":{"type":"string"},"profilesUrl":{"type":"string"},"profilesUserId":{"type":"integer"},"prometheusIpAllowListCname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the Prometheus instance (Optional)\n"},"prometheusName":{"type":"string","description":"Prometheus name for this instance.\n"},"prometheusPrivateConnectivityInfoPrivateDns":{"type":"string","description":"Private DNS for Prometheus when using AWS PrivateLink (only for AWS stacks)\n"},"prometheusPrivateConnectivityInfoServiceName":{"type":"string","description":"Service Name for Prometheus when using AWS PrivateLink (only for AWS stacks)\n"},"prometheusRemoteEndpoint":{"type":"string","description":"Use this URL to query hosted metrics data e.g. Prometheus data source in Grafana\n"},"prometheusRemoteWriteEndpoint":{"type":"string","description":"Use this URL to send prometheus metrics to Grafana cloud\n"},"prometheusStatus":{"type":"string","description":"Prometheus status for this instance.\n"},"prometheusUrl":{"type":"string","description":"Prometheus url for this instance.\n"},"prometheusUserId":{"type":"integer","description":"Prometheus user ID. Used for e.g. remote_write.\n"},"regionSlug":{"type":"string","description":"Region slug to assign to this stack. Changing region will destroy the existing stack and create a new one in the desired region. Use the region list API to get the list of available regions: https://grafana.com/docs/grafana-cloud/developer-resources/api-reference/cloud-api/#list-regions.\n","willReplaceOnChanges":true},"slug":{"type":"string","description":"Subdomain that the Grafana instance will be available at. Setting slug to `\u003cstack_slug\u003e` will make the instance available at `https://\u003cstack_slug\u003e.grafana.net`.\n"},"status":{"type":"string","description":"Status of the stack.\n"},"tracesIpAllowListCname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the Traces instance (Optional)\n"},"tracesName":{"type":"string"},"tracesPrivateConnectivityInfoPrivateDns":{"type":"string","description":"Private DNS for Traces when using AWS PrivateLink (only for AWS stacks)\n"},"tracesPrivateConnectivityInfoServiceName":{"type":"string","description":"Service Name for Traces when using AWS PrivateLink (only for AWS stacks)\n"},"tracesStatus":{"type":"string"},"tracesUrl":{"type":"string","description":"Base URL of the Traces instance configured for this stack. To use this in the Tempo data source in Grafana, append `/tempo` to the URL.\n"},"tracesUserId":{"type":"integer"},"url":{"type":"string","description":"Custom URL for the Grafana instance. Must have a CNAME setup to point to `.grafana.net` before creating the stack\n"},"waitForReadiness":{"type":"boolean","description":"Whether to wait for readiness of the stack after creating it. The check is a HEAD request to the stack URL (Grafana instance). Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"waitForReadinessTimeout":{"type":"string","description":"How long to wait for readiness (if enabled). Defaults to \u003cspan pulumi-lang-nodejs=\"`5m0s`\" pulumi-lang-dotnet=\"`5m0s`\" pulumi-lang-go=\"`5m0s`\" pulumi-lang-python=\"`5m0s`\" pulumi-lang-yaml=\"`5m0s`\" pulumi-lang-java=\"`5m0s`\"\u003e`5m0s`\u003c/span\u003e.\n"}},"type":"object"}},"grafana:cloud/stackServiceAccount:StackServiceAccount":{"description":"Manages service accounts of a Grafana Cloud stack using the Cloud API\nThis can be used to bootstrap a management service account for a new stack\n\n* [Official documentation](https://grafana.com/docs/grafana/latest/administration/service-accounts/)\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/serviceaccount/#service-account-api)\n\nRequired access policy scopes:\n\n* stacks:read\n* stack-service-accounts:write\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst cloudSa = new grafana.cloud.StackServiceAccount(\"cloud_sa\", {\n    stackSlug: \"\u003cyour stack slug\u003e\",\n    name: \"cloud service account\",\n    role: \"Admin\",\n    isDisabled: false,\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\ncloud_sa = grafana.cloud.StackServiceAccount(\"cloud_sa\",\n    stack_slug=\"\u003cyour stack slug\u003e\",\n    name=\"cloud service account\",\n    role=\"Admin\",\n    is_disabled=False)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var cloudSa = new Grafana.Cloud.StackServiceAccount(\"cloud_sa\", new()\n    {\n        StackSlug = \"\u003cyour stack slug\u003e\",\n        Name = \"cloud service account\",\n        Role = \"Admin\",\n        IsDisabled = false,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/cloud\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloud.NewStackServiceAccount(ctx, \"cloud_sa\", \u0026cloud.StackServiceAccountArgs{\n\t\t\tStackSlug:  pulumi.String(\"\u003cyour stack slug\u003e\"),\n\t\t\tName:       pulumi.String(\"cloud service account\"),\n\t\t\tRole:       pulumi.String(\"Admin\"),\n\t\t\tIsDisabled: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.cloud.StackServiceAccount;\nimport com.pulumi.grafana.cloud.StackServiceAccountArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var cloudSa = new StackServiceAccount(\"cloudSa\", StackServiceAccountArgs.builder()\n            .stackSlug(\"\u003cyour stack slug\u003e\")\n            .name(\"cloud service account\")\n            .role(\"Admin\")\n            .isDisabled(false)\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  cloudSa:\n    type: grafana:cloud:StackServiceAccount\n    name: cloud_sa\n    properties:\n      stackSlug: \u003cyour stack slug\u003e\n      name: cloud service account\n      role: Admin\n      isDisabled: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:cloud/stackServiceAccount:StackServiceAccount name \"{{ stackSlug }}:{{ serviceAccountID }}\"\n```\n\n","properties":{"isDisabled":{"type":"boolean","description":"The disabled status for the service account. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"name":{"type":"string","description":"The name of the service account.\n"},"role":{"type":"string","description":"The basic role of the service account in the organization.\n"},"stackSlug":{"type":"string"}},"required":["name","role","stackSlug"],"inputProperties":{"isDisabled":{"type":"boolean","description":"The disabled status for the service account. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n","willReplaceOnChanges":true},"name":{"type":"string","description":"The name of the service account.\n","willReplaceOnChanges":true},"role":{"type":"string","description":"The basic role of the service account in the organization.\n","willReplaceOnChanges":true},"stackSlug":{"type":"string","willReplaceOnChanges":true}},"requiredInputs":["role","stackSlug"],"stateInputs":{"description":"Input properties used for looking up and filtering StackServiceAccount resources.\n","properties":{"isDisabled":{"type":"boolean","description":"The disabled status for the service account. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n","willReplaceOnChanges":true},"name":{"type":"string","description":"The name of the service account.\n","willReplaceOnChanges":true},"role":{"type":"string","description":"The basic role of the service account in the organization.\n","willReplaceOnChanges":true},"stackSlug":{"type":"string","willReplaceOnChanges":true}},"type":"object"}},"grafana:cloud/stackServiceAccountRotatingToken:StackServiceAccountRotatingToken":{"description":"Manages and rotates service account tokens of a Grafana Cloud stack using the Cloud API\nThis can be used to bootstrap a management service account token for a new stack\n\n* [Official documentation](https://grafana.com/docs/grafana/latest/administration/service-accounts/)\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/serviceaccount/#service-account-api)\n\nRequired access policy scopes:\n\n* stack-service-accounts:write\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst cloudSa = new grafana.cloud.StackServiceAccount(\"cloud_sa\", {\n    stackSlug: \"\u003cyour stack slug\u003e\",\n    name: \"cloud service account\",\n    role: \"Admin\",\n    isDisabled: false,\n});\nconst foo = new grafana.cloud.StackServiceAccountRotatingToken(\"foo\", {\n    stackSlug: \"\u003cyour stack slug\u003e\",\n    namePrefix: \"key_foo\",\n    serviceAccountId: cloudSa.id,\n    secondsToLive: 7776000,\n    earlyRotationWindowSeconds: 604800,\n});\nexport const serviceAccountTokenFooKey = fooGrafanaCloudStackServiceAccountToken.key;\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\ncloud_sa = grafana.cloud.StackServiceAccount(\"cloud_sa\",\n    stack_slug=\"\u003cyour stack slug\u003e\",\n    name=\"cloud service account\",\n    role=\"Admin\",\n    is_disabled=False)\nfoo = grafana.cloud.StackServiceAccountRotatingToken(\"foo\",\n    stack_slug=\"\u003cyour stack slug\u003e\",\n    name_prefix=\"key_foo\",\n    service_account_id=cloud_sa.id,\n    seconds_to_live=7776000,\n    early_rotation_window_seconds=604800)\npulumi.export(\"serviceAccountTokenFooKey\", foo_grafana_cloud_stack_service_account_token[\"key\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var cloudSa = new Grafana.Cloud.StackServiceAccount(\"cloud_sa\", new()\n    {\n        StackSlug = \"\u003cyour stack slug\u003e\",\n        Name = \"cloud service account\",\n        Role = \"Admin\",\n        IsDisabled = false,\n    });\n\n    var foo = new Grafana.Cloud.StackServiceAccountRotatingToken(\"foo\", new()\n    {\n        StackSlug = \"\u003cyour stack slug\u003e\",\n        NamePrefix = \"key_foo\",\n        ServiceAccountId = cloudSa.Id,\n        SecondsToLive = 7776000,\n        EarlyRotationWindowSeconds = 604800,\n    });\n\n    return new Dictionary\u003cstring, object?\u003e\n    {\n        [\"serviceAccountTokenFooKey\"] = fooGrafanaCloudStackServiceAccountToken.Key,\n    };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/cloud\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcloudSa, err := cloud.NewStackServiceAccount(ctx, \"cloud_sa\", \u0026cloud.StackServiceAccountArgs{\n\t\t\tStackSlug:  pulumi.String(\"\u003cyour stack slug\u003e\"),\n\t\t\tName:       pulumi.String(\"cloud service account\"),\n\t\t\tRole:       pulumi.String(\"Admin\"),\n\t\t\tIsDisabled: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloud.NewStackServiceAccountRotatingToken(ctx, \"foo\", \u0026cloud.StackServiceAccountRotatingTokenArgs{\n\t\t\tStackSlug:                  pulumi.String(\"\u003cyour stack slug\u003e\"),\n\t\t\tNamePrefix:                 pulumi.String(\"key_foo\"),\n\t\t\tServiceAccountId:           cloudSa.ID(),\n\t\t\tSecondsToLive:              pulumi.Int(7776000),\n\t\t\tEarlyRotationWindowSeconds: pulumi.Int(604800),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"serviceAccountTokenFooKey\", fooGrafanaCloudStackServiceAccountToken.Key)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.cloud.StackServiceAccount;\nimport com.pulumi.grafana.cloud.StackServiceAccountArgs;\nimport com.pulumi.grafana.cloud.StackServiceAccountRotatingToken;\nimport com.pulumi.grafana.cloud.StackServiceAccountRotatingTokenArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var cloudSa = new StackServiceAccount(\"cloudSa\", StackServiceAccountArgs.builder()\n            .stackSlug(\"\u003cyour stack slug\u003e\")\n            .name(\"cloud service account\")\n            .role(\"Admin\")\n            .isDisabled(false)\n            .build());\n\n        var foo = new StackServiceAccountRotatingToken(\"foo\", StackServiceAccountRotatingTokenArgs.builder()\n            .stackSlug(\"\u003cyour stack slug\u003e\")\n            .namePrefix(\"key_foo\")\n            .serviceAccountId(cloudSa.id())\n            .secondsToLive(7776000)\n            .earlyRotationWindowSeconds(604800)\n            .build());\n\n        ctx.export(\"serviceAccountTokenFooKey\", fooGrafanaCloudStackServiceAccountToken.key());\n    }\n}\n```\n```yaml\nresources:\n  cloudSa:\n    type: grafana:cloud:StackServiceAccount\n    name: cloud_sa\n    properties:\n      stackSlug: \u003cyour stack slug\u003e\n      name: cloud service account\n      role: Admin\n      isDisabled: false\n  foo:\n    type: grafana:cloud:StackServiceAccountRotatingToken\n    properties:\n      stackSlug: \u003cyour stack slug\u003e\n      namePrefix: key_foo\n      serviceAccountId: ${cloudSa.id}\n      secondsToLive: 7.776e+06 # 3 months\n      earlyRotationWindowSeconds: 604800 # 1 week\noutputs:\n  serviceAccountTokenFooKey: ${fooGrafanaCloudStackServiceAccountToken.key}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"deleteOnDestroy":{"type":"boolean"},"earlyRotationWindowSeconds":{"type":"integer","description":"Duration of the time window before expiring where the token can be rotated, in seconds.\n"},"expiration":{"type":"string","description":"The expiration date of the service account token.\n"},"hasExpired":{"type":"boolean","description":"The status of the service account token.\n"},"key":{"type":"string","description":"The key of the service account token.\n","secret":true},"name":{"type":"string","description":"The name of the service account token. It will start with `\u003cname_prefix\u003e-` and will have characters appended to it to make the name unique.\n"},"namePrefix":{"type":"string","description":"Prefix for the name of the service account tokens created by this resource. The actual name will be stored in the computed field \u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e, which will be in the format `\u003cname_prefix\u003e-\u003cadditional_characters\u003e`.\n"},"readyForRotation":{"type":"boolean","description":"Signals that the service account token is expired or within the period to be early rotated.\n"},"secondsToLive":{"type":"integer","description":"The token expiration in seconds.\n"},"serviceAccountId":{"type":"string","description":"The ID of the service account to which the token belongs.\n"},"stackSlug":{"type":"string"}},"required":["earlyRotationWindowSeconds","expiration","hasExpired","key","name","namePrefix","readyForRotation","secondsToLive","serviceAccountId","stackSlug"],"inputProperties":{"deleteOnDestroy":{"type":"boolean"},"earlyRotationWindowSeconds":{"type":"integer","description":"Duration of the time window before expiring where the token can be rotated, in seconds.\n"},"namePrefix":{"type":"string","description":"Prefix for the name of the service account tokens created by this resource. The actual name will be stored in the computed field \u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e, which will be in the format `\u003cname_prefix\u003e-\u003cadditional_characters\u003e`.\n","willReplaceOnChanges":true},"secondsToLive":{"type":"integer","description":"The token expiration in seconds.\n","willReplaceOnChanges":true},"serviceAccountId":{"type":"string","description":"The ID of the service account to which the token belongs.\n","willReplaceOnChanges":true},"stackSlug":{"type":"string","willReplaceOnChanges":true}},"requiredInputs":["earlyRotationWindowSeconds","namePrefix","secondsToLive","serviceAccountId","stackSlug"],"stateInputs":{"description":"Input properties used for looking up and filtering StackServiceAccountRotatingToken resources.\n","properties":{"deleteOnDestroy":{"type":"boolean"},"earlyRotationWindowSeconds":{"type":"integer","description":"Duration of the time window before expiring where the token can be rotated, in seconds.\n"},"expiration":{"type":"string","description":"The expiration date of the service account token.\n"},"hasExpired":{"type":"boolean","description":"The status of the service account token.\n"},"key":{"type":"string","description":"The key of the service account token.\n","secret":true},"name":{"type":"string","description":"The name of the service account token. It will start with `\u003cname_prefix\u003e-` and will have characters appended to it to make the name unique.\n"},"namePrefix":{"type":"string","description":"Prefix for the name of the service account tokens created by this resource. The actual name will be stored in the computed field \u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e, which will be in the format `\u003cname_prefix\u003e-\u003cadditional_characters\u003e`.\n","willReplaceOnChanges":true},"readyForRotation":{"type":"boolean","description":"Signals that the service account token is expired or within the period to be early rotated.\n","willReplaceOnChanges":true},"secondsToLive":{"type":"integer","description":"The token expiration in seconds.\n","willReplaceOnChanges":true},"serviceAccountId":{"type":"string","description":"The ID of the service account to which the token belongs.\n","willReplaceOnChanges":true},"stackSlug":{"type":"string","willReplaceOnChanges":true}},"type":"object"}},"grafana:cloud/stackServiceAccountToken:StackServiceAccountToken":{"description":"Manages service account tokens of a Grafana Cloud stack using the Cloud API\nThis can be used to bootstrap a management service account token for a new stack\n\n* [Official documentation](https://grafana.com/docs/grafana/latest/administration/service-accounts/)\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/serviceaccount/#service-account-api)\n\nRequired access policy scopes:\n\n* stack-service-accounts:write\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst cloudSa = new grafana.cloud.StackServiceAccount(\"cloud_sa\", {\n    stackSlug: \"\u003cyour stack slug\u003e\",\n    name: \"cloud service account\",\n    role: \"Admin\",\n    isDisabled: false,\n});\nconst foo = new grafana.cloud.StackServiceAccountToken(\"foo\", {\n    stackSlug: \"\u003cyour stack slug\u003e\",\n    name: \"key_foo\",\n    serviceAccountId: cloudSa.id,\n});\nexport const serviceAccountTokenFooKey = foo.key;\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\ncloud_sa = grafana.cloud.StackServiceAccount(\"cloud_sa\",\n    stack_slug=\"\u003cyour stack slug\u003e\",\n    name=\"cloud service account\",\n    role=\"Admin\",\n    is_disabled=False)\nfoo = grafana.cloud.StackServiceAccountToken(\"foo\",\n    stack_slug=\"\u003cyour stack slug\u003e\",\n    name=\"key_foo\",\n    service_account_id=cloud_sa.id)\npulumi.export(\"serviceAccountTokenFooKey\", foo.key)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var cloudSa = new Grafana.Cloud.StackServiceAccount(\"cloud_sa\", new()\n    {\n        StackSlug = \"\u003cyour stack slug\u003e\",\n        Name = \"cloud service account\",\n        Role = \"Admin\",\n        IsDisabled = false,\n    });\n\n    var foo = new Grafana.Cloud.StackServiceAccountToken(\"foo\", new()\n    {\n        StackSlug = \"\u003cyour stack slug\u003e\",\n        Name = \"key_foo\",\n        ServiceAccountId = cloudSa.Id,\n    });\n\n    return new Dictionary\u003cstring, object?\u003e\n    {\n        [\"serviceAccountTokenFooKey\"] = foo.Key,\n    };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/cloud\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcloudSa, err := cloud.NewStackServiceAccount(ctx, \"cloud_sa\", \u0026cloud.StackServiceAccountArgs{\n\t\t\tStackSlug:  pulumi.String(\"\u003cyour stack slug\u003e\"),\n\t\t\tName:       pulumi.String(\"cloud service account\"),\n\t\t\tRole:       pulumi.String(\"Admin\"),\n\t\t\tIsDisabled: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfoo, err := cloud.NewStackServiceAccountToken(ctx, \"foo\", \u0026cloud.StackServiceAccountTokenArgs{\n\t\t\tStackSlug:        pulumi.String(\"\u003cyour stack slug\u003e\"),\n\t\t\tName:             pulumi.String(\"key_foo\"),\n\t\t\tServiceAccountId: cloudSa.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"serviceAccountTokenFooKey\", foo.Key)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.cloud.StackServiceAccount;\nimport com.pulumi.grafana.cloud.StackServiceAccountArgs;\nimport com.pulumi.grafana.cloud.StackServiceAccountToken;\nimport com.pulumi.grafana.cloud.StackServiceAccountTokenArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var cloudSa = new StackServiceAccount(\"cloudSa\", StackServiceAccountArgs.builder()\n            .stackSlug(\"\u003cyour stack slug\u003e\")\n            .name(\"cloud service account\")\n            .role(\"Admin\")\n            .isDisabled(false)\n            .build());\n\n        var foo = new StackServiceAccountToken(\"foo\", StackServiceAccountTokenArgs.builder()\n            .stackSlug(\"\u003cyour stack slug\u003e\")\n            .name(\"key_foo\")\n            .serviceAccountId(cloudSa.id())\n            .build());\n\n        ctx.export(\"serviceAccountTokenFooKey\", foo.key());\n    }\n}\n```\n```yaml\nresources:\n  cloudSa:\n    type: grafana:cloud:StackServiceAccount\n    name: cloud_sa\n    properties:\n      stackSlug: \u003cyour stack slug\u003e\n      name: cloud service account\n      role: Admin\n      isDisabled: false\n  foo:\n    type: grafana:cloud:StackServiceAccountToken\n    properties:\n      stackSlug: \u003cyour stack slug\u003e\n      name: key_foo\n      serviceAccountId: ${cloudSa.id}\noutputs:\n  serviceAccountTokenFooKey: ${foo.key}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"expiration":{"type":"string","description":"The expiration date of the service account token.\n"},"hasExpired":{"type":"boolean","description":"The status of the service account token.\n"},"key":{"type":"string","description":"The key of the service account token.\n","secret":true},"name":{"type":"string","description":"The name of the service account token.\n"},"secondsToLive":{"type":"integer","description":"The key expiration in seconds. It is optional. If it is a positive number an expiration date for the key is set. If it is null, zero or is omitted completely (unless \u003cspan pulumi-lang-nodejs=\"`apiKeyMaxSecondsToLive`\" pulumi-lang-dotnet=\"`ApiKeyMaxSecondsToLive`\" pulumi-lang-go=\"`apiKeyMaxSecondsToLive`\" pulumi-lang-python=\"`api_key_max_seconds_to_live`\" pulumi-lang-yaml=\"`apiKeyMaxSecondsToLive`\" pulumi-lang-java=\"`apiKeyMaxSecondsToLive`\"\u003e`api_key_max_seconds_to_live`\u003c/span\u003e configuration option is set) the key will never expire.\n"},"serviceAccountId":{"type":"string","description":"The ID of the service account to which the token belongs.\n"},"stackSlug":{"type":"string"}},"required":["expiration","hasExpired","key","name","serviceAccountId","stackSlug"],"inputProperties":{"name":{"type":"string","description":"The name of the service account token.\n","willReplaceOnChanges":true},"secondsToLive":{"type":"integer","description":"The key expiration in seconds. It is optional. If it is a positive number an expiration date for the key is set. If it is null, zero or is omitted completely (unless \u003cspan pulumi-lang-nodejs=\"`apiKeyMaxSecondsToLive`\" pulumi-lang-dotnet=\"`ApiKeyMaxSecondsToLive`\" pulumi-lang-go=\"`apiKeyMaxSecondsToLive`\" pulumi-lang-python=\"`api_key_max_seconds_to_live`\" pulumi-lang-yaml=\"`apiKeyMaxSecondsToLive`\" pulumi-lang-java=\"`apiKeyMaxSecondsToLive`\"\u003e`api_key_max_seconds_to_live`\u003c/span\u003e configuration option is set) the key will never expire.\n","willReplaceOnChanges":true},"serviceAccountId":{"type":"string","description":"The ID of the service account to which the token belongs.\n","willReplaceOnChanges":true},"stackSlug":{"type":"string","willReplaceOnChanges":true}},"requiredInputs":["serviceAccountId","stackSlug"],"stateInputs":{"description":"Input properties used for looking up and filtering StackServiceAccountToken resources.\n","properties":{"expiration":{"type":"string","description":"The expiration date of the service account token.\n"},"hasExpired":{"type":"boolean","description":"The status of the service account token.\n"},"key":{"type":"string","description":"The key of the service account token.\n","secret":true},"name":{"type":"string","description":"The name of the service account token.\n","willReplaceOnChanges":true},"secondsToLive":{"type":"integer","description":"The key expiration in seconds. It is optional. If it is a positive number an expiration date for the key is set. If it is null, zero or is omitted completely (unless \u003cspan pulumi-lang-nodejs=\"`apiKeyMaxSecondsToLive`\" pulumi-lang-dotnet=\"`ApiKeyMaxSecondsToLive`\" pulumi-lang-go=\"`apiKeyMaxSecondsToLive`\" pulumi-lang-python=\"`api_key_max_seconds_to_live`\" pulumi-lang-yaml=\"`apiKeyMaxSecondsToLive`\" pulumi-lang-java=\"`apiKeyMaxSecondsToLive`\"\u003e`api_key_max_seconds_to_live`\u003c/span\u003e configuration option is set) the key will never expire.\n","willReplaceOnChanges":true},"serviceAccountId":{"type":"string","description":"The ID of the service account to which the token belongs.\n","willReplaceOnChanges":true},"stackSlug":{"type":"string","willReplaceOnChanges":true}},"type":"object"}},"grafana:cloudProvider/awsAccount:AwsAccount":{"description":"## Example Usage\n\n## Import\n\n```sh\n$ pulumi import grafana:cloudProvider/awsAccount:AwsAccount name \"{{ stack_id }}:{{ resource_id }}\"\n```\n\n","properties":{"name":{"type":"string","description":"An optional human-readable name for this AWS Account resource.\n"},"regions":{"type":"array","items":{"type":"string"},"description":"A set of regions that this AWS Account resource applies to.\n"},"resourceId":{"type":"string","description":"The ID given by the Grafana Cloud Provider API to this AWS Account resource.\n"},"roleArn":{"type":"string","description":"An IAM Role ARN string to represent with this AWS Account resource.\n"},"stackId":{"type":"string"}},"required":["name","regions","resourceId","roleArn","stackId"],"inputProperties":{"name":{"type":"string","description":"An optional human-readable name for this AWS Account resource.\n"},"regions":{"type":"array","items":{"type":"string"},"description":"A set of regions that this AWS Account resource applies to.\n"},"roleArn":{"type":"string","description":"An IAM Role ARN string to represent with this AWS Account resource.\n"},"stackId":{"type":"string"}},"requiredInputs":["regions","roleArn","stackId"],"stateInputs":{"description":"Input properties used for looking up and filtering AwsAccount resources.\n","properties":{"name":{"type":"string","description":"An optional human-readable name for this AWS Account resource.\n"},"regions":{"type":"array","items":{"type":"string"},"description":"A set of regions that this AWS Account resource applies to.\n"},"resourceId":{"type":"string","description":"The ID given by the Grafana Cloud Provider API to this AWS Account resource.\n"},"roleArn":{"type":"string","description":"An IAM Role ARN string to represent with this AWS Account resource.\n"},"stackId":{"type":"string"}},"type":"object"}},"grafana:cloudProvider/awsCloudwatchScrapeJob:AwsCloudwatchScrapeJob":{"description":"## Example Usage\n\n## Import\n\n```sh\n$ pulumi import grafana:cloudProvider/awsCloudwatchScrapeJob:AwsCloudwatchScrapeJob name \"{{ stack_id }}:{{ name }}\"\n```\n\n","properties":{"awsAccountResourceId":{"type":"string","description":"The ID assigned by the Grafana Cloud Provider API to an AWS Account resource that should be associated with this CloudWatch Scrape Job. This can be provided by the \u003cspan pulumi-lang-nodejs=\"`resourceId`\" pulumi-lang-dotnet=\"`ResourceId`\" pulumi-lang-go=\"`resourceId`\" pulumi-lang-python=\"`resource_id`\" pulumi-lang-yaml=\"`resourceId`\" pulumi-lang-java=\"`resourceId`\"\u003e`resource_id`\u003c/span\u003e attribute of the \u003cspan pulumi-lang-nodejs=\"`grafana.cloudProvider.AwsAccount`\" pulumi-lang-dotnet=\"`grafana.cloudProvider.AwsAccount`\" pulumi-lang-go=\"`cloudProvider.AwsAccount`\" pulumi-lang-python=\"`cloudProvider.AwsAccount`\" pulumi-lang-yaml=\"`grafana.cloudProvider.AwsAccount`\" pulumi-lang-java=\"`grafana.cloudProvider.AwsAccount`\"\u003e`grafana.cloudProvider.AwsAccount`\u003c/span\u003e resource.\n"},"customNamespaces":{"type":"array","items":{"$ref":"#/types/grafana:cloudProvider/AwsCloudwatchScrapeJobCustomNamespace:AwsCloudwatchScrapeJobCustomNamespace"},"description":"Zero or more configuration blocks to configure custom namespaces for the AWS CloudWatch Scrape Job to scrape. Each block must have a distinct \u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e attribute. When accessing this as an attribute reference, it is a list of objects.\n"},"disabledReason":{"type":"string","description":"When the AWS CloudWatch Scrape Job is disabled, this will show the reason that it is in that state.\n"},"enabled":{"type":"boolean","description":"Whether the AWS CloudWatch Scrape Job is enabled or not. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"exportTags":{"type":"boolean","description":"When enabled, AWS resource tags are exported as Prometheus labels to metrics formatted as `aws_\u003cservice_name\u003e_info`. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"name":{"type":"string"},"regionsSubsetOverrides":{"type":"array","items":{"type":"string"},"description":"A subset of the regions that are configured in the associated AWS Account resource to apply to this scrape job. If not set or empty, all of the Account resource's regions are scraped.\n"},"services":{"type":"array","items":{"$ref":"#/types/grafana:cloudProvider/AwsCloudwatchScrapeJobService:AwsCloudwatchScrapeJobService"},"description":"One or more configuration blocks to configure AWS services for the AWS CloudWatch Scrape Job to scrape. Each block must have a distinct \u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e attribute. When accessing this as an attribute reference, it is a list of objects.\n"},"stackId":{"type":"string"},"staticLabels":{"type":"object","additionalProperties":{"type":"string"},"description":"A set of static labels to add to all metrics exported by this scrape job.\n"}},"required":["awsAccountResourceId","disabledReason","enabled","exportTags","name","regionsSubsetOverrides","stackId","staticLabels"],"inputProperties":{"awsAccountResourceId":{"type":"string","description":"The ID assigned by the Grafana Cloud Provider API to an AWS Account resource that should be associated with this CloudWatch Scrape Job. This can be provided by the \u003cspan pulumi-lang-nodejs=\"`resourceId`\" pulumi-lang-dotnet=\"`ResourceId`\" pulumi-lang-go=\"`resourceId`\" pulumi-lang-python=\"`resource_id`\" pulumi-lang-yaml=\"`resourceId`\" pulumi-lang-java=\"`resourceId`\"\u003e`resource_id`\u003c/span\u003e attribute of the \u003cspan pulumi-lang-nodejs=\"`grafana.cloudProvider.AwsAccount`\" pulumi-lang-dotnet=\"`grafana.cloudProvider.AwsAccount`\" pulumi-lang-go=\"`cloudProvider.AwsAccount`\" pulumi-lang-python=\"`cloudProvider.AwsAccount`\" pulumi-lang-yaml=\"`grafana.cloudProvider.AwsAccount`\" pulumi-lang-java=\"`grafana.cloudProvider.AwsAccount`\"\u003e`grafana.cloudProvider.AwsAccount`\u003c/span\u003e resource.\n"},"customNamespaces":{"type":"array","items":{"$ref":"#/types/grafana:cloudProvider/AwsCloudwatchScrapeJobCustomNamespace:AwsCloudwatchScrapeJobCustomNamespace"},"description":"Zero or more configuration blocks to configure custom namespaces for the AWS CloudWatch Scrape Job to scrape. Each block must have a distinct \u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e attribute. When accessing this as an attribute reference, it is a list of objects.\n"},"enabled":{"type":"boolean","description":"Whether the AWS CloudWatch Scrape Job is enabled or not. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"exportTags":{"type":"boolean","description":"When enabled, AWS resource tags are exported as Prometheus labels to metrics formatted as `aws_\u003cservice_name\u003e_info`. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"name":{"type":"string"},"regionsSubsetOverrides":{"type":"array","items":{"type":"string"},"description":"A subset of the regions that are configured in the associated AWS Account resource to apply to this scrape job. If not set or empty, all of the Account resource's regions are scraped.\n"},"services":{"type":"array","items":{"$ref":"#/types/grafana:cloudProvider/AwsCloudwatchScrapeJobService:AwsCloudwatchScrapeJobService"},"description":"One or more configuration blocks to configure AWS services for the AWS CloudWatch Scrape Job to scrape. Each block must have a distinct \u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e attribute. When accessing this as an attribute reference, it is a list of objects.\n"},"stackId":{"type":"string"},"staticLabels":{"type":"object","additionalProperties":{"type":"string"},"description":"A set of static labels to add to all metrics exported by this scrape job.\n"}},"requiredInputs":["awsAccountResourceId","stackId"],"stateInputs":{"description":"Input properties used for looking up and filtering AwsCloudwatchScrapeJob resources.\n","properties":{"awsAccountResourceId":{"type":"string","description":"The ID assigned by the Grafana Cloud Provider API to an AWS Account resource that should be associated with this CloudWatch Scrape Job. This can be provided by the \u003cspan pulumi-lang-nodejs=\"`resourceId`\" pulumi-lang-dotnet=\"`ResourceId`\" pulumi-lang-go=\"`resourceId`\" pulumi-lang-python=\"`resource_id`\" pulumi-lang-yaml=\"`resourceId`\" pulumi-lang-java=\"`resourceId`\"\u003e`resource_id`\u003c/span\u003e attribute of the \u003cspan pulumi-lang-nodejs=\"`grafana.cloudProvider.AwsAccount`\" pulumi-lang-dotnet=\"`grafana.cloudProvider.AwsAccount`\" pulumi-lang-go=\"`cloudProvider.AwsAccount`\" pulumi-lang-python=\"`cloudProvider.AwsAccount`\" pulumi-lang-yaml=\"`grafana.cloudProvider.AwsAccount`\" pulumi-lang-java=\"`grafana.cloudProvider.AwsAccount`\"\u003e`grafana.cloudProvider.AwsAccount`\u003c/span\u003e resource.\n"},"customNamespaces":{"type":"array","items":{"$ref":"#/types/grafana:cloudProvider/AwsCloudwatchScrapeJobCustomNamespace:AwsCloudwatchScrapeJobCustomNamespace"},"description":"Zero or more configuration blocks to configure custom namespaces for the AWS CloudWatch Scrape Job to scrape. Each block must have a distinct \u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e attribute. When accessing this as an attribute reference, it is a list of objects.\n"},"disabledReason":{"type":"string","description":"When the AWS CloudWatch Scrape Job is disabled, this will show the reason that it is in that state.\n"},"enabled":{"type":"boolean","description":"Whether the AWS CloudWatch Scrape Job is enabled or not. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"exportTags":{"type":"boolean","description":"When enabled, AWS resource tags are exported as Prometheus labels to metrics formatted as `aws_\u003cservice_name\u003e_info`. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"name":{"type":"string"},"regionsSubsetOverrides":{"type":"array","items":{"type":"string"},"description":"A subset of the regions that are configured in the associated AWS Account resource to apply to this scrape job. If not set or empty, all of the Account resource's regions are scraped.\n"},"services":{"type":"array","items":{"$ref":"#/types/grafana:cloudProvider/AwsCloudwatchScrapeJobService:AwsCloudwatchScrapeJobService"},"description":"One or more configuration blocks to configure AWS services for the AWS CloudWatch Scrape Job to scrape. Each block must have a distinct \u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e attribute. When accessing this as an attribute reference, it is a list of objects.\n"},"stackId":{"type":"string"},"staticLabels":{"type":"object","additionalProperties":{"type":"string"},"description":"A set of static labels to add to all metrics exported by this scrape job.\n"}},"type":"object"}},"grafana:cloudProvider/awsResourceMetadataScrapeJob:AwsResourceMetadataScrapeJob":{"description":"## Example Usage\n\n## Import\n\n```sh\n$ pulumi import grafana:cloudProvider/awsResourceMetadataScrapeJob:AwsResourceMetadataScrapeJob name \"{{ stack_id }}:{{ name }}\"\n```\n\n","properties":{"awsAccountResourceId":{"type":"string","description":"The ID assigned by the Grafana Cloud Provider API to an AWS Account resource that should be associated with this Resource Metadata Scrape Job. This can be provided by the \u003cspan pulumi-lang-nodejs=\"`resourceId`\" pulumi-lang-dotnet=\"`ResourceId`\" pulumi-lang-go=\"`resourceId`\" pulumi-lang-python=\"`resource_id`\" pulumi-lang-yaml=\"`resourceId`\" pulumi-lang-java=\"`resourceId`\"\u003e`resource_id`\u003c/span\u003e attribute of the \u003cspan pulumi-lang-nodejs=\"`grafana.cloudProvider.AwsAccount`\" pulumi-lang-dotnet=\"`grafana.cloudProvider.AwsAccount`\" pulumi-lang-go=\"`cloudProvider.AwsAccount`\" pulumi-lang-python=\"`cloudProvider.AwsAccount`\" pulumi-lang-yaml=\"`grafana.cloudProvider.AwsAccount`\" pulumi-lang-java=\"`grafana.cloudProvider.AwsAccount`\"\u003e`grafana.cloudProvider.AwsAccount`\u003c/span\u003e resource.\n"},"disabledReason":{"type":"string","description":"When the AWS Resource Metadata Scrape Job is disabled, this will show the reason that it is in that state.\n"},"enabled":{"type":"boolean","description":"Whether the AWS Resource Metadata Scrape Job is enabled or not. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"name":{"type":"string"},"regionsSubsetOverrides":{"type":"array","items":{"type":"string"},"description":"A subset of the regions that are configured in the associated AWS Account resource to apply to this scrape job. If not set or empty, all of the Account resource's regions are scraped.\n"},"services":{"type":"array","items":{"$ref":"#/types/grafana:cloudProvider/AwsResourceMetadataScrapeJobService:AwsResourceMetadataScrapeJobService"},"description":"One or more configuration blocks to configure AWS services for the Resource Metadata Scrape Job to scrape. Each block must have a distinct \u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e attribute. When accessing this as an attribute reference, it is a list of objects.\n"},"stackId":{"type":"string"},"staticLabels":{"type":"object","additionalProperties":{"type":"string"},"description":"A set of static labels to add to all metrics exported by this scrape job.\n"}},"required":["awsAccountResourceId","disabledReason","enabled","name","regionsSubsetOverrides","stackId","staticLabels"],"inputProperties":{"awsAccountResourceId":{"type":"string","description":"The ID assigned by the Grafana Cloud Provider API to an AWS Account resource that should be associated with this Resource Metadata Scrape Job. This can be provided by the \u003cspan pulumi-lang-nodejs=\"`resourceId`\" pulumi-lang-dotnet=\"`ResourceId`\" pulumi-lang-go=\"`resourceId`\" pulumi-lang-python=\"`resource_id`\" pulumi-lang-yaml=\"`resourceId`\" pulumi-lang-java=\"`resourceId`\"\u003e`resource_id`\u003c/span\u003e attribute of the \u003cspan pulumi-lang-nodejs=\"`grafana.cloudProvider.AwsAccount`\" pulumi-lang-dotnet=\"`grafana.cloudProvider.AwsAccount`\" pulumi-lang-go=\"`cloudProvider.AwsAccount`\" pulumi-lang-python=\"`cloudProvider.AwsAccount`\" pulumi-lang-yaml=\"`grafana.cloudProvider.AwsAccount`\" pulumi-lang-java=\"`grafana.cloudProvider.AwsAccount`\"\u003e`grafana.cloudProvider.AwsAccount`\u003c/span\u003e resource.\n"},"enabled":{"type":"boolean","description":"Whether the AWS Resource Metadata Scrape Job is enabled or not. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"name":{"type":"string"},"regionsSubsetOverrides":{"type":"array","items":{"type":"string"},"description":"A subset of the regions that are configured in the associated AWS Account resource to apply to this scrape job. If not set or empty, all of the Account resource's regions are scraped.\n"},"services":{"type":"array","items":{"$ref":"#/types/grafana:cloudProvider/AwsResourceMetadataScrapeJobService:AwsResourceMetadataScrapeJobService"},"description":"One or more configuration blocks to configure AWS services for the Resource Metadata Scrape Job to scrape. Each block must have a distinct \u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e attribute. When accessing this as an attribute reference, it is a list of objects.\n"},"stackId":{"type":"string"},"staticLabels":{"type":"object","additionalProperties":{"type":"string"},"description":"A set of static labels to add to all metrics exported by this scrape job.\n"}},"requiredInputs":["awsAccountResourceId","stackId"],"stateInputs":{"description":"Input properties used for looking up and filtering AwsResourceMetadataScrapeJob resources.\n","properties":{"awsAccountResourceId":{"type":"string","description":"The ID assigned by the Grafana Cloud Provider API to an AWS Account resource that should be associated with this Resource Metadata Scrape Job. This can be provided by the \u003cspan pulumi-lang-nodejs=\"`resourceId`\" pulumi-lang-dotnet=\"`ResourceId`\" pulumi-lang-go=\"`resourceId`\" pulumi-lang-python=\"`resource_id`\" pulumi-lang-yaml=\"`resourceId`\" pulumi-lang-java=\"`resourceId`\"\u003e`resource_id`\u003c/span\u003e attribute of the \u003cspan pulumi-lang-nodejs=\"`grafana.cloudProvider.AwsAccount`\" pulumi-lang-dotnet=\"`grafana.cloudProvider.AwsAccount`\" pulumi-lang-go=\"`cloudProvider.AwsAccount`\" pulumi-lang-python=\"`cloudProvider.AwsAccount`\" pulumi-lang-yaml=\"`grafana.cloudProvider.AwsAccount`\" pulumi-lang-java=\"`grafana.cloudProvider.AwsAccount`\"\u003e`grafana.cloudProvider.AwsAccount`\u003c/span\u003e resource.\n"},"disabledReason":{"type":"string","description":"When the AWS Resource Metadata Scrape Job is disabled, this will show the reason that it is in that state.\n"},"enabled":{"type":"boolean","description":"Whether the AWS Resource Metadata Scrape Job is enabled or not. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"name":{"type":"string"},"regionsSubsetOverrides":{"type":"array","items":{"type":"string"},"description":"A subset of the regions that are configured in the associated AWS Account resource to apply to this scrape job. If not set or empty, all of the Account resource's regions are scraped.\n"},"services":{"type":"array","items":{"$ref":"#/types/grafana:cloudProvider/AwsResourceMetadataScrapeJobService:AwsResourceMetadataScrapeJobService"},"description":"One or more configuration blocks to configure AWS services for the Resource Metadata Scrape Job to scrape. Each block must have a distinct \u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e attribute. When accessing this as an attribute reference, it is a list of objects.\n"},"stackId":{"type":"string"},"staticLabels":{"type":"object","additionalProperties":{"type":"string"},"description":"A set of static labels to add to all metrics exported by this scrape job.\n"}},"type":"object"}},"grafana:cloudProvider/azureCredential:AzureCredential":{"description":"## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst test = new grafana.cloudprovider.AzureCredential(\"test\", {\n    stackId: \"1\",\n    name: \"test-name\",\n    clientId: \"my-client-id\",\n    clientSecret: \"my-client-secret\",\n    tenantId: \"my-tenant-id\",\n    resourceTagsToAddToMetrics: [\n        \"tag1\",\n        \"tag2\",\n    ],\n    resourceDiscoveryTagFilters: [\n        {\n            key: \"key-1\",\n            value: \"value-1\",\n        },\n        {\n            key: \"key-2\",\n            value: \"value-2\",\n        },\n    ],\n    autoDiscoveryConfigurations: [{\n        subscriptionId: \"my-subscription_id\",\n        resourceTypeConfigurations: [\n            {\n                resourceTypeName: \"Microsoft.App/containerApps\",\n                metricConfiguration: [{\n                    name: \"TotalCoresQuotaUsed\",\n                }],\n            },\n            {\n                resourceTypeName: \"Microsoft.Storage/storageAccounts/tableServices\",\n                metricConfiguration: [{\n                    name: \"Availability\",\n                    dimensions: [\n                        \"GeoType\",\n                        \"ApiName\",\n                    ],\n                    aggregations: [\"Average\"],\n                }],\n            },\n        ],\n    }],\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\ntest = grafana.cloudprovider.AzureCredential(\"test\",\n    stack_id=\"1\",\n    name=\"test-name\",\n    client_id=\"my-client-id\",\n    client_secret=\"my-client-secret\",\n    tenant_id=\"my-tenant-id\",\n    resource_tags_to_add_to_metrics=[\n        \"tag1\",\n        \"tag2\",\n    ],\n    resource_discovery_tag_filters=[\n        {\n            \"key\": \"key-1\",\n            \"value\": \"value-1\",\n        },\n        {\n            \"key\": \"key-2\",\n            \"value\": \"value-2\",\n        },\n    ],\n    auto_discovery_configurations=[{\n        \"subscription_id\": \"my-subscription_id\",\n        \"resource_type_configurations\": [\n            {\n                \"resource_type_name\": \"Microsoft.App/containerApps\",\n                \"metric_configuration\": [{\n                    \"name\": \"TotalCoresQuotaUsed\",\n                }],\n            },\n            {\n                \"resource_type_name\": \"Microsoft.Storage/storageAccounts/tableServices\",\n                \"metric_configuration\": [{\n                    \"name\": \"Availability\",\n                    \"dimensions\": [\n                        \"GeoType\",\n                        \"ApiName\",\n                    ],\n                    \"aggregations\": [\"Average\"],\n                }],\n            },\n        ],\n    }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var test = new Grafana.CloudProvider.AzureCredential(\"test\", new()\n    {\n        StackId = \"1\",\n        Name = \"test-name\",\n        ClientId = \"my-client-id\",\n        ClientSecret = \"my-client-secret\",\n        TenantId = \"my-tenant-id\",\n        ResourceTagsToAddToMetrics = new[]\n        {\n            \"tag1\",\n            \"tag2\",\n        },\n        ResourceDiscoveryTagFilters = new[]\n        {\n            new Grafana.CloudProvider.Inputs.AzureCredentialResourceDiscoveryTagFilterArgs\n            {\n                Key = \"key-1\",\n                Value = \"value-1\",\n            },\n            new Grafana.CloudProvider.Inputs.AzureCredentialResourceDiscoveryTagFilterArgs\n            {\n                Key = \"key-2\",\n                Value = \"value-2\",\n            },\n        },\n        AutoDiscoveryConfigurations = new[]\n        {\n            new Grafana.CloudProvider.Inputs.AzureCredentialAutoDiscoveryConfigurationArgs\n            {\n                SubscriptionId = \"my-subscription_id\",\n                ResourceTypeConfigurations = new[]\n                {\n                    new Grafana.CloudProvider.Inputs.AzureCredentialAutoDiscoveryConfigurationResourceTypeConfigurationArgs\n                    {\n                        ResourceTypeName = \"Microsoft.App/containerApps\",\n                        MetricConfiguration = new[]\n                        {\n                            \n                            {\n                                { \"name\", \"TotalCoresQuotaUsed\" },\n                            },\n                        },\n                    },\n                    new Grafana.CloudProvider.Inputs.AzureCredentialAutoDiscoveryConfigurationResourceTypeConfigurationArgs\n                    {\n                        ResourceTypeName = \"Microsoft.Storage/storageAccounts/tableServices\",\n                        MetricConfiguration = new[]\n                        {\n                            \n                            {\n                                { \"name\", \"Availability\" },\n                                { \"dimensions\", new[]\n                                {\n                                    \"GeoType\",\n                                    \"ApiName\",\n                                } },\n                                { \"aggregations\", new[]\n                                {\n                                    \"Average\",\n                                } },\n                            },\n                        },\n                    },\n                },\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/cloudprovider\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudprovider.NewAzureCredential(ctx, \"test\", \u0026cloudprovider.AzureCredentialArgs{\n\t\t\tStackId:      pulumi.String(\"1\"),\n\t\t\tName:         pulumi.String(\"test-name\"),\n\t\t\tClientId:     pulumi.String(\"my-client-id\"),\n\t\t\tClientSecret: pulumi.String(\"my-client-secret\"),\n\t\t\tTenantId:     pulumi.String(\"my-tenant-id\"),\n\t\t\tResourceTagsToAddToMetrics: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"tag1\"),\n\t\t\t\tpulumi.String(\"tag2\"),\n\t\t\t},\n\t\t\tResourceDiscoveryTagFilters: cloudprovider.AzureCredentialResourceDiscoveryTagFilterArray{\n\t\t\t\t\u0026cloudprovider.AzureCredentialResourceDiscoveryTagFilterArgs{\n\t\t\t\t\tKey:   pulumi.String(\"key-1\"),\n\t\t\t\t\tValue: pulumi.String(\"value-1\"),\n\t\t\t\t},\n\t\t\t\t\u0026cloudprovider.AzureCredentialResourceDiscoveryTagFilterArgs{\n\t\t\t\t\tKey:   pulumi.String(\"key-2\"),\n\t\t\t\t\tValue: pulumi.String(\"value-2\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tAutoDiscoveryConfigurations: cloudprovider.AzureCredentialAutoDiscoveryConfigurationArray{\n\t\t\t\t\u0026cloudprovider.AzureCredentialAutoDiscoveryConfigurationArgs{\n\t\t\t\t\tSubscriptionId: pulumi.String(\"my-subscription_id\"),\n\t\t\t\t\tResourceTypeConfigurations: cloudprovider.AzureCredentialAutoDiscoveryConfigurationResourceTypeConfigurationArray{\n\t\t\t\t\t\t\u0026cloudprovider.AzureCredentialAutoDiscoveryConfigurationResourceTypeConfigurationArgs{\n\t\t\t\t\t\t\tResourceTypeName: pulumi.String(\"Microsoft.App/containerApps\"),\n\t\t\t\t\t\t\tMetricConfiguration: []map[string]interface{}{\n\t\t\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\t\t\"name\": \"TotalCoresQuotaUsed\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026cloudprovider.AzureCredentialAutoDiscoveryConfigurationResourceTypeConfigurationArgs{\n\t\t\t\t\t\t\tResourceTypeName: pulumi.String(\"Microsoft.Storage/storageAccounts/tableServices\"),\n\t\t\t\t\t\t\tMetricConfiguration: []map[string]interface{}{\n\t\t\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\t\t\"name\": \"Availability\",\n\t\t\t\t\t\t\t\t\t\"dimensions\": []string{\n\t\t\t\t\t\t\t\t\t\t\"GeoType\",\n\t\t\t\t\t\t\t\t\t\t\"ApiName\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"aggregations\": []string{\n\t\t\t\t\t\t\t\t\t\t\"Average\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.cloudProvider.AzureCredential;\nimport com.pulumi.grafana.cloudProvider.AzureCredentialArgs;\nimport com.pulumi.grafana.cloudProvider.inputs.AzureCredentialResourceDiscoveryTagFilterArgs;\nimport com.pulumi.grafana.cloudProvider.inputs.AzureCredentialAutoDiscoveryConfigurationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var test = new AzureCredential(\"test\", AzureCredentialArgs.builder()\n            .stackId(\"1\")\n            .name(\"test-name\")\n            .clientId(\"my-client-id\")\n            .clientSecret(\"my-client-secret\")\n            .tenantId(\"my-tenant-id\")\n            .resourceTagsToAddToMetrics(            \n                \"tag1\",\n                \"tag2\")\n            .resourceDiscoveryTagFilters(            \n                AzureCredentialResourceDiscoveryTagFilterArgs.builder()\n                    .key(\"key-1\")\n                    .value(\"value-1\")\n                    .build(),\n                AzureCredentialResourceDiscoveryTagFilterArgs.builder()\n                    .key(\"key-2\")\n                    .value(\"value-2\")\n                    .build())\n            .autoDiscoveryConfigurations(AzureCredentialAutoDiscoveryConfigurationArgs.builder()\n                .subscriptionId(\"my-subscription_id\")\n                .resourceTypeConfigurations(                \n                    AzureCredentialAutoDiscoveryConfigurationResourceTypeConfigurationArgs.builder()\n                        .resourceTypeName(\"Microsoft.App/containerApps\")\n                        .metricConfiguration(List.of(Map.of(\"name\", \"TotalCoresQuotaUsed\")))\n                        .build(),\n                    AzureCredentialAutoDiscoveryConfigurationResourceTypeConfigurationArgs.builder()\n                        .resourceTypeName(\"Microsoft.Storage/storageAccounts/tableServices\")\n                        .metricConfiguration(List.of(Map.ofEntries(\n                            Map.entry(\"name\", \"Availability\"),\n                            Map.entry(\"dimensions\", List.of(                            \n                                \"GeoType\",\n                                \"ApiName\")),\n                            Map.entry(\"aggregations\", List.of(\"Average\"))\n                        )))\n                        .build())\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  test:\n    type: grafana:cloudProvider:AzureCredential\n    properties:\n      stackId: '1'\n      name: test-name\n      clientId: my-client-id\n      clientSecret: my-client-secret\n      tenantId: my-tenant-id\n      resourceTagsToAddToMetrics:\n        - tag1\n        - tag2\n      resourceDiscoveryTagFilters:\n        - key: key-1\n          value: value-1\n        - key: key-2\n          value: value-2\n      autoDiscoveryConfigurations:\n        - subscriptionId: my-subscription_id\n          resourceTypeConfigurations:\n            - resourceTypeName: Microsoft.App/containerApps\n              metricConfiguration:\n                - name: TotalCoresQuotaUsed\n            - resourceTypeName: Microsoft.Storage/storageAccounts/tableServices\n              metricConfiguration:\n                - name: Availability\n                  dimensions:\n                    - GeoType\n                    - ApiName\n                  aggregations:\n                    - Average\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:cloudProvider/azureCredential:AzureCredential name \"{{ stack_id }}:{{ resource_id }}\"\n```\n\n","properties":{"autoDiscoveryConfigurations":{"type":"array","items":{"$ref":"#/types/grafana:cloudProvider/AzureCredentialAutoDiscoveryConfiguration:AzureCredentialAutoDiscoveryConfiguration"},"description":"The list of auto discovery configurations.\n"},"clientId":{"type":"string","description":"The client ID of the Azure Credential.\n"},"clientSecret":{"type":"string","description":"The client secret of the Azure Credential.\n","secret":true},"name":{"type":"string","description":"The name of the Azure Credential.\n"},"resourceDiscoveryTagFilters":{"type":"array","items":{"$ref":"#/types/grafana:cloudProvider/AzureCredentialResourceDiscoveryTagFilter:AzureCredentialResourceDiscoveryTagFilter"},"description":"The list of tag filters to apply to resources.\n"},"resourceId":{"type":"string","description":"The ID given by the Grafana Cloud Provider API to this Azure Credential resource.\n"},"resourceTagsToAddToMetrics":{"type":"array","items":{"type":"string"},"description":"The list of resource tags to add to metrics.\n"},"stackId":{"type":"string"},"tenantId":{"type":"string","description":"The tenant ID of the Azure Credential.\n"}},"required":["clientId","clientSecret","name","resourceId","stackId","tenantId"],"inputProperties":{"autoDiscoveryConfigurations":{"type":"array","items":{"$ref":"#/types/grafana:cloudProvider/AzureCredentialAutoDiscoveryConfiguration:AzureCredentialAutoDiscoveryConfiguration"},"description":"The list of auto discovery configurations.\n"},"clientId":{"type":"string","description":"The client ID of the Azure Credential.\n"},"clientSecret":{"type":"string","description":"The client secret of the Azure Credential.\n","secret":true},"name":{"type":"string","description":"The name of the Azure Credential.\n"},"resourceDiscoveryTagFilters":{"type":"array","items":{"$ref":"#/types/grafana:cloudProvider/AzureCredentialResourceDiscoveryTagFilter:AzureCredentialResourceDiscoveryTagFilter"},"description":"The list of tag filters to apply to resources.\n"},"resourceTagsToAddToMetrics":{"type":"array","items":{"type":"string"},"description":"The list of resource tags to add to metrics.\n"},"stackId":{"type":"string"},"tenantId":{"type":"string","description":"The tenant ID of the Azure Credential.\n"}},"requiredInputs":["clientId","clientSecret","stackId","tenantId"],"stateInputs":{"description":"Input properties used for looking up and filtering AzureCredential resources.\n","properties":{"autoDiscoveryConfigurations":{"type":"array","items":{"$ref":"#/types/grafana:cloudProvider/AzureCredentialAutoDiscoveryConfiguration:AzureCredentialAutoDiscoveryConfiguration"},"description":"The list of auto discovery configurations.\n"},"clientId":{"type":"string","description":"The client ID of the Azure Credential.\n"},"clientSecret":{"type":"string","description":"The client secret of the Azure Credential.\n","secret":true},"name":{"type":"string","description":"The name of the Azure Credential.\n"},"resourceDiscoveryTagFilters":{"type":"array","items":{"$ref":"#/types/grafana:cloudProvider/AzureCredentialResourceDiscoveryTagFilter:AzureCredentialResourceDiscoveryTagFilter"},"description":"The list of tag filters to apply to resources.\n"},"resourceId":{"type":"string","description":"The ID given by the Grafana Cloud Provider API to this Azure Credential resource.\n"},"resourceTagsToAddToMetrics":{"type":"array","items":{"type":"string"},"description":"The list of resource tags to add to metrics.\n"},"stackId":{"type":"string"},"tenantId":{"type":"string","description":"The tenant ID of the Azure Credential.\n"}},"type":"object"}},"grafana:connections/metricsEndpointScrapeJob:MetricsEndpointScrapeJob":{"description":"## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst test = new grafana.connections.MetricsEndpointScrapeJob(\"test\", {\n    stackId: \"1\",\n    name: \"my-scrape-job\",\n    enabled: true,\n    authenticationMethod: \"basic\",\n    authenticationBasicUsername: \"my-username\",\n    authenticationBasicPassword: \"my-password\",\n    url: \"https://grafana.com/metrics\",\n    scrapeIntervalSeconds: 120,\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\ntest = grafana.connections.MetricsEndpointScrapeJob(\"test\",\n    stack_id=\"1\",\n    name=\"my-scrape-job\",\n    enabled=True,\n    authentication_method=\"basic\",\n    authentication_basic_username=\"my-username\",\n    authentication_basic_password=\"my-password\",\n    url=\"https://grafana.com/metrics\",\n    scrape_interval_seconds=120)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var test = new Grafana.Connections.MetricsEndpointScrapeJob(\"test\", new()\n    {\n        StackId = \"1\",\n        Name = \"my-scrape-job\",\n        Enabled = true,\n        AuthenticationMethod = \"basic\",\n        AuthenticationBasicUsername = \"my-username\",\n        AuthenticationBasicPassword = \"my-password\",\n        Url = \"https://grafana.com/metrics\",\n        ScrapeIntervalSeconds = 120,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/connections\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := connections.NewMetricsEndpointScrapeJob(ctx, \"test\", \u0026connections.MetricsEndpointScrapeJobArgs{\n\t\t\tStackId:                     pulumi.String(\"1\"),\n\t\t\tName:                        pulumi.String(\"my-scrape-job\"),\n\t\t\tEnabled:                     pulumi.Bool(true),\n\t\t\tAuthenticationMethod:        pulumi.String(\"basic\"),\n\t\t\tAuthenticationBasicUsername: pulumi.String(\"my-username\"),\n\t\t\tAuthenticationBasicPassword: pulumi.String(\"my-password\"),\n\t\t\tUrl:                         pulumi.String(\"https://grafana.com/metrics\"),\n\t\t\tScrapeIntervalSeconds:       pulumi.Int(120),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.connections.MetricsEndpointScrapeJob;\nimport com.pulumi.grafana.connections.MetricsEndpointScrapeJobArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var test = new MetricsEndpointScrapeJob(\"test\", MetricsEndpointScrapeJobArgs.builder()\n            .stackId(\"1\")\n            .name(\"my-scrape-job\")\n            .enabled(true)\n            .authenticationMethod(\"basic\")\n            .authenticationBasicUsername(\"my-username\")\n            .authenticationBasicPassword(\"my-password\")\n            .url(\"https://grafana.com/metrics\")\n            .scrapeIntervalSeconds(120)\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  test:\n    type: grafana:connections:MetricsEndpointScrapeJob\n    properties:\n      stackId: '1'\n      name: my-scrape-job\n      enabled: true\n      authenticationMethod: basic\n      authenticationBasicUsername: my-username\n      authenticationBasicPassword: my-password\n      url: https://grafana.com/metrics\n      scrapeIntervalSeconds: 120\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:connections/metricsEndpointScrapeJob:MetricsEndpointScrapeJob name \"{{ stack_id }}:{{ name }}\"\n```\n\n","properties":{"authenticationBasicPassword":{"type":"string","description":"Password for basic authentication, use if scrape job is using basic authentication method\n","secret":true},"authenticationBasicUsername":{"type":"string","description":"Username for basic authentication, use if scrape job is using basic authentication method\n"},"authenticationBearerToken":{"type":"string","description":"Bearer token used for authentication, use if scrape job is using bearer authentication method\n","secret":true},"authenticationMethod":{"type":"string","description":"Method to pass authentication credentials: basic or bearer.\n"},"enabled":{"type":"boolean","description":"Whether the metrics endpoint scrape job is enabled or not.\n"},"name":{"type":"string"},"scrapeIntervalSeconds":{"type":"integer","description":"Frequency for scraping the metrics endpoint: 30, 60, or 120 seconds.\n"},"stackId":{"type":"string"},"url":{"type":"string","description":"The url to scrape metrics from; a valid HTTPs URL is required.\n"}},"required":["authenticationMethod","enabled","name","scrapeIntervalSeconds","stackId","url"],"inputProperties":{"authenticationBasicPassword":{"type":"string","description":"Password for basic authentication, use if scrape job is using basic authentication method\n","secret":true},"authenticationBasicUsername":{"type":"string","description":"Username for basic authentication, use if scrape job is using basic authentication method\n"},"authenticationBearerToken":{"type":"string","description":"Bearer token used for authentication, use if scrape job is using bearer authentication method\n","secret":true},"authenticationMethod":{"type":"string","description":"Method to pass authentication credentials: basic or bearer.\n"},"enabled":{"type":"boolean","description":"Whether the metrics endpoint scrape job is enabled or not.\n"},"name":{"type":"string"},"scrapeIntervalSeconds":{"type":"integer","description":"Frequency for scraping the metrics endpoint: 30, 60, or 120 seconds.\n"},"stackId":{"type":"string"},"url":{"type":"string","description":"The url to scrape metrics from; a valid HTTPs URL is required.\n"}},"requiredInputs":["authenticationMethod","stackId","url"],"stateInputs":{"description":"Input properties used for looking up and filtering MetricsEndpointScrapeJob resources.\n","properties":{"authenticationBasicPassword":{"type":"string","description":"Password for basic authentication, use if scrape job is using basic authentication method\n","secret":true},"authenticationBasicUsername":{"type":"string","description":"Username for basic authentication, use if scrape job is using basic authentication method\n"},"authenticationBearerToken":{"type":"string","description":"Bearer token used for authentication, use if scrape job is using bearer authentication method\n","secret":true},"authenticationMethod":{"type":"string","description":"Method to pass authentication credentials: basic or bearer.\n"},"enabled":{"type":"boolean","description":"Whether the metrics endpoint scrape job is enabled or not.\n"},"name":{"type":"string"},"scrapeIntervalSeconds":{"type":"integer","description":"Frequency for scraping the metrics endpoint: 30, 60, or 120 seconds.\n"},"stackId":{"type":"string"},"url":{"type":"string","description":"The url to scrape metrics from; a valid HTTPs URL is required.\n"}},"type":"object"}},"grafana:enterprise/dataSourceConfigLbacRules:DataSourceConfigLbacRules":{"description":"Manages LBAC rules for a data source.\n\n!\u003e Warning: The resource is experimental and will be subject to change. This resource manages the entire LBAC rules tree, and will overwrite any existing rules.\n\n* [Official documentation](https://grafana.com/docs/grafana/latest/administration/data-source-management/teamlbac/)\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/datasource_lbac_rules/)\n\nThis resource requires Grafana \u003e=11.5.0.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst team = new grafana.oss.Team(\"team\", {name: \"Team Name\"});\nconst test = new grafana.oss.DataSource(\"test\", {\n    type: \"loki\",\n    name: \"loki-from-terraform\",\n    url: \"https://mylokiurl.net\",\n    basicAuthEnabled: true,\n    basicAuthUsername: \"username\",\n    jsonDataEncoded: JSON.stringify({\n        authType: \"default\",\n        basicAuthPassword: \"password\",\n    }),\n});\nconst testRule = new grafana.enterprise.DataSourceConfigLbacRules(\"test_rule\", {\n    datasourceUid: test.uid,\n    rules: pulumi.jsonStringify(team.teamUid.apply(teamUid =\u003e {\n        [teamUid]: [\n            \"{ cluster = \\\"dev-us-central-0\\\", namespace = \\\"hosted-grafana\\\" }\",\n            \"{ foo = \\\"qux\\\" }\",\n        ],\n    })),\n}, {\n    dependsOn: [\n        team,\n        test,\n    ],\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumiverse_grafana as grafana\n\nteam = grafana.oss.Team(\"team\", name=\"Team Name\")\ntest = grafana.oss.DataSource(\"test\",\n    type=\"loki\",\n    name=\"loki-from-terraform\",\n    url=\"https://mylokiurl.net\",\n    basic_auth_enabled=True,\n    basic_auth_username=\"username\",\n    json_data_encoded=json.dumps({\n        \"authType\": \"default\",\n        \"basicAuthPassword\": \"password\",\n    }))\ntest_rule = grafana.enterprise.DataSourceConfigLbacRules(\"test_rule\",\n    datasource_uid=test.uid,\n    rules=pulumi.Output.json_dumps(team.team_uid.apply(lambda team_uid: {\n        team_uid: [\n            \"{ cluster = \\\"dev-us-central-0\\\", namespace = \\\"hosted-grafana\\\" }\",\n            \"{ foo = \\\"qux\\\" }\",\n        ],\n    })),\n    opts = pulumi.ResourceOptions(depends_on=[\n            team,\n            test,\n        ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var team = new Grafana.Oss.Team(\"team\", new()\n    {\n        Name = \"Team Name\",\n    });\n\n    var test = new Grafana.Oss.DataSource(\"test\", new()\n    {\n        Type = \"loki\",\n        Name = \"loki-from-terraform\",\n        Url = \"https://mylokiurl.net\",\n        BasicAuthEnabled = true,\n        BasicAuthUsername = \"username\",\n        JsonDataEncoded = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n        {\n            [\"authType\"] = \"default\",\n            [\"basicAuthPassword\"] = \"password\",\n        }),\n    });\n\n    var testRule = new Grafana.Enterprise.DataSourceConfigLbacRules(\"test_rule\", new()\n    {\n        DatasourceUid = test.Uid,\n        Rules = Output.JsonSerialize(Output.Create(team.TeamUid.Apply(teamUid =\u003e \n        {\n            { teamUid, new[]\n            {\n                \"{ cluster = \\\"dev-us-central-0\\\", namespace = \\\"hosted-grafana\\\" }\",\n                \"{ foo = \\\"qux\\\" }\",\n            } },\n        }))),\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            team,\n            test,\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/enterprise\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tteam, err := oss.NewTeam(ctx, \"team\", \u0026oss.TeamArgs{\n\t\t\tName: pulumi.String(\"Team Name\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"authType\":          \"default\",\n\t\t\t\"basicAuthPassword\": \"password\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\ttest, err := oss.NewDataSource(ctx, \"test\", \u0026oss.DataSourceArgs{\n\t\t\tType:              pulumi.String(\"loki\"),\n\t\t\tName:              pulumi.String(\"loki-from-terraform\"),\n\t\t\tUrl:               pulumi.String(\"https://mylokiurl.net\"),\n\t\t\tBasicAuthEnabled:  pulumi.Bool(true),\n\t\t\tBasicAuthUsername: pulumi.String(\"username\"),\n\t\t\tJsonDataEncoded:   pulumi.String(json0),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = enterprise.NewDataSourceConfigLbacRules(ctx, \"test_rule\", \u0026enterprise.DataSourceConfigLbacRulesArgs{\n\t\t\tDatasourceUid: test.Uid,\n\t\t\tRules: team.TeamUid.ApplyT(func(teamUid string) (pulumi.String, error) {\n\t\t\t\tvar _zero pulumi.String\n\t\t\t\ttmpJSON1, err := json.Marshal(map[string][]string{\n\t\t\t\t\tteamUid: []string{\n\t\t\t\t\t\t\"{ cluster = \\\"dev-us-central-0\\\", namespace = \\\"hosted-grafana\\\" }\",\n\t\t\t\t\t\t\"{ foo = \\\"qux\\\" }\",\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn _zero, err\n\t\t\t\t}\n\t\t\t\tjson1 := string(tmpJSON1)\n\t\t\t\treturn pulumi.String(json1), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tteam,\n\t\t\ttest,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.Team;\nimport com.pulumi.grafana.oss.TeamArgs;\nimport com.pulumi.grafana.oss.DataSource;\nimport com.pulumi.grafana.oss.DataSourceArgs;\nimport com.pulumi.grafana.enterprise.DataSourceConfigLbacRules;\nimport com.pulumi.grafana.enterprise.DataSourceConfigLbacRulesArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var team = new Team(\"team\", TeamArgs.builder()\n            .name(\"Team Name\")\n            .build());\n\n        var test = new DataSource(\"test\", DataSourceArgs.builder()\n            .type(\"loki\")\n            .name(\"loki-from-terraform\")\n            .url(\"https://mylokiurl.net\")\n            .basicAuthEnabled(true)\n            .basicAuthUsername(\"username\")\n            .jsonDataEncoded(serializeJson(\n                jsonObject(\n                    jsonProperty(\"authType\", \"default\"),\n                    jsonProperty(\"basicAuthPassword\", \"password\")\n                )))\n            .build());\n\n        var testRule = new DataSourceConfigLbacRules(\"testRule\", DataSourceConfigLbacRulesArgs.builder()\n            .datasourceUid(test.uid())\n            .rules(team.teamUid().applyValue(_teamUid -\u003e serializeJson(\n                jsonObject(\n                    jsonProperty(_teamUid, jsonArray(\n                        \"{ cluster = \\\"dev-us-central-0\\\", namespace = \\\"hosted-grafana\\\" }\", \n                        \"{ foo = \\\"qux\\\" }\"\n                    ))\n                ))))\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(                \n                    team,\n                    test)\n                .build());\n\n    }\n}\n```\n```yaml\nresources:\n  team:\n    type: grafana:oss:Team\n    properties:\n      name: Team Name\n  test:\n    type: grafana:oss:DataSource\n    properties:\n      type: loki\n      name: loki-from-terraform\n      url: https://mylokiurl.net\n      basicAuthEnabled: true\n      basicAuthUsername: username\n      jsonDataEncoded:\n        fn::toJSON:\n          authType: default\n          basicAuthPassword: password\n  testRule:\n    type: grafana:enterprise:DataSourceConfigLbacRules\n    name: test_rule\n    properties:\n      datasourceUid: ${test.uid}\n      rules:\n        fn::toJSON:\n          ${team.teamUid}:\n            - '{ cluster = \"dev-us-central-0\", namespace = \"hosted-grafana\" }'\n            - '{ foo = \"qux\" }'\n    options:\n      dependsOn:\n        - ${team}\n        - ${test}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:enterprise/dataSourceConfigLbacRules:DataSourceConfigLbacRules name \"{{ datasource_uid }}\"\n```\n\n","properties":{"datasourceUid":{"type":"string","description":"The UID of the datasource.\n"},"rules":{"type":"string","description":"JSON-encoded LBAC rules for the data source. Map of team UIDs to lists of rule strings.\n"}},"required":["datasourceUid","rules"],"inputProperties":{"datasourceUid":{"type":"string","description":"The UID of the datasource.\n"},"rules":{"type":"string","description":"JSON-encoded LBAC rules for the data source. Map of team UIDs to lists of rule strings.\n"}},"requiredInputs":["datasourceUid","rules"],"stateInputs":{"description":"Input properties used for looking up and filtering DataSourceConfigLbacRules resources.\n","properties":{"datasourceUid":{"type":"string","description":"The UID of the datasource.\n"},"rules":{"type":"string","description":"JSON-encoded LBAC rules for the data source. Map of team UIDs to lists of rule strings.\n"}},"type":"object"}},"grafana:enterprise/dataSourcePermission:DataSourcePermission":{"description":"Manages the entire set of permissions for a datasource. Permissions that aren't specified when applying this resource will be removed.\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/datasource_permissions/)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst team = new grafana.oss.Team(\"team\", {name: \"Team Name\"});\nconst foo = new grafana.oss.DataSource(\"foo\", {\n    type: \"cloudwatch\",\n    name: \"cw-example\",\n    jsonDataEncoded: JSON.stringify({\n        defaultRegion: \"us-east-1\",\n        authType: \"keys\",\n    }),\n    secureJsonDataEncoded: JSON.stringify({\n        accessKey: \"123\",\n        secretKey: \"456\",\n    }),\n});\nconst user = new grafana.oss.User(\"user\", {\n    name: \"test-ds-permissions\",\n    email: \"test-ds-permissions@example.com\",\n    login: \"test-ds-permissions\",\n    password: \"hunter2\",\n});\nconst sa = new grafana.oss.ServiceAccount(\"sa\", {\n    name: \"test-ds-permissions\",\n    role: \"Viewer\",\n});\nconst fooPermissions = new grafana.enterprise.DataSourcePermission(\"fooPermissions\", {\n    datasourceUid: foo.uid,\n    permissions: [\n        {\n            teamId: team.id,\n            permission: \"Edit\",\n        },\n        {\n            userId: user.id,\n            permission: \"Edit\",\n        },\n        {\n            builtInRole: \"Viewer\",\n            permission: \"Query\",\n        },\n        {\n            userId: sa.id,\n            permission: \"Query\",\n        },\n    ],\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumiverse_grafana as grafana\n\nteam = grafana.oss.Team(\"team\", name=\"Team Name\")\nfoo = grafana.oss.DataSource(\"foo\",\n    type=\"cloudwatch\",\n    name=\"cw-example\",\n    json_data_encoded=json.dumps({\n        \"defaultRegion\": \"us-east-1\",\n        \"authType\": \"keys\",\n    }),\n    secure_json_data_encoded=json.dumps({\n        \"accessKey\": \"123\",\n        \"secretKey\": \"456\",\n    }))\nuser = grafana.oss.User(\"user\",\n    name=\"test-ds-permissions\",\n    email=\"test-ds-permissions@example.com\",\n    login=\"test-ds-permissions\",\n    password=\"hunter2\")\nsa = grafana.oss.ServiceAccount(\"sa\",\n    name=\"test-ds-permissions\",\n    role=\"Viewer\")\nfoo_permissions = grafana.enterprise.DataSourcePermission(\"fooPermissions\",\n    datasource_uid=foo.uid,\n    permissions=[\n        {\n            \"team_id\": team.id,\n            \"permission\": \"Edit\",\n        },\n        {\n            \"user_id\": user.id,\n            \"permission\": \"Edit\",\n        },\n        {\n            \"built_in_role\": \"Viewer\",\n            \"permission\": \"Query\",\n        },\n        {\n            \"user_id\": sa.id,\n            \"permission\": \"Query\",\n        },\n    ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var team = new Grafana.Oss.Team(\"team\", new()\n    {\n        Name = \"Team Name\",\n    });\n\n    var foo = new Grafana.Oss.DataSource(\"foo\", new()\n    {\n        Type = \"cloudwatch\",\n        Name = \"cw-example\",\n        JsonDataEncoded = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n        {\n            [\"defaultRegion\"] = \"us-east-1\",\n            [\"authType\"] = \"keys\",\n        }),\n        SecureJsonDataEncoded = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n        {\n            [\"accessKey\"] = \"123\",\n            [\"secretKey\"] = \"456\",\n        }),\n    });\n\n    var user = new Grafana.Oss.User(\"user\", new()\n    {\n        Name = \"test-ds-permissions\",\n        Email = \"test-ds-permissions@example.com\",\n        Login = \"test-ds-permissions\",\n        Password = \"hunter2\",\n    });\n\n    var sa = new Grafana.Oss.ServiceAccount(\"sa\", new()\n    {\n        Name = \"test-ds-permissions\",\n        Role = \"Viewer\",\n    });\n\n    var fooPermissions = new Grafana.Enterprise.DataSourcePermission(\"fooPermissions\", new()\n    {\n        DatasourceUid = foo.Uid,\n        Permissions = new[]\n        {\n            new Grafana.Enterprise.Inputs.DataSourcePermissionPermissionArgs\n            {\n                TeamId = team.Id,\n                Permission = \"Edit\",\n            },\n            new Grafana.Enterprise.Inputs.DataSourcePermissionPermissionArgs\n            {\n                UserId = user.Id,\n                Permission = \"Edit\",\n            },\n            new Grafana.Enterprise.Inputs.DataSourcePermissionPermissionArgs\n            {\n                BuiltInRole = \"Viewer\",\n                Permission = \"Query\",\n            },\n            new Grafana.Enterprise.Inputs.DataSourcePermissionPermissionArgs\n            {\n                UserId = sa.Id,\n                Permission = \"Query\",\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/enterprise\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tteam, err := oss.NewTeam(ctx, \"team\", \u0026oss.TeamArgs{\n\t\t\tName: pulumi.String(\"Team Name\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"defaultRegion\": \"us-east-1\",\n\t\t\t\"authType\":      \"keys\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\ttmpJSON1, err := json.Marshal(map[string]interface{}{\n\t\t\t\"accessKey\": \"123\",\n\t\t\t\"secretKey\": \"456\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson1 := string(tmpJSON1)\n\t\tfoo, err := oss.NewDataSource(ctx, \"foo\", \u0026oss.DataSourceArgs{\n\t\t\tType:                  pulumi.String(\"cloudwatch\"),\n\t\t\tName:                  pulumi.String(\"cw-example\"),\n\t\t\tJsonDataEncoded:       pulumi.String(json0),\n\t\t\tSecureJsonDataEncoded: pulumi.String(json1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tuser, err := oss.NewUser(ctx, \"user\", \u0026oss.UserArgs{\n\t\t\tName:     pulumi.String(\"test-ds-permissions\"),\n\t\t\tEmail:    pulumi.String(\"test-ds-permissions@example.com\"),\n\t\t\tLogin:    pulumi.String(\"test-ds-permissions\"),\n\t\t\tPassword: pulumi.String(\"hunter2\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsa, err := oss.NewServiceAccount(ctx, \"sa\", \u0026oss.ServiceAccountArgs{\n\t\t\tName: pulumi.String(\"test-ds-permissions\"),\n\t\t\tRole: pulumi.String(\"Viewer\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = enterprise.NewDataSourcePermission(ctx, \"fooPermissions\", \u0026enterprise.DataSourcePermissionArgs{\n\t\t\tDatasourceUid: foo.Uid,\n\t\t\tPermissions: enterprise.DataSourcePermissionPermissionArray{\n\t\t\t\t\u0026enterprise.DataSourcePermissionPermissionArgs{\n\t\t\t\t\tTeamId:     team.ID(),\n\t\t\t\t\tPermission: pulumi.String(\"Edit\"),\n\t\t\t\t},\n\t\t\t\t\u0026enterprise.DataSourcePermissionPermissionArgs{\n\t\t\t\t\tUserId:     user.ID(),\n\t\t\t\t\tPermission: pulumi.String(\"Edit\"),\n\t\t\t\t},\n\t\t\t\t\u0026enterprise.DataSourcePermissionPermissionArgs{\n\t\t\t\t\tBuiltInRole: pulumi.String(\"Viewer\"),\n\t\t\t\t\tPermission:  pulumi.String(\"Query\"),\n\t\t\t\t},\n\t\t\t\t\u0026enterprise.DataSourcePermissionPermissionArgs{\n\t\t\t\t\tUserId:     sa.ID(),\n\t\t\t\t\tPermission: pulumi.String(\"Query\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.Team;\nimport com.pulumi.grafana.oss.TeamArgs;\nimport com.pulumi.grafana.oss.DataSource;\nimport com.pulumi.grafana.oss.DataSourceArgs;\nimport com.pulumi.grafana.oss.User;\nimport com.pulumi.grafana.oss.UserArgs;\nimport com.pulumi.grafana.oss.ServiceAccount;\nimport com.pulumi.grafana.oss.ServiceAccountArgs;\nimport com.pulumi.grafana.enterprise.DataSourcePermission;\nimport com.pulumi.grafana.enterprise.DataSourcePermissionArgs;\nimport com.pulumi.grafana.enterprise.inputs.DataSourcePermissionPermissionArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var team = new Team(\"team\", TeamArgs.builder()\n            .name(\"Team Name\")\n            .build());\n\n        var foo = new DataSource(\"foo\", DataSourceArgs.builder()\n            .type(\"cloudwatch\")\n            .name(\"cw-example\")\n            .jsonDataEncoded(serializeJson(\n                jsonObject(\n                    jsonProperty(\"defaultRegion\", \"us-east-1\"),\n                    jsonProperty(\"authType\", \"keys\")\n                )))\n            .secureJsonDataEncoded(serializeJson(\n                jsonObject(\n                    jsonProperty(\"accessKey\", \"123\"),\n                    jsonProperty(\"secretKey\", \"456\")\n                )))\n            .build());\n\n        var user = new User(\"user\", UserArgs.builder()\n            .name(\"test-ds-permissions\")\n            .email(\"test-ds-permissions@example.com\")\n            .login(\"test-ds-permissions\")\n            .password(\"hunter2\")\n            .build());\n\n        var sa = new ServiceAccount(\"sa\", ServiceAccountArgs.builder()\n            .name(\"test-ds-permissions\")\n            .role(\"Viewer\")\n            .build());\n\n        var fooPermissions = new DataSourcePermission(\"fooPermissions\", DataSourcePermissionArgs.builder()\n            .datasourceUid(foo.uid())\n            .permissions(            \n                DataSourcePermissionPermissionArgs.builder()\n                    .teamId(team.id())\n                    .permission(\"Edit\")\n                    .build(),\n                DataSourcePermissionPermissionArgs.builder()\n                    .userId(user.id())\n                    .permission(\"Edit\")\n                    .build(),\n                DataSourcePermissionPermissionArgs.builder()\n                    .builtInRole(\"Viewer\")\n                    .permission(\"Query\")\n                    .build(),\n                DataSourcePermissionPermissionArgs.builder()\n                    .userId(sa.id())\n                    .permission(\"Query\")\n                    .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  team:\n    type: grafana:oss:Team\n    properties:\n      name: Team Name\n  foo:\n    type: grafana:oss:DataSource\n    properties:\n      type: cloudwatch\n      name: cw-example\n      jsonDataEncoded:\n        fn::toJSON:\n          defaultRegion: us-east-1\n          authType: keys\n      secureJsonDataEncoded:\n        fn::toJSON:\n          accessKey: '123'\n          secretKey: '456'\n  user:\n    type: grafana:oss:User\n    properties:\n      name: test-ds-permissions\n      email: test-ds-permissions@example.com\n      login: test-ds-permissions\n      password: hunter2\n  sa:\n    type: grafana:oss:ServiceAccount\n    properties:\n      name: test-ds-permissions\n      role: Viewer\n  fooPermissions:\n    type: grafana:enterprise:DataSourcePermission\n    properties:\n      datasourceUid: ${foo.uid}\n      permissions:\n        - teamId: ${team.id}\n          permission: Edit\n        - userId: ${user.id}\n          permission: Edit\n        - builtInRole: Viewer\n          permission: Query\n        - userId: ${sa.id}\n          permission: Query\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:enterprise/dataSourcePermission:DataSourcePermission name \"{{ datasourceID }}\"\n```\n\n```sh\n$ pulumi import grafana:enterprise/dataSourcePermission:DataSourcePermission name \"{{ orgID }}:{{ datasourceID }}\"\n```\n\n","properties":{"datasourceUid":{"type":"string","description":"UID of the datasource to apply permissions to.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n"},"permissions":{"type":"array","items":{"$ref":"#/types/grafana:enterprise/DataSourcePermissionPermission:DataSourcePermissionPermission"},"description":"The permission items to add/update. Items that are omitted from the list will be removed.\n"}},"required":["datasourceUid"],"inputProperties":{"datasourceUid":{"type":"string","description":"UID of the datasource to apply permissions to.\n","willReplaceOnChanges":true},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"permissions":{"type":"array","items":{"$ref":"#/types/grafana:enterprise/DataSourcePermissionPermission:DataSourcePermissionPermission"},"description":"The permission items to add/update. Items that are omitted from the list will be removed.\n"}},"requiredInputs":["datasourceUid"],"stateInputs":{"description":"Input properties used for looking up and filtering DataSourcePermission resources.\n","properties":{"datasourceUid":{"type":"string","description":"UID of the datasource to apply permissions to.\n","willReplaceOnChanges":true},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"permissions":{"type":"array","items":{"$ref":"#/types/grafana:enterprise/DataSourcePermissionPermission:DataSourcePermissionPermission"},"description":"The permission items to add/update. Items that are omitted from the list will be removed.\n"}},"type":"object"},"aliases":[{"type":"grafana:index/dataSourcePermission:DataSourcePermission"}]},"grafana:enterprise/dataSourcePermissionItem:DataSourcePermissionItem":{"description":"Manages a single permission item for a datasource. Conflicts with the \u003cspan pulumi-lang-nodejs=\"\"grafana.enterprise.DataSourcePermission\"\" pulumi-lang-dotnet=\"\"grafana.enterprise.DataSourcePermission\"\" pulumi-lang-go=\"\"enterprise.DataSourcePermission\"\" pulumi-lang-python=\"\"enterprise.DataSourcePermission\"\" pulumi-lang-yaml=\"\"grafana.enterprise.DataSourcePermission\"\" pulumi-lang-java=\"\"grafana.enterprise.DataSourcePermission\"\"\u003e\"grafana.enterprise.DataSourcePermission\"\u003c/span\u003e resource which manages the entire set of permissions for a datasource.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst team = new grafana.oss.Team(\"team\", {name: \"Team Name\"});\nconst foo = new grafana.oss.DataSource(\"foo\", {\n    type: \"cloudwatch\",\n    name: \"cw-example\",\n    jsonDataEncoded: JSON.stringify({\n        defaultRegion: \"us-east-1\",\n        authType: \"keys\",\n    }),\n    secureJsonDataEncoded: JSON.stringify({\n        accessKey: \"123\",\n        secretKey: \"456\",\n    }),\n});\nconst user = new grafana.oss.User(\"user\", {\n    name: \"test-ds-permissions\",\n    email: \"test-ds-permissions@example.com\",\n    login: \"test-ds-permissions\",\n    password: \"hunter2\",\n});\nconst sa = new grafana.oss.ServiceAccount(\"sa\", {\n    name: \"test-ds-permissions\",\n    role: \"Viewer\",\n});\nconst teamDataSourcePermissionItem = new grafana.enterprise.DataSourcePermissionItem(\"team\", {\n    datasourceUid: foo.uid,\n    team: team.id,\n    permission: \"Edit\",\n});\nconst userDataSourcePermissionItem = new grafana.enterprise.DataSourcePermissionItem(\"user\", {\n    datasourceUid: foo.uid,\n    user: user.id,\n    permission: \"Edit\",\n});\nconst role = new grafana.enterprise.DataSourcePermissionItem(\"role\", {\n    datasourceUid: foo.uid,\n    role: \"Viewer\",\n    permission: \"Query\",\n});\nconst serviceAccount = new grafana.enterprise.DataSourcePermissionItem(\"service_account\", {\n    datasourceUid: foo.uid,\n    user: sa.id,\n    permission: \"Query\",\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumiverse_grafana as grafana\n\nteam = grafana.oss.Team(\"team\", name=\"Team Name\")\nfoo = grafana.oss.DataSource(\"foo\",\n    type=\"cloudwatch\",\n    name=\"cw-example\",\n    json_data_encoded=json.dumps({\n        \"defaultRegion\": \"us-east-1\",\n        \"authType\": \"keys\",\n    }),\n    secure_json_data_encoded=json.dumps({\n        \"accessKey\": \"123\",\n        \"secretKey\": \"456\",\n    }))\nuser = grafana.oss.User(\"user\",\n    name=\"test-ds-permissions\",\n    email=\"test-ds-permissions@example.com\",\n    login=\"test-ds-permissions\",\n    password=\"hunter2\")\nsa = grafana.oss.ServiceAccount(\"sa\",\n    name=\"test-ds-permissions\",\n    role=\"Viewer\")\nteam_data_source_permission_item = grafana.enterprise.DataSourcePermissionItem(\"team\",\n    datasource_uid=foo.uid,\n    team=team.id,\n    permission=\"Edit\")\nuser_data_source_permission_item = grafana.enterprise.DataSourcePermissionItem(\"user\",\n    datasource_uid=foo.uid,\n    user=user.id,\n    permission=\"Edit\")\nrole = grafana.enterprise.DataSourcePermissionItem(\"role\",\n    datasource_uid=foo.uid,\n    role=\"Viewer\",\n    permission=\"Query\")\nservice_account = grafana.enterprise.DataSourcePermissionItem(\"service_account\",\n    datasource_uid=foo.uid,\n    user=sa.id,\n    permission=\"Query\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var team = new Grafana.Oss.Team(\"team\", new()\n    {\n        Name = \"Team Name\",\n    });\n\n    var foo = new Grafana.Oss.DataSource(\"foo\", new()\n    {\n        Type = \"cloudwatch\",\n        Name = \"cw-example\",\n        JsonDataEncoded = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n        {\n            [\"defaultRegion\"] = \"us-east-1\",\n            [\"authType\"] = \"keys\",\n        }),\n        SecureJsonDataEncoded = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n        {\n            [\"accessKey\"] = \"123\",\n            [\"secretKey\"] = \"456\",\n        }),\n    });\n\n    var user = new Grafana.Oss.User(\"user\", new()\n    {\n        Name = \"test-ds-permissions\",\n        Email = \"test-ds-permissions@example.com\",\n        Login = \"test-ds-permissions\",\n        Password = \"hunter2\",\n    });\n\n    var sa = new Grafana.Oss.ServiceAccount(\"sa\", new()\n    {\n        Name = \"test-ds-permissions\",\n        Role = \"Viewer\",\n    });\n\n    var teamDataSourcePermissionItem = new Grafana.Enterprise.DataSourcePermissionItem(\"team\", new()\n    {\n        DatasourceUid = foo.Uid,\n        Team = team.Id,\n        Permission = \"Edit\",\n    });\n\n    var userDataSourcePermissionItem = new Grafana.Enterprise.DataSourcePermissionItem(\"user\", new()\n    {\n        DatasourceUid = foo.Uid,\n        User = user.Id,\n        Permission = \"Edit\",\n    });\n\n    var role = new Grafana.Enterprise.DataSourcePermissionItem(\"role\", new()\n    {\n        DatasourceUid = foo.Uid,\n        Role = \"Viewer\",\n        Permission = \"Query\",\n    });\n\n    var serviceAccount = new Grafana.Enterprise.DataSourcePermissionItem(\"service_account\", new()\n    {\n        DatasourceUid = foo.Uid,\n        User = sa.Id,\n        Permission = \"Query\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/enterprise\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tteam, err := oss.NewTeam(ctx, \"team\", \u0026oss.TeamArgs{\n\t\t\tName: pulumi.String(\"Team Name\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"defaultRegion\": \"us-east-1\",\n\t\t\t\"authType\":      \"keys\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\ttmpJSON1, err := json.Marshal(map[string]interface{}{\n\t\t\t\"accessKey\": \"123\",\n\t\t\t\"secretKey\": \"456\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson1 := string(tmpJSON1)\n\t\tfoo, err := oss.NewDataSource(ctx, \"foo\", \u0026oss.DataSourceArgs{\n\t\t\tType:                  pulumi.String(\"cloudwatch\"),\n\t\t\tName:                  pulumi.String(\"cw-example\"),\n\t\t\tJsonDataEncoded:       pulumi.String(json0),\n\t\t\tSecureJsonDataEncoded: pulumi.String(json1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tuser, err := oss.NewUser(ctx, \"user\", \u0026oss.UserArgs{\n\t\t\tName:     pulumi.String(\"test-ds-permissions\"),\n\t\t\tEmail:    pulumi.String(\"test-ds-permissions@example.com\"),\n\t\t\tLogin:    pulumi.String(\"test-ds-permissions\"),\n\t\t\tPassword: pulumi.String(\"hunter2\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsa, err := oss.NewServiceAccount(ctx, \"sa\", \u0026oss.ServiceAccountArgs{\n\t\t\tName: pulumi.String(\"test-ds-permissions\"),\n\t\t\tRole: pulumi.String(\"Viewer\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = enterprise.NewDataSourcePermissionItem(ctx, \"team\", \u0026enterprise.DataSourcePermissionItemArgs{\n\t\t\tDatasourceUid: foo.Uid,\n\t\t\tTeam:          team.ID(),\n\t\t\tPermission:    pulumi.String(\"Edit\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = enterprise.NewDataSourcePermissionItem(ctx, \"user\", \u0026enterprise.DataSourcePermissionItemArgs{\n\t\t\tDatasourceUid: foo.Uid,\n\t\t\tUser:          user.ID(),\n\t\t\tPermission:    pulumi.String(\"Edit\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = enterprise.NewDataSourcePermissionItem(ctx, \"role\", \u0026enterprise.DataSourcePermissionItemArgs{\n\t\t\tDatasourceUid: foo.Uid,\n\t\t\tRole:          pulumi.String(\"Viewer\"),\n\t\t\tPermission:    pulumi.String(\"Query\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = enterprise.NewDataSourcePermissionItem(ctx, \"service_account\", \u0026enterprise.DataSourcePermissionItemArgs{\n\t\t\tDatasourceUid: foo.Uid,\n\t\t\tUser:          sa.ID(),\n\t\t\tPermission:    pulumi.String(\"Query\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.Team;\nimport com.pulumi.grafana.oss.TeamArgs;\nimport com.pulumi.grafana.oss.DataSource;\nimport com.pulumi.grafana.oss.DataSourceArgs;\nimport com.pulumi.grafana.oss.User;\nimport com.pulumi.grafana.oss.UserArgs;\nimport com.pulumi.grafana.oss.ServiceAccount;\nimport com.pulumi.grafana.oss.ServiceAccountArgs;\nimport com.pulumi.grafana.enterprise.DataSourcePermissionItem;\nimport com.pulumi.grafana.enterprise.DataSourcePermissionItemArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var team = new Team(\"team\", TeamArgs.builder()\n            .name(\"Team Name\")\n            .build());\n\n        var foo = new DataSource(\"foo\", DataSourceArgs.builder()\n            .type(\"cloudwatch\")\n            .name(\"cw-example\")\n            .jsonDataEncoded(serializeJson(\n                jsonObject(\n                    jsonProperty(\"defaultRegion\", \"us-east-1\"),\n                    jsonProperty(\"authType\", \"keys\")\n                )))\n            .secureJsonDataEncoded(serializeJson(\n                jsonObject(\n                    jsonProperty(\"accessKey\", \"123\"),\n                    jsonProperty(\"secretKey\", \"456\")\n                )))\n            .build());\n\n        var user = new User(\"user\", UserArgs.builder()\n            .name(\"test-ds-permissions\")\n            .email(\"test-ds-permissions@example.com\")\n            .login(\"test-ds-permissions\")\n            .password(\"hunter2\")\n            .build());\n\n        var sa = new ServiceAccount(\"sa\", ServiceAccountArgs.builder()\n            .name(\"test-ds-permissions\")\n            .role(\"Viewer\")\n            .build());\n\n        var teamDataSourcePermissionItem = new DataSourcePermissionItem(\"teamDataSourcePermissionItem\", DataSourcePermissionItemArgs.builder()\n            .datasourceUid(foo.uid())\n            .team(team.id())\n            .permission(\"Edit\")\n            .build());\n\n        var userDataSourcePermissionItem = new DataSourcePermissionItem(\"userDataSourcePermissionItem\", DataSourcePermissionItemArgs.builder()\n            .datasourceUid(foo.uid())\n            .user(user.id())\n            .permission(\"Edit\")\n            .build());\n\n        var role = new DataSourcePermissionItem(\"role\", DataSourcePermissionItemArgs.builder()\n            .datasourceUid(foo.uid())\n            .role(\"Viewer\")\n            .permission(\"Query\")\n            .build());\n\n        var serviceAccount = new DataSourcePermissionItem(\"serviceAccount\", DataSourcePermissionItemArgs.builder()\n            .datasourceUid(foo.uid())\n            .user(sa.id())\n            .permission(\"Query\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  team:\n    type: grafana:oss:Team\n    properties:\n      name: Team Name\n  foo:\n    type: grafana:oss:DataSource\n    properties:\n      type: cloudwatch\n      name: cw-example\n      jsonDataEncoded:\n        fn::toJSON:\n          defaultRegion: us-east-1\n          authType: keys\n      secureJsonDataEncoded:\n        fn::toJSON:\n          accessKey: '123'\n          secretKey: '456'\n  user:\n    type: grafana:oss:User\n    properties:\n      name: test-ds-permissions\n      email: test-ds-permissions@example.com\n      login: test-ds-permissions\n      password: hunter2\n  sa:\n    type: grafana:oss:ServiceAccount\n    properties:\n      name: test-ds-permissions\n      role: Viewer\n  teamDataSourcePermissionItem:\n    type: grafana:enterprise:DataSourcePermissionItem\n    name: team\n    properties:\n      datasourceUid: ${foo.uid}\n      team: ${team.id}\n      permission: Edit\n  userDataSourcePermissionItem:\n    type: grafana:enterprise:DataSourcePermissionItem\n    name: user\n    properties:\n      datasourceUid: ${foo.uid}\n      user: ${user.id}\n      permission: Edit\n  role:\n    type: grafana:enterprise:DataSourcePermissionItem\n    properties:\n      datasourceUid: ${foo.uid}\n      role: Viewer\n      permission: Query\n  serviceAccount:\n    type: grafana:enterprise:DataSourcePermissionItem\n    name: service_account\n    properties:\n      datasourceUid: ${foo.uid}\n      user: ${sa.id}\n      permission: Query\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:enterprise/dataSourcePermissionItem:DataSourcePermissionItem name \"{{ datasourceUID }}:{{ type (role, team, or user) }}:{{ identifier }}\"\n```\n\n```sh\n$ pulumi import grafana:enterprise/dataSourcePermissionItem:DataSourcePermissionItem name \"{{ orgID }}:{{ datasourceUID }}:{{ type (role, team, or user) }}:{{ identifier }}\"\n```\n\n","properties":{"datasourceUid":{"type":"string","description":"The UID of the datasource.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the default organization is used for basic authentication, or the one that owns your service account for token authentication.\n"},"permission":{"type":"string","description":"the permission to be assigned\n"},"role":{"type":"string","description":"the role onto which the permission is to be assigned\n"},"team":{"type":"string","description":"the team onto which the permission is to be assigned\n"},"user":{"type":"string","description":"the user or service account onto which the permission is to be assigned\n"}},"required":["datasourceUid","orgId","permission"],"inputProperties":{"datasourceUid":{"type":"string","description":"The UID of the datasource.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the default organization is used for basic authentication, or the one that owns your service account for token authentication.\n"},"permission":{"type":"string","description":"the permission to be assigned\n"},"role":{"type":"string","description":"the role onto which the permission is to be assigned\n"},"team":{"type":"string","description":"the team onto which the permission is to be assigned\n"},"user":{"type":"string","description":"the user or service account onto which the permission is to be assigned\n"}},"requiredInputs":["datasourceUid","permission"],"stateInputs":{"description":"Input properties used for looking up and filtering DataSourcePermissionItem resources.\n","properties":{"datasourceUid":{"type":"string","description":"The UID of the datasource.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the default organization is used for basic authentication, or the one that owns your service account for token authentication.\n"},"permission":{"type":"string","description":"the permission to be assigned\n"},"role":{"type":"string","description":"the role onto which the permission is to be assigned\n"},"team":{"type":"string","description":"the team onto which the permission is to be assigned\n"},"user":{"type":"string","description":"the user or service account onto which the permission is to be assigned\n"}},"type":"object"},"aliases":[{"type":"grafana:index/dataSourcePermissionItem:DataSourcePermissionItem"}]},"grafana:enterprise/report:Report":{"description":"**Note:** This resource is available only with Grafana Enterprise 7.+.\n\n* [Official documentation](https://grafana.com/docs/grafana/latest/dashboards/create-reports/)\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/reporting/)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst test = new grafana.oss.Dashboard(\"test\", {\n    configJson: `{\n  \\\\\"uid\\\\\": \\\\\"report-dashboard\\\\\",\n  \\\\\"title\\\\\": \\\\\"report-dashboard\\\\\"\n}\n`,\n    message: \"inital commit.\",\n});\nconst testReport = new grafana.enterprise.Report(\"test\", {\n    name: \"my report\",\n    recipients: [\"some@email.com\"],\n    dashboards: [{\n        uid: test.uid,\n    }],\n    schedule: {\n        frequency: \"hourly\",\n    },\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\ntest = grafana.oss.Dashboard(\"test\",\n    config_json=\"\"\"{\n  \\\"uid\\\": \\\"report-dashboard\\\",\n  \\\"title\\\": \\\"report-dashboard\\\"\n}\n\"\"\",\n    message=\"inital commit.\")\ntest_report = grafana.enterprise.Report(\"test\",\n    name=\"my report\",\n    recipients=[\"some@email.com\"],\n    dashboards=[{\n        \"uid\": test.uid,\n    }],\n    schedule={\n        \"frequency\": \"hourly\",\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var test = new Grafana.Oss.Dashboard(\"test\", new()\n    {\n        ConfigJson = @\"{\n  \\\"\"uid\\\"\": \\\"\"report-dashboard\\\"\",\n  \\\"\"title\\\"\": \\\"\"report-dashboard\\\"\"\n}\n\",\n        Message = \"inital commit.\",\n    });\n\n    var testReport = new Grafana.Enterprise.Report(\"test\", new()\n    {\n        Name = \"my report\",\n        Recipients = new[]\n        {\n            \"some@email.com\",\n        },\n        Dashboards = new[]\n        {\n            new Grafana.Enterprise.Inputs.ReportDashboardArgs\n            {\n                Uid = test.Uid,\n            },\n        },\n        Schedule = new Grafana.Enterprise.Inputs.ReportScheduleArgs\n        {\n            Frequency = \"hourly\",\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/enterprise\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := oss.NewDashboard(ctx, \"test\", \u0026oss.DashboardArgs{\n\t\t\tConfigJson: pulumi.String(\"{\\n  \\\\\\\"uid\\\\\\\": \\\\\\\"report-dashboard\\\\\\\",\\n  \\\\\\\"title\\\\\\\": \\\\\\\"report-dashboard\\\\\\\"\\n}\\n\"),\n\t\t\tMessage:    pulumi.String(\"inital commit.\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = enterprise.NewReport(ctx, \"test\", \u0026enterprise.ReportArgs{\n\t\t\tName: pulumi.String(\"my report\"),\n\t\t\tRecipients: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"some@email.com\"),\n\t\t\t},\n\t\t\tDashboards: enterprise.ReportDashboardArray{\n\t\t\t\t\u0026enterprise.ReportDashboardArgs{\n\t\t\t\t\tUid: test.Uid,\n\t\t\t\t},\n\t\t\t},\n\t\t\tSchedule: \u0026enterprise.ReportScheduleArgs{\n\t\t\t\tFrequency: pulumi.String(\"hourly\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.Dashboard;\nimport com.pulumi.grafana.oss.DashboardArgs;\nimport com.pulumi.grafana.enterprise.Report;\nimport com.pulumi.grafana.enterprise.ReportArgs;\nimport com.pulumi.grafana.enterprise.inputs.ReportDashboardArgs;\nimport com.pulumi.grafana.enterprise.inputs.ReportScheduleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var test = new Dashboard(\"test\", DashboardArgs.builder()\n            .configJson(\"\"\"\n{\n  \\\"uid\\\": \\\"report-dashboard\\\",\n  \\\"title\\\": \\\"report-dashboard\\\"\n}\n            \"\"\")\n            .message(\"inital commit.\")\n            .build());\n\n        var testReport = new Report(\"testReport\", ReportArgs.builder()\n            .name(\"my report\")\n            .recipients(\"some@email.com\")\n            .dashboards(ReportDashboardArgs.builder()\n                .uid(test.uid())\n                .build())\n            .schedule(ReportScheduleArgs.builder()\n                .frequency(\"hourly\")\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  test:\n    type: grafana:oss:Dashboard\n    properties:\n      configJson: |\n        {\n          \\\"uid\\\": \\\"report-dashboard\\\",\n          \\\"title\\\": \\\"report-dashboard\\\"\n        }\n      message: inital commit.\n  testReport:\n    type: grafana:enterprise:Report\n    name: test\n    properties:\n      name: my report\n      recipients:\n        - some@email.com\n      dashboards:\n        - uid: ${test.uid}\n      schedule:\n        frequency: hourly\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:enterprise/report:Report name \"{{ id }}\"\n```\n\n```sh\n$ pulumi import grafana:enterprise/report:Report name \"{{ orgID }}:{{ id }}\"\n```\n\n","properties":{"dashboards":{"type":"array","items":{"$ref":"#/types/grafana:enterprise/ReportDashboard:ReportDashboard"},"description":"List of dashboards to render into the report\n"},"formats":{"type":"array","items":{"type":"string"},"description":"Specifies what kind of attachment to generate for the report. Allowed values: \u003cspan pulumi-lang-nodejs=\"`pdf`\" pulumi-lang-dotnet=\"`Pdf`\" pulumi-lang-go=\"`pdf`\" pulumi-lang-python=\"`pdf`\" pulumi-lang-yaml=\"`pdf`\" pulumi-lang-java=\"`pdf`\"\u003e`pdf`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`csv`\" pulumi-lang-dotnet=\"`Csv`\" pulumi-lang-go=\"`csv`\" pulumi-lang-python=\"`csv`\" pulumi-lang-yaml=\"`csv`\" pulumi-lang-java=\"`csv`\"\u003e`csv`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`image`\" pulumi-lang-dotnet=\"`Image`\" pulumi-lang-go=\"`image`\" pulumi-lang-python=\"`image`\" pulumi-lang-yaml=\"`image`\" pulumi-lang-java=\"`image`\"\u003e`image`\u003c/span\u003e.\n"},"includeDashboardLink":{"type":"boolean","description":"Whether to include a link to the dashboard in the report. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"includeTableCsv":{"type":"boolean","description":"Whether to include a CSV file of table panel data. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"layout":{"type":"string","description":"Layout of the report. Allowed values: \u003cspan pulumi-lang-nodejs=\"`simple`\" pulumi-lang-dotnet=\"`Simple`\" pulumi-lang-go=\"`simple`\" pulumi-lang-python=\"`simple`\" pulumi-lang-yaml=\"`simple`\" pulumi-lang-java=\"`simple`\"\u003e`simple`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`grid`\" pulumi-lang-dotnet=\"`Grid`\" pulumi-lang-go=\"`grid`\" pulumi-lang-python=\"`grid`\" pulumi-lang-yaml=\"`grid`\" pulumi-lang-java=\"`grid`\"\u003e`grid`\u003c/span\u003e. Defaults to \u003cspan pulumi-lang-nodejs=\"`grid`\" pulumi-lang-dotnet=\"`Grid`\" pulumi-lang-go=\"`grid`\" pulumi-lang-python=\"`grid`\" pulumi-lang-yaml=\"`grid`\" pulumi-lang-java=\"`grid`\"\u003e`grid`\u003c/span\u003e.\n"},"message":{"type":"string","description":"Message to be sent in the report.\n"},"name":{"type":"string","description":"Name of the report.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n"},"orientation":{"type":"string","description":"Orientation of the report. Allowed values: \u003cspan pulumi-lang-nodejs=\"`landscape`\" pulumi-lang-dotnet=\"`Landscape`\" pulumi-lang-go=\"`landscape`\" pulumi-lang-python=\"`landscape`\" pulumi-lang-yaml=\"`landscape`\" pulumi-lang-java=\"`landscape`\"\u003e`landscape`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`portrait`\" pulumi-lang-dotnet=\"`Portrait`\" pulumi-lang-go=\"`portrait`\" pulumi-lang-python=\"`portrait`\" pulumi-lang-yaml=\"`portrait`\" pulumi-lang-java=\"`portrait`\"\u003e`portrait`\u003c/span\u003e. Defaults to \u003cspan pulumi-lang-nodejs=\"`landscape`\" pulumi-lang-dotnet=\"`Landscape`\" pulumi-lang-go=\"`landscape`\" pulumi-lang-python=\"`landscape`\" pulumi-lang-yaml=\"`landscape`\" pulumi-lang-java=\"`landscape`\"\u003e`landscape`\u003c/span\u003e.\n"},"recipients":{"type":"array","items":{"type":"string"},"description":"List of recipients of the report.\n"},"replyTo":{"type":"string","description":"Reply-to email address of the report.\n"},"schedule":{"$ref":"#/types/grafana:enterprise/ReportSchedule:ReportSchedule","description":"Schedule of the report.\n"}},"required":["name","recipients","schedule"],"inputProperties":{"dashboards":{"type":"array","items":{"$ref":"#/types/grafana:enterprise/ReportDashboard:ReportDashboard"},"description":"List of dashboards to render into the report\n"},"formats":{"type":"array","items":{"type":"string"},"description":"Specifies what kind of attachment to generate for the report. Allowed values: \u003cspan pulumi-lang-nodejs=\"`pdf`\" pulumi-lang-dotnet=\"`Pdf`\" pulumi-lang-go=\"`pdf`\" pulumi-lang-python=\"`pdf`\" pulumi-lang-yaml=\"`pdf`\" pulumi-lang-java=\"`pdf`\"\u003e`pdf`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`csv`\" pulumi-lang-dotnet=\"`Csv`\" pulumi-lang-go=\"`csv`\" pulumi-lang-python=\"`csv`\" pulumi-lang-yaml=\"`csv`\" pulumi-lang-java=\"`csv`\"\u003e`csv`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`image`\" pulumi-lang-dotnet=\"`Image`\" pulumi-lang-go=\"`image`\" pulumi-lang-python=\"`image`\" pulumi-lang-yaml=\"`image`\" pulumi-lang-java=\"`image`\"\u003e`image`\u003c/span\u003e.\n"},"includeDashboardLink":{"type":"boolean","description":"Whether to include a link to the dashboard in the report. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"includeTableCsv":{"type":"boolean","description":"Whether to include a CSV file of table panel data. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"layout":{"type":"string","description":"Layout of the report. Allowed values: \u003cspan pulumi-lang-nodejs=\"`simple`\" pulumi-lang-dotnet=\"`Simple`\" pulumi-lang-go=\"`simple`\" pulumi-lang-python=\"`simple`\" pulumi-lang-yaml=\"`simple`\" pulumi-lang-java=\"`simple`\"\u003e`simple`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`grid`\" pulumi-lang-dotnet=\"`Grid`\" pulumi-lang-go=\"`grid`\" pulumi-lang-python=\"`grid`\" pulumi-lang-yaml=\"`grid`\" pulumi-lang-java=\"`grid`\"\u003e`grid`\u003c/span\u003e. Defaults to \u003cspan pulumi-lang-nodejs=\"`grid`\" pulumi-lang-dotnet=\"`Grid`\" pulumi-lang-go=\"`grid`\" pulumi-lang-python=\"`grid`\" pulumi-lang-yaml=\"`grid`\" pulumi-lang-java=\"`grid`\"\u003e`grid`\u003c/span\u003e.\n"},"message":{"type":"string","description":"Message to be sent in the report.\n"},"name":{"type":"string","description":"Name of the report.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"orientation":{"type":"string","description":"Orientation of the report. Allowed values: \u003cspan pulumi-lang-nodejs=\"`landscape`\" pulumi-lang-dotnet=\"`Landscape`\" pulumi-lang-go=\"`landscape`\" pulumi-lang-python=\"`landscape`\" pulumi-lang-yaml=\"`landscape`\" pulumi-lang-java=\"`landscape`\"\u003e`landscape`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`portrait`\" pulumi-lang-dotnet=\"`Portrait`\" pulumi-lang-go=\"`portrait`\" pulumi-lang-python=\"`portrait`\" pulumi-lang-yaml=\"`portrait`\" pulumi-lang-java=\"`portrait`\"\u003e`portrait`\u003c/span\u003e. Defaults to \u003cspan pulumi-lang-nodejs=\"`landscape`\" pulumi-lang-dotnet=\"`Landscape`\" pulumi-lang-go=\"`landscape`\" pulumi-lang-python=\"`landscape`\" pulumi-lang-yaml=\"`landscape`\" pulumi-lang-java=\"`landscape`\"\u003e`landscape`\u003c/span\u003e.\n"},"recipients":{"type":"array","items":{"type":"string"},"description":"List of recipients of the report.\n"},"replyTo":{"type":"string","description":"Reply-to email address of the report.\n"},"schedule":{"$ref":"#/types/grafana:enterprise/ReportSchedule:ReportSchedule","description":"Schedule of the report.\n"}},"requiredInputs":["recipients","schedule"],"stateInputs":{"description":"Input properties used for looking up and filtering Report resources.\n","properties":{"dashboards":{"type":"array","items":{"$ref":"#/types/grafana:enterprise/ReportDashboard:ReportDashboard"},"description":"List of dashboards to render into the report\n"},"formats":{"type":"array","items":{"type":"string"},"description":"Specifies what kind of attachment to generate for the report. Allowed values: \u003cspan pulumi-lang-nodejs=\"`pdf`\" pulumi-lang-dotnet=\"`Pdf`\" pulumi-lang-go=\"`pdf`\" pulumi-lang-python=\"`pdf`\" pulumi-lang-yaml=\"`pdf`\" pulumi-lang-java=\"`pdf`\"\u003e`pdf`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`csv`\" pulumi-lang-dotnet=\"`Csv`\" pulumi-lang-go=\"`csv`\" pulumi-lang-python=\"`csv`\" pulumi-lang-yaml=\"`csv`\" pulumi-lang-java=\"`csv`\"\u003e`csv`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`image`\" pulumi-lang-dotnet=\"`Image`\" pulumi-lang-go=\"`image`\" pulumi-lang-python=\"`image`\" pulumi-lang-yaml=\"`image`\" pulumi-lang-java=\"`image`\"\u003e`image`\u003c/span\u003e.\n"},"includeDashboardLink":{"type":"boolean","description":"Whether to include a link to the dashboard in the report. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"includeTableCsv":{"type":"boolean","description":"Whether to include a CSV file of table panel data. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"layout":{"type":"string","description":"Layout of the report. Allowed values: \u003cspan pulumi-lang-nodejs=\"`simple`\" pulumi-lang-dotnet=\"`Simple`\" pulumi-lang-go=\"`simple`\" pulumi-lang-python=\"`simple`\" pulumi-lang-yaml=\"`simple`\" pulumi-lang-java=\"`simple`\"\u003e`simple`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`grid`\" pulumi-lang-dotnet=\"`Grid`\" pulumi-lang-go=\"`grid`\" pulumi-lang-python=\"`grid`\" pulumi-lang-yaml=\"`grid`\" pulumi-lang-java=\"`grid`\"\u003e`grid`\u003c/span\u003e. Defaults to \u003cspan pulumi-lang-nodejs=\"`grid`\" pulumi-lang-dotnet=\"`Grid`\" pulumi-lang-go=\"`grid`\" pulumi-lang-python=\"`grid`\" pulumi-lang-yaml=\"`grid`\" pulumi-lang-java=\"`grid`\"\u003e`grid`\u003c/span\u003e.\n"},"message":{"type":"string","description":"Message to be sent in the report.\n"},"name":{"type":"string","description":"Name of the report.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"orientation":{"type":"string","description":"Orientation of the report. Allowed values: \u003cspan pulumi-lang-nodejs=\"`landscape`\" pulumi-lang-dotnet=\"`Landscape`\" pulumi-lang-go=\"`landscape`\" pulumi-lang-python=\"`landscape`\" pulumi-lang-yaml=\"`landscape`\" pulumi-lang-java=\"`landscape`\"\u003e`landscape`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`portrait`\" pulumi-lang-dotnet=\"`Portrait`\" pulumi-lang-go=\"`portrait`\" pulumi-lang-python=\"`portrait`\" pulumi-lang-yaml=\"`portrait`\" pulumi-lang-java=\"`portrait`\"\u003e`portrait`\u003c/span\u003e. Defaults to \u003cspan pulumi-lang-nodejs=\"`landscape`\" pulumi-lang-dotnet=\"`Landscape`\" pulumi-lang-go=\"`landscape`\" pulumi-lang-python=\"`landscape`\" pulumi-lang-yaml=\"`landscape`\" pulumi-lang-java=\"`landscape`\"\u003e`landscape`\u003c/span\u003e.\n"},"recipients":{"type":"array","items":{"type":"string"},"description":"List of recipients of the report.\n"},"replyTo":{"type":"string","description":"Reply-to email address of the report.\n"},"schedule":{"$ref":"#/types/grafana:enterprise/ReportSchedule:ReportSchedule","description":"Schedule of the report.\n"}},"type":"object"},"aliases":[{"type":"grafana:index/report:Report"}]},"grafana:enterprise/role:Role":{"description":"**Note:** This resource is available only with Grafana Enterprise 8.+.\n\n* [Official documentation](https://grafana.com/docs/grafana/latest/administration/roles-and-permissions/access-control/)\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/access_control/)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst superUser = new grafana.enterprise.Role(\"super_user\", {\n    name: \"Super User\",\n    description: \"My Super User description\",\n    uid: \"superuseruid\",\n    version: 1,\n    global: true,\n    permissions: [\n        {\n            action: \"org.users:add\",\n            scope: \"users:*\",\n        },\n        {\n            action: \"org.users:write\",\n            scope: \"users:*\",\n        },\n        {\n            action: \"org.users:read\",\n            scope: \"users:*\",\n        },\n    ],\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\nsuper_user = grafana.enterprise.Role(\"super_user\",\n    name=\"Super User\",\n    description=\"My Super User description\",\n    uid=\"superuseruid\",\n    version=1,\n    global_=True,\n    permissions=[\n        {\n            \"action\": \"org.users:add\",\n            \"scope\": \"users:*\",\n        },\n        {\n            \"action\": \"org.users:write\",\n            \"scope\": \"users:*\",\n        },\n        {\n            \"action\": \"org.users:read\",\n            \"scope\": \"users:*\",\n        },\n    ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var superUser = new Grafana.Enterprise.Role(\"super_user\", new()\n    {\n        Name = \"Super User\",\n        Description = \"My Super User description\",\n        Uid = \"superuseruid\",\n        Version = 1,\n        Global = true,\n        Permissions = new[]\n        {\n            new Grafana.Enterprise.Inputs.RolePermissionArgs\n            {\n                Action = \"org.users:add\",\n                Scope = \"users:*\",\n            },\n            new Grafana.Enterprise.Inputs.RolePermissionArgs\n            {\n                Action = \"org.users:write\",\n                Scope = \"users:*\",\n            },\n            new Grafana.Enterprise.Inputs.RolePermissionArgs\n            {\n                Action = \"org.users:read\",\n                Scope = \"users:*\",\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/enterprise\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := enterprise.NewRole(ctx, \"super_user\", \u0026enterprise.RoleArgs{\n\t\t\tName:        pulumi.String(\"Super User\"),\n\t\t\tDescription: pulumi.String(\"My Super User description\"),\n\t\t\tUid:         pulumi.String(\"superuseruid\"),\n\t\t\tVersion:     pulumi.Int(1),\n\t\t\tGlobal:      pulumi.Bool(true),\n\t\t\tPermissions: enterprise.RolePermissionArray{\n\t\t\t\t\u0026enterprise.RolePermissionArgs{\n\t\t\t\t\tAction: pulumi.String(\"org.users:add\"),\n\t\t\t\t\tScope:  pulumi.String(\"users:*\"),\n\t\t\t\t},\n\t\t\t\t\u0026enterprise.RolePermissionArgs{\n\t\t\t\t\tAction: pulumi.String(\"org.users:write\"),\n\t\t\t\t\tScope:  pulumi.String(\"users:*\"),\n\t\t\t\t},\n\t\t\t\t\u0026enterprise.RolePermissionArgs{\n\t\t\t\t\tAction: pulumi.String(\"org.users:read\"),\n\t\t\t\t\tScope:  pulumi.String(\"users:*\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.enterprise.Role;\nimport com.pulumi.grafana.enterprise.RoleArgs;\nimport com.pulumi.grafana.enterprise.inputs.RolePermissionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var superUser = new Role(\"superUser\", RoleArgs.builder()\n            .name(\"Super User\")\n            .description(\"My Super User description\")\n            .uid(\"superuseruid\")\n            .version(1)\n            .global(true)\n            .permissions(            \n                RolePermissionArgs.builder()\n                    .action(\"org.users:add\")\n                    .scope(\"users:*\")\n                    .build(),\n                RolePermissionArgs.builder()\n                    .action(\"org.users:write\")\n                    .scope(\"users:*\")\n                    .build(),\n                RolePermissionArgs.builder()\n                    .action(\"org.users:read\")\n                    .scope(\"users:*\")\n                    .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  superUser:\n    type: grafana:enterprise:Role\n    name: super_user\n    properties:\n      name: Super User\n      description: My Super User description\n      uid: superuseruid\n      version: 1\n      global: true\n      permissions:\n        - action: org.users:add\n          scope: users:*\n        - action: org.users:write\n          scope: users:*\n        - action: org.users:read\n          scope: users:*\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:enterprise/role:Role name \"{{ uid }}\"\n```\n\n```sh\n$ pulumi import grafana:enterprise/role:Role name \"{{ orgID }}:{{ uid }}\"\n```\n\n","properties":{"autoIncrementVersion":{"type":"boolean","description":"Whether the role version should be incremented automatically on updates (and set to 1 on creation). This field or \u003cspan pulumi-lang-nodejs=\"`version`\" pulumi-lang-dotnet=\"`Version`\" pulumi-lang-go=\"`version`\" pulumi-lang-python=\"`version`\" pulumi-lang-yaml=\"`version`\" pulumi-lang-java=\"`version`\"\u003e`version`\u003c/span\u003e should be set.\n"},"description":{"type":"string","description":"Description of the role.\n"},"displayName":{"type":"string","description":"Display name of the role. Available with Grafana 8.5+.\n"},"global":{"type":"boolean","description":"Boolean to state whether the role is available across all organizations or not. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"group":{"type":"string","description":"Group of the role. Available with Grafana 8.5+.\n"},"hidden":{"type":"boolean","description":"Boolean to state whether the role should be visible in the Grafana UI or not. Available with Grafana 8.5+. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"name":{"type":"string","description":"Name of the role\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n"},"permissions":{"type":"array","items":{"$ref":"#/types/grafana:enterprise/RolePermission:RolePermission"},"description":"Specific set of actions granted by the role.\n"},"uid":{"type":"string","description":"Unique identifier of the role. Used for assignments.\n"},"version":{"type":"integer","description":"Version of the role. A role is updated only on version increase. This field or \u003cspan pulumi-lang-nodejs=\"`autoIncrementVersion`\" pulumi-lang-dotnet=\"`AutoIncrementVersion`\" pulumi-lang-go=\"`autoIncrementVersion`\" pulumi-lang-python=\"`auto_increment_version`\" pulumi-lang-yaml=\"`autoIncrementVersion`\" pulumi-lang-java=\"`autoIncrementVersion`\"\u003e`auto_increment_version`\u003c/span\u003e should be set.\n"}},"required":["name","uid"],"inputProperties":{"autoIncrementVersion":{"type":"boolean","description":"Whether the role version should be incremented automatically on updates (and set to 1 on creation). This field or \u003cspan pulumi-lang-nodejs=\"`version`\" pulumi-lang-dotnet=\"`Version`\" pulumi-lang-go=\"`version`\" pulumi-lang-python=\"`version`\" pulumi-lang-yaml=\"`version`\" pulumi-lang-java=\"`version`\"\u003e`version`\u003c/span\u003e should be set.\n"},"description":{"type":"string","description":"Description of the role.\n"},"displayName":{"type":"string","description":"Display name of the role. Available with Grafana 8.5+.\n"},"global":{"type":"boolean","description":"Boolean to state whether the role is available across all organizations or not. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n","willReplaceOnChanges":true},"group":{"type":"string","description":"Group of the role. Available with Grafana 8.5+.\n"},"hidden":{"type":"boolean","description":"Boolean to state whether the role should be visible in the Grafana UI or not. Available with Grafana 8.5+. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"name":{"type":"string","description":"Name of the role\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"permissions":{"type":"array","items":{"$ref":"#/types/grafana:enterprise/RolePermission:RolePermission"},"description":"Specific set of actions granted by the role.\n"},"uid":{"type":"string","description":"Unique identifier of the role. Used for assignments.\n","willReplaceOnChanges":true},"version":{"type":"integer","description":"Version of the role. A role is updated only on version increase. This field or \u003cspan pulumi-lang-nodejs=\"`autoIncrementVersion`\" pulumi-lang-dotnet=\"`AutoIncrementVersion`\" pulumi-lang-go=\"`autoIncrementVersion`\" pulumi-lang-python=\"`auto_increment_version`\" pulumi-lang-yaml=\"`autoIncrementVersion`\" pulumi-lang-java=\"`autoIncrementVersion`\"\u003e`auto_increment_version`\u003c/span\u003e should be set.\n"}},"stateInputs":{"description":"Input properties used for looking up and filtering Role resources.\n","properties":{"autoIncrementVersion":{"type":"boolean","description":"Whether the role version should be incremented automatically on updates (and set to 1 on creation). This field or \u003cspan pulumi-lang-nodejs=\"`version`\" pulumi-lang-dotnet=\"`Version`\" pulumi-lang-go=\"`version`\" pulumi-lang-python=\"`version`\" pulumi-lang-yaml=\"`version`\" pulumi-lang-java=\"`version`\"\u003e`version`\u003c/span\u003e should be set.\n"},"description":{"type":"string","description":"Description of the role.\n"},"displayName":{"type":"string","description":"Display name of the role. Available with Grafana 8.5+.\n"},"global":{"type":"boolean","description":"Boolean to state whether the role is available across all organizations or not. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n","willReplaceOnChanges":true},"group":{"type":"string","description":"Group of the role. Available with Grafana 8.5+.\n"},"hidden":{"type":"boolean","description":"Boolean to state whether the role should be visible in the Grafana UI or not. Available with Grafana 8.5+. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"name":{"type":"string","description":"Name of the role\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"permissions":{"type":"array","items":{"$ref":"#/types/grafana:enterprise/RolePermission:RolePermission"},"description":"Specific set of actions granted by the role.\n"},"uid":{"type":"string","description":"Unique identifier of the role. Used for assignments.\n","willReplaceOnChanges":true},"version":{"type":"integer","description":"Version of the role. A role is updated only on version increase. This field or \u003cspan pulumi-lang-nodejs=\"`autoIncrementVersion`\" pulumi-lang-dotnet=\"`AutoIncrementVersion`\" pulumi-lang-go=\"`autoIncrementVersion`\" pulumi-lang-python=\"`auto_increment_version`\" pulumi-lang-yaml=\"`autoIncrementVersion`\" pulumi-lang-java=\"`autoIncrementVersion`\"\u003e`auto_increment_version`\u003c/span\u003e should be set.\n"}},"type":"object"},"aliases":[{"type":"grafana:index/role:Role"}]},"grafana:enterprise/roleAssignment:RoleAssignment":{"description":"Manages the entire set of assignments for a role. Assignments that aren't specified when applying this resource will be removed.\n**Note:** This resource is available only with Grafana Enterprise 9.2+.\n* [Official documentation](https://grafana.com/docs/grafana/latest/administration/roles-and-permissions/access-control/)\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/access_control/)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst testRole = new grafana.enterprise.Role(\"test_role\", {\n    name: \"Test Role\",\n    uid: \"testrole\",\n    version: 1,\n    global: true,\n    permissions: [{\n        action: \"org.users:add\",\n        scope: \"users:*\",\n    }],\n});\nconst testTeam = new grafana.oss.Team(\"test_team\", {name: \"terraform_test_team\"});\nconst testUser = new grafana.oss.User(\"test_user\", {\n    email: \"terraform_user@test.com\",\n    login: \"terraform_user@test.com\",\n    password: \"password\",\n});\nconst testSa = new grafana.oss.ServiceAccount(\"test_sa\", {\n    name: \"terraform_test_sa\",\n    role: \"Viewer\",\n});\nconst test = new grafana.enterprise.RoleAssignment(\"test\", {\n    roleUid: testRole.uid,\n    users: [testUser.id],\n    teams: [testTeam.id],\n    serviceAccounts: [testSa.id],\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\ntest_role = grafana.enterprise.Role(\"test_role\",\n    name=\"Test Role\",\n    uid=\"testrole\",\n    version=1,\n    global_=True,\n    permissions=[{\n        \"action\": \"org.users:add\",\n        \"scope\": \"users:*\",\n    }])\ntest_team = grafana.oss.Team(\"test_team\", name=\"terraform_test_team\")\ntest_user = grafana.oss.User(\"test_user\",\n    email=\"terraform_user@test.com\",\n    login=\"terraform_user@test.com\",\n    password=\"password\")\ntest_sa = grafana.oss.ServiceAccount(\"test_sa\",\n    name=\"terraform_test_sa\",\n    role=\"Viewer\")\ntest = grafana.enterprise.RoleAssignment(\"test\",\n    role_uid=test_role.uid,\n    users=[test_user.id],\n    teams=[test_team.id],\n    service_accounts=[test_sa.id])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var testRole = new Grafana.Enterprise.Role(\"test_role\", new()\n    {\n        Name = \"Test Role\",\n        Uid = \"testrole\",\n        Version = 1,\n        Global = true,\n        Permissions = new[]\n        {\n            new Grafana.Enterprise.Inputs.RolePermissionArgs\n            {\n                Action = \"org.users:add\",\n                Scope = \"users:*\",\n            },\n        },\n    });\n\n    var testTeam = new Grafana.Oss.Team(\"test_team\", new()\n    {\n        Name = \"terraform_test_team\",\n    });\n\n    var testUser = new Grafana.Oss.User(\"test_user\", new()\n    {\n        Email = \"terraform_user@test.com\",\n        Login = \"terraform_user@test.com\",\n        Password = \"password\",\n    });\n\n    var testSa = new Grafana.Oss.ServiceAccount(\"test_sa\", new()\n    {\n        Name = \"terraform_test_sa\",\n        Role = \"Viewer\",\n    });\n\n    var test = new Grafana.Enterprise.RoleAssignment(\"test\", new()\n    {\n        RoleUid = testRole.Uid,\n        Users = new[]\n        {\n            testUser.Id,\n        },\n        Teams = new[]\n        {\n            testTeam.Id,\n        },\n        ServiceAccounts = new[]\n        {\n            testSa.Id,\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/enterprise\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttestRole, err := enterprise.NewRole(ctx, \"test_role\", \u0026enterprise.RoleArgs{\n\t\t\tName:    pulumi.String(\"Test Role\"),\n\t\t\tUid:     pulumi.String(\"testrole\"),\n\t\t\tVersion: pulumi.Int(1),\n\t\t\tGlobal:  pulumi.Bool(true),\n\t\t\tPermissions: enterprise.RolePermissionArray{\n\t\t\t\t\u0026enterprise.RolePermissionArgs{\n\t\t\t\t\tAction: pulumi.String(\"org.users:add\"),\n\t\t\t\t\tScope:  pulumi.String(\"users:*\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestTeam, err := oss.NewTeam(ctx, \"test_team\", \u0026oss.TeamArgs{\n\t\t\tName: pulumi.String(\"terraform_test_team\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestUser, err := oss.NewUser(ctx, \"test_user\", \u0026oss.UserArgs{\n\t\t\tEmail:    pulumi.String(\"terraform_user@test.com\"),\n\t\t\tLogin:    pulumi.String(\"terraform_user@test.com\"),\n\t\t\tPassword: pulumi.String(\"password\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestSa, err := oss.NewServiceAccount(ctx, \"test_sa\", \u0026oss.ServiceAccountArgs{\n\t\t\tName: pulumi.String(\"terraform_test_sa\"),\n\t\t\tRole: pulumi.String(\"Viewer\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = enterprise.NewRoleAssignment(ctx, \"test\", \u0026enterprise.RoleAssignmentArgs{\n\t\t\tRoleUid: testRole.Uid,\n\t\t\tUsers: pulumi.IntArray{\n\t\t\t\ttestUser.ID(),\n\t\t\t},\n\t\t\tTeams: pulumi.StringArray{\n\t\t\t\ttestTeam.ID(),\n\t\t\t},\n\t\t\tServiceAccounts: pulumi.StringArray{\n\t\t\t\ttestSa.ID(),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.enterprise.Role;\nimport com.pulumi.grafana.enterprise.RoleArgs;\nimport com.pulumi.grafana.enterprise.inputs.RolePermissionArgs;\nimport com.pulumi.grafana.oss.Team;\nimport com.pulumi.grafana.oss.TeamArgs;\nimport com.pulumi.grafana.oss.User;\nimport com.pulumi.grafana.oss.UserArgs;\nimport com.pulumi.grafana.oss.ServiceAccount;\nimport com.pulumi.grafana.oss.ServiceAccountArgs;\nimport com.pulumi.grafana.enterprise.RoleAssignment;\nimport com.pulumi.grafana.enterprise.RoleAssignmentArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var testRole = new Role(\"testRole\", RoleArgs.builder()\n            .name(\"Test Role\")\n            .uid(\"testrole\")\n            .version(1)\n            .global(true)\n            .permissions(RolePermissionArgs.builder()\n                .action(\"org.users:add\")\n                .scope(\"users:*\")\n                .build())\n            .build());\n\n        var testTeam = new Team(\"testTeam\", TeamArgs.builder()\n            .name(\"terraform_test_team\")\n            .build());\n\n        var testUser = new User(\"testUser\", UserArgs.builder()\n            .email(\"terraform_user@test.com\")\n            .login(\"terraform_user@test.com\")\n            .password(\"password\")\n            .build());\n\n        var testSa = new ServiceAccount(\"testSa\", ServiceAccountArgs.builder()\n            .name(\"terraform_test_sa\")\n            .role(\"Viewer\")\n            .build());\n\n        var test = new RoleAssignment(\"test\", RoleAssignmentArgs.builder()\n            .roleUid(testRole.uid())\n            .users(testUser.id())\n            .teams(testTeam.id())\n            .serviceAccounts(testSa.id())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  testRole:\n    type: grafana:enterprise:Role\n    name: test_role\n    properties:\n      name: Test Role\n      uid: testrole\n      version: 1\n      global: true\n      permissions:\n        - action: org.users:add\n          scope: users:*\n  testTeam:\n    type: grafana:oss:Team\n    name: test_team\n    properties:\n      name: terraform_test_team\n  testUser:\n    type: grafana:oss:User\n    name: test_user\n    properties:\n      email: terraform_user@test.com\n      login: terraform_user@test.com\n      password: password\n  testSa:\n    type: grafana:oss:ServiceAccount\n    name: test_sa\n    properties:\n      name: terraform_test_sa\n      role: Viewer\n  test:\n    type: grafana:enterprise:RoleAssignment\n    properties:\n      roleUid: ${testRole.uid}\n      users:\n        - ${testUser.id}\n      teams:\n        - ${testTeam.id}\n      serviceAccounts:\n        - ${testSa.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:enterprise/roleAssignment:RoleAssignment name \"{{ roleUID }}\"\n```\n\n```sh\n$ pulumi import grafana:enterprise/roleAssignment:RoleAssignment name \"{{ orgID }}:{{ roleUID }}\"\n```\n\n","properties":{"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n"},"roleUid":{"type":"string","description":"Grafana RBAC role UID.\n"},"serviceAccounts":{"type":"array","items":{"type":"string"},"description":"IDs of service accounts that the role should be assigned to.\n"},"teams":{"type":"array","items":{"type":"string"},"description":"IDs of teams that the role should be assigned to.\n"},"users":{"type":"array","items":{"type":"integer"},"description":"IDs of users that the role should be assigned to.\n"}},"required":["roleUid"],"inputProperties":{"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"roleUid":{"type":"string","description":"Grafana RBAC role UID.\n","willReplaceOnChanges":true},"serviceAccounts":{"type":"array","items":{"type":"string"},"description":"IDs of service accounts that the role should be assigned to.\n"},"teams":{"type":"array","items":{"type":"string"},"description":"IDs of teams that the role should be assigned to.\n"},"users":{"type":"array","items":{"type":"integer"},"description":"IDs of users that the role should be assigned to.\n"}},"requiredInputs":["roleUid"],"stateInputs":{"description":"Input properties used for looking up and filtering RoleAssignment resources.\n","properties":{"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"roleUid":{"type":"string","description":"Grafana RBAC role UID.\n","willReplaceOnChanges":true},"serviceAccounts":{"type":"array","items":{"type":"string"},"description":"IDs of service accounts that the role should be assigned to.\n"},"teams":{"type":"array","items":{"type":"string"},"description":"IDs of teams that the role should be assigned to.\n"},"users":{"type":"array","items":{"type":"integer"},"description":"IDs of users that the role should be assigned to.\n"}},"type":"object"},"aliases":[{"type":"grafana:index/roleAssignment:RoleAssignment"}]},"grafana:enterprise/roleAssignmentItem:RoleAssignmentItem":{"description":"Manages a single assignment for a role. Conflicts with the \u003cspan pulumi-lang-nodejs=\"\"grafana.enterprise.RoleAssignment\"\" pulumi-lang-dotnet=\"\"grafana.enterprise.RoleAssignment\"\" pulumi-lang-go=\"\"enterprise.RoleAssignment\"\" pulumi-lang-python=\"\"enterprise.RoleAssignment\"\" pulumi-lang-yaml=\"\"grafana.enterprise.RoleAssignment\"\" pulumi-lang-java=\"\"grafana.enterprise.RoleAssignment\"\"\u003e\"grafana.enterprise.RoleAssignment\"\u003c/span\u003e resource which manages the entire set of assignments for a role.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst testRole = new grafana.enterprise.Role(\"test_role\", {\n    name: \"Test Role\",\n    uid: \"testrole\",\n    version: 1,\n    global: true,\n    permissions: [{\n        action: \"org.users:add\",\n        scope: \"users:*\",\n    }],\n});\nconst testTeam = new grafana.oss.Team(\"test_team\", {name: \"terraform_test_team\"});\nconst testUser = new grafana.oss.User(\"test_user\", {\n    email: \"terraform_user@test.com\",\n    login: \"terraform_user@test.com\",\n    password: \"password\",\n});\nconst testSa = new grafana.oss.ServiceAccount(\"test_sa\", {\n    name: \"terraform_test_sa\",\n    role: \"Viewer\",\n});\nconst user = new grafana.enterprise.RoleAssignmentItem(\"user\", {\n    roleUid: testRole.uid,\n    userId: testUser.id,\n});\nconst team = new grafana.enterprise.RoleAssignmentItem(\"team\", {\n    roleUid: testRole.uid,\n    teamId: testTeam.id,\n});\nconst serviceAccount = new grafana.enterprise.RoleAssignmentItem(\"service_account\", {\n    roleUid: testRole.uid,\n    serviceAccountId: testSa.id,\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\ntest_role = grafana.enterprise.Role(\"test_role\",\n    name=\"Test Role\",\n    uid=\"testrole\",\n    version=1,\n    global_=True,\n    permissions=[{\n        \"action\": \"org.users:add\",\n        \"scope\": \"users:*\",\n    }])\ntest_team = grafana.oss.Team(\"test_team\", name=\"terraform_test_team\")\ntest_user = grafana.oss.User(\"test_user\",\n    email=\"terraform_user@test.com\",\n    login=\"terraform_user@test.com\",\n    password=\"password\")\ntest_sa = grafana.oss.ServiceAccount(\"test_sa\",\n    name=\"terraform_test_sa\",\n    role=\"Viewer\")\nuser = grafana.enterprise.RoleAssignmentItem(\"user\",\n    role_uid=test_role.uid,\n    user_id=test_user.id)\nteam = grafana.enterprise.RoleAssignmentItem(\"team\",\n    role_uid=test_role.uid,\n    team_id=test_team.id)\nservice_account = grafana.enterprise.RoleAssignmentItem(\"service_account\",\n    role_uid=test_role.uid,\n    service_account_id=test_sa.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var testRole = new Grafana.Enterprise.Role(\"test_role\", new()\n    {\n        Name = \"Test Role\",\n        Uid = \"testrole\",\n        Version = 1,\n        Global = true,\n        Permissions = new[]\n        {\n            new Grafana.Enterprise.Inputs.RolePermissionArgs\n            {\n                Action = \"org.users:add\",\n                Scope = \"users:*\",\n            },\n        },\n    });\n\n    var testTeam = new Grafana.Oss.Team(\"test_team\", new()\n    {\n        Name = \"terraform_test_team\",\n    });\n\n    var testUser = new Grafana.Oss.User(\"test_user\", new()\n    {\n        Email = \"terraform_user@test.com\",\n        Login = \"terraform_user@test.com\",\n        Password = \"password\",\n    });\n\n    var testSa = new Grafana.Oss.ServiceAccount(\"test_sa\", new()\n    {\n        Name = \"terraform_test_sa\",\n        Role = \"Viewer\",\n    });\n\n    var user = new Grafana.Enterprise.RoleAssignmentItem(\"user\", new()\n    {\n        RoleUid = testRole.Uid,\n        UserId = testUser.Id,\n    });\n\n    var team = new Grafana.Enterprise.RoleAssignmentItem(\"team\", new()\n    {\n        RoleUid = testRole.Uid,\n        TeamId = testTeam.Id,\n    });\n\n    var serviceAccount = new Grafana.Enterprise.RoleAssignmentItem(\"service_account\", new()\n    {\n        RoleUid = testRole.Uid,\n        ServiceAccountId = testSa.Id,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/enterprise\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttestRole, err := enterprise.NewRole(ctx, \"test_role\", \u0026enterprise.RoleArgs{\n\t\t\tName:    pulumi.String(\"Test Role\"),\n\t\t\tUid:     pulumi.String(\"testrole\"),\n\t\t\tVersion: pulumi.Int(1),\n\t\t\tGlobal:  pulumi.Bool(true),\n\t\t\tPermissions: enterprise.RolePermissionArray{\n\t\t\t\t\u0026enterprise.RolePermissionArgs{\n\t\t\t\t\tAction: pulumi.String(\"org.users:add\"),\n\t\t\t\t\tScope:  pulumi.String(\"users:*\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestTeam, err := oss.NewTeam(ctx, \"test_team\", \u0026oss.TeamArgs{\n\t\t\tName: pulumi.String(\"terraform_test_team\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestUser, err := oss.NewUser(ctx, \"test_user\", \u0026oss.UserArgs{\n\t\t\tEmail:    pulumi.String(\"terraform_user@test.com\"),\n\t\t\tLogin:    pulumi.String(\"terraform_user@test.com\"),\n\t\t\tPassword: pulumi.String(\"password\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestSa, err := oss.NewServiceAccount(ctx, \"test_sa\", \u0026oss.ServiceAccountArgs{\n\t\t\tName: pulumi.String(\"terraform_test_sa\"),\n\t\t\tRole: pulumi.String(\"Viewer\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = enterprise.NewRoleAssignmentItem(ctx, \"user\", \u0026enterprise.RoleAssignmentItemArgs{\n\t\t\tRoleUid: testRole.Uid,\n\t\t\tUserId:  testUser.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = enterprise.NewRoleAssignmentItem(ctx, \"team\", \u0026enterprise.RoleAssignmentItemArgs{\n\t\t\tRoleUid: testRole.Uid,\n\t\t\tTeamId:  testTeam.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = enterprise.NewRoleAssignmentItem(ctx, \"service_account\", \u0026enterprise.RoleAssignmentItemArgs{\n\t\t\tRoleUid:          testRole.Uid,\n\t\t\tServiceAccountId: testSa.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.enterprise.Role;\nimport com.pulumi.grafana.enterprise.RoleArgs;\nimport com.pulumi.grafana.enterprise.inputs.RolePermissionArgs;\nimport com.pulumi.grafana.oss.Team;\nimport com.pulumi.grafana.oss.TeamArgs;\nimport com.pulumi.grafana.oss.User;\nimport com.pulumi.grafana.oss.UserArgs;\nimport com.pulumi.grafana.oss.ServiceAccount;\nimport com.pulumi.grafana.oss.ServiceAccountArgs;\nimport com.pulumi.grafana.enterprise.RoleAssignmentItem;\nimport com.pulumi.grafana.enterprise.RoleAssignmentItemArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var testRole = new Role(\"testRole\", RoleArgs.builder()\n            .name(\"Test Role\")\n            .uid(\"testrole\")\n            .version(1)\n            .global(true)\n            .permissions(RolePermissionArgs.builder()\n                .action(\"org.users:add\")\n                .scope(\"users:*\")\n                .build())\n            .build());\n\n        var testTeam = new Team(\"testTeam\", TeamArgs.builder()\n            .name(\"terraform_test_team\")\n            .build());\n\n        var testUser = new User(\"testUser\", UserArgs.builder()\n            .email(\"terraform_user@test.com\")\n            .login(\"terraform_user@test.com\")\n            .password(\"password\")\n            .build());\n\n        var testSa = new ServiceAccount(\"testSa\", ServiceAccountArgs.builder()\n            .name(\"terraform_test_sa\")\n            .role(\"Viewer\")\n            .build());\n\n        var user = new RoleAssignmentItem(\"user\", RoleAssignmentItemArgs.builder()\n            .roleUid(testRole.uid())\n            .userId(testUser.id())\n            .build());\n\n        var team = new RoleAssignmentItem(\"team\", RoleAssignmentItemArgs.builder()\n            .roleUid(testRole.uid())\n            .teamId(testTeam.id())\n            .build());\n\n        var serviceAccount = new RoleAssignmentItem(\"serviceAccount\", RoleAssignmentItemArgs.builder()\n            .roleUid(testRole.uid())\n            .serviceAccountId(testSa.id())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  testRole:\n    type: grafana:enterprise:Role\n    name: test_role\n    properties:\n      name: Test Role\n      uid: testrole\n      version: 1\n      global: true\n      permissions:\n        - action: org.users:add\n          scope: users:*\n  testTeam:\n    type: grafana:oss:Team\n    name: test_team\n    properties:\n      name: terraform_test_team\n  testUser:\n    type: grafana:oss:User\n    name: test_user\n    properties:\n      email: terraform_user@test.com\n      login: terraform_user@test.com\n      password: password\n  testSa:\n    type: grafana:oss:ServiceAccount\n    name: test_sa\n    properties:\n      name: terraform_test_sa\n      role: Viewer\n  user:\n    type: grafana:enterprise:RoleAssignmentItem\n    properties:\n      roleUid: ${testRole.uid}\n      userId: ${testUser.id}\n  team:\n    type: grafana:enterprise:RoleAssignmentItem\n    properties:\n      roleUid: ${testRole.uid}\n      teamId: ${testTeam.id}\n  serviceAccount:\n    type: grafana:enterprise:RoleAssignmentItem\n    name: service_account\n    properties:\n      roleUid: ${testRole.uid}\n      serviceAccountId: ${testSa.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:enterprise/roleAssignmentItem:RoleAssignmentItem name \"{{ roleUID }}:{{ type (user, team or service_account) }}:{{ identifier }}\"\n```\n\n```sh\n$ pulumi import grafana:enterprise/roleAssignmentItem:RoleAssignmentItem name \"{{ orgID }}:{{ roleUID }}:{{ type (user, team or service_account) }}:{{ identifier }}\"\n```\n\n","properties":{"orgId":{"type":"string","description":"The Organization ID. If not set, the default organization is used for basic authentication, or the one that owns your service account for token authentication.\n"},"roleUid":{"type":"string","description":"the role UID onto which to assign an actor\n"},"serviceAccountId":{"type":"string","description":"the service account onto which the role is to be assigned\n"},"teamId":{"type":"string","description":"the team onto which the role is to be assigned\n"},"userId":{"type":"string","description":"the user onto which the role is to be assigned\n"}},"required":["orgId","roleUid"],"inputProperties":{"orgId":{"type":"string","description":"The Organization ID. If not set, the default organization is used for basic authentication, or the one that owns your service account for token authentication.\n"},"roleUid":{"type":"string","description":"the role UID onto which to assign an actor\n"},"serviceAccountId":{"type":"string","description":"the service account onto which the role is to be assigned\n"},"teamId":{"type":"string","description":"the team onto which the role is to be assigned\n"},"userId":{"type":"string","description":"the user onto which the role is to be assigned\n"}},"requiredInputs":["roleUid"],"stateInputs":{"description":"Input properties used for looking up and filtering RoleAssignmentItem resources.\n","properties":{"orgId":{"type":"string","description":"The Organization ID. If not set, the default organization is used for basic authentication, or the one that owns your service account for token authentication.\n"},"roleUid":{"type":"string","description":"the role UID onto which to assign an actor\n"},"serviceAccountId":{"type":"string","description":"the service account onto which the role is to be assigned\n"},"teamId":{"type":"string","description":"the team onto which the role is to be assigned\n"},"userId":{"type":"string","description":"the user onto which the role is to be assigned\n"}},"type":"object"},"aliases":[{"type":"grafana:index/roleAssignmentItem:RoleAssignmentItem"}]},"grafana:enterprise/scimConfig:ScimConfig":{"description":"**Note:** This resource is available only with Grafana Enterprise.\n\n* [Official documentation](https://grafana.com/docs/grafana/latest/setup-grafana/configure-security/configure-scim-provisioning/)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst _default = new grafana.enterprise.ScimConfig(\"default\", {\n    enableUserSync: true,\n    enableGroupSync: false,\n    rejectNonProvisionedUsers: false,\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\ndefault = grafana.enterprise.ScimConfig(\"default\",\n    enable_user_sync=True,\n    enable_group_sync=False,\n    reject_non_provisioned_users=False)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var @default = new Grafana.Enterprise.ScimConfig(\"default\", new()\n    {\n        EnableUserSync = true,\n        EnableGroupSync = false,\n        RejectNonProvisionedUsers = false,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/enterprise\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := enterprise.NewScimConfig(ctx, \"default\", \u0026enterprise.ScimConfigArgs{\n\t\t\tEnableUserSync:            pulumi.Bool(true),\n\t\t\tEnableGroupSync:           pulumi.Bool(false),\n\t\t\tRejectNonProvisionedUsers: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.enterprise.ScimConfig;\nimport com.pulumi.grafana.enterprise.ScimConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var default_ = new ScimConfig(\"default\", ScimConfigArgs.builder()\n            .enableUserSync(true)\n            .enableGroupSync(false)\n            .rejectNonProvisionedUsers(false)\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  default:\n    type: grafana:enterprise:ScimConfig\n    properties:\n      enableUserSync: true\n      enableGroupSync: false\n      rejectNonProvisionedUsers: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:enterprise/scimConfig:ScimConfig name \"\"\n```\n\n```sh\n$ pulumi import grafana:enterprise/scimConfig:ScimConfig name \"{{ orgID }}\"\n```\n\n","properties":{"enableGroupSync":{"type":"boolean","description":"Whether group synchronization is enabled.\n"},"enableUserSync":{"type":"boolean","description":"Whether user synchronization is enabled.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n"},"rejectNonProvisionedUsers":{"type":"boolean","description":"Whether to block non-provisioned user access to Grafana. Cloud Portal users will always be able to access Grafana, regardless of this setting.\n"}},"required":["enableGroupSync","enableUserSync","rejectNonProvisionedUsers"],"inputProperties":{"enableGroupSync":{"type":"boolean","description":"Whether group synchronization is enabled.\n"},"enableUserSync":{"type":"boolean","description":"Whether user synchronization is enabled.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"rejectNonProvisionedUsers":{"type":"boolean","description":"Whether to block non-provisioned user access to Grafana. Cloud Portal users will always be able to access Grafana, regardless of this setting.\n"}},"requiredInputs":["enableGroupSync","enableUserSync","rejectNonProvisionedUsers"],"stateInputs":{"description":"Input properties used for looking up and filtering ScimConfig resources.\n","properties":{"enableGroupSync":{"type":"boolean","description":"Whether group synchronization is enabled.\n"},"enableUserSync":{"type":"boolean","description":"Whether user synchronization is enabled.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"rejectNonProvisionedUsers":{"type":"boolean","description":"Whether to block non-provisioned user access to Grafana. Cloud Portal users will always be able to access Grafana, regardless of this setting.\n"}},"type":"object"}},"grafana:enterprise/teamExternalGroup:TeamExternalGroup":{"description":"Equivalent to the the \u003cspan pulumi-lang-nodejs=\"`teamSync`\" pulumi-lang-dotnet=\"`TeamSync`\" pulumi-lang-go=\"`teamSync`\" pulumi-lang-python=\"`team_sync`\" pulumi-lang-yaml=\"`teamSync`\" pulumi-lang-java=\"`teamSync`\"\u003e`team_sync`\u003c/span\u003e attribute of the \u003cspan pulumi-lang-nodejs=\"`grafana.oss.Team`\" pulumi-lang-dotnet=\"`grafana.oss.Team`\" pulumi-lang-go=\"`oss.Team`\" pulumi-lang-python=\"`oss.Team`\" pulumi-lang-yaml=\"`grafana.oss.Team`\" pulumi-lang-java=\"`grafana.oss.Team`\"\u003e`grafana.oss.Team`\u003c/span\u003e resource. Use one or the other to configure a team's external groups syncing config.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst myTeam = new grafana.oss.Team(\"my_team\", {name: \"My Team\"});\nconst test_team_group = new grafana.enterprise.TeamExternalGroup(\"test-team-group\", {\n    teamId: myTeam.id,\n    groups: [\n        \"test-group-1\",\n        \"test-group-2\",\n    ],\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\nmy_team = grafana.oss.Team(\"my_team\", name=\"My Team\")\ntest_team_group = grafana.enterprise.TeamExternalGroup(\"test-team-group\",\n    team_id=my_team.id,\n    groups=[\n        \"test-group-1\",\n        \"test-group-2\",\n    ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var myTeam = new Grafana.Oss.Team(\"my_team\", new()\n    {\n        Name = \"My Team\",\n    });\n\n    var test_team_group = new Grafana.Enterprise.TeamExternalGroup(\"test-team-group\", new()\n    {\n        TeamId = myTeam.Id,\n        Groups = new[]\n        {\n            \"test-group-1\",\n            \"test-group-2\",\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/enterprise\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmyTeam, err := oss.NewTeam(ctx, \"my_team\", \u0026oss.TeamArgs{\n\t\t\tName: pulumi.String(\"My Team\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = enterprise.NewTeamExternalGroup(ctx, \"test-team-group\", \u0026enterprise.TeamExternalGroupArgs{\n\t\t\tTeamId: myTeam.ID(),\n\t\t\tGroups: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"test-group-1\"),\n\t\t\t\tpulumi.String(\"test-group-2\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.Team;\nimport com.pulumi.grafana.oss.TeamArgs;\nimport com.pulumi.grafana.enterprise.TeamExternalGroup;\nimport com.pulumi.grafana.enterprise.TeamExternalGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var myTeam = new Team(\"myTeam\", TeamArgs.builder()\n            .name(\"My Team\")\n            .build());\n\n        var test_team_group = new TeamExternalGroup(\"test-team-group\", TeamExternalGroupArgs.builder()\n            .teamId(myTeam.id())\n            .groups(            \n                \"test-group-1\",\n                \"test-group-2\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  myTeam:\n    type: grafana:oss:Team\n    name: my_team\n    properties:\n      name: My Team\n  test-team-group:\n    type: grafana:enterprise:TeamExternalGroup\n    properties:\n      teamId: ${myTeam.id}\n      groups:\n        - test-group-1\n        - test-group-2\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:enterprise/teamExternalGroup:TeamExternalGroup name \"{{ teamID }}\"\n```\n\n```sh\n$ pulumi import grafana:enterprise/teamExternalGroup:TeamExternalGroup name \"{{ orgID }}:{{ teamID }}\"\n```\n\n","properties":{"groups":{"type":"array","items":{"type":"string"},"description":"The team external groups list\n"},"teamId":{"type":"string","description":"The Team ID\n"}},"required":["groups","teamId"],"inputProperties":{"groups":{"type":"array","items":{"type":"string"},"description":"The team external groups list\n"},"teamId":{"type":"string","description":"The Team ID\n","willReplaceOnChanges":true}},"requiredInputs":["groups","teamId"],"stateInputs":{"description":"Input properties used for looking up and filtering TeamExternalGroup resources.\n","properties":{"groups":{"type":"array","items":{"type":"string"},"description":"The team external groups list\n"},"teamId":{"type":"string","description":"The Team ID\n","willReplaceOnChanges":true}},"type":"object"},"aliases":[{"type":"grafana:index/teamExternalGroup:TeamExternalGroup"}]},"grafana:experimental/appsDashboard:AppsDashboard":{"description":"Manages Grafana dashboards using the new Grafana APIs.\n\n* [Official documentation](https://grafana.com/docs/grafana/latest/dashboards/)\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/dashboard/#new-dashboard-apis)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst example = new grafana.experimental.AppsDashboard(\"example\", {\n    metadata: {\n        uid: \"example-dashboard\",\n    },\n    spec: {\n        title: \"Example Dashboard\",\n        json: JSON.stringify({\n            title: \"Example Dashboard\",\n            uid: \"example-dashboard\",\n            panels: [],\n            schemaVersion: 42,\n        }),\n    },\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumiverse_grafana as grafana\n\nexample = grafana.experimental.AppsDashboard(\"example\",\n    metadata={\n        \"uid\": \"example-dashboard\",\n    },\n    spec={\n        \"title\": \"Example Dashboard\",\n        \"json\": json.dumps({\n            \"title\": \"Example Dashboard\",\n            \"uid\": \"example-dashboard\",\n            \"panels\": [],\n            \"schemaVersion\": 42,\n        }),\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = new Grafana.Experimental.AppsDashboard(\"example\", new()\n    {\n        Metadata = new Grafana.Experimental.Inputs.AppsDashboardMetadataArgs\n        {\n            Uid = \"example-dashboard\",\n        },\n        Spec = new Grafana.Experimental.Inputs.AppsDashboardSpecArgs\n        {\n            Title = \"Example Dashboard\",\n            Json = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n            {\n                [\"title\"] = \"Example Dashboard\",\n                [\"uid\"] = \"example-dashboard\",\n                [\"panels\"] = new[]\n                {\n                },\n                [\"schemaVersion\"] = 42,\n            }),\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/experimental\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"title\":         \"Example Dashboard\",\n\t\t\t\"uid\":           \"example-dashboard\",\n\t\t\t\"panels\":        []interface{}{},\n\t\t\t\"schemaVersion\": 42,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\t_, err = experimental.NewAppsDashboard(ctx, \"example\", \u0026experimental.AppsDashboardArgs{\n\t\t\tMetadata: \u0026experimental.AppsDashboardMetadataArgs{\n\t\t\t\tUid: pulumi.String(\"example-dashboard\"),\n\t\t\t},\n\t\t\tSpec: \u0026experimental.AppsDashboardSpecArgs{\n\t\t\t\tTitle: pulumi.String(\"Example Dashboard\"),\n\t\t\t\tJson:  pulumi.String(json0),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.experimental.AppsDashboard;\nimport com.pulumi.grafana.experimental.AppsDashboardArgs;\nimport com.pulumi.grafana.experimental.inputs.AppsDashboardMetadataArgs;\nimport com.pulumi.grafana.experimental.inputs.AppsDashboardSpecArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var example = new AppsDashboard(\"example\", AppsDashboardArgs.builder()\n            .metadata(AppsDashboardMetadataArgs.builder()\n                .uid(\"example-dashboard\")\n                .build())\n            .spec(AppsDashboardSpecArgs.builder()\n                .title(\"Example Dashboard\")\n                .json(serializeJson(\n                    jsonObject(\n                        jsonProperty(\"title\", \"Example Dashboard\"),\n                        jsonProperty(\"uid\", \"example-dashboard\"),\n                        jsonProperty(\"panels\", jsonArray(\n                        )),\n                        jsonProperty(\"schemaVersion\", 42)\n                    )))\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: grafana:experimental:AppsDashboard\n    properties:\n      metadata:\n        uid: example-dashboard\n      spec:\n        title: Example Dashboard\n        json:\n          fn::toJSON:\n            title: Example Dashboard\n            uid: example-dashboard\n            panels: []\n            schemaVersion: 42\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"metadata":{"$ref":"#/types/grafana:experimental/AppsDashboardMetadata:AppsDashboardMetadata","description":"The metadata of the resource.\n"},"options":{"$ref":"#/types/grafana:experimental/AppsDashboardOptions:AppsDashboardOptions","description":"Options for applying the resource.\n"},"spec":{"$ref":"#/types/grafana:experimental/AppsDashboardSpec:AppsDashboardSpec","description":"The spec of the resource.\n"}},"inputProperties":{"metadata":{"$ref":"#/types/grafana:experimental/AppsDashboardMetadata:AppsDashboardMetadata","description":"The metadata of the resource.\n"},"options":{"$ref":"#/types/grafana:experimental/AppsDashboardOptions:AppsDashboardOptions","description":"Options for applying the resource.\n"},"spec":{"$ref":"#/types/grafana:experimental/AppsDashboardSpec:AppsDashboardSpec","description":"The spec of the resource.\n"}},"stateInputs":{"description":"Input properties used for looking up and filtering AppsDashboard resources.\n","properties":{"metadata":{"$ref":"#/types/grafana:experimental/AppsDashboardMetadata:AppsDashboardMetadata","description":"The metadata of the resource.\n"},"options":{"$ref":"#/types/grafana:experimental/AppsDashboardOptions:AppsDashboardOptions","description":"Options for applying the resource.\n"},"spec":{"$ref":"#/types/grafana:experimental/AppsDashboardSpec:AppsDashboardSpec","description":"The spec of the resource.\n"}},"type":"object"}},"grafana:experimental/appsPlaylistV0Alpha1:AppsPlaylistV0Alpha1":{"description":"Manages Grafana playlists using the new Grafana APIs.\n\n* [Official documentation](https://grafana.com/docs/grafana/latest/dashboards/create-manage-playlists/)\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/apis/)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst example = new grafana.experimental.AppsPlaylistV0Alpha1(\"example\", {\n    metadata: {\n        uid: \"example-playlist\",\n    },\n    spec: {\n        title: \"Example Playlist\",\n        interval: \"5m\",\n        items: [{\n            type: \"dashboard_by_uid\",\n            value: \"example-dashboard-uid\",\n        }],\n    },\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\nexample = grafana.experimental.AppsPlaylistV0Alpha1(\"example\",\n    metadata={\n        \"uid\": \"example-playlist\",\n    },\n    spec={\n        \"title\": \"Example Playlist\",\n        \"interval\": \"5m\",\n        \"items\": [{\n            \"type\": \"dashboard_by_uid\",\n            \"value\": \"example-dashboard-uid\",\n        }],\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var example = new Grafana.Experimental.AppsPlaylistV0Alpha1(\"example\", new()\n    {\n        Metadata = new Grafana.Experimental.Inputs.AppsPlaylistV0Alpha1MetadataArgs\n        {\n            Uid = \"example-playlist\",\n        },\n        Spec = new Grafana.Experimental.Inputs.AppsPlaylistV0Alpha1SpecArgs\n        {\n            Title = \"Example Playlist\",\n            Interval = \"5m\",\n            Items = new[]\n            {\n                new Grafana.Experimental.Inputs.AppsPlaylistV0Alpha1SpecItemArgs\n                {\n                    Type = \"dashboard_by_uid\",\n                    Value = \"example-dashboard-uid\",\n                },\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/experimental\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := experimental.NewAppsPlaylistV0Alpha1(ctx, \"example\", \u0026experimental.AppsPlaylistV0Alpha1Args{\n\t\t\tMetadata: \u0026experimental.AppsPlaylistV0Alpha1MetadataArgs{\n\t\t\t\tUid: pulumi.String(\"example-playlist\"),\n\t\t\t},\n\t\t\tSpec: \u0026experimental.AppsPlaylistV0Alpha1SpecArgs{\n\t\t\t\tTitle:    pulumi.String(\"Example Playlist\"),\n\t\t\t\tInterval: pulumi.String(\"5m\"),\n\t\t\t\tItems: experimental.AppsPlaylistV0Alpha1SpecItemArray{\n\t\t\t\t\t\u0026experimental.AppsPlaylistV0Alpha1SpecItemArgs{\n\t\t\t\t\t\tType:  pulumi.String(\"dashboard_by_uid\"),\n\t\t\t\t\t\tValue: pulumi.String(\"example-dashboard-uid\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.experimental.AppsPlaylistV0Alpha1;\nimport com.pulumi.grafana.experimental.AppsPlaylistV0Alpha1Args;\nimport com.pulumi.grafana.experimental.inputs.AppsPlaylistV0Alpha1MetadataArgs;\nimport com.pulumi.grafana.experimental.inputs.AppsPlaylistV0Alpha1SpecArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var example = new AppsPlaylistV0Alpha1(\"example\", AppsPlaylistV0Alpha1Args.builder()\n            .metadata(AppsPlaylistV0Alpha1MetadataArgs.builder()\n                .uid(\"example-playlist\")\n                .build())\n            .spec(AppsPlaylistV0Alpha1SpecArgs.builder()\n                .title(\"Example Playlist\")\n                .interval(\"5m\")\n                .items(AppsPlaylistV0Alpha1SpecItemArgs.builder()\n                    .type(\"dashboard_by_uid\")\n                    .value(\"example-dashboard-uid\")\n                    .build())\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: grafana:experimental:AppsPlaylistV0Alpha1\n    properties:\n      metadata:\n        uid: example-playlist\n      spec:\n        title: Example Playlist\n        interval: 5m\n        items:\n          - type: dashboard_by_uid\n            value: example-dashboard-uid\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"metadata":{"$ref":"#/types/grafana:experimental/AppsPlaylistV0Alpha1Metadata:AppsPlaylistV0Alpha1Metadata","description":"The metadata of the resource.\n"},"options":{"$ref":"#/types/grafana:experimental/AppsPlaylistV0Alpha1Options:AppsPlaylistV0Alpha1Options","description":"Options for applying the resource.\n"},"spec":{"$ref":"#/types/grafana:experimental/AppsPlaylistV0Alpha1Spec:AppsPlaylistV0Alpha1Spec","description":"The spec of the resource.\n"}},"inputProperties":{"metadata":{"$ref":"#/types/grafana:experimental/AppsPlaylistV0Alpha1Metadata:AppsPlaylistV0Alpha1Metadata","description":"The metadata of the resource.\n"},"options":{"$ref":"#/types/grafana:experimental/AppsPlaylistV0Alpha1Options:AppsPlaylistV0Alpha1Options","description":"Options for applying the resource.\n"},"spec":{"$ref":"#/types/grafana:experimental/AppsPlaylistV0Alpha1Spec:AppsPlaylistV0Alpha1Spec","description":"The spec of the resource.\n"}},"stateInputs":{"description":"Input properties used for looking up and filtering AppsPlaylistV0Alpha1 resources.\n","properties":{"metadata":{"$ref":"#/types/grafana:experimental/AppsPlaylistV0Alpha1Metadata:AppsPlaylistV0Alpha1Metadata","description":"The metadata of the resource.\n"},"options":{"$ref":"#/types/grafana:experimental/AppsPlaylistV0Alpha1Options:AppsPlaylistV0Alpha1Options","description":"Options for applying the resource.\n"},"spec":{"$ref":"#/types/grafana:experimental/AppsPlaylistV0Alpha1Spec:AppsPlaylistV0Alpha1Spec","description":"The spec of the resource.\n"}},"type":"object"}},"grafana:fleetManagement/collector:Collector":{"description":"Manages Grafana Fleet Management collectors.\n\n* [Official documentation](https://grafana.com/docs/grafana-cloud/send-data/fleet-management/)\n* [API documentation](https://grafana.com/docs/grafana-cloud/send-data/fleet-management/api-reference/collector-api/)\n* Step-by-step guide\n\nRequired access policy scopes:\n\n* fleet-management:read\n* fleet-management:write\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst test = new grafana.fleetmanagement.Collector(\"test\", {\n    id: \"my_collector\",\n    remoteAttributes: {\n        env: \"PROD\",\n        owner: \"TEAM-A\",\n    },\n    enabled: true,\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\ntest = grafana.fleetmanagement.Collector(\"test\",\n    id=\"my_collector\",\n    remote_attributes={\n        \"env\": \"PROD\",\n        \"owner\": \"TEAM-A\",\n    },\n    enabled=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var test = new Grafana.FleetManagement.Collector(\"test\", new()\n    {\n        Id = \"my_collector\",\n        RemoteAttributes = \n        {\n            { \"env\", \"PROD\" },\n            { \"owner\", \"TEAM-A\" },\n        },\n        Enabled = true,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/fleetmanagement\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fleetmanagement.NewCollector(ctx, \"test\", \u0026fleetmanagement.CollectorArgs{\n\t\t\tId: \"my_collector\",\n\t\t\tRemoteAttributes: pulumi.StringMap{\n\t\t\t\t\"env\":   pulumi.String(\"PROD\"),\n\t\t\t\t\"owner\": pulumi.String(\"TEAM-A\"),\n\t\t\t},\n\t\t\tEnabled: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.fleetManagement.Collector;\nimport com.pulumi.grafana.fleetManagement.CollectorArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var test = new Collector(\"test\", CollectorArgs.builder()\n            .id(\"my_collector\")\n            .remoteAttributes(Map.ofEntries(\n                Map.entry(\"env\", \"PROD\"),\n                Map.entry(\"owner\", \"TEAM-A\")\n            ))\n            .enabled(true)\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  test:\n    type: grafana:fleetManagement:Collector\n    properties:\n      id: my_collector\n      remoteAttributes:\n        env: PROD\n        owner: TEAM-A\n      enabled: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:fleetManagement/collector:Collector name \"{{ id }}\"\n```\n\n","properties":{"collectorType":{"type":"string","description":"Type of the collector. Must be one of: ALLOY, OTEL. Defaults to ALLOY if not specified.\n"},"enabled":{"type":"boolean","description":"Whether remote configuration for the collector is enabled or not. If the collector is disabled, it will receive empty configurations from the Fleet Management service\n"},"remoteAttributes":{"type":"object","additionalProperties":{"type":"string"},"description":"Remote attributes for the collector\n"}},"required":["collectorType","enabled","remoteAttributes"],"inputProperties":{"collectorType":{"type":"string","description":"Type of the collector. Must be one of: ALLOY, OTEL. Defaults to ALLOY if not specified.\n"},"enabled":{"type":"boolean","description":"Whether remote configuration for the collector is enabled or not. If the collector is disabled, it will receive empty configurations from the Fleet Management service\n"},"remoteAttributes":{"type":"object","additionalProperties":{"type":"string"},"description":"Remote attributes for the collector\n"}},"stateInputs":{"description":"Input properties used for looking up and filtering Collector resources.\n","properties":{"collectorType":{"type":"string","description":"Type of the collector. Must be one of: ALLOY, OTEL. Defaults to ALLOY if not specified.\n"},"enabled":{"type":"boolean","description":"Whether remote configuration for the collector is enabled or not. If the collector is disabled, it will receive empty configurations from the Fleet Management service\n"},"remoteAttributes":{"type":"object","additionalProperties":{"type":"string"},"description":"Remote attributes for the collector\n"}},"type":"object"}},"grafana:fleetManagement/pipeline:Pipeline":{"description":"Manages Grafana Fleet Management pipelines.\n\n* [Official documentation](https://grafana.com/docs/grafana-cloud/send-data/fleet-management/)\n* [API documentation](https://grafana.com/docs/grafana-cloud/send-data/fleet-management/api-reference/pipeline-api/)\n* Step-by-step guide\n\nRequired access policy scopes:\n\n* fleet-management:read\n* fleet-management:write\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\nimport * as std from \"@pulumi/std\";\n\nconst test = new grafana.fleetmanagement.Pipeline(\"test\", {\n    name: \"my_pipeline\",\n    contents: std.index.file({\n        input: \"config.alloy\",\n    }).result,\n    matchers: [\n        \"collector.os=~\\\".*\\\"\",\n        \"env=\\\"PROD\\\"\",\n    ],\n    enabled: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_std as std\nimport pulumiverse_grafana as grafana\n\ntest = grafana.fleetmanagement.Pipeline(\"test\",\n    name=\"my_pipeline\",\n    contents=std.index.file(input=\"config.alloy\")[\"result\"],\n    matchers=[\n        \"collector.os=~\\\".*\\\"\",\n        \"env=\\\"PROD\\\"\",\n    ],\n    enabled=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\nusing Std = Pulumi.Std;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var test = new Grafana.FleetManagement.Pipeline(\"test\", new()\n    {\n        Name = \"my_pipeline\",\n        Contents = Std.Index.File.Invoke(new()\n        {\n            Input = \"config.alloy\",\n        }).Result,\n        Matchers = new[]\n        {\n            \"collector.os=~\\\".*\\\"\",\n            \"env=\\\"PROD\\\"\",\n        },\n        Enabled = true,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-std/sdk/go/std\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/fleetmanagement\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tinvokeFile, err := std.File(ctx, map[string]interface{}{\n\t\t\t\"input\": \"config.alloy\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = fleetmanagement.NewPipeline(ctx, \"test\", \u0026fleetmanagement.PipelineArgs{\n\t\t\tName:     pulumi.String(\"my_pipeline\"),\n\t\t\tContents: invokeFile.Result,\n\t\t\tMatchers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"collector.os=~\\\".*\\\"\"),\n\t\t\t\tpulumi.String(\"env=\\\"PROD\\\"\"),\n\t\t\t},\n\t\t\tEnabled: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.fleetManagement.Pipeline;\nimport com.pulumi.grafana.fleetManagement.PipelineArgs;\nimport com.pulumi.std.StdFunctions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var test = new Pipeline(\"test\", PipelineArgs.builder()\n            .name(\"my_pipeline\")\n            .contents(StdFunctions.file(Map.of(\"input\", \"config.alloy\")).result())\n            .matchers(            \n                \"collector.os=~\\\".*\\\"\",\n                \"env=\\\"PROD\\\"\")\n            .enabled(true)\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  test:\n    type: grafana:fleetManagement:Pipeline\n    properties:\n      name: my_pipeline\n      contents:\n        fn::invoke:\n          function: std:file\n          arguments:\n            input: config.alloy\n          return: result\n      matchers:\n        - collector.os=~\".*\"\n        - env=\"PROD\"\n      enabled: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:fleetManagement/pipeline:Pipeline name \"{{ name }}\"\n```\n\n","properties":{"configType":{"type":"string","description":"Type of the config. Must be one of: ALLOY, OTEL. Defaults to ALLOY if not specified.\n"},"contents":{"type":"string","description":"Configuration contents of the pipeline to be used by collectors (can be Alloy config syntax or OTel YAML)\n"},"enabled":{"type":"boolean","description":"Whether the pipeline is enabled for collectors\n"},"matchers":{"type":"array","items":{"type":"string"},"description":"Used to match against collectors and assign pipelines to them; follows the syntax of Prometheus Alertmanager matchers\n"},"name":{"type":"string","description":"Name of the pipeline which is the unique identifier for the pipeline\n"}},"required":["configType","contents","enabled","matchers","name"],"inputProperties":{"configType":{"type":"string","description":"Type of the config. Must be one of: ALLOY, OTEL. Defaults to ALLOY if not specified.\n"},"contents":{"type":"string","description":"Configuration contents of the pipeline to be used by collectors (can be Alloy config syntax or OTel YAML)\n"},"enabled":{"type":"boolean","description":"Whether the pipeline is enabled for collectors\n"},"matchers":{"type":"array","items":{"type":"string"},"description":"Used to match against collectors and assign pipelines to them; follows the syntax of Prometheus Alertmanager matchers\n"},"name":{"type":"string","description":"Name of the pipeline which is the unique identifier for the pipeline\n"}},"requiredInputs":["contents"],"stateInputs":{"description":"Input properties used for looking up and filtering Pipeline resources.\n","properties":{"configType":{"type":"string","description":"Type of the config. Must be one of: ALLOY, OTEL. Defaults to ALLOY if not specified.\n"},"contents":{"type":"string","description":"Configuration contents of the pipeline to be used by collectors (can be Alloy config syntax or OTel YAML)\n"},"enabled":{"type":"boolean","description":"Whether the pipeline is enabled for collectors\n"},"matchers":{"type":"array","items":{"type":"string"},"description":"Used to match against collectors and assign pipelines to them; follows the syntax of Prometheus Alertmanager matchers\n"},"name":{"type":"string","description":"Name of the pipeline which is the unique identifier for the pipeline\n"}},"type":"object"}},"grafana:frontendObservability/app:App":{"description":"## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```yaml\nresources:\n  test-app:\n    type: grafana:frontendObservability:App\n    properties:\n      stackId: ${teststack.id}\n      name: test-app\n      allowedOrigins:\n        - https://grafana.com\n      extraLogAttributes:\n        terraform: 'true'\n      settings:\n        combineLabData: '1'\n        geolocation.enabled: '1'\n        geolocation.level: '3'\n        geolocation.country_denylist: DE,GR\nvariables:\n  teststack:\n    fn::invoke:\n      function: grafana:cloud:getStack\n      arguments:\n        name: gcloudstacktest\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:frontendObservability/app:App name \"{{ stack_id }}:{{ name }}\"\n```\n\n","properties":{"allowedOrigins":{"type":"array","items":{"type":"string"},"description":"A list of allowed origins for CORS.\n"},"collectorEndpoint":{"type":"string","description":"The collector URL Grafana Cloud Frontend Observability. Use this endpoint to send your Telemetry.\n"},"extraLogAttributes":{"type":"object","additionalProperties":{"type":"string"},"description":"The extra attributes to append in each signal.\n"},"name":{"type":"string"},"settings":{"type":"object","additionalProperties":{"type":"string"},"description":"The key-value settings of the Frontend Observability app. Available Settings: `{combineLabData=(0|1),geolocation.level=(0|1),geolocation.level=0-4,geolocation.country_denylist=\u003ccomma-separated-list-of-country-codes\u003e}`\n"},"stackId":{"type":"integer"}},"required":["allowedOrigins","collectorEndpoint","extraLogAttributes","name","settings","stackId"],"inputProperties":{"allowedOrigins":{"type":"array","items":{"type":"string"},"description":"A list of allowed origins for CORS.\n"},"extraLogAttributes":{"type":"object","additionalProperties":{"type":"string"},"description":"The extra attributes to append in each signal.\n"},"name":{"type":"string"},"settings":{"type":"object","additionalProperties":{"type":"string"},"description":"The key-value settings of the Frontend Observability app. Available Settings: `{combineLabData=(0|1),geolocation.level=(0|1),geolocation.level=0-4,geolocation.country_denylist=\u003ccomma-separated-list-of-country-codes\u003e}`\n"},"stackId":{"type":"integer"}},"requiredInputs":["allowedOrigins","extraLogAttributes","settings","stackId"],"stateInputs":{"description":"Input properties used for looking up and filtering App resources.\n","properties":{"allowedOrigins":{"type":"array","items":{"type":"string"},"description":"A list of allowed origins for CORS.\n"},"collectorEndpoint":{"type":"string","description":"The collector URL Grafana Cloud Frontend Observability. Use this endpoint to send your Telemetry.\n"},"extraLogAttributes":{"type":"object","additionalProperties":{"type":"string"},"description":"The extra attributes to append in each signal.\n"},"name":{"type":"string"},"settings":{"type":"object","additionalProperties":{"type":"string"},"description":"The key-value settings of the Frontend Observability app. Available Settings: `{combineLabData=(0|1),geolocation.level=(0|1),geolocation.level=0-4,geolocation.country_denylist=\u003ccomma-separated-list-of-country-codes\u003e}`\n"},"stackId":{"type":"integer"}},"type":"object"}},"grafana:k6/installation:Installation":{"description":"Sets up the k6 App on a Grafana Cloud instance and generates a token. \nOnce a Grafana Cloud stack is created, a user can either use this resource or go into the UI to install k6.\nThis resource cannot be imported but it can be used on an existing k6 App installation without issues.\n\n**Note that this resource must be used on a provider configured with Grafana Cloud credentials.**\n\n* [Official documentation](https://grafana.com/docs/grafana-cloud/testing/k6/)\n\nRequired access policy scopes:\n\n* stacks:read\n* stacks:write\n* subscriptions:read\n* orgs:read\n* stack-service-accounts:write\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst config = new pulumi.Config();\n// Cloud Access Policy token for Grafana Cloud with the following scopes: stacks:read|write|delete, stack-service-accounts:write\nconst cloudAccessPolicyToken = config.requireObject\u003cany\u003e(\"cloudAccessPolicyToken\");\nconst stackSlug = config.requireObject\u003cany\u003e(\"stackSlug\");\nconst cloudRegion = config.get(\"cloudRegion\") || \"us\";\nconst k6Stack = new grafana.cloud.Stack(\"k6_stack\", {\n    name: stackSlug,\n    slug: stackSlug,\n    regionSlug: cloudRegion,\n});\n// Step 2: Create a Service Account and a token to install the k6 App\nconst k6Sa = new grafana.cloud.StackServiceAccount(\"k6_sa\", {\n    stackSlug: stackSlug,\n    name: `${stackSlug}-k6-app`,\n    role: \"Admin\",\n    isDisabled: false,\n});\nconst k6SaToken = new grafana.cloud.StackServiceAccountToken(\"k6_sa_token\", {\n    stackSlug: stackSlug,\n    name: `${stackSlug}-k6-app-token`,\n    serviceAccountId: k6Sa.id,\n});\n// Step 3: Install the k6 App on the stack\nconst k6Installation = new grafana.k6.Installation(\"k6_installation\", {\n    cloudAccessPolicyToken: cloudAccessPolicyToken,\n    stackId: k6Stack.id,\n    grafanaSaToken: k6SaToken.key,\n    grafanaUser: \"admin\",\n});\nconst myK6Project = new grafana.k6.Project(\"my_k6_project\", {name: \"k6 Project created with TF\"});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\nconfig = pulumi.Config()\n# Cloud Access Policy token for Grafana Cloud with the following scopes: stacks:read|write|delete, stack-service-accounts:write\ncloud_access_policy_token = config.require_object(\"cloudAccessPolicyToken\")\nstack_slug = config.require_object(\"stackSlug\")\ncloud_region = config.get(\"cloudRegion\")\nif cloud_region is None:\n    cloud_region = \"us\"\nk6_stack = grafana.cloud.Stack(\"k6_stack\",\n    name=stack_slug,\n    slug=stack_slug,\n    region_slug=cloud_region)\n# Step 2: Create a Service Account and a token to install the k6 App\nk6_sa = grafana.cloud.StackServiceAccount(\"k6_sa\",\n    stack_slug=stack_slug,\n    name=f\"{stack_slug}-k6-app\",\n    role=\"Admin\",\n    is_disabled=False)\nk6_sa_token = grafana.cloud.StackServiceAccountToken(\"k6_sa_token\",\n    stack_slug=stack_slug,\n    name=f\"{stack_slug}-k6-app-token\",\n    service_account_id=k6_sa.id)\n# Step 3: Install the k6 App on the stack\nk6_installation = grafana.k6.Installation(\"k6_installation\",\n    cloud_access_policy_token=cloud_access_policy_token,\n    stack_id=k6_stack.id,\n    grafana_sa_token=k6_sa_token.key,\n    grafana_user=\"admin\")\nmy_k6_project = grafana.k6.Project(\"my_k6_project\", name=\"k6 Project created with TF\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var config = new Config();\n    // Cloud Access Policy token for Grafana Cloud with the following scopes: stacks:read|write|delete, stack-service-accounts:write\n    var cloudAccessPolicyToken = config.RequireObject\u003cdynamic\u003e(\"cloudAccessPolicyToken\");\n    var stackSlug = config.RequireObject\u003cdynamic\u003e(\"stackSlug\");\n    var cloudRegion = config.Get(\"cloudRegion\") ?? \"us\";\n    var k6Stack = new Grafana.Cloud.Stack(\"k6_stack\", new()\n    {\n        Name = stackSlug,\n        Slug = stackSlug,\n        RegionSlug = cloudRegion,\n    });\n\n    // Step 2: Create a Service Account and a token to install the k6 App\n    var k6Sa = new Grafana.Cloud.StackServiceAccount(\"k6_sa\", new()\n    {\n        StackSlug = stackSlug,\n        Name = $\"{stackSlug}-k6-app\",\n        Role = \"Admin\",\n        IsDisabled = false,\n    });\n\n    var k6SaToken = new Grafana.Cloud.StackServiceAccountToken(\"k6_sa_token\", new()\n    {\n        StackSlug = stackSlug,\n        Name = $\"{stackSlug}-k6-app-token\",\n        ServiceAccountId = k6Sa.Id,\n    });\n\n    // Step 3: Install the k6 App on the stack\n    var k6Installation = new Grafana.K6.Installation(\"k6_installation\", new()\n    {\n        CloudAccessPolicyToken = cloudAccessPolicyToken,\n        StackId = k6Stack.Id,\n        GrafanaSaToken = k6SaToken.Key,\n        GrafanaUser = \"admin\",\n    });\n\n    var myK6Project = new Grafana.K6.Project(\"my_k6_project\", new()\n    {\n        Name = \"k6 Project created with TF\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi/config\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/cloud\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/k6\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcfg := config.New(ctx, \"\")\n\t\t// Cloud Access Policy token for Grafana Cloud with the following scopes: stacks:read|write|delete, stack-service-accounts:write\n\t\tcloudAccessPolicyToken := cfg.RequireObject(\"cloudAccessPolicyToken\")\n\t\tstackSlug := cfg.RequireObject(\"stackSlug\")\n\t\tcloudRegion := \"us\"\n\t\tif param := cfg.Get(\"cloudRegion\"); param != \"\" {\n\t\t\tcloudRegion = param\n\t\t}\n\t\tk6Stack, err := cloud.NewStack(ctx, \"k6_stack\", \u0026cloud.StackArgs{\n\t\t\tName:       pulumi.Any(stackSlug),\n\t\t\tSlug:       pulumi.Any(stackSlug),\n\t\t\tRegionSlug: pulumi.String(cloudRegion),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Step 2: Create a Service Account and a token to install the k6 App\n\t\tk6Sa, err := cloud.NewStackServiceAccount(ctx, \"k6_sa\", \u0026cloud.StackServiceAccountArgs{\n\t\t\tStackSlug:  pulumi.Any(stackSlug),\n\t\t\tName:       pulumi.Sprintf(\"%v-k6-app\", stackSlug),\n\t\t\tRole:       pulumi.String(\"Admin\"),\n\t\t\tIsDisabled: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tk6SaToken, err := cloud.NewStackServiceAccountToken(ctx, \"k6_sa_token\", \u0026cloud.StackServiceAccountTokenArgs{\n\t\t\tStackSlug:        pulumi.Any(stackSlug),\n\t\t\tName:             pulumi.Sprintf(\"%v-k6-app-token\", stackSlug),\n\t\t\tServiceAccountId: k6Sa.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Step 3: Install the k6 App on the stack\n\t\t_, err = k6.NewInstallation(ctx, \"k6_installation\", \u0026k6.InstallationArgs{\n\t\t\tCloudAccessPolicyToken: pulumi.Any(cloudAccessPolicyToken),\n\t\t\tStackId:                k6Stack.ID(),\n\t\t\tGrafanaSaToken:         k6SaToken.Key,\n\t\t\tGrafanaUser:            pulumi.String(\"admin\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = k6.NewProject(ctx, \"my_k6_project\", \u0026k6.ProjectArgs{\n\t\t\tName: pulumi.String(\"k6 Project created with TF\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.cloud.Stack;\nimport com.pulumi.grafana.cloud.StackArgs;\nimport com.pulumi.grafana.cloud.StackServiceAccount;\nimport com.pulumi.grafana.cloud.StackServiceAccountArgs;\nimport com.pulumi.grafana.cloud.StackServiceAccountToken;\nimport com.pulumi.grafana.cloud.StackServiceAccountTokenArgs;\nimport com.pulumi.grafana.k6.Installation;\nimport com.pulumi.grafana.k6.InstallationArgs;\nimport com.pulumi.grafana.k6.Project;\nimport com.pulumi.grafana.k6.ProjectArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var config = ctx.config();\n        final var cloudAccessPolicyToken = config.get(\"cloudAccessPolicyToken\");\n        final var stackSlug = config.get(\"stackSlug\");\n        final var cloudRegion = config.get(\"cloudRegion\").orElse(\"us\");\n        var k6Stack = new Stack(\"k6Stack\", StackArgs.builder()\n            .name(stackSlug)\n            .slug(stackSlug)\n            .regionSlug(cloudRegion)\n            .build());\n\n        // Step 2: Create a Service Account and a token to install the k6 App\n        var k6Sa = new StackServiceAccount(\"k6Sa\", StackServiceAccountArgs.builder()\n            .stackSlug(stackSlug)\n            .name(String.format(\"%s-k6-app\", stackSlug))\n            .role(\"Admin\")\n            .isDisabled(false)\n            .build());\n\n        var k6SaToken = new StackServiceAccountToken(\"k6SaToken\", StackServiceAccountTokenArgs.builder()\n            .stackSlug(stackSlug)\n            .name(String.format(\"%s-k6-app-token\", stackSlug))\n            .serviceAccountId(k6Sa.id())\n            .build());\n\n        // Step 3: Install the k6 App on the stack\n        var k6Installation = new Installation(\"k6Installation\", InstallationArgs.builder()\n            .cloudAccessPolicyToken(cloudAccessPolicyToken)\n            .stackId(k6Stack.id())\n            .grafanaSaToken(k6SaToken.key())\n            .grafanaUser(\"admin\")\n            .build());\n\n        var myK6Project = new Project(\"myK6Project\", ProjectArgs.builder()\n            .name(\"k6 Project created with TF\")\n            .build());\n\n    }\n}\n```\n```yaml\nconfiguration:\n  cloudAccessPolicyToken:\n    type: dynamic\n  stackSlug:\n    type: dynamic\n  cloudRegion:\n    type: string\n    default: us\nresources:\n  k6Stack:\n    type: grafana:cloud:Stack\n    name: k6_stack\n    properties:\n      name: ${stackSlug}\n      slug: ${stackSlug}\n      regionSlug: ${cloudRegion}\n  # Step 2: Create a Service Account and a token to install the k6 App\n  k6Sa:\n    type: grafana:cloud:StackServiceAccount\n    name: k6_sa\n    properties:\n      stackSlug: ${stackSlug}\n      name: ${stackSlug}-k6-app\n      role: Admin\n      isDisabled: false\n  k6SaToken:\n    type: grafana:cloud:StackServiceAccountToken\n    name: k6_sa_token\n    properties:\n      stackSlug: ${stackSlug}\n      name: ${stackSlug}-k6-app-token\n      serviceAccountId: ${k6Sa.id}\n  # Step 3: Install the k6 App on the stack\n  k6Installation:\n    type: grafana:k6:Installation\n    name: k6_installation\n    properties:\n      cloudAccessPolicyToken: ${cloudAccessPolicyToken}\n      stackId: ${k6Stack.id}\n      grafanaSaToken: ${k6SaToken.key}\n      grafanaUser: admin\n  myK6Project:\n    type: grafana:k6:Project\n    name: my_k6_project\n    properties:\n      name: k6 Project created with TF\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"cloudAccessPolicyToken":{"type":"string","description":"The [Grafana Cloud access policy](https://grafana.com/docs/grafana-cloud/account-management/authentication-and-permissions/access-policies/).\n","secret":true},"grafanaSaToken":{"type":"string","description":"The [service account](https://grafana.com/docs/grafana/latest/administration/service-accounts/) token.\n","secret":true},"grafanaUser":{"type":"string","description":"The user to use for the installation.\n"},"k6AccessToken":{"type":"string","description":"Generated token to access the k6 API.\n","secret":true},"k6ApiUrl":{"type":"string","description":"The Grafana Cloud k6 API url.\n"},"k6Organization":{"type":"string","description":"The identifier of the k6 organization.\n"},"stackId":{"type":"string","description":"The identifier of the stack to install k6 on.\n"}},"required":["cloudAccessPolicyToken","grafanaSaToken","grafanaUser","k6AccessToken","k6ApiUrl","k6Organization","stackId"],"inputProperties":{"cloudAccessPolicyToken":{"type":"string","description":"The [Grafana Cloud access policy](https://grafana.com/docs/grafana-cloud/account-management/authentication-and-permissions/access-policies/).\n","secret":true,"willReplaceOnChanges":true},"grafanaSaToken":{"type":"string","description":"The [service account](https://grafana.com/docs/grafana/latest/administration/service-accounts/) token.\n","secret":true,"willReplaceOnChanges":true},"grafanaUser":{"type":"string","description":"The user to use for the installation.\n","willReplaceOnChanges":true},"k6ApiUrl":{"type":"string","description":"The Grafana Cloud k6 API url.\n","willReplaceOnChanges":true},"stackId":{"type":"string","description":"The identifier of the stack to install k6 on.\n","willReplaceOnChanges":true}},"requiredInputs":["cloudAccessPolicyToken","grafanaSaToken","grafanaUser","stackId"],"stateInputs":{"description":"Input properties used for looking up and filtering Installation resources.\n","properties":{"cloudAccessPolicyToken":{"type":"string","description":"The [Grafana Cloud access policy](https://grafana.com/docs/grafana-cloud/account-management/authentication-and-permissions/access-policies/).\n","secret":true,"willReplaceOnChanges":true},"grafanaSaToken":{"type":"string","description":"The [service account](https://grafana.com/docs/grafana/latest/administration/service-accounts/) token.\n","secret":true,"willReplaceOnChanges":true},"grafanaUser":{"type":"string","description":"The user to use for the installation.\n","willReplaceOnChanges":true},"k6AccessToken":{"type":"string","description":"Generated token to access the k6 API.\n","secret":true},"k6ApiUrl":{"type":"string","description":"The Grafana Cloud k6 API url.\n","willReplaceOnChanges":true},"k6Organization":{"type":"string","description":"The identifier of the k6 organization.\n"},"stackId":{"type":"string","description":"The identifier of the stack to install k6 on.\n","willReplaceOnChanges":true}},"type":"object"}},"grafana:k6/loadTest:LoadTest":{"description":"Manages a k6 load test.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst loadTestProject = new grafana.k6.Project(\"load_test_project\", {name: \"Terraform Load Test Project\"});\nconst testLoadTest = new grafana.k6.LoadTest(\"test_load_test\", {\n    projectId: loadTestProject.id,\n    name: \"Terraform Test Load Test\",\n    script: `export default function() {\n  console.log('Hello from k6!');\n}\n`,\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\nload_test_project = grafana.k6.Project(\"load_test_project\", name=\"Terraform Load Test Project\")\ntest_load_test = grafana.k6.LoadTest(\"test_load_test\",\n    project_id=load_test_project.id,\n    name=\"Terraform Test Load Test\",\n    script=\"\"\"export default function() {\n  console.log('Hello from k6!');\n}\n\"\"\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var loadTestProject = new Grafana.K6.Project(\"load_test_project\", new()\n    {\n        Name = \"Terraform Load Test Project\",\n    });\n\n    var testLoadTest = new Grafana.K6.LoadTest(\"test_load_test\", new()\n    {\n        ProjectId = loadTestProject.Id,\n        Name = \"Terraform Test Load Test\",\n        Script = @\"export default function() {\n  console.log('Hello from k6!');\n}\n\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/k6\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tloadTestProject, err := k6.NewProject(ctx, \"load_test_project\", \u0026k6.ProjectArgs{\n\t\t\tName: pulumi.String(\"Terraform Load Test Project\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = k6.NewLoadTest(ctx, \"test_load_test\", \u0026k6.LoadTestArgs{\n\t\t\tProjectId: loadTestProject.ID(),\n\t\t\tName:      pulumi.String(\"Terraform Test Load Test\"),\n\t\t\tScript:    pulumi.String(\"export default function() {\\n  console.log('Hello from k6!');\\n}\\n\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.k6.Project;\nimport com.pulumi.grafana.k6.ProjectArgs;\nimport com.pulumi.grafana.k6.LoadTest;\nimport com.pulumi.grafana.k6.LoadTestArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var loadTestProject = new Project(\"loadTestProject\", ProjectArgs.builder()\n            .name(\"Terraform Load Test Project\")\n            .build());\n\n        var testLoadTest = new LoadTest(\"testLoadTest\", LoadTestArgs.builder()\n            .projectId(loadTestProject.id())\n            .name(\"Terraform Test Load Test\")\n            .script(\"\"\"\nexport default function() {\n  console.log('Hello from k6!');\n}\n            \"\"\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  loadTestProject:\n    type: grafana:k6:Project\n    name: load_test_project\n    properties:\n      name: Terraform Load Test Project\n  testLoadTest:\n    type: grafana:k6:LoadTest\n    name: test_load_test\n    properties:\n      projectId: ${loadTestProject.id}\n      name: Terraform Test Load Test\n      script: |\n        export default function() {\n          console.log('Hello from k6!');\n        }\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:k6/loadTest:LoadTest name \"{{ id }}\"\n```\n\n","properties":{"baselineTestRunId":{"type":"string","description":"Identifier of a baseline test run used for results comparison.\n"},"created":{"type":"string","description":"The date when the load test was created.\n"},"name":{"type":"string","description":"Human-friendly identifier of the load test.\n"},"projectId":{"type":"string","description":"The identifier of the project this load test belongs to.\n"},"script":{"type":"string","description":"The k6 test script content. Can be provided inline or via the `file()` function.\n"},"updated":{"type":"string","description":"The date when the load test was last updated.\n"}},"required":["created","name","projectId","script","updated"],"inputProperties":{"baselineTestRunId":{"type":"string","description":"Identifier of a baseline test run used for results comparison.\n"},"name":{"type":"string","description":"Human-friendly identifier of the load test.\n"},"projectId":{"type":"string","description":"The identifier of the project this load test belongs to.\n"},"script":{"type":"string","description":"The k6 test script content. Can be provided inline or via the `file()` function.\n"}},"requiredInputs":["projectId","script"],"stateInputs":{"description":"Input properties used for looking up and filtering LoadTest resources.\n","properties":{"baselineTestRunId":{"type":"string","description":"Identifier of a baseline test run used for results comparison.\n"},"created":{"type":"string","description":"The date when the load test was created.\n"},"name":{"type":"string","description":"Human-friendly identifier of the load test.\n"},"projectId":{"type":"string","description":"The identifier of the project this load test belongs to.\n"},"script":{"type":"string","description":"The k6 test script content. Can be provided inline or via the `file()` function.\n"},"updated":{"type":"string","description":"The date when the load test was last updated.\n"}},"type":"object"}},"grafana:k6/project:Project":{"description":"Manages a k6 project.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst testProject = new grafana.k6.Project(\"test_project\", {name: \"Terraform Test Project\"});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\ntest_project = grafana.k6.Project(\"test_project\", name=\"Terraform Test Project\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var testProject = new Grafana.K6.Project(\"test_project\", new()\n    {\n        Name = \"Terraform Test Project\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/k6\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := k6.NewProject(ctx, \"test_project\", \u0026k6.ProjectArgs{\n\t\t\tName: pulumi.String(\"Terraform Test Project\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.k6.Project;\nimport com.pulumi.grafana.k6.ProjectArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var testProject = new Project(\"testProject\", ProjectArgs.builder()\n            .name(\"Terraform Test Project\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  testProject:\n    type: grafana:k6:Project\n    name: test_project\n    properties:\n      name: Terraform Test Project\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:k6/project:Project name \"{{ id }}\"\n```\n\n","properties":{"created":{"type":"string","description":"The date when the project was created.\n"},"grafanaFolderUid":{"type":"string","description":"The Grafana folder uid.\n"},"isDefault":{"type":"boolean","description":"Use this project as default for running tests when no explicit project identifier is provided.\n"},"name":{"type":"string","description":"Human-friendly identifier of the project.\n"},"updated":{"type":"string","description":"The date when the project was last updated.\n"}},"required":["created","grafanaFolderUid","isDefault","name","updated"],"inputProperties":{"name":{"type":"string","description":"Human-friendly identifier of the project.\n"}},"stateInputs":{"description":"Input properties used for looking up and filtering Project resources.\n","properties":{"created":{"type":"string","description":"The date when the project was created.\n"},"grafanaFolderUid":{"type":"string","description":"The Grafana folder uid.\n"},"isDefault":{"type":"boolean","description":"Use this project as default for running tests when no explicit project identifier is provided.\n"},"name":{"type":"string","description":"Human-friendly identifier of the project.\n"},"updated":{"type":"string","description":"The date when the project was last updated.\n"}},"type":"object"}},"grafana:k6/projectAllowedLoadZones:ProjectAllowedLoadZones":{"description":"Manages allowed private load zones for a k6 project.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst testProjectAllowedLoadZones = new grafana.k6.Project(\"test_project_allowed_load_zones\", {name: \"Terraform Project Test Allowed Load Zones\"});\nconst testAllowedZones = new grafana.k6.ProjectAllowedLoadZones(\"test_allowed_zones\", {\n    projectId: testProjectAllowedLoadZones.id,\n    allowedLoadZones: [\n        \"my-load-zone-1\",\n        \"other-load-zone\",\n    ],\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\ntest_project_allowed_load_zones = grafana.k6.Project(\"test_project_allowed_load_zones\", name=\"Terraform Project Test Allowed Load Zones\")\ntest_allowed_zones = grafana.k6.ProjectAllowedLoadZones(\"test_allowed_zones\",\n    project_id=test_project_allowed_load_zones.id,\n    allowed_load_zones=[\n        \"my-load-zone-1\",\n        \"other-load-zone\",\n    ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var testProjectAllowedLoadZones = new Grafana.K6.Project(\"test_project_allowed_load_zones\", new()\n    {\n        Name = \"Terraform Project Test Allowed Load Zones\",\n    });\n\n    var testAllowedZones = new Grafana.K6.ProjectAllowedLoadZones(\"test_allowed_zones\", new()\n    {\n        ProjectId = testProjectAllowedLoadZones.Id,\n        AllowedLoadZones = new[]\n        {\n            \"my-load-zone-1\",\n            \"other-load-zone\",\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/k6\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttestProjectAllowedLoadZones, err := k6.NewProject(ctx, \"test_project_allowed_load_zones\", \u0026k6.ProjectArgs{\n\t\t\tName: pulumi.String(\"Terraform Project Test Allowed Load Zones\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = k6.NewProjectAllowedLoadZones(ctx, \"test_allowed_zones\", \u0026k6.ProjectAllowedLoadZonesArgs{\n\t\t\tProjectId: testProjectAllowedLoadZones.ID(),\n\t\t\tAllowedLoadZones: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"my-load-zone-1\"),\n\t\t\t\tpulumi.String(\"other-load-zone\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.k6.Project;\nimport com.pulumi.grafana.k6.ProjectArgs;\nimport com.pulumi.grafana.k6.ProjectAllowedLoadZones;\nimport com.pulumi.grafana.k6.ProjectAllowedLoadZonesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var testProjectAllowedLoadZones = new Project(\"testProjectAllowedLoadZones\", ProjectArgs.builder()\n            .name(\"Terraform Project Test Allowed Load Zones\")\n            .build());\n\n        var testAllowedZones = new ProjectAllowedLoadZones(\"testAllowedZones\", ProjectAllowedLoadZonesArgs.builder()\n            .projectId(testProjectAllowedLoadZones.id())\n            .allowedLoadZones(            \n                \"my-load-zone-1\",\n                \"other-load-zone\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  testProjectAllowedLoadZones:\n    type: grafana:k6:Project\n    name: test_project_allowed_load_zones\n    properties:\n      name: Terraform Project Test Allowed Load Zones\n  testAllowedZones:\n    type: grafana:k6:ProjectAllowedLoadZones\n    name: test_allowed_zones\n    properties:\n      projectId: ${testProjectAllowedLoadZones.id}\n      allowedLoadZones:\n        - my-load-zone-1\n        - other-load-zone\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:k6/projectAllowedLoadZones:ProjectAllowedLoadZones name \"{{ project_id }}\"\n```\n\n","properties":{"allowedLoadZones":{"type":"array","items":{"type":"string"},"description":"List of allowed private k6 load zone IDs for this project.\n"},"projectId":{"type":"string","description":"The identifier of the project to manage private allowed load zones for.\n"}},"required":["allowedLoadZones","projectId"],"inputProperties":{"allowedLoadZones":{"type":"array","items":{"type":"string"},"description":"List of allowed private k6 load zone IDs for this project.\n"},"projectId":{"type":"string","description":"The identifier of the project to manage private allowed load zones for.\n"}},"requiredInputs":["allowedLoadZones","projectId"],"stateInputs":{"description":"Input properties used for looking up and filtering ProjectAllowedLoadZones resources.\n","properties":{"allowedLoadZones":{"type":"array","items":{"type":"string"},"description":"List of allowed private k6 load zone IDs for this project.\n"},"projectId":{"type":"string","description":"The identifier of the project to manage private allowed load zones for.\n"}},"type":"object"}},"grafana:k6/projectLimits:ProjectLimits":{"description":"Manages limits for a k6 project.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst testProjectLimits = new grafana.k6.Project(\"test_project_limits\", {name: \"Terraform Project Test Limits\"});\nconst testLimits = new grafana.k6.ProjectLimits(\"test_limits\", {\n    projectId: testProjectLimits.id,\n    vuhMaxPerMonth: 1000,\n    vuMaxPerTest: 100,\n    vuBrowserMaxPerTest: 10,\n    durationMaxPerTest: 3600,\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\ntest_project_limits = grafana.k6.Project(\"test_project_limits\", name=\"Terraform Project Test Limits\")\ntest_limits = grafana.k6.ProjectLimits(\"test_limits\",\n    project_id=test_project_limits.id,\n    vuh_max_per_month=1000,\n    vu_max_per_test=100,\n    vu_browser_max_per_test=10,\n    duration_max_per_test=3600)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var testProjectLimits = new Grafana.K6.Project(\"test_project_limits\", new()\n    {\n        Name = \"Terraform Project Test Limits\",\n    });\n\n    var testLimits = new Grafana.K6.ProjectLimits(\"test_limits\", new()\n    {\n        ProjectId = testProjectLimits.Id,\n        VuhMaxPerMonth = 1000,\n        VuMaxPerTest = 100,\n        VuBrowserMaxPerTest = 10,\n        DurationMaxPerTest = 3600,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/k6\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttestProjectLimits, err := k6.NewProject(ctx, \"test_project_limits\", \u0026k6.ProjectArgs{\n\t\t\tName: pulumi.String(\"Terraform Project Test Limits\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = k6.NewProjectLimits(ctx, \"test_limits\", \u0026k6.ProjectLimitsArgs{\n\t\t\tProjectId:           testProjectLimits.ID(),\n\t\t\tVuhMaxPerMonth:      pulumi.Int(1000),\n\t\t\tVuMaxPerTest:        pulumi.Int(100),\n\t\t\tVuBrowserMaxPerTest: pulumi.Int(10),\n\t\t\tDurationMaxPerTest:  pulumi.Int(3600),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.k6.Project;\nimport com.pulumi.grafana.k6.ProjectArgs;\nimport com.pulumi.grafana.k6.ProjectLimits;\nimport com.pulumi.grafana.k6.ProjectLimitsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var testProjectLimits = new Project(\"testProjectLimits\", ProjectArgs.builder()\n            .name(\"Terraform Project Test Limits\")\n            .build());\n\n        var testLimits = new ProjectLimits(\"testLimits\", ProjectLimitsArgs.builder()\n            .projectId(testProjectLimits.id())\n            .vuhMaxPerMonth(1000)\n            .vuMaxPerTest(100)\n            .vuBrowserMaxPerTest(10)\n            .durationMaxPerTest(3600)\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  testProjectLimits:\n    type: grafana:k6:Project\n    name: test_project_limits\n    properties:\n      name: Terraform Project Test Limits\n  testLimits:\n    type: grafana:k6:ProjectLimits\n    name: test_limits\n    properties:\n      projectId: ${testProjectLimits.id}\n      vuhMaxPerMonth: 1000\n      vuMaxPerTest: 100\n      vuBrowserMaxPerTest: 10\n      durationMaxPerTest: 3600\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:k6/projectLimits:ProjectLimits name \"{{ project_id }}\"\n```\n\n","properties":{"durationMaxPerTest":{"type":"integer","description":"Maximum duration of a test in seconds.\n"},"projectId":{"type":"string","description":"The identifier of the project to manage limits for.\n"},"vuBrowserMaxPerTest":{"type":"integer","description":"Maximum number of concurrent browser virtual users (VUs) used in one test.\n"},"vuMaxPerTest":{"type":"integer","description":"Maximum number of concurrent virtual users (VUs) used in one test.\n"},"vuhMaxPerMonth":{"type":"integer","description":"Maximum amount of virtual user hours (VU/h) used per one calendar month.\n"}},"required":["projectId"],"inputProperties":{"durationMaxPerTest":{"type":"integer","description":"Maximum duration of a test in seconds.\n"},"projectId":{"type":"string","description":"The identifier of the project to manage limits for.\n"},"vuBrowserMaxPerTest":{"type":"integer","description":"Maximum number of concurrent browser virtual users (VUs) used in one test.\n"},"vuMaxPerTest":{"type":"integer","description":"Maximum number of concurrent virtual users (VUs) used in one test.\n"},"vuhMaxPerMonth":{"type":"integer","description":"Maximum amount of virtual user hours (VU/h) used per one calendar month.\n"}},"requiredInputs":["projectId"],"stateInputs":{"description":"Input properties used for looking up and filtering ProjectLimits resources.\n","properties":{"durationMaxPerTest":{"type":"integer","description":"Maximum duration of a test in seconds.\n"},"projectId":{"type":"string","description":"The identifier of the project to manage limits for.\n"},"vuBrowserMaxPerTest":{"type":"integer","description":"Maximum number of concurrent browser virtual users (VUs) used in one test.\n"},"vuMaxPerTest":{"type":"integer","description":"Maximum number of concurrent virtual users (VUs) used in one test.\n"},"vuhMaxPerMonth":{"type":"integer","description":"Maximum amount of virtual user hours (VU/h) used per one calendar month.\n"}},"type":"object"}},"grafana:k6/schedule:Schedule":{"description":"Manages a k6 schedule for automated test execution.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst scheduleProject = new grafana.k6.Project(\"schedule_project\", {name: \"Terraform Schedule Resource Project\"});\nconst scheduledTest = new grafana.k6.LoadTest(\"scheduled_test\", {\n    projectId: scheduleProject.id,\n    name: \"Terraform Scheduled Resource Test\",\n    script: `export default function() {\n  console.log('Hello from scheduled k6 test!');\n}\n`,\n}, {\n    dependsOn: [scheduleProject],\n});\nconst cronMonthly = new grafana.k6.Schedule(\"cron_monthly\", {\n    loadTestId: scheduledTest.id,\n    starts: \"2024-12-25T10:00:00Z\",\n    cron: {\n        schedule: \"0 10 1 * *\",\n        timezone: \"UTC\",\n    },\n});\nconst daily = new grafana.k6.Schedule(\"daily\", {\n    loadTestId: scheduledTest.id,\n    starts: \"2024-12-25T10:00:00Z\",\n    recurrenceRule: {\n        frequency: \"DAILY\",\n        interval: 1,\n    },\n});\nconst weekly = new grafana.k6.Schedule(\"weekly\", {\n    loadTestId: scheduledTest.id,\n    starts: \"2024-12-25T09:00:00Z\",\n    recurrenceRule: {\n        frequency: \"WEEKLY\",\n        interval: 1,\n        bydays: [\n            \"MO\",\n            \"WE\",\n            \"FR\",\n        ],\n    },\n});\n// Example with YEARLY frequency and count\nconst yearly = new grafana.k6.Schedule(\"yearly\", {\n    loadTestId: scheduledTest.id,\n    starts: \"2024-01-01T12:00:00Z\",\n    recurrenceRule: {\n        frequency: \"YEARLY\",\n        interval: 1,\n        count: 5,\n    },\n});\n// One-time schedule without recurrence\nconst oneTime = new grafana.k6.Schedule(\"one_time\", {\n    loadTestId: scheduledTest.id,\n    starts: \"2024-12-25T15:00:00Z\",\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\nschedule_project = grafana.k6.Project(\"schedule_project\", name=\"Terraform Schedule Resource Project\")\nscheduled_test = grafana.k6.LoadTest(\"scheduled_test\",\n    project_id=schedule_project.id,\n    name=\"Terraform Scheduled Resource Test\",\n    script=\"\"\"export default function() {\n  console.log('Hello from scheduled k6 test!');\n}\n\"\"\",\n    opts = pulumi.ResourceOptions(depends_on=[schedule_project]))\ncron_monthly = grafana.k6.Schedule(\"cron_monthly\",\n    load_test_id=scheduled_test.id,\n    starts=\"2024-12-25T10:00:00Z\",\n    cron={\n        \"schedule\": \"0 10 1 * *\",\n        \"timezone\": \"UTC\",\n    })\ndaily = grafana.k6.Schedule(\"daily\",\n    load_test_id=scheduled_test.id,\n    starts=\"2024-12-25T10:00:00Z\",\n    recurrence_rule={\n        \"frequency\": \"DAILY\",\n        \"interval\": 1,\n    })\nweekly = grafana.k6.Schedule(\"weekly\",\n    load_test_id=scheduled_test.id,\n    starts=\"2024-12-25T09:00:00Z\",\n    recurrence_rule={\n        \"frequency\": \"WEEKLY\",\n        \"interval\": 1,\n        \"bydays\": [\n            \"MO\",\n            \"WE\",\n            \"FR\",\n        ],\n    })\n# Example with YEARLY frequency and count\nyearly = grafana.k6.Schedule(\"yearly\",\n    load_test_id=scheduled_test.id,\n    starts=\"2024-01-01T12:00:00Z\",\n    recurrence_rule={\n        \"frequency\": \"YEARLY\",\n        \"interval\": 1,\n        \"count\": 5,\n    })\n# One-time schedule without recurrence\none_time = grafana.k6.Schedule(\"one_time\",\n    load_test_id=scheduled_test.id,\n    starts=\"2024-12-25T15:00:00Z\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var scheduleProject = new Grafana.K6.Project(\"schedule_project\", new()\n    {\n        Name = \"Terraform Schedule Resource Project\",\n    });\n\n    var scheduledTest = new Grafana.K6.LoadTest(\"scheduled_test\", new()\n    {\n        ProjectId = scheduleProject.Id,\n        Name = \"Terraform Scheduled Resource Test\",\n        Script = @\"export default function() {\n  console.log('Hello from scheduled k6 test!');\n}\n\",\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            scheduleProject,\n        },\n    });\n\n    var cronMonthly = new Grafana.K6.Schedule(\"cron_monthly\", new()\n    {\n        LoadTestId = scheduledTest.Id,\n        Starts = \"2024-12-25T10:00:00Z\",\n        Cron = new Grafana.K6.Inputs.ScheduleCronArgs\n        {\n            Schedule = \"0 10 1 * *\",\n            Timezone = \"UTC\",\n        },\n    });\n\n    var daily = new Grafana.K6.Schedule(\"daily\", new()\n    {\n        LoadTestId = scheduledTest.Id,\n        Starts = \"2024-12-25T10:00:00Z\",\n        RecurrenceRule = new Grafana.K6.Inputs.ScheduleRecurrenceRuleArgs\n        {\n            Frequency = \"DAILY\",\n            Interval = 1,\n        },\n    });\n\n    var weekly = new Grafana.K6.Schedule(\"weekly\", new()\n    {\n        LoadTestId = scheduledTest.Id,\n        Starts = \"2024-12-25T09:00:00Z\",\n        RecurrenceRule = new Grafana.K6.Inputs.ScheduleRecurrenceRuleArgs\n        {\n            Frequency = \"WEEKLY\",\n            Interval = 1,\n            Bydays = new[]\n            {\n                \"MO\",\n                \"WE\",\n                \"FR\",\n            },\n        },\n    });\n\n    // Example with YEARLY frequency and count\n    var yearly = new Grafana.K6.Schedule(\"yearly\", new()\n    {\n        LoadTestId = scheduledTest.Id,\n        Starts = \"2024-01-01T12:00:00Z\",\n        RecurrenceRule = new Grafana.K6.Inputs.ScheduleRecurrenceRuleArgs\n        {\n            Frequency = \"YEARLY\",\n            Interval = 1,\n            Count = 5,\n        },\n    });\n\n    // One-time schedule without recurrence\n    var oneTime = new Grafana.K6.Schedule(\"one_time\", new()\n    {\n        LoadTestId = scheduledTest.Id,\n        Starts = \"2024-12-25T15:00:00Z\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/k6\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tscheduleProject, err := k6.NewProject(ctx, \"schedule_project\", \u0026k6.ProjectArgs{\n\t\t\tName: pulumi.String(\"Terraform Schedule Resource Project\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tscheduledTest, err := k6.NewLoadTest(ctx, \"scheduled_test\", \u0026k6.LoadTestArgs{\n\t\t\tProjectId: scheduleProject.ID(),\n\t\t\tName:      pulumi.String(\"Terraform Scheduled Resource Test\"),\n\t\t\tScript:    pulumi.String(\"export default function() {\\n  console.log('Hello from scheduled k6 test!');\\n}\\n\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tscheduleProject,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = k6.NewSchedule(ctx, \"cron_monthly\", \u0026k6.ScheduleArgs{\n\t\t\tLoadTestId: scheduledTest.ID(),\n\t\t\tStarts:     pulumi.String(\"2024-12-25T10:00:00Z\"),\n\t\t\tCron: \u0026k6.ScheduleCronArgs{\n\t\t\t\tSchedule: pulumi.String(\"0 10 1 * *\"),\n\t\t\t\tTimezone: pulumi.String(\"UTC\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = k6.NewSchedule(ctx, \"daily\", \u0026k6.ScheduleArgs{\n\t\t\tLoadTestId: scheduledTest.ID(),\n\t\t\tStarts:     pulumi.String(\"2024-12-25T10:00:00Z\"),\n\t\t\tRecurrenceRule: \u0026k6.ScheduleRecurrenceRuleArgs{\n\t\t\t\tFrequency: pulumi.String(\"DAILY\"),\n\t\t\t\tInterval:  pulumi.Int(1),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = k6.NewSchedule(ctx, \"weekly\", \u0026k6.ScheduleArgs{\n\t\t\tLoadTestId: scheduledTest.ID(),\n\t\t\tStarts:     pulumi.String(\"2024-12-25T09:00:00Z\"),\n\t\t\tRecurrenceRule: \u0026k6.ScheduleRecurrenceRuleArgs{\n\t\t\t\tFrequency: pulumi.String(\"WEEKLY\"),\n\t\t\t\tInterval:  pulumi.Int(1),\n\t\t\t\tBydays: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"MO\"),\n\t\t\t\t\tpulumi.String(\"WE\"),\n\t\t\t\t\tpulumi.String(\"FR\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Example with YEARLY frequency and count\n\t\t_, err = k6.NewSchedule(ctx, \"yearly\", \u0026k6.ScheduleArgs{\n\t\t\tLoadTestId: scheduledTest.ID(),\n\t\t\tStarts:     pulumi.String(\"2024-01-01T12:00:00Z\"),\n\t\t\tRecurrenceRule: \u0026k6.ScheduleRecurrenceRuleArgs{\n\t\t\t\tFrequency: pulumi.String(\"YEARLY\"),\n\t\t\t\tInterval:  pulumi.Int(1),\n\t\t\t\tCount:     pulumi.Int(5),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// One-time schedule without recurrence\n\t\t_, err = k6.NewSchedule(ctx, \"one_time\", \u0026k6.ScheduleArgs{\n\t\t\tLoadTestId: scheduledTest.ID(),\n\t\t\tStarts:     pulumi.String(\"2024-12-25T15:00:00Z\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.k6.Project;\nimport com.pulumi.grafana.k6.ProjectArgs;\nimport com.pulumi.grafana.k6.LoadTest;\nimport com.pulumi.grafana.k6.LoadTestArgs;\nimport com.pulumi.grafana.k6.Schedule;\nimport com.pulumi.grafana.k6.ScheduleArgs;\nimport com.pulumi.grafana.k6.inputs.ScheduleCronArgs;\nimport com.pulumi.grafana.k6.inputs.ScheduleRecurrenceRuleArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var scheduleProject = new Project(\"scheduleProject\", ProjectArgs.builder()\n            .name(\"Terraform Schedule Resource Project\")\n            .build());\n\n        var scheduledTest = new LoadTest(\"scheduledTest\", LoadTestArgs.builder()\n            .projectId(scheduleProject.id())\n            .name(\"Terraform Scheduled Resource Test\")\n            .script(\"\"\"\nexport default function() {\n  console.log('Hello from scheduled k6 test!');\n}\n            \"\"\")\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(scheduleProject)\n                .build());\n\n        var cronMonthly = new Schedule(\"cronMonthly\", ScheduleArgs.builder()\n            .loadTestId(scheduledTest.id())\n            .starts(\"2024-12-25T10:00:00Z\")\n            .cron(ScheduleCronArgs.builder()\n                .schedule(\"0 10 1 * *\")\n                .timezone(\"UTC\")\n                .build())\n            .build());\n\n        var daily = new Schedule(\"daily\", ScheduleArgs.builder()\n            .loadTestId(scheduledTest.id())\n            .starts(\"2024-12-25T10:00:00Z\")\n            .recurrenceRule(ScheduleRecurrenceRuleArgs.builder()\n                .frequency(\"DAILY\")\n                .interval(1)\n                .build())\n            .build());\n\n        var weekly = new Schedule(\"weekly\", ScheduleArgs.builder()\n            .loadTestId(scheduledTest.id())\n            .starts(\"2024-12-25T09:00:00Z\")\n            .recurrenceRule(ScheduleRecurrenceRuleArgs.builder()\n                .frequency(\"WEEKLY\")\n                .interval(1)\n                .bydays(                \n                    \"MO\",\n                    \"WE\",\n                    \"FR\")\n                .build())\n            .build());\n\n        // Example with YEARLY frequency and count\n        var yearly = new Schedule(\"yearly\", ScheduleArgs.builder()\n            .loadTestId(scheduledTest.id())\n            .starts(\"2024-01-01T12:00:00Z\")\n            .recurrenceRule(ScheduleRecurrenceRuleArgs.builder()\n                .frequency(\"YEARLY\")\n                .interval(1)\n                .count(5)\n                .build())\n            .build());\n\n        // One-time schedule without recurrence\n        var oneTime = new Schedule(\"oneTime\", ScheduleArgs.builder()\n            .loadTestId(scheduledTest.id())\n            .starts(\"2024-12-25T15:00:00Z\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  scheduleProject:\n    type: grafana:k6:Project\n    name: schedule_project\n    properties:\n      name: Terraform Schedule Resource Project\n  scheduledTest:\n    type: grafana:k6:LoadTest\n    name: scheduled_test\n    properties:\n      projectId: ${scheduleProject.id}\n      name: Terraform Scheduled Resource Test\n      script: |\n        export default function() {\n          console.log('Hello from scheduled k6 test!');\n        }\n    options:\n      dependsOn:\n        - ${scheduleProject}\n  cronMonthly:\n    type: grafana:k6:Schedule\n    name: cron_monthly\n    properties:\n      loadTestId: ${scheduledTest.id}\n      starts: 2024-12-25T10:00:00Z\n      cron:\n        schedule: 0 10 1 * *\n        timezone: UTC\n  daily:\n    type: grafana:k6:Schedule\n    properties:\n      loadTestId: ${scheduledTest.id}\n      starts: 2024-12-25T10:00:00Z\n      recurrenceRule:\n        frequency: DAILY\n        interval: 1\n  weekly:\n    type: grafana:k6:Schedule\n    properties:\n      loadTestId: ${scheduledTest.id}\n      starts: 2024-12-25T09:00:00Z\n      recurrenceRule:\n        frequency: WEEKLY\n        interval: 1\n        bydays:\n          - MO\n          - WE\n          - FR\n  # Example with YEARLY frequency and count\n  yearly:\n    type: grafana:k6:Schedule\n    properties:\n      loadTestId: ${scheduledTest.id}\n      starts: 2024-01-01T12:00:00Z\n      recurrenceRule:\n        frequency: YEARLY\n        interval: 1\n        count: 5\n  # One-time schedule without recurrence\n  oneTime:\n    type: grafana:k6:Schedule\n    name: one_time\n    properties:\n      loadTestId: ${scheduledTest.id}\n      starts: 2024-12-25T15:00:00Z\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:k6/schedule:Schedule name \"{{ load_test_id }}\"\n```\n\n","properties":{"createdBy":{"type":"string","description":"The email of the user who created the schedule.\n"},"cron":{"$ref":"#/types/grafana:k6/ScheduleCron:ScheduleCron","description":"The cron schedule to trigger the test periodically. If not specified, the test will run only once on the 'starts' date. Only one of \u003cspan pulumi-lang-nodejs=\"`recurrenceRule`\" pulumi-lang-dotnet=\"`RecurrenceRule`\" pulumi-lang-go=\"`recurrenceRule`\" pulumi-lang-python=\"`recurrence_rule`\" pulumi-lang-yaml=\"`recurrenceRule`\" pulumi-lang-java=\"`recurrenceRule`\"\u003e`recurrence_rule`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`cron`\" pulumi-lang-dotnet=\"`Cron`\" pulumi-lang-go=\"`cron`\" pulumi-lang-python=\"`cron`\" pulumi-lang-yaml=\"`cron`\" pulumi-lang-java=\"`cron`\"\u003e`cron`\u003c/span\u003e can be set.\n"},"deactivated":{"type":"boolean","description":"Whether the schedule is deactivated.\n"},"loadTestId":{"type":"string","description":"The identifier of the load test to schedule.\n"},"nextRun":{"type":"string","description":"The next scheduled execution time.\n"},"recurrenceRule":{"$ref":"#/types/grafana:k6/ScheduleRecurrenceRule:ScheduleRecurrenceRule","description":"The schedule recurrence settings. If not specified, the test will run only once on the 'starts' date. Only one of \u003cspan pulumi-lang-nodejs=\"`recurrenceRule`\" pulumi-lang-dotnet=\"`RecurrenceRule`\" pulumi-lang-go=\"`recurrenceRule`\" pulumi-lang-python=\"`recurrence_rule`\" pulumi-lang-yaml=\"`recurrenceRule`\" pulumi-lang-java=\"`recurrenceRule`\"\u003e`recurrence_rule`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`cron`\" pulumi-lang-dotnet=\"`Cron`\" pulumi-lang-go=\"`cron`\" pulumi-lang-python=\"`cron`\" pulumi-lang-yaml=\"`cron`\" pulumi-lang-java=\"`cron`\"\u003e`cron`\u003c/span\u003e can be set.\n"},"starts":{"type":"string","description":"The start time for the schedule (RFC3339 format).\n"}},"required":["createdBy","deactivated","loadTestId","nextRun","starts"],"inputProperties":{"cron":{"$ref":"#/types/grafana:k6/ScheduleCron:ScheduleCron","description":"The cron schedule to trigger the test periodically. If not specified, the test will run only once on the 'starts' date. Only one of \u003cspan pulumi-lang-nodejs=\"`recurrenceRule`\" pulumi-lang-dotnet=\"`RecurrenceRule`\" pulumi-lang-go=\"`recurrenceRule`\" pulumi-lang-python=\"`recurrence_rule`\" pulumi-lang-yaml=\"`recurrenceRule`\" pulumi-lang-java=\"`recurrenceRule`\"\u003e`recurrence_rule`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`cron`\" pulumi-lang-dotnet=\"`Cron`\" pulumi-lang-go=\"`cron`\" pulumi-lang-python=\"`cron`\" pulumi-lang-yaml=\"`cron`\" pulumi-lang-java=\"`cron`\"\u003e`cron`\u003c/span\u003e can be set.\n"},"loadTestId":{"type":"string","description":"The identifier of the load test to schedule.\n"},"recurrenceRule":{"$ref":"#/types/grafana:k6/ScheduleRecurrenceRule:ScheduleRecurrenceRule","description":"The schedule recurrence settings. If not specified, the test will run only once on the 'starts' date. Only one of \u003cspan pulumi-lang-nodejs=\"`recurrenceRule`\" pulumi-lang-dotnet=\"`RecurrenceRule`\" pulumi-lang-go=\"`recurrenceRule`\" pulumi-lang-python=\"`recurrence_rule`\" pulumi-lang-yaml=\"`recurrenceRule`\" pulumi-lang-java=\"`recurrenceRule`\"\u003e`recurrence_rule`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`cron`\" pulumi-lang-dotnet=\"`Cron`\" pulumi-lang-go=\"`cron`\" pulumi-lang-python=\"`cron`\" pulumi-lang-yaml=\"`cron`\" pulumi-lang-java=\"`cron`\"\u003e`cron`\u003c/span\u003e can be set.\n"},"starts":{"type":"string","description":"The start time for the schedule (RFC3339 format).\n"}},"requiredInputs":["loadTestId","starts"],"stateInputs":{"description":"Input properties used for looking up and filtering Schedule resources.\n","properties":{"createdBy":{"type":"string","description":"The email of the user who created the schedule.\n"},"cron":{"$ref":"#/types/grafana:k6/ScheduleCron:ScheduleCron","description":"The cron schedule to trigger the test periodically. If not specified, the test will run only once on the 'starts' date. Only one of \u003cspan pulumi-lang-nodejs=\"`recurrenceRule`\" pulumi-lang-dotnet=\"`RecurrenceRule`\" pulumi-lang-go=\"`recurrenceRule`\" pulumi-lang-python=\"`recurrence_rule`\" pulumi-lang-yaml=\"`recurrenceRule`\" pulumi-lang-java=\"`recurrenceRule`\"\u003e`recurrence_rule`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`cron`\" pulumi-lang-dotnet=\"`Cron`\" pulumi-lang-go=\"`cron`\" pulumi-lang-python=\"`cron`\" pulumi-lang-yaml=\"`cron`\" pulumi-lang-java=\"`cron`\"\u003e`cron`\u003c/span\u003e can be set.\n"},"deactivated":{"type":"boolean","description":"Whether the schedule is deactivated.\n"},"loadTestId":{"type":"string","description":"The identifier of the load test to schedule.\n"},"nextRun":{"type":"string","description":"The next scheduled execution time.\n"},"recurrenceRule":{"$ref":"#/types/grafana:k6/ScheduleRecurrenceRule:ScheduleRecurrenceRule","description":"The schedule recurrence settings. If not specified, the test will run only once on the 'starts' date. Only one of \u003cspan pulumi-lang-nodejs=\"`recurrenceRule`\" pulumi-lang-dotnet=\"`RecurrenceRule`\" pulumi-lang-go=\"`recurrenceRule`\" pulumi-lang-python=\"`recurrence_rule`\" pulumi-lang-yaml=\"`recurrenceRule`\" pulumi-lang-java=\"`recurrenceRule`\"\u003e`recurrence_rule`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`cron`\" pulumi-lang-dotnet=\"`Cron`\" pulumi-lang-go=\"`cron`\" pulumi-lang-python=\"`cron`\" pulumi-lang-yaml=\"`cron`\" pulumi-lang-java=\"`cron`\"\u003e`cron`\u003c/span\u003e can be set.\n"},"starts":{"type":"string","description":"The start time for the schedule (RFC3339 format).\n"}},"type":"object"}},"grafana:machineLearning/alert:Alert":{"description":"## Example Usage\n\n### Forecast Alert\n\nThis alert uses a forecast.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst testAlertJob = new grafana.machinelearning.Job(\"test_alert_job\", {\n    name: \"Test Job\",\n    metric: \"tf_test_alert_job\",\n    datasourceType: \"prometheus\",\n    datasourceUid: \"abcd12345\",\n    queryParams: {\n        expr: \"grafanacloud_grafana_instance_active_user_count\",\n    },\n});\nconst testJobAlert = new grafana.machinelearning.Alert(\"test_job_alert\", {\n    jobId: testAlertJob.id,\n    title: \"Test Alert\",\n    anomalyCondition: \"any\",\n    threshold: \"\u003e0.8\",\n    window: \"15m\",\n    noDataState: \"OK\",\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\ntest_alert_job = grafana.machinelearning.Job(\"test_alert_job\",\n    name=\"Test Job\",\n    metric=\"tf_test_alert_job\",\n    datasource_type=\"prometheus\",\n    datasource_uid=\"abcd12345\",\n    query_params={\n        \"expr\": \"grafanacloud_grafana_instance_active_user_count\",\n    })\ntest_job_alert = grafana.machinelearning.Alert(\"test_job_alert\",\n    job_id=test_alert_job.id,\n    title=\"Test Alert\",\n    anomaly_condition=\"any\",\n    threshold=\"\u003e0.8\",\n    window=\"15m\",\n    no_data_state=\"OK\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var testAlertJob = new Grafana.MachineLearning.Job(\"test_alert_job\", new()\n    {\n        Name = \"Test Job\",\n        Metric = \"tf_test_alert_job\",\n        DatasourceType = \"prometheus\",\n        DatasourceUid = \"abcd12345\",\n        QueryParams = \n        {\n            { \"expr\", \"grafanacloud_grafana_instance_active_user_count\" },\n        },\n    });\n\n    var testJobAlert = new Grafana.MachineLearning.Alert(\"test_job_alert\", new()\n    {\n        JobId = testAlertJob.Id,\n        Title = \"Test Alert\",\n        AnomalyCondition = \"any\",\n        Threshold = \"\u003e0.8\",\n        Window = \"15m\",\n        NoDataState = \"OK\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/machinelearning\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttestAlertJob, err := machinelearning.NewJob(ctx, \"test_alert_job\", \u0026machinelearning.JobArgs{\n\t\t\tName:           pulumi.String(\"Test Job\"),\n\t\t\tMetric:         pulumi.String(\"tf_test_alert_job\"),\n\t\t\tDatasourceType: pulumi.String(\"prometheus\"),\n\t\t\tDatasourceUid:  pulumi.String(\"abcd12345\"),\n\t\t\tQueryParams: pulumi.StringMap{\n\t\t\t\t\"expr\": pulumi.String(\"grafanacloud_grafana_instance_active_user_count\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = machinelearning.NewAlert(ctx, \"test_job_alert\", \u0026machinelearning.AlertArgs{\n\t\t\tJobId:            testAlertJob.ID(),\n\t\t\tTitle:            pulumi.String(\"Test Alert\"),\n\t\t\tAnomalyCondition: pulumi.String(\"any\"),\n\t\t\tThreshold:        pulumi.String(\"\u003e0.8\"),\n\t\t\tWindow:           pulumi.String(\"15m\"),\n\t\t\tNoDataState:      pulumi.String(\"OK\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.machineLearning.Job;\nimport com.pulumi.grafana.machineLearning.JobArgs;\nimport com.pulumi.grafana.machineLearning.Alert;\nimport com.pulumi.grafana.machineLearning.AlertArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var testAlertJob = new Job(\"testAlertJob\", JobArgs.builder()\n            .name(\"Test Job\")\n            .metric(\"tf_test_alert_job\")\n            .datasourceType(\"prometheus\")\n            .datasourceUid(\"abcd12345\")\n            .queryParams(Map.of(\"expr\", \"grafanacloud_grafana_instance_active_user_count\"))\n            .build());\n\n        var testJobAlert = new Alert(\"testJobAlert\", AlertArgs.builder()\n            .jobId(testAlertJob.id())\n            .title(\"Test Alert\")\n            .anomalyCondition(\"any\")\n            .threshold(\"\u003e0.8\")\n            .window(\"15m\")\n            .noDataState(\"OK\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  testAlertJob:\n    type: grafana:machineLearning:Job\n    name: test_alert_job\n    properties:\n      name: Test Job\n      metric: tf_test_alert_job\n      datasourceType: prometheus\n      datasourceUid: abcd12345\n      queryParams:\n        expr: grafanacloud_grafana_instance_active_user_count\n  testJobAlert:\n    type: grafana:machineLearning:Alert\n    name: test_job_alert\n    properties:\n      jobId: ${testAlertJob.id}\n      title: Test Alert\n      anomalyCondition: any\n      threshold: '\u003e0.8'\n      window: 15m\n      noDataState: OK\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Outlier Alert\n\nThis alert uses an outlier detector.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst testAlertOutlierDetector = new grafana.machinelearning.OutlierDetector(\"test_alert_outlier_detector\", {\n    name: \"Test Outlier\",\n    metric: \"tf_test_alert_outlier\",\n    datasourceType: \"prometheus\",\n    datasourceUid: \"AbCd12345\",\n    queryParams: {\n        expr: \"grafanacloud_grafana_instance_active_user_count\",\n    },\n    interval: 300,\n    algorithm: {\n        name: \"dbscan\",\n        sensitivity: 0.5,\n        config: {\n            epsilon: 1,\n        },\n    },\n});\nconst testOutlierAlert = new grafana.machinelearning.Alert(\"test_outlier_alert\", {\n    outlierId: testAlertOutlierDetector.id,\n    title: \"Test Alert\",\n    window: \"1h\",\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\ntest_alert_outlier_detector = grafana.machinelearning.OutlierDetector(\"test_alert_outlier_detector\",\n    name=\"Test Outlier\",\n    metric=\"tf_test_alert_outlier\",\n    datasource_type=\"prometheus\",\n    datasource_uid=\"AbCd12345\",\n    query_params={\n        \"expr\": \"grafanacloud_grafana_instance_active_user_count\",\n    },\n    interval=300,\n    algorithm={\n        \"name\": \"dbscan\",\n        \"sensitivity\": 0.5,\n        \"config\": {\n            \"epsilon\": 1,\n        },\n    })\ntest_outlier_alert = grafana.machinelearning.Alert(\"test_outlier_alert\",\n    outlier_id=test_alert_outlier_detector.id,\n    title=\"Test Alert\",\n    window=\"1h\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var testAlertOutlierDetector = new Grafana.MachineLearning.OutlierDetector(\"test_alert_outlier_detector\", new()\n    {\n        Name = \"Test Outlier\",\n        Metric = \"tf_test_alert_outlier\",\n        DatasourceType = \"prometheus\",\n        DatasourceUid = \"AbCd12345\",\n        QueryParams = \n        {\n            { \"expr\", \"grafanacloud_grafana_instance_active_user_count\" },\n        },\n        Interval = 300,\n        Algorithm = new Grafana.MachineLearning.Inputs.OutlierDetectorAlgorithmArgs\n        {\n            Name = \"dbscan\",\n            Sensitivity = 0.5,\n            Config = new Grafana.MachineLearning.Inputs.OutlierDetectorAlgorithmConfigArgs\n            {\n                Epsilon = 1,\n            },\n        },\n    });\n\n    var testOutlierAlert = new Grafana.MachineLearning.Alert(\"test_outlier_alert\", new()\n    {\n        OutlierId = testAlertOutlierDetector.Id,\n        Title = \"Test Alert\",\n        Window = \"1h\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/machinelearning\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttestAlertOutlierDetector, err := machinelearning.NewOutlierDetector(ctx, \"test_alert_outlier_detector\", \u0026machinelearning.OutlierDetectorArgs{\n\t\t\tName:           pulumi.String(\"Test Outlier\"),\n\t\t\tMetric:         pulumi.String(\"tf_test_alert_outlier\"),\n\t\t\tDatasourceType: pulumi.String(\"prometheus\"),\n\t\t\tDatasourceUid:  pulumi.String(\"AbCd12345\"),\n\t\t\tQueryParams: pulumi.StringMap{\n\t\t\t\t\"expr\": pulumi.String(\"grafanacloud_grafana_instance_active_user_count\"),\n\t\t\t},\n\t\t\tInterval: pulumi.Int(300),\n\t\t\tAlgorithm: \u0026machinelearning.OutlierDetectorAlgorithmArgs{\n\t\t\t\tName:        pulumi.String(\"dbscan\"),\n\t\t\t\tSensitivity: pulumi.Float64(0.5),\n\t\t\t\tConfig: \u0026machinelearning.OutlierDetectorAlgorithmConfigArgs{\n\t\t\t\t\tEpsilon: pulumi.Float64(1),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = machinelearning.NewAlert(ctx, \"test_outlier_alert\", \u0026machinelearning.AlertArgs{\n\t\t\tOutlierId: testAlertOutlierDetector.ID(),\n\t\t\tTitle:     pulumi.String(\"Test Alert\"),\n\t\t\tWindow:    pulumi.String(\"1h\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.machineLearning.OutlierDetector;\nimport com.pulumi.grafana.machineLearning.OutlierDetectorArgs;\nimport com.pulumi.grafana.machineLearning.inputs.OutlierDetectorAlgorithmArgs;\nimport com.pulumi.grafana.machineLearning.inputs.OutlierDetectorAlgorithmConfigArgs;\nimport com.pulumi.grafana.machineLearning.Alert;\nimport com.pulumi.grafana.machineLearning.AlertArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var testAlertOutlierDetector = new OutlierDetector(\"testAlertOutlierDetector\", OutlierDetectorArgs.builder()\n            .name(\"Test Outlier\")\n            .metric(\"tf_test_alert_outlier\")\n            .datasourceType(\"prometheus\")\n            .datasourceUid(\"AbCd12345\")\n            .queryParams(Map.of(\"expr\", \"grafanacloud_grafana_instance_active_user_count\"))\n            .interval(300)\n            .algorithm(OutlierDetectorAlgorithmArgs.builder()\n                .name(\"dbscan\")\n                .sensitivity(0.5)\n                .config(OutlierDetectorAlgorithmConfigArgs.builder()\n                    .epsilon(1.0)\n                    .build())\n                .build())\n            .build());\n\n        var testOutlierAlert = new Alert(\"testOutlierAlert\", AlertArgs.builder()\n            .outlierId(testAlertOutlierDetector.id())\n            .title(\"Test Alert\")\n            .window(\"1h\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  testAlertOutlierDetector:\n    type: grafana:machineLearning:OutlierDetector\n    name: test_alert_outlier_detector\n    properties:\n      name: Test Outlier\n      metric: tf_test_alert_outlier\n      datasourceType: prometheus\n      datasourceUid: AbCd12345\n      queryParams:\n        expr: grafanacloud_grafana_instance_active_user_count\n      interval: 300\n      algorithm:\n        name: dbscan\n        sensitivity: 0.5\n        config:\n          epsilon: 1\n  testOutlierAlert:\n    type: grafana:machineLearning:Alert\n    name: test_outlier_alert\n    properties:\n      outlierId: ${testAlertOutlierDetector.id}\n      title: Test Alert\n      window: 1h\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:machineLearning/alert:Alert name \"{{ id }}\"\n```\n\n","properties":{"annotations":{"type":"object","additionalProperties":{"type":"string"},"description":"Annotations to add to the alert generated in Grafana."},"anomalyCondition":{"type":"string","description":"The condition for when to consider a point as anomalous."},"for":{"type":"string","description":"How long values must be anomalous before firing an alert."},"jobId":{"type":"string","description":"The forecast this alert belongs to."},"labels":{"type":"object","additionalProperties":{"type":"string"},"description":"Labels to add to the alert generated in Grafana."},"noDataState":{"type":"string","description":"How the alert should be processed when no data is returned by the underlying series"},"outlierId":{"type":"string","description":"The forecast this alert belongs to."},"threshold":{"type":"string","description":"The threshold of points over the window that need to be anomalous to alert."},"title":{"type":"string","description":"The title of the alert."},"window":{"type":"string","description":"How much time to average values over"}},"required":["for","title","window"],"inputProperties":{"annotations":{"type":"object","additionalProperties":{"type":"string"},"description":"Annotations to add to the alert generated in Grafana."},"anomalyCondition":{"type":"string","description":"The condition for when to consider a point as anomalous."},"for":{"type":"string","description":"How long values must be anomalous before firing an alert."},"jobId":{"type":"string","description":"The forecast this alert belongs to."},"labels":{"type":"object","additionalProperties":{"type":"string"},"description":"Labels to add to the alert generated in Grafana."},"noDataState":{"type":"string","description":"How the alert should be processed when no data is returned by the underlying series"},"outlierId":{"type":"string","description":"The forecast this alert belongs to."},"threshold":{"type":"string","description":"The threshold of points over the window that need to be anomalous to alert."},"title":{"type":"string","description":"The title of the alert."},"window":{"type":"string","description":"How much time to average values over"}},"requiredInputs":["title"],"stateInputs":{"description":"Input properties used for looking up and filtering Alert resources.\n","properties":{"annotations":{"type":"object","additionalProperties":{"type":"string"},"description":"Annotations to add to the alert generated in Grafana."},"anomalyCondition":{"type":"string","description":"The condition for when to consider a point as anomalous."},"for":{"type":"string","description":"How long values must be anomalous before firing an alert."},"jobId":{"type":"string","description":"The forecast this alert belongs to."},"labels":{"type":"object","additionalProperties":{"type":"string"},"description":"Labels to add to the alert generated in Grafana."},"noDataState":{"type":"string","description":"How the alert should be processed when no data is returned by the underlying series"},"outlierId":{"type":"string","description":"The forecast this alert belongs to."},"threshold":{"type":"string","description":"The threshold of points over the window that need to be anomalous to alert."},"title":{"type":"string","description":"The title of the alert."},"window":{"type":"string","description":"How much time to average values over"}},"type":"object"}},"grafana:machineLearning/holiday:Holiday":{"description":"A holiday describes time periods where a time series is expected to behave differently to normal.\n\nTo use a holiday in a job, use its id in the \u003cspan pulumi-lang-nodejs=\"`holidays`\" pulumi-lang-dotnet=\"`Holidays`\" pulumi-lang-go=\"`holidays`\" pulumi-lang-python=\"`holidays`\" pulumi-lang-yaml=\"`holidays`\" pulumi-lang-java=\"`holidays`\"\u003e`holidays`\u003c/span\u003e attribute of a \u003cspan pulumi-lang-nodejs=\"`grafana.machineLearning.Job`\" pulumi-lang-dotnet=\"`grafana.machineLearning.Job`\" pulumi-lang-go=\"`machineLearning.Job`\" pulumi-lang-python=\"`machineLearning.Job`\" pulumi-lang-yaml=\"`grafana.machineLearning.Job`\" pulumi-lang-java=\"`grafana.machineLearning.Job`\"\u003e`grafana.machineLearning.Job`\u003c/span\u003e:\n\n### iCal Holiday\n\nThis holiday uses an iCal file to define the holidays.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst ical = new grafana.machinelearning.Holiday(\"ical\", {\n    name: \"My iCal holiday\",\n    description: \"My Holiday\",\n    icalUrl: \"https://calendar.google.com/calendar/ical/en.uk%23holiday%40group.v.calendar.google.com/public/basic.ics\",\n    icalTimezone: \"Europe/London\",\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\nical = grafana.machinelearning.Holiday(\"ical\",\n    name=\"My iCal holiday\",\n    description=\"My Holiday\",\n    ical_url=\"https://calendar.google.com/calendar/ical/en.uk%23holiday%40group.v.calendar.google.com/public/basic.ics\",\n    ical_timezone=\"Europe/London\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var ical = new Grafana.MachineLearning.Holiday(\"ical\", new()\n    {\n        Name = \"My iCal holiday\",\n        Description = \"My Holiday\",\n        IcalUrl = \"https://calendar.google.com/calendar/ical/en.uk%23holiday%40group.v.calendar.google.com/public/basic.ics\",\n        IcalTimezone = \"Europe/London\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/machinelearning\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := machinelearning.NewHoliday(ctx, \"ical\", \u0026machinelearning.HolidayArgs{\n\t\t\tName:         pulumi.String(\"My iCal holiday\"),\n\t\t\tDescription:  pulumi.String(\"My Holiday\"),\n\t\t\tIcalUrl:      pulumi.String(\"https://calendar.google.com/calendar/ical/en.uk%23holiday%40group.v.calendar.google.com/public/basic.ics\"),\n\t\t\tIcalTimezone: pulumi.String(\"Europe/London\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.machineLearning.Holiday;\nimport com.pulumi.grafana.machineLearning.HolidayArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var ical = new Holiday(\"ical\", HolidayArgs.builder()\n            .name(\"My iCal holiday\")\n            .description(\"My Holiday\")\n            .icalUrl(\"https://calendar.google.com/calendar/ical/en.uk%23holiday%40group.v.calendar.google.com/public/basic.ics\")\n            .icalTimezone(\"Europe/London\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  ical:\n    type: grafana:machineLearning:Holiday\n    properties:\n      name: My iCal holiday\n      description: My Holiday\n      icalUrl: https://calendar.google.com/calendar/ical/en.uk%23holiday%40group.v.calendar.google.com/public/basic.ics\n      icalTimezone: Europe/London\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Custom Periods Holiday\n\nThis holiday uses custom periods to define the holidays.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst customPeriods = new grafana.machinelearning.Holiday(\"custom_periods\", {\n    name: \"My custom periods holiday\",\n    description: \"My Holiday\",\n    customPeriods: [\n        {\n            name: \"First of January\",\n            startTime: \"2023-01-01T00:00:00Z\",\n            endTime: \"2023-01-02T00:00:00Z\",\n        },\n        {\n            name: \"First of Feburary\",\n            startTime: \"2023-02-01T00:00:00Z\",\n            endTime: \"2023-02-02T00:00:00Z\",\n        },\n    ],\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\ncustom_periods = grafana.machinelearning.Holiday(\"custom_periods\",\n    name=\"My custom periods holiday\",\n    description=\"My Holiday\",\n    custom_periods=[\n        {\n            \"name\": \"First of January\",\n            \"start_time\": \"2023-01-01T00:00:00Z\",\n            \"end_time\": \"2023-01-02T00:00:00Z\",\n        },\n        {\n            \"name\": \"First of Feburary\",\n            \"start_time\": \"2023-02-01T00:00:00Z\",\n            \"end_time\": \"2023-02-02T00:00:00Z\",\n        },\n    ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var customPeriods = new Grafana.MachineLearning.Holiday(\"custom_periods\", new()\n    {\n        Name = \"My custom periods holiday\",\n        Description = \"My Holiday\",\n        CustomPeriods = new[]\n        {\n            new Grafana.MachineLearning.Inputs.HolidayCustomPeriodArgs\n            {\n                Name = \"First of January\",\n                StartTime = \"2023-01-01T00:00:00Z\",\n                EndTime = \"2023-01-02T00:00:00Z\",\n            },\n            new Grafana.MachineLearning.Inputs.HolidayCustomPeriodArgs\n            {\n                Name = \"First of Feburary\",\n                StartTime = \"2023-02-01T00:00:00Z\",\n                EndTime = \"2023-02-02T00:00:00Z\",\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/machinelearning\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := machinelearning.NewHoliday(ctx, \"custom_periods\", \u0026machinelearning.HolidayArgs{\n\t\t\tName:        pulumi.String(\"My custom periods holiday\"),\n\t\t\tDescription: pulumi.String(\"My Holiday\"),\n\t\t\tCustomPeriods: machinelearning.HolidayCustomPeriodArray{\n\t\t\t\t\u0026machinelearning.HolidayCustomPeriodArgs{\n\t\t\t\t\tName:      pulumi.String(\"First of January\"),\n\t\t\t\t\tStartTime: pulumi.String(\"2023-01-01T00:00:00Z\"),\n\t\t\t\t\tEndTime:   pulumi.String(\"2023-01-02T00:00:00Z\"),\n\t\t\t\t},\n\t\t\t\t\u0026machinelearning.HolidayCustomPeriodArgs{\n\t\t\t\t\tName:      pulumi.String(\"First of Feburary\"),\n\t\t\t\t\tStartTime: pulumi.String(\"2023-02-01T00:00:00Z\"),\n\t\t\t\t\tEndTime:   pulumi.String(\"2023-02-02T00:00:00Z\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.machineLearning.Holiday;\nimport com.pulumi.grafana.machineLearning.HolidayArgs;\nimport com.pulumi.grafana.machineLearning.inputs.HolidayCustomPeriodArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var customPeriods = new Holiday(\"customPeriods\", HolidayArgs.builder()\n            .name(\"My custom periods holiday\")\n            .description(\"My Holiday\")\n            .customPeriods(            \n                HolidayCustomPeriodArgs.builder()\n                    .name(\"First of January\")\n                    .startTime(\"2023-01-01T00:00:00Z\")\n                    .endTime(\"2023-01-02T00:00:00Z\")\n                    .build(),\n                HolidayCustomPeriodArgs.builder()\n                    .name(\"First of Feburary\")\n                    .startTime(\"2023-02-01T00:00:00Z\")\n                    .endTime(\"2023-02-02T00:00:00Z\")\n                    .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  customPeriods:\n    type: grafana:machineLearning:Holiday\n    name: custom_periods\n    properties:\n      name: My custom periods holiday\n      description: My Holiday\n      customPeriods:\n        - name: First of January\n          startTime: 2023-01-01T00:00:00Z\n          endTime: 2023-01-02T00:00:00Z\n        - name: First of Feburary\n          startTime: 2023-02-01T00:00:00Z\n          endTime: 2023-02-02T00:00:00Z\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:machineLearning/holiday:Holiday name \"{{ id }}\"\n```\n\n","properties":{"customPeriods":{"type":"array","items":{"$ref":"#/types/grafana:machineLearning/HolidayCustomPeriod:HolidayCustomPeriod"},"description":"A list of custom periods for the holiday."},"description":{"type":"string","description":"A description of the holiday."},"icalTimezone":{"type":"string","description":"The timezone to use for events in the iCal file pointed to by ical_url."},"icalUrl":{"type":"string","description":"A URL to an iCal file containing all occurrences of the holiday."},"name":{"type":"string","description":"The name of the holiday."}},"required":["name"],"inputProperties":{"customPeriods":{"type":"array","items":{"$ref":"#/types/grafana:machineLearning/HolidayCustomPeriod:HolidayCustomPeriod"},"description":"A list of custom periods for the holiday."},"description":{"type":"string","description":"A description of the holiday."},"icalTimezone":{"type":"string","description":"The timezone to use for events in the iCal file pointed to by ical_url."},"icalUrl":{"type":"string","description":"A URL to an iCal file containing all occurrences of the holiday."},"name":{"type":"string","description":"The name of the holiday."}},"stateInputs":{"description":"Input properties used for looking up and filtering Holiday resources.\n","properties":{"customPeriods":{"type":"array","items":{"$ref":"#/types/grafana:machineLearning/HolidayCustomPeriod:HolidayCustomPeriod"},"description":"A list of custom periods for the holiday."},"description":{"type":"string","description":"A description of the holiday."},"icalTimezone":{"type":"string","description":"The timezone to use for events in the iCal file pointed to by ical_url."},"icalUrl":{"type":"string","description":"A URL to an iCal file containing all occurrences of the holiday."},"name":{"type":"string","description":"The name of the holiday."}},"type":"object"}},"grafana:machineLearning/job:Job":{"description":"A job defines the queries and model parameters for a machine learning task.\n\nSee [the Grafana Cloud docs](https://grafana.com/docs/grafana-cloud/alerting-and-irm/machine-learning/dynamic-alerting/forecasting/config/) for more information\non available hyperparameters for use in the \u003cspan pulumi-lang-nodejs=\"`hyperParams`\" pulumi-lang-dotnet=\"`HyperParams`\" pulumi-lang-go=\"`hyperParams`\" pulumi-lang-python=\"`hyper_params`\" pulumi-lang-yaml=\"`hyperParams`\" pulumi-lang-java=\"`hyperParams`\"\u003e`hyper_params`\u003c/span\u003e field.\n\n## Example Usage\n\n### Basic Forecast\n\nThis forecast uses a Prometheus datasource, where the source query is defined in the \u003cspan pulumi-lang-nodejs=\"`expr`\" pulumi-lang-dotnet=\"`Expr`\" pulumi-lang-go=\"`expr`\" pulumi-lang-python=\"`expr`\" pulumi-lang-yaml=\"`expr`\" pulumi-lang-java=\"`expr`\"\u003e`expr`\u003c/span\u003e field of the \u003cspan pulumi-lang-nodejs=\"`queryParams`\" pulumi-lang-dotnet=\"`QueryParams`\" pulumi-lang-go=\"`queryParams`\" pulumi-lang-python=\"`query_params`\" pulumi-lang-yaml=\"`queryParams`\" pulumi-lang-java=\"`queryParams`\"\u003e`query_params`\u003c/span\u003e attribute.\n\nOther datasources are supported, but the structure \u003cspan pulumi-lang-nodejs=\"`queryParams`\" pulumi-lang-dotnet=\"`QueryParams`\" pulumi-lang-go=\"`queryParams`\" pulumi-lang-python=\"`query_params`\" pulumi-lang-yaml=\"`queryParams`\" pulumi-lang-java=\"`queryParams`\"\u003e`query_params`\u003c/span\u003e may differ.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst foo = new grafana.oss.DataSource(\"foo\", {\n    type: \"prometheus\",\n    name: \"prometheus-ds-test\",\n    uid: \"prometheus-ds-test-uid\",\n    url: \"https://my-instance.com\",\n    basicAuthEnabled: true,\n    basicAuthUsername: \"username\",\n    jsonDataEncoded: JSON.stringify({\n        httpMethod: \"POST\",\n        prometheusType: \"Mimir\",\n        prometheusVersion: \"2.4.0\",\n    }),\n    secureJsonDataEncoded: JSON.stringify({\n        basicAuthPassword: \"password\",\n    }),\n});\nconst testJob = new grafana.machinelearning.Job(\"test_job\", {\n    name: \"Test Job\",\n    metric: \"tf_test_job\",\n    datasourceType: \"prometheus\",\n    datasourceUid: foo.uid,\n    queryParams: {\n        expr: \"grafanacloud_grafana_instance_active_user_count\",\n    },\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumiverse_grafana as grafana\n\nfoo = grafana.oss.DataSource(\"foo\",\n    type=\"prometheus\",\n    name=\"prometheus-ds-test\",\n    uid=\"prometheus-ds-test-uid\",\n    url=\"https://my-instance.com\",\n    basic_auth_enabled=True,\n    basic_auth_username=\"username\",\n    json_data_encoded=json.dumps({\n        \"httpMethod\": \"POST\",\n        \"prometheusType\": \"Mimir\",\n        \"prometheusVersion\": \"2.4.0\",\n    }),\n    secure_json_data_encoded=json.dumps({\n        \"basicAuthPassword\": \"password\",\n    }))\ntest_job = grafana.machinelearning.Job(\"test_job\",\n    name=\"Test Job\",\n    metric=\"tf_test_job\",\n    datasource_type=\"prometheus\",\n    datasource_uid=foo.uid,\n    query_params={\n        \"expr\": \"grafanacloud_grafana_instance_active_user_count\",\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var foo = new Grafana.Oss.DataSource(\"foo\", new()\n    {\n        Type = \"prometheus\",\n        Name = \"prometheus-ds-test\",\n        Uid = \"prometheus-ds-test-uid\",\n        Url = \"https://my-instance.com\",\n        BasicAuthEnabled = true,\n        BasicAuthUsername = \"username\",\n        JsonDataEncoded = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n        {\n            [\"httpMethod\"] = \"POST\",\n            [\"prometheusType\"] = \"Mimir\",\n            [\"prometheusVersion\"] = \"2.4.0\",\n        }),\n        SecureJsonDataEncoded = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n        {\n            [\"basicAuthPassword\"] = \"password\",\n        }),\n    });\n\n    var testJob = new Grafana.MachineLearning.Job(\"test_job\", new()\n    {\n        Name = \"Test Job\",\n        Metric = \"tf_test_job\",\n        DatasourceType = \"prometheus\",\n        DatasourceUid = foo.Uid,\n        QueryParams = \n        {\n            { \"expr\", \"grafanacloud_grafana_instance_active_user_count\" },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/machinelearning\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"httpMethod\":        \"POST\",\n\t\t\t\"prometheusType\":    \"Mimir\",\n\t\t\t\"prometheusVersion\": \"2.4.0\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\ttmpJSON1, err := json.Marshal(map[string]interface{}{\n\t\t\t\"basicAuthPassword\": \"password\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson1 := string(tmpJSON1)\n\t\tfoo, err := oss.NewDataSource(ctx, \"foo\", \u0026oss.DataSourceArgs{\n\t\t\tType:                  pulumi.String(\"prometheus\"),\n\t\t\tName:                  pulumi.String(\"prometheus-ds-test\"),\n\t\t\tUid:                   pulumi.String(\"prometheus-ds-test-uid\"),\n\t\t\tUrl:                   pulumi.String(\"https://my-instance.com\"),\n\t\t\tBasicAuthEnabled:      pulumi.Bool(true),\n\t\t\tBasicAuthUsername:     pulumi.String(\"username\"),\n\t\t\tJsonDataEncoded:       pulumi.String(json0),\n\t\t\tSecureJsonDataEncoded: pulumi.String(json1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = machinelearning.NewJob(ctx, \"test_job\", \u0026machinelearning.JobArgs{\n\t\t\tName:           pulumi.String(\"Test Job\"),\n\t\t\tMetric:         pulumi.String(\"tf_test_job\"),\n\t\t\tDatasourceType: pulumi.String(\"prometheus\"),\n\t\t\tDatasourceUid:  foo.Uid,\n\t\t\tQueryParams: pulumi.StringMap{\n\t\t\t\t\"expr\": pulumi.String(\"grafanacloud_grafana_instance_active_user_count\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.DataSource;\nimport com.pulumi.grafana.oss.DataSourceArgs;\nimport com.pulumi.grafana.machineLearning.Job;\nimport com.pulumi.grafana.machineLearning.JobArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var foo = new DataSource(\"foo\", DataSourceArgs.builder()\n            .type(\"prometheus\")\n            .name(\"prometheus-ds-test\")\n            .uid(\"prometheus-ds-test-uid\")\n            .url(\"https://my-instance.com\")\n            .basicAuthEnabled(true)\n            .basicAuthUsername(\"username\")\n            .jsonDataEncoded(serializeJson(\n                jsonObject(\n                    jsonProperty(\"httpMethod\", \"POST\"),\n                    jsonProperty(\"prometheusType\", \"Mimir\"),\n                    jsonProperty(\"prometheusVersion\", \"2.4.0\")\n                )))\n            .secureJsonDataEncoded(serializeJson(\n                jsonObject(\n                    jsonProperty(\"basicAuthPassword\", \"password\")\n                )))\n            .build());\n\n        var testJob = new Job(\"testJob\", JobArgs.builder()\n            .name(\"Test Job\")\n            .metric(\"tf_test_job\")\n            .datasourceType(\"prometheus\")\n            .datasourceUid(foo.uid())\n            .queryParams(Map.of(\"expr\", \"grafanacloud_grafana_instance_active_user_count\"))\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  foo:\n    type: grafana:oss:DataSource\n    properties:\n      type: prometheus\n      name: prometheus-ds-test\n      uid: prometheus-ds-test-uid\n      url: https://my-instance.com\n      basicAuthEnabled: true\n      basicAuthUsername: username\n      jsonDataEncoded:\n        fn::toJSON:\n          httpMethod: POST\n          prometheusType: Mimir\n          prometheusVersion: 2.4.0\n      secureJsonDataEncoded:\n        fn::toJSON:\n          basicAuthPassword: password\n  testJob:\n    type: grafana:machineLearning:Job\n    name: test_job\n    properties:\n      name: Test Job\n      metric: tf_test_job\n      datasourceType: prometheus\n      datasourceUid: ${foo.uid}\n      queryParams:\n        expr: grafanacloud_grafana_instance_active_user_count\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Tuned Forecast\n\nThis forecast has tuned hyperparameters to improve the accuracy of the model.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst foo = new grafana.oss.DataSource(\"foo\", {\n    type: \"prometheus\",\n    name: \"prometheus-ds-test\",\n    uid: \"prometheus-ds-test-uid\",\n    url: \"https://my-instance.com\",\n    basicAuthEnabled: true,\n    basicAuthUsername: \"username\",\n    jsonDataEncoded: JSON.stringify({\n        httpMethod: \"POST\",\n        prometheusType: \"Mimir\",\n        prometheusVersion: \"2.4.0\",\n    }),\n    secureJsonDataEncoded: JSON.stringify({\n        basicAuthPassword: \"password\",\n    }),\n});\nconst testJob = new grafana.machinelearning.Job(\"test_job\", {\n    name: \"Test Job\",\n    metric: \"tf_test_job\",\n    datasourceType: \"prometheus\",\n    datasourceUid: foo.uid,\n    queryParams: {\n        expr: \"grafanacloud_grafana_instance_active_user_count\",\n    },\n    hyperParams: {\n        daily_seasonality: \"15\",\n        weekly_seasonality: \"10\",\n    },\n    customLabels: {\n        example_label: \"example_value\",\n    },\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumiverse_grafana as grafana\n\nfoo = grafana.oss.DataSource(\"foo\",\n    type=\"prometheus\",\n    name=\"prometheus-ds-test\",\n    uid=\"prometheus-ds-test-uid\",\n    url=\"https://my-instance.com\",\n    basic_auth_enabled=True,\n    basic_auth_username=\"username\",\n    json_data_encoded=json.dumps({\n        \"httpMethod\": \"POST\",\n        \"prometheusType\": \"Mimir\",\n        \"prometheusVersion\": \"2.4.0\",\n    }),\n    secure_json_data_encoded=json.dumps({\n        \"basicAuthPassword\": \"password\",\n    }))\ntest_job = grafana.machinelearning.Job(\"test_job\",\n    name=\"Test Job\",\n    metric=\"tf_test_job\",\n    datasource_type=\"prometheus\",\n    datasource_uid=foo.uid,\n    query_params={\n        \"expr\": \"grafanacloud_grafana_instance_active_user_count\",\n    },\n    hyper_params={\n        \"daily_seasonality\": \"15\",\n        \"weekly_seasonality\": \"10\",\n    },\n    custom_labels={\n        \"example_label\": \"example_value\",\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var foo = new Grafana.Oss.DataSource(\"foo\", new()\n    {\n        Type = \"prometheus\",\n        Name = \"prometheus-ds-test\",\n        Uid = \"prometheus-ds-test-uid\",\n        Url = \"https://my-instance.com\",\n        BasicAuthEnabled = true,\n        BasicAuthUsername = \"username\",\n        JsonDataEncoded = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n        {\n            [\"httpMethod\"] = \"POST\",\n            [\"prometheusType\"] = \"Mimir\",\n            [\"prometheusVersion\"] = \"2.4.0\",\n        }),\n        SecureJsonDataEncoded = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n        {\n            [\"basicAuthPassword\"] = \"password\",\n        }),\n    });\n\n    var testJob = new Grafana.MachineLearning.Job(\"test_job\", new()\n    {\n        Name = \"Test Job\",\n        Metric = \"tf_test_job\",\n        DatasourceType = \"prometheus\",\n        DatasourceUid = foo.Uid,\n        QueryParams = \n        {\n            { \"expr\", \"grafanacloud_grafana_instance_active_user_count\" },\n        },\n        HyperParams = \n        {\n            { \"daily_seasonality\", \"15\" },\n            { \"weekly_seasonality\", \"10\" },\n        },\n        CustomLabels = \n        {\n            { \"example_label\", \"example_value\" },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/machinelearning\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"httpMethod\":        \"POST\",\n\t\t\t\"prometheusType\":    \"Mimir\",\n\t\t\t\"prometheusVersion\": \"2.4.0\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\ttmpJSON1, err := json.Marshal(map[string]interface{}{\n\t\t\t\"basicAuthPassword\": \"password\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson1 := string(tmpJSON1)\n\t\tfoo, err := oss.NewDataSource(ctx, \"foo\", \u0026oss.DataSourceArgs{\n\t\t\tType:                  pulumi.String(\"prometheus\"),\n\t\t\tName:                  pulumi.String(\"prometheus-ds-test\"),\n\t\t\tUid:                   pulumi.String(\"prometheus-ds-test-uid\"),\n\t\t\tUrl:                   pulumi.String(\"https://my-instance.com\"),\n\t\t\tBasicAuthEnabled:      pulumi.Bool(true),\n\t\t\tBasicAuthUsername:     pulumi.String(\"username\"),\n\t\t\tJsonDataEncoded:       pulumi.String(json0),\n\t\t\tSecureJsonDataEncoded: pulumi.String(json1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = machinelearning.NewJob(ctx, \"test_job\", \u0026machinelearning.JobArgs{\n\t\t\tName:           pulumi.String(\"Test Job\"),\n\t\t\tMetric:         pulumi.String(\"tf_test_job\"),\n\t\t\tDatasourceType: pulumi.String(\"prometheus\"),\n\t\t\tDatasourceUid:  foo.Uid,\n\t\t\tQueryParams: pulumi.StringMap{\n\t\t\t\t\"expr\": pulumi.String(\"grafanacloud_grafana_instance_active_user_count\"),\n\t\t\t},\n\t\t\tHyperParams: pulumi.StringMap{\n\t\t\t\t\"daily_seasonality\":  pulumi.String(\"15\"),\n\t\t\t\t\"weekly_seasonality\": pulumi.String(\"10\"),\n\t\t\t},\n\t\t\tCustomLabels: pulumi.StringMap{\n\t\t\t\t\"example_label\": pulumi.String(\"example_value\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.DataSource;\nimport com.pulumi.grafana.oss.DataSourceArgs;\nimport com.pulumi.grafana.machineLearning.Job;\nimport com.pulumi.grafana.machineLearning.JobArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var foo = new DataSource(\"foo\", DataSourceArgs.builder()\n            .type(\"prometheus\")\n            .name(\"prometheus-ds-test\")\n            .uid(\"prometheus-ds-test-uid\")\n            .url(\"https://my-instance.com\")\n            .basicAuthEnabled(true)\n            .basicAuthUsername(\"username\")\n            .jsonDataEncoded(serializeJson(\n                jsonObject(\n                    jsonProperty(\"httpMethod\", \"POST\"),\n                    jsonProperty(\"prometheusType\", \"Mimir\"),\n                    jsonProperty(\"prometheusVersion\", \"2.4.0\")\n                )))\n            .secureJsonDataEncoded(serializeJson(\n                jsonObject(\n                    jsonProperty(\"basicAuthPassword\", \"password\")\n                )))\n            .build());\n\n        var testJob = new Job(\"testJob\", JobArgs.builder()\n            .name(\"Test Job\")\n            .metric(\"tf_test_job\")\n            .datasourceType(\"prometheus\")\n            .datasourceUid(foo.uid())\n            .queryParams(Map.of(\"expr\", \"grafanacloud_grafana_instance_active_user_count\"))\n            .hyperParams(Map.ofEntries(\n                Map.entry(\"daily_seasonality\", \"15\"),\n                Map.entry(\"weekly_seasonality\", \"10\")\n            ))\n            .customLabels(Map.of(\"example_label\", \"example_value\"))\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  foo:\n    type: grafana:oss:DataSource\n    properties:\n      type: prometheus\n      name: prometheus-ds-test\n      uid: prometheus-ds-test-uid\n      url: https://my-instance.com\n      basicAuthEnabled: true\n      basicAuthUsername: username\n      jsonDataEncoded:\n        fn::toJSON:\n          httpMethod: POST\n          prometheusType: Mimir\n          prometheusVersion: 2.4.0\n      secureJsonDataEncoded:\n        fn::toJSON:\n          basicAuthPassword: password\n  testJob:\n    type: grafana:machineLearning:Job\n    name: test_job\n    properties:\n      name: Test Job\n      metric: tf_test_job\n      datasourceType: prometheus\n      datasourceUid: ${foo.uid}\n      queryParams:\n        expr: grafanacloud_grafana_instance_active_user_count\n      hyperParams:\n        daily_seasonality: 15\n        weekly_seasonality: 10\n      customLabels:\n        example_label: example_value\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Rescaled Forecast\n\nThis forecast has had the data transformed using a power transformation in order to avoid negative lower predictions.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst foo = new grafana.oss.DataSource(\"foo\", {\n    type: \"prometheus\",\n    name: \"prometheus-ds-test\",\n    uid: \"prometheus-ds-test-uid\",\n    url: \"https://my-instance.com\",\n    basicAuthEnabled: true,\n    basicAuthUsername: \"username\",\n    jsonDataEncoded: JSON.stringify({\n        httpMethod: \"POST\",\n        prometheusType: \"Mimir\",\n        prometheusVersion: \"2.4.0\",\n    }),\n    secureJsonDataEncoded: JSON.stringify({\n        basicAuthPassword: \"password\",\n    }),\n});\nconst testJob = new grafana.machinelearning.Job(\"test_job\", {\n    name: \"Test Job\",\n    metric: \"tf_test_job\",\n    datasourceType: \"prometheus\",\n    datasourceUid: foo.uid,\n    queryParams: {\n        expr: \"grafanacloud_grafana_instance_active_user_count\",\n    },\n    hyperParams: {\n        transformation_id: \"power\",\n    },\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumiverse_grafana as grafana\n\nfoo = grafana.oss.DataSource(\"foo\",\n    type=\"prometheus\",\n    name=\"prometheus-ds-test\",\n    uid=\"prometheus-ds-test-uid\",\n    url=\"https://my-instance.com\",\n    basic_auth_enabled=True,\n    basic_auth_username=\"username\",\n    json_data_encoded=json.dumps({\n        \"httpMethod\": \"POST\",\n        \"prometheusType\": \"Mimir\",\n        \"prometheusVersion\": \"2.4.0\",\n    }),\n    secure_json_data_encoded=json.dumps({\n        \"basicAuthPassword\": \"password\",\n    }))\ntest_job = grafana.machinelearning.Job(\"test_job\",\n    name=\"Test Job\",\n    metric=\"tf_test_job\",\n    datasource_type=\"prometheus\",\n    datasource_uid=foo.uid,\n    query_params={\n        \"expr\": \"grafanacloud_grafana_instance_active_user_count\",\n    },\n    hyper_params={\n        \"transformation_id\": \"power\",\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var foo = new Grafana.Oss.DataSource(\"foo\", new()\n    {\n        Type = \"prometheus\",\n        Name = \"prometheus-ds-test\",\n        Uid = \"prometheus-ds-test-uid\",\n        Url = \"https://my-instance.com\",\n        BasicAuthEnabled = true,\n        BasicAuthUsername = \"username\",\n        JsonDataEncoded = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n        {\n            [\"httpMethod\"] = \"POST\",\n            [\"prometheusType\"] = \"Mimir\",\n            [\"prometheusVersion\"] = \"2.4.0\",\n        }),\n        SecureJsonDataEncoded = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n        {\n            [\"basicAuthPassword\"] = \"password\",\n        }),\n    });\n\n    var testJob = new Grafana.MachineLearning.Job(\"test_job\", new()\n    {\n        Name = \"Test Job\",\n        Metric = \"tf_test_job\",\n        DatasourceType = \"prometheus\",\n        DatasourceUid = foo.Uid,\n        QueryParams = \n        {\n            { \"expr\", \"grafanacloud_grafana_instance_active_user_count\" },\n        },\n        HyperParams = \n        {\n            { \"transformation_id\", \"power\" },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/machinelearning\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"httpMethod\":        \"POST\",\n\t\t\t\"prometheusType\":    \"Mimir\",\n\t\t\t\"prometheusVersion\": \"2.4.0\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\ttmpJSON1, err := json.Marshal(map[string]interface{}{\n\t\t\t\"basicAuthPassword\": \"password\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson1 := string(tmpJSON1)\n\t\tfoo, err := oss.NewDataSource(ctx, \"foo\", \u0026oss.DataSourceArgs{\n\t\t\tType:                  pulumi.String(\"prometheus\"),\n\t\t\tName:                  pulumi.String(\"prometheus-ds-test\"),\n\t\t\tUid:                   pulumi.String(\"prometheus-ds-test-uid\"),\n\t\t\tUrl:                   pulumi.String(\"https://my-instance.com\"),\n\t\t\tBasicAuthEnabled:      pulumi.Bool(true),\n\t\t\tBasicAuthUsername:     pulumi.String(\"username\"),\n\t\t\tJsonDataEncoded:       pulumi.String(json0),\n\t\t\tSecureJsonDataEncoded: pulumi.String(json1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = machinelearning.NewJob(ctx, \"test_job\", \u0026machinelearning.JobArgs{\n\t\t\tName:           pulumi.String(\"Test Job\"),\n\t\t\tMetric:         pulumi.String(\"tf_test_job\"),\n\t\t\tDatasourceType: pulumi.String(\"prometheus\"),\n\t\t\tDatasourceUid:  foo.Uid,\n\t\t\tQueryParams: pulumi.StringMap{\n\t\t\t\t\"expr\": pulumi.String(\"grafanacloud_grafana_instance_active_user_count\"),\n\t\t\t},\n\t\t\tHyperParams: pulumi.StringMap{\n\t\t\t\t\"transformation_id\": pulumi.String(\"power\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.DataSource;\nimport com.pulumi.grafana.oss.DataSourceArgs;\nimport com.pulumi.grafana.machineLearning.Job;\nimport com.pulumi.grafana.machineLearning.JobArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var foo = new DataSource(\"foo\", DataSourceArgs.builder()\n            .type(\"prometheus\")\n            .name(\"prometheus-ds-test\")\n            .uid(\"prometheus-ds-test-uid\")\n            .url(\"https://my-instance.com\")\n            .basicAuthEnabled(true)\n            .basicAuthUsername(\"username\")\n            .jsonDataEncoded(serializeJson(\n                jsonObject(\n                    jsonProperty(\"httpMethod\", \"POST\"),\n                    jsonProperty(\"prometheusType\", \"Mimir\"),\n                    jsonProperty(\"prometheusVersion\", \"2.4.0\")\n                )))\n            .secureJsonDataEncoded(serializeJson(\n                jsonObject(\n                    jsonProperty(\"basicAuthPassword\", \"password\")\n                )))\n            .build());\n\n        var testJob = new Job(\"testJob\", JobArgs.builder()\n            .name(\"Test Job\")\n            .metric(\"tf_test_job\")\n            .datasourceType(\"prometheus\")\n            .datasourceUid(foo.uid())\n            .queryParams(Map.of(\"expr\", \"grafanacloud_grafana_instance_active_user_count\"))\n            .hyperParams(Map.of(\"transformation_id\", \"power\"))\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  foo:\n    type: grafana:oss:DataSource\n    properties:\n      type: prometheus\n      name: prometheus-ds-test\n      uid: prometheus-ds-test-uid\n      url: https://my-instance.com\n      basicAuthEnabled: true\n      basicAuthUsername: username\n      jsonDataEncoded:\n        fn::toJSON:\n          httpMethod: POST\n          prometheusType: Mimir\n          prometheusVersion: 2.4.0\n      secureJsonDataEncoded:\n        fn::toJSON:\n          basicAuthPassword: password\n  testJob:\n    type: grafana:machineLearning:Job\n    name: test_job\n    properties:\n      name: Test Job\n      metric: tf_test_job\n      datasourceType: prometheus\n      datasourceUid: ${foo.uid}\n      queryParams:\n        expr: grafanacloud_grafana_instance_active_user_count\n      hyperParams:\n        transformation_id: power\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Forecast with Holidays\n\nThis forecast has holidays which will be taken into account when training the model.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst foo = new grafana.oss.DataSource(\"foo\", {\n    type: \"prometheus\",\n    name: \"prometheus-ds-test\",\n    uid: \"prometheus-ds-test-uid\",\n    url: \"https://my-instance.com\",\n    basicAuthEnabled: true,\n    basicAuthUsername: \"username\",\n    jsonDataEncoded: JSON.stringify({\n        httpMethod: \"POST\",\n        prometheusType: \"Mimir\",\n        prometheusVersion: \"2.4.0\",\n    }),\n    secureJsonDataEncoded: JSON.stringify({\n        basicAuthPassword: \"password\",\n    }),\n});\nconst testHoliday = new grafana.machinelearning.Holiday(\"test_holiday\", {\n    name: \"Test Holiday\",\n    customPeriods: [{\n        name: \"First of January\",\n        startTime: \"2023-01-01T00:00:00Z\",\n        endTime: \"2023-01-02T00:00:00Z\",\n    }],\n});\nconst testJob = new grafana.machinelearning.Job(\"test_job\", {\n    name: \"Test Job\",\n    metric: \"tf_test_job\",\n    datasourceType: \"prometheus\",\n    datasourceUid: foo.uid,\n    queryParams: {\n        expr: \"grafanacloud_grafana_instance_active_user_count\",\n    },\n    holidays: [testHoliday.id],\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumiverse_grafana as grafana\n\nfoo = grafana.oss.DataSource(\"foo\",\n    type=\"prometheus\",\n    name=\"prometheus-ds-test\",\n    uid=\"prometheus-ds-test-uid\",\n    url=\"https://my-instance.com\",\n    basic_auth_enabled=True,\n    basic_auth_username=\"username\",\n    json_data_encoded=json.dumps({\n        \"httpMethod\": \"POST\",\n        \"prometheusType\": \"Mimir\",\n        \"prometheusVersion\": \"2.4.0\",\n    }),\n    secure_json_data_encoded=json.dumps({\n        \"basicAuthPassword\": \"password\",\n    }))\ntest_holiday = grafana.machinelearning.Holiday(\"test_holiday\",\n    name=\"Test Holiday\",\n    custom_periods=[{\n        \"name\": \"First of January\",\n        \"start_time\": \"2023-01-01T00:00:00Z\",\n        \"end_time\": \"2023-01-02T00:00:00Z\",\n    }])\ntest_job = grafana.machinelearning.Job(\"test_job\",\n    name=\"Test Job\",\n    metric=\"tf_test_job\",\n    datasource_type=\"prometheus\",\n    datasource_uid=foo.uid,\n    query_params={\n        \"expr\": \"grafanacloud_grafana_instance_active_user_count\",\n    },\n    holidays=[test_holiday.id])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var foo = new Grafana.Oss.DataSource(\"foo\", new()\n    {\n        Type = \"prometheus\",\n        Name = \"prometheus-ds-test\",\n        Uid = \"prometheus-ds-test-uid\",\n        Url = \"https://my-instance.com\",\n        BasicAuthEnabled = true,\n        BasicAuthUsername = \"username\",\n        JsonDataEncoded = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n        {\n            [\"httpMethod\"] = \"POST\",\n            [\"prometheusType\"] = \"Mimir\",\n            [\"prometheusVersion\"] = \"2.4.0\",\n        }),\n        SecureJsonDataEncoded = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n        {\n            [\"basicAuthPassword\"] = \"password\",\n        }),\n    });\n\n    var testHoliday = new Grafana.MachineLearning.Holiday(\"test_holiday\", new()\n    {\n        Name = \"Test Holiday\",\n        CustomPeriods = new[]\n        {\n            new Grafana.MachineLearning.Inputs.HolidayCustomPeriodArgs\n            {\n                Name = \"First of January\",\n                StartTime = \"2023-01-01T00:00:00Z\",\n                EndTime = \"2023-01-02T00:00:00Z\",\n            },\n        },\n    });\n\n    var testJob = new Grafana.MachineLearning.Job(\"test_job\", new()\n    {\n        Name = \"Test Job\",\n        Metric = \"tf_test_job\",\n        DatasourceType = \"prometheus\",\n        DatasourceUid = foo.Uid,\n        QueryParams = \n        {\n            { \"expr\", \"grafanacloud_grafana_instance_active_user_count\" },\n        },\n        Holidays = new[]\n        {\n            testHoliday.Id,\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/machinelearning\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"httpMethod\":        \"POST\",\n\t\t\t\"prometheusType\":    \"Mimir\",\n\t\t\t\"prometheusVersion\": \"2.4.0\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\ttmpJSON1, err := json.Marshal(map[string]interface{}{\n\t\t\t\"basicAuthPassword\": \"password\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson1 := string(tmpJSON1)\n\t\tfoo, err := oss.NewDataSource(ctx, \"foo\", \u0026oss.DataSourceArgs{\n\t\t\tType:                  pulumi.String(\"prometheus\"),\n\t\t\tName:                  pulumi.String(\"prometheus-ds-test\"),\n\t\t\tUid:                   pulumi.String(\"prometheus-ds-test-uid\"),\n\t\t\tUrl:                   pulumi.String(\"https://my-instance.com\"),\n\t\t\tBasicAuthEnabled:      pulumi.Bool(true),\n\t\t\tBasicAuthUsername:     pulumi.String(\"username\"),\n\t\t\tJsonDataEncoded:       pulumi.String(json0),\n\t\t\tSecureJsonDataEncoded: pulumi.String(json1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestHoliday, err := machinelearning.NewHoliday(ctx, \"test_holiday\", \u0026machinelearning.HolidayArgs{\n\t\t\tName: pulumi.String(\"Test Holiday\"),\n\t\t\tCustomPeriods: machinelearning.HolidayCustomPeriodArray{\n\t\t\t\t\u0026machinelearning.HolidayCustomPeriodArgs{\n\t\t\t\t\tName:      pulumi.String(\"First of January\"),\n\t\t\t\t\tStartTime: pulumi.String(\"2023-01-01T00:00:00Z\"),\n\t\t\t\t\tEndTime:   pulumi.String(\"2023-01-02T00:00:00Z\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = machinelearning.NewJob(ctx, \"test_job\", \u0026machinelearning.JobArgs{\n\t\t\tName:           pulumi.String(\"Test Job\"),\n\t\t\tMetric:         pulumi.String(\"tf_test_job\"),\n\t\t\tDatasourceType: pulumi.String(\"prometheus\"),\n\t\t\tDatasourceUid:  foo.Uid,\n\t\t\tQueryParams: pulumi.StringMap{\n\t\t\t\t\"expr\": pulumi.String(\"grafanacloud_grafana_instance_active_user_count\"),\n\t\t\t},\n\t\t\tHolidays: pulumi.StringArray{\n\t\t\t\ttestHoliday.ID(),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.DataSource;\nimport com.pulumi.grafana.oss.DataSourceArgs;\nimport com.pulumi.grafana.machineLearning.Holiday;\nimport com.pulumi.grafana.machineLearning.HolidayArgs;\nimport com.pulumi.grafana.machineLearning.inputs.HolidayCustomPeriodArgs;\nimport com.pulumi.grafana.machineLearning.Job;\nimport com.pulumi.grafana.machineLearning.JobArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var foo = new DataSource(\"foo\", DataSourceArgs.builder()\n            .type(\"prometheus\")\n            .name(\"prometheus-ds-test\")\n            .uid(\"prometheus-ds-test-uid\")\n            .url(\"https://my-instance.com\")\n            .basicAuthEnabled(true)\n            .basicAuthUsername(\"username\")\n            .jsonDataEncoded(serializeJson(\n                jsonObject(\n                    jsonProperty(\"httpMethod\", \"POST\"),\n                    jsonProperty(\"prometheusType\", \"Mimir\"),\n                    jsonProperty(\"prometheusVersion\", \"2.4.0\")\n                )))\n            .secureJsonDataEncoded(serializeJson(\n                jsonObject(\n                    jsonProperty(\"basicAuthPassword\", \"password\")\n                )))\n            .build());\n\n        var testHoliday = new Holiday(\"testHoliday\", HolidayArgs.builder()\n            .name(\"Test Holiday\")\n            .customPeriods(HolidayCustomPeriodArgs.builder()\n                .name(\"First of January\")\n                .startTime(\"2023-01-01T00:00:00Z\")\n                .endTime(\"2023-01-02T00:00:00Z\")\n                .build())\n            .build());\n\n        var testJob = new Job(\"testJob\", JobArgs.builder()\n            .name(\"Test Job\")\n            .metric(\"tf_test_job\")\n            .datasourceType(\"prometheus\")\n            .datasourceUid(foo.uid())\n            .queryParams(Map.of(\"expr\", \"grafanacloud_grafana_instance_active_user_count\"))\n            .holidays(testHoliday.id())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  foo:\n    type: grafana:oss:DataSource\n    properties:\n      type: prometheus\n      name: prometheus-ds-test\n      uid: prometheus-ds-test-uid\n      url: https://my-instance.com\n      basicAuthEnabled: true\n      basicAuthUsername: username\n      jsonDataEncoded:\n        fn::toJSON:\n          httpMethod: POST\n          prometheusType: Mimir\n          prometheusVersion: 2.4.0\n      secureJsonDataEncoded:\n        fn::toJSON:\n          basicAuthPassword: password\n  testHoliday:\n    type: grafana:machineLearning:Holiday\n    name: test_holiday\n    properties:\n      name: Test Holiday\n      customPeriods:\n        - name: First of January\n          startTime: 2023-01-01T00:00:00Z\n          endTime: 2023-01-02T00:00:00Z\n  testJob:\n    type: grafana:machineLearning:Job\n    name: test_job\n    properties:\n      name: Test Job\n      metric: tf_test_job\n      datasourceType: prometheus\n      datasourceUid: ${foo.uid}\n      queryParams:\n        expr: grafanacloud_grafana_instance_active_user_count\n      holidays:\n        - ${testHoliday.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:machineLearning/job:Job name \"{{ id }}\"\n```\n\n","properties":{"customLabels":{"type":"object","additionalProperties":{"type":"string"},"description":"An object representing the custom labels added on the forecast."},"datasourceType":{"type":"string","description":"The type of datasource being queried. Currently allowed values are prometheus, grafana-prometheus-datasource, grafana-amazonprometheus-datasource, loki, grafana-loki-datasource, graphite, grafana-graphite-datasource, grafana-datadog-datasource, postgres, grafana-postgresql-datasource, doitintl-bigquery-datasource, grafana-bigquery-datasource, grafana-snowflake-datasource, influxdb, grafana-influxdb-datasource, grafana-splunk-datasource, elasticsearch, grafana-elasticsearch-datasource, and grafana-mongodb-datasource."},"datasourceUid":{"type":"string","description":"The uid of the datasource to query."},"description":{"type":"string","description":"A description of the job."},"holidays":{"type":"array","items":{"type":"string"},"description":"A list of holiday IDs or names to take into account when training the model."},"hyperParams":{"type":"object","additionalProperties":{"type":"string"},"description":"The hyperparameters used to fine tune the algorithm. See https://grafana.com/docs/grafana-cloud/alerting-and-irm/machine-learning/forecasts/models/ for the full list of available hyperparameters."},"interval":{"type":"integer","description":"The data interval in seconds to train the data on."},"metric":{"type":"string","description":"The metric used to query the job results."},"name":{"type":"string","description":"The name of the job."},"queryParams":{"type":"object","additionalProperties":{"type":"string"},"description":"An object representing the query params to query Grafana with."},"trainingWindow":{"type":"integer","description":"The data interval in seconds to train the data on."}},"required":["datasourceType","datasourceUid","metric","name","queryParams"],"inputProperties":{"customLabels":{"type":"object","additionalProperties":{"type":"string"},"description":"An object representing the custom labels added on the forecast."},"datasourceType":{"type":"string","description":"The type of datasource being queried. Currently allowed values are prometheus, grafana-prometheus-datasource, grafana-amazonprometheus-datasource, loki, grafana-loki-datasource, graphite, grafana-graphite-datasource, grafana-datadog-datasource, postgres, grafana-postgresql-datasource, doitintl-bigquery-datasource, grafana-bigquery-datasource, grafana-snowflake-datasource, influxdb, grafana-influxdb-datasource, grafana-splunk-datasource, elasticsearch, grafana-elasticsearch-datasource, and grafana-mongodb-datasource."},"datasourceUid":{"type":"string","description":"The uid of the datasource to query."},"description":{"type":"string","description":"A description of the job."},"holidays":{"type":"array","items":{"type":"string"},"description":"A list of holiday IDs or names to take into account when training the model."},"hyperParams":{"type":"object","additionalProperties":{"type":"string"},"description":"The hyperparameters used to fine tune the algorithm. See https://grafana.com/docs/grafana-cloud/alerting-and-irm/machine-learning/forecasts/models/ for the full list of available hyperparameters."},"interval":{"type":"integer","description":"The data interval in seconds to train the data on."},"metric":{"type":"string","description":"The metric used to query the job results."},"name":{"type":"string","description":"The name of the job."},"queryParams":{"type":"object","additionalProperties":{"type":"string"},"description":"An object representing the query params to query Grafana with."},"trainingWindow":{"type":"integer","description":"The data interval in seconds to train the data on."}},"requiredInputs":["datasourceType","datasourceUid","metric","queryParams"],"stateInputs":{"description":"Input properties used for looking up and filtering Job resources.\n","properties":{"customLabels":{"type":"object","additionalProperties":{"type":"string"},"description":"An object representing the custom labels added on the forecast."},"datasourceType":{"type":"string","description":"The type of datasource being queried. Currently allowed values are prometheus, grafana-prometheus-datasource, grafana-amazonprometheus-datasource, loki, grafana-loki-datasource, graphite, grafana-graphite-datasource, grafana-datadog-datasource, postgres, grafana-postgresql-datasource, doitintl-bigquery-datasource, grafana-bigquery-datasource, grafana-snowflake-datasource, influxdb, grafana-influxdb-datasource, grafana-splunk-datasource, elasticsearch, grafana-elasticsearch-datasource, and grafana-mongodb-datasource."},"datasourceUid":{"type":"string","description":"The uid of the datasource to query."},"description":{"type":"string","description":"A description of the job."},"holidays":{"type":"array","items":{"type":"string"},"description":"A list of holiday IDs or names to take into account when training the model."},"hyperParams":{"type":"object","additionalProperties":{"type":"string"},"description":"The hyperparameters used to fine tune the algorithm. See https://grafana.com/docs/grafana-cloud/alerting-and-irm/machine-learning/forecasts/models/ for the full list of available hyperparameters."},"interval":{"type":"integer","description":"The data interval in seconds to train the data on."},"metric":{"type":"string","description":"The metric used to query the job results."},"name":{"type":"string","description":"The name of the job."},"queryParams":{"type":"object","additionalProperties":{"type":"string"},"description":"An object representing the query params to query Grafana with."},"trainingWindow":{"type":"integer","description":"The data interval in seconds to train the data on."}},"type":"object"}},"grafana:machineLearning/outlierDetector:OutlierDetector":{"description":"An outlier detector monitors the results of a query and reports when its values are outside normal bands.\n\nThe normal band is configured by choice of algorithm, its sensitivity and other configuration.\n\nVisit https://grafana.com/docs/grafana-cloud/machine-learning/outlier-detection/ for more details.\n\n## Example Usage\n\n### DBSCAN Outlier Detector\n\nThis outlier detector uses the DBSCAN algorithm to detect outliers.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst myDbscanOutlierDetector = new grafana.machinelearning.OutlierDetector(\"my_dbscan_outlier_detector\", {\n    name: \"My DBSCAN outlier detector\",\n    description: \"My DBSCAN Outlier Detector\",\n    metric: \"tf_test_dbscan_job\",\n    datasourceType: \"prometheus\",\n    datasourceUid: \"AbCd12345\",\n    queryParams: {\n        expr: \"grafanacloud_grafana_instance_active_user_count\",\n    },\n    interval: 300,\n    algorithm: {\n        name: \"dbscan\",\n        sensitivity: 0.5,\n        config: {\n            epsilon: 1,\n        },\n    },\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\nmy_dbscan_outlier_detector = grafana.machinelearning.OutlierDetector(\"my_dbscan_outlier_detector\",\n    name=\"My DBSCAN outlier detector\",\n    description=\"My DBSCAN Outlier Detector\",\n    metric=\"tf_test_dbscan_job\",\n    datasource_type=\"prometheus\",\n    datasource_uid=\"AbCd12345\",\n    query_params={\n        \"expr\": \"grafanacloud_grafana_instance_active_user_count\",\n    },\n    interval=300,\n    algorithm={\n        \"name\": \"dbscan\",\n        \"sensitivity\": 0.5,\n        \"config\": {\n            \"epsilon\": 1,\n        },\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var myDbscanOutlierDetector = new Grafana.MachineLearning.OutlierDetector(\"my_dbscan_outlier_detector\", new()\n    {\n        Name = \"My DBSCAN outlier detector\",\n        Description = \"My DBSCAN Outlier Detector\",\n        Metric = \"tf_test_dbscan_job\",\n        DatasourceType = \"prometheus\",\n        DatasourceUid = \"AbCd12345\",\n        QueryParams = \n        {\n            { \"expr\", \"grafanacloud_grafana_instance_active_user_count\" },\n        },\n        Interval = 300,\n        Algorithm = new Grafana.MachineLearning.Inputs.OutlierDetectorAlgorithmArgs\n        {\n            Name = \"dbscan\",\n            Sensitivity = 0.5,\n            Config = new Grafana.MachineLearning.Inputs.OutlierDetectorAlgorithmConfigArgs\n            {\n                Epsilon = 1,\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/machinelearning\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := machinelearning.NewOutlierDetector(ctx, \"my_dbscan_outlier_detector\", \u0026machinelearning.OutlierDetectorArgs{\n\t\t\tName:           pulumi.String(\"My DBSCAN outlier detector\"),\n\t\t\tDescription:    pulumi.String(\"My DBSCAN Outlier Detector\"),\n\t\t\tMetric:         pulumi.String(\"tf_test_dbscan_job\"),\n\t\t\tDatasourceType: pulumi.String(\"prometheus\"),\n\t\t\tDatasourceUid:  pulumi.String(\"AbCd12345\"),\n\t\t\tQueryParams: pulumi.StringMap{\n\t\t\t\t\"expr\": pulumi.String(\"grafanacloud_grafana_instance_active_user_count\"),\n\t\t\t},\n\t\t\tInterval: pulumi.Int(300),\n\t\t\tAlgorithm: \u0026machinelearning.OutlierDetectorAlgorithmArgs{\n\t\t\t\tName:        pulumi.String(\"dbscan\"),\n\t\t\t\tSensitivity: pulumi.Float64(0.5),\n\t\t\t\tConfig: \u0026machinelearning.OutlierDetectorAlgorithmConfigArgs{\n\t\t\t\t\tEpsilon: pulumi.Float64(1),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.machineLearning.OutlierDetector;\nimport com.pulumi.grafana.machineLearning.OutlierDetectorArgs;\nimport com.pulumi.grafana.machineLearning.inputs.OutlierDetectorAlgorithmArgs;\nimport com.pulumi.grafana.machineLearning.inputs.OutlierDetectorAlgorithmConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var myDbscanOutlierDetector = new OutlierDetector(\"myDbscanOutlierDetector\", OutlierDetectorArgs.builder()\n            .name(\"My DBSCAN outlier detector\")\n            .description(\"My DBSCAN Outlier Detector\")\n            .metric(\"tf_test_dbscan_job\")\n            .datasourceType(\"prometheus\")\n            .datasourceUid(\"AbCd12345\")\n            .queryParams(Map.of(\"expr\", \"grafanacloud_grafana_instance_active_user_count\"))\n            .interval(300)\n            .algorithm(OutlierDetectorAlgorithmArgs.builder()\n                .name(\"dbscan\")\n                .sensitivity(0.5)\n                .config(OutlierDetectorAlgorithmConfigArgs.builder()\n                    .epsilon(1.0)\n                    .build())\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  myDbscanOutlierDetector:\n    type: grafana:machineLearning:OutlierDetector\n    name: my_dbscan_outlier_detector\n    properties:\n      name: My DBSCAN outlier detector\n      description: My DBSCAN Outlier Detector\n      metric: tf_test_dbscan_job\n      datasourceType: prometheus\n      datasourceUid: AbCd12345\n      queryParams:\n        expr: grafanacloud_grafana_instance_active_user_count\n      interval: 300\n      algorithm:\n        name: dbscan\n        sensitivity: 0.5\n        config:\n          epsilon: 1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### MAD Outlier Detector\n\nThis outlier detector uses the Median Absolute Deviation (MAD) algorithm to detect outliers.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst myMadOutlierDetector = new grafana.machinelearning.OutlierDetector(\"my_mad_outlier_detector\", {\n    name: \"My MAD outlier detector\",\n    description: \"My MAD Outlier Detector\",\n    metric: \"tf_test_mad_job\",\n    datasourceType: \"prometheus\",\n    datasourceUid: \"AbCd12345\",\n    queryParams: {\n        expr: \"grafanacloud_grafana_instance_active_user_count\",\n    },\n    interval: 300,\n    algorithm: {\n        name: \"mad\",\n        sensitivity: 0.7,\n    },\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\nmy_mad_outlier_detector = grafana.machinelearning.OutlierDetector(\"my_mad_outlier_detector\",\n    name=\"My MAD outlier detector\",\n    description=\"My MAD Outlier Detector\",\n    metric=\"tf_test_mad_job\",\n    datasource_type=\"prometheus\",\n    datasource_uid=\"AbCd12345\",\n    query_params={\n        \"expr\": \"grafanacloud_grafana_instance_active_user_count\",\n    },\n    interval=300,\n    algorithm={\n        \"name\": \"mad\",\n        \"sensitivity\": 0.7,\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var myMadOutlierDetector = new Grafana.MachineLearning.OutlierDetector(\"my_mad_outlier_detector\", new()\n    {\n        Name = \"My MAD outlier detector\",\n        Description = \"My MAD Outlier Detector\",\n        Metric = \"tf_test_mad_job\",\n        DatasourceType = \"prometheus\",\n        DatasourceUid = \"AbCd12345\",\n        QueryParams = \n        {\n            { \"expr\", \"grafanacloud_grafana_instance_active_user_count\" },\n        },\n        Interval = 300,\n        Algorithm = new Grafana.MachineLearning.Inputs.OutlierDetectorAlgorithmArgs\n        {\n            Name = \"mad\",\n            Sensitivity = 0.7,\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/machinelearning\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := machinelearning.NewOutlierDetector(ctx, \"my_mad_outlier_detector\", \u0026machinelearning.OutlierDetectorArgs{\n\t\t\tName:           pulumi.String(\"My MAD outlier detector\"),\n\t\t\tDescription:    pulumi.String(\"My MAD Outlier Detector\"),\n\t\t\tMetric:         pulumi.String(\"tf_test_mad_job\"),\n\t\t\tDatasourceType: pulumi.String(\"prometheus\"),\n\t\t\tDatasourceUid:  pulumi.String(\"AbCd12345\"),\n\t\t\tQueryParams: pulumi.StringMap{\n\t\t\t\t\"expr\": pulumi.String(\"grafanacloud_grafana_instance_active_user_count\"),\n\t\t\t},\n\t\t\tInterval: pulumi.Int(300),\n\t\t\tAlgorithm: \u0026machinelearning.OutlierDetectorAlgorithmArgs{\n\t\t\t\tName:        pulumi.String(\"mad\"),\n\t\t\t\tSensitivity: pulumi.Float64(0.7),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.machineLearning.OutlierDetector;\nimport com.pulumi.grafana.machineLearning.OutlierDetectorArgs;\nimport com.pulumi.grafana.machineLearning.inputs.OutlierDetectorAlgorithmArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var myMadOutlierDetector = new OutlierDetector(\"myMadOutlierDetector\", OutlierDetectorArgs.builder()\n            .name(\"My MAD outlier detector\")\n            .description(\"My MAD Outlier Detector\")\n            .metric(\"tf_test_mad_job\")\n            .datasourceType(\"prometheus\")\n            .datasourceUid(\"AbCd12345\")\n            .queryParams(Map.of(\"expr\", \"grafanacloud_grafana_instance_active_user_count\"))\n            .interval(300)\n            .algorithm(OutlierDetectorAlgorithmArgs.builder()\n                .name(\"mad\")\n                .sensitivity(0.7)\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  myMadOutlierDetector:\n    type: grafana:machineLearning:OutlierDetector\n    name: my_mad_outlier_detector\n    properties:\n      name: My MAD outlier detector\n      description: My MAD Outlier Detector\n      metric: tf_test_mad_job\n      datasourceType: prometheus\n      datasourceUid: AbCd12345\n      queryParams:\n        expr: grafanacloud_grafana_instance_active_user_count\n      interval: 300\n      algorithm:\n        name: mad\n        sensitivity: 0.7\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:machineLearning/outlierDetector:OutlierDetector name \"{{ id }}\"\n```\n\n","properties":{"algorithm":{"$ref":"#/types/grafana:machineLearning/OutlierDetectorAlgorithm:OutlierDetectorAlgorithm","description":"The algorithm to use and its configuration. See https://grafana.com/docs/grafana-cloud/machine-learning/outlier-detection/ for details."},"datasourceType":{"type":"string","description":"The type of datasource being queried. Currently allowed values are prometheus, grafana-prometheus-datasource, grafana-amazonprometheus-datasource, loki, grafana-loki-datasource, graphite, grafana-graphite-datasource, grafana-datadog-datasource, postgres, grafana-postgresql-datasource, doitintl-bigquery-datasource, grafana-bigquery-datasource, grafana-snowflake-datasource, influxdb, grafana-influxdb-datasource, grafana-splunk-datasource, elasticsearch, grafana-elasticsearch-datasource, and grafana-mongodb-datasource."},"datasourceUid":{"type":"string","description":"The uid of the datasource to query."},"description":{"type":"string","description":"A description of the outlier detector."},"interval":{"type":"integer","description":"The data interval in seconds to monitor."},"metric":{"type":"string","description":"The metric used to query the outlier detector results."},"name":{"type":"string","description":"The name of the outlier detector."},"queryParams":{"type":"object","additionalProperties":{"type":"string"},"description":"An object representing the query params to query Grafana with."}},"required":["algorithm","datasourceType","datasourceUid","metric","name","queryParams"],"inputProperties":{"algorithm":{"$ref":"#/types/grafana:machineLearning/OutlierDetectorAlgorithm:OutlierDetectorAlgorithm","description":"The algorithm to use and its configuration. See https://grafana.com/docs/grafana-cloud/machine-learning/outlier-detection/ for details."},"datasourceType":{"type":"string","description":"The type of datasource being queried. Currently allowed values are prometheus, grafana-prometheus-datasource, grafana-amazonprometheus-datasource, loki, grafana-loki-datasource, graphite, grafana-graphite-datasource, grafana-datadog-datasource, postgres, grafana-postgresql-datasource, doitintl-bigquery-datasource, grafana-bigquery-datasource, grafana-snowflake-datasource, influxdb, grafana-influxdb-datasource, grafana-splunk-datasource, elasticsearch, grafana-elasticsearch-datasource, and grafana-mongodb-datasource."},"datasourceUid":{"type":"string","description":"The uid of the datasource to query."},"description":{"type":"string","description":"A description of the outlier detector."},"interval":{"type":"integer","description":"The data interval in seconds to monitor."},"metric":{"type":"string","description":"The metric used to query the outlier detector results."},"name":{"type":"string","description":"The name of the outlier detector."},"queryParams":{"type":"object","additionalProperties":{"type":"string"},"description":"An object representing the query params to query Grafana with."}},"requiredInputs":["algorithm","datasourceType","datasourceUid","metric","queryParams"],"stateInputs":{"description":"Input properties used for looking up and filtering OutlierDetector resources.\n","properties":{"algorithm":{"$ref":"#/types/grafana:machineLearning/OutlierDetectorAlgorithm:OutlierDetectorAlgorithm","description":"The algorithm to use and its configuration. See https://grafana.com/docs/grafana-cloud/machine-learning/outlier-detection/ for details."},"datasourceType":{"type":"string","description":"The type of datasource being queried. Currently allowed values are prometheus, grafana-prometheus-datasource, grafana-amazonprometheus-datasource, loki, grafana-loki-datasource, graphite, grafana-graphite-datasource, grafana-datadog-datasource, postgres, grafana-postgresql-datasource, doitintl-bigquery-datasource, grafana-bigquery-datasource, grafana-snowflake-datasource, influxdb, grafana-influxdb-datasource, grafana-splunk-datasource, elasticsearch, grafana-elasticsearch-datasource, and grafana-mongodb-datasource."},"datasourceUid":{"type":"string","description":"The uid of the datasource to query."},"description":{"type":"string","description":"A description of the outlier detector."},"interval":{"type":"integer","description":"The data interval in seconds to monitor."},"metric":{"type":"string","description":"The metric used to query the outlier detector results."},"name":{"type":"string","description":"The name of the outlier detector."},"queryParams":{"type":"object","additionalProperties":{"type":"string"},"description":"An object representing the query params to query Grafana with."}},"type":"object"}},"grafana:onCall/escalation:Escalation":{"description":"* [Official documentation](https://grafana.com/docs/oncall/latest/configure/escalation-chains-and-routes/)\n* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/escalation_policies/)\n\n## Import\n\n```sh\n$ pulumi import grafana:onCall/escalation:Escalation name \"{{ id }}\"\n```\n\n","properties":{"actionToTrigger":{"type":"string","description":"The ID of an Action for\u003cspan pulumi-lang-nodejs=\" triggerWebhook \" pulumi-lang-dotnet=\" TriggerWebhook \" pulumi-lang-go=\" triggerWebhook \" pulumi-lang-python=\" trigger_webhook \" pulumi-lang-yaml=\" triggerWebhook \" pulumi-lang-java=\" triggerWebhook \"\u003e trigger_webhook \u003c/span\u003etype step.\n"},"duration":{"type":"integer","description":"The duration of delay for wait type step. (60-86400) seconds\n"},"escalationChainId":{"type":"string","description":"The ID of the escalation chain.\n"},"groupToNotify":{"type":"string","description":"The ID of a User Group for notify*user*group type step.\n"},"important":{"type":"boolean","description":"Will activate \"important\" personal notification rules. Actual for steps: notify*persons, notify*person*next*each*time, notify*on*call*from*schedule, notify*user*group and notify*team_members\n"},"notifyIfTimeFrom":{"type":"string","description":"The beginning of the time interval for notify*if*time*from*to type step in UTC (for example 08:00:00Z).\n"},"notifyIfTimeTo":{"type":"string","description":"The end of the time interval for notify*if*time*from*to type step in UTC (for example 18:00:00Z).\n"},"notifyOnCallFromSchedule":{"type":"string","description":"ID of a Schedule for notify*on*call*from*schedule type step.\n"},"notifyToTeamMembers":{"type":"string","description":"The ID of a Team for a notify*team*members type step.\n"},"numAlertsInWindow":{"type":"integer","description":"Number of alerts that must occur within the time window to continue escalation for notify*if*num*alerts*in_window type step.\n"},"numMinutesInWindow":{"type":"integer","description":"Time window in minutes to count alerts for notify*if*num*alerts*in_window type step.\n"},"personsToNotifies":{"type":"array","items":{"type":"string"},"description":"The list of ID's of users for\u003cspan pulumi-lang-nodejs=\" notifyPersons \" pulumi-lang-dotnet=\" NotifyPersons \" pulumi-lang-go=\" notifyPersons \" pulumi-lang-python=\" notify_persons \" pulumi-lang-yaml=\" notifyPersons \" pulumi-lang-java=\" notifyPersons \"\u003e notify_persons \u003c/span\u003etype step.\n"},"personsToNotifyNextEachTimes":{"type":"array","items":{"type":"string"},"description":"The list of ID's of users for notify*person*next*each*time type step.\n"},"position":{"type":"integer","description":"The position of the escalation step (starts from 0).\n"},"severity":{"type":"string","description":"The severity of the incident for\u003cspan pulumi-lang-nodejs=\" declareIncident \" pulumi-lang-dotnet=\" DeclareIncident \" pulumi-lang-go=\" declareIncident \" pulumi-lang-python=\" declare_incident \" pulumi-lang-yaml=\" declareIncident \" pulumi-lang-java=\" declareIncident \"\u003e declare_incident \u003c/span\u003etype step.\n"},"type":{"type":"string","description":"The type of escalation policy. Can be wait, notify*persons, notify*person*next*each*time, notify*on*call*from*schedule, trigger*webhook, notify*user*group, resolve, notify*whole*channel, notify*if*time*from*to, notify*if*num*alerts*in*window, repeat*escalation, notify*team*members, declare_incident\n"}},"required":["escalationChainId","position","type"],"inputProperties":{"actionToTrigger":{"type":"string","description":"The ID of an Action for\u003cspan pulumi-lang-nodejs=\" triggerWebhook \" pulumi-lang-dotnet=\" TriggerWebhook \" pulumi-lang-go=\" triggerWebhook \" pulumi-lang-python=\" trigger_webhook \" pulumi-lang-yaml=\" triggerWebhook \" pulumi-lang-java=\" triggerWebhook \"\u003e trigger_webhook \u003c/span\u003etype step.\n"},"duration":{"type":"integer","description":"The duration of delay for wait type step. (60-86400) seconds\n"},"escalationChainId":{"type":"string","description":"The ID of the escalation chain.\n","willReplaceOnChanges":true},"groupToNotify":{"type":"string","description":"The ID of a User Group for notify*user*group type step.\n"},"important":{"type":"boolean","description":"Will activate \"important\" personal notification rules. Actual for steps: notify*persons, notify*person*next*each*time, notify*on*call*from*schedule, notify*user*group and notify*team_members\n"},"notifyIfTimeFrom":{"type":"string","description":"The beginning of the time interval for notify*if*time*from*to type step in UTC (for example 08:00:00Z).\n"},"notifyIfTimeTo":{"type":"string","description":"The end of the time interval for notify*if*time*from*to type step in UTC (for example 18:00:00Z).\n"},"notifyOnCallFromSchedule":{"type":"string","description":"ID of a Schedule for notify*on*call*from*schedule type step.\n"},"notifyToTeamMembers":{"type":"string","description":"The ID of a Team for a notify*team*members type step.\n"},"numAlertsInWindow":{"type":"integer","description":"Number of alerts that must occur within the time window to continue escalation for notify*if*num*alerts*in_window type step.\n"},"numMinutesInWindow":{"type":"integer","description":"Time window in minutes to count alerts for notify*if*num*alerts*in_window type step.\n"},"personsToNotifies":{"type":"array","items":{"type":"string"},"description":"The list of ID's of users for\u003cspan pulumi-lang-nodejs=\" notifyPersons \" pulumi-lang-dotnet=\" NotifyPersons \" pulumi-lang-go=\" notifyPersons \" pulumi-lang-python=\" notify_persons \" pulumi-lang-yaml=\" notifyPersons \" pulumi-lang-java=\" notifyPersons \"\u003e notify_persons \u003c/span\u003etype step.\n"},"personsToNotifyNextEachTimes":{"type":"array","items":{"type":"string"},"description":"The list of ID's of users for notify*person*next*each*time type step.\n"},"position":{"type":"integer","description":"The position of the escalation step (starts from 0).\n"},"severity":{"type":"string","description":"The severity of the incident for\u003cspan pulumi-lang-nodejs=\" declareIncident \" pulumi-lang-dotnet=\" DeclareIncident \" pulumi-lang-go=\" declareIncident \" pulumi-lang-python=\" declare_incident \" pulumi-lang-yaml=\" declareIncident \" pulumi-lang-java=\" declareIncident \"\u003e declare_incident \u003c/span\u003etype step.\n"},"type":{"type":"string","description":"The type of escalation policy. Can be wait, notify*persons, notify*person*next*each*time, notify*on*call*from*schedule, trigger*webhook, notify*user*group, resolve, notify*whole*channel, notify*if*time*from*to, notify*if*num*alerts*in*window, repeat*escalation, notify*team*members, declare_incident\n"}},"requiredInputs":["escalationChainId","position","type"],"stateInputs":{"description":"Input properties used for looking up and filtering Escalation resources.\n","properties":{"actionToTrigger":{"type":"string","description":"The ID of an Action for\u003cspan pulumi-lang-nodejs=\" triggerWebhook \" pulumi-lang-dotnet=\" TriggerWebhook \" pulumi-lang-go=\" triggerWebhook \" pulumi-lang-python=\" trigger_webhook \" pulumi-lang-yaml=\" triggerWebhook \" pulumi-lang-java=\" triggerWebhook \"\u003e trigger_webhook \u003c/span\u003etype step.\n"},"duration":{"type":"integer","description":"The duration of delay for wait type step. (60-86400) seconds\n"},"escalationChainId":{"type":"string","description":"The ID of the escalation chain.\n","willReplaceOnChanges":true},"groupToNotify":{"type":"string","description":"The ID of a User Group for notify*user*group type step.\n"},"important":{"type":"boolean","description":"Will activate \"important\" personal notification rules. Actual for steps: notify*persons, notify*person*next*each*time, notify*on*call*from*schedule, notify*user*group and notify*team_members\n"},"notifyIfTimeFrom":{"type":"string","description":"The beginning of the time interval for notify*if*time*from*to type step in UTC (for example 08:00:00Z).\n"},"notifyIfTimeTo":{"type":"string","description":"The end of the time interval for notify*if*time*from*to type step in UTC (for example 18:00:00Z).\n"},"notifyOnCallFromSchedule":{"type":"string","description":"ID of a Schedule for notify*on*call*from*schedule type step.\n"},"notifyToTeamMembers":{"type":"string","description":"The ID of a Team for a notify*team*members type step.\n"},"numAlertsInWindow":{"type":"integer","description":"Number of alerts that must occur within the time window to continue escalation for notify*if*num*alerts*in_window type step.\n"},"numMinutesInWindow":{"type":"integer","description":"Time window in minutes to count alerts for notify*if*num*alerts*in_window type step.\n"},"personsToNotifies":{"type":"array","items":{"type":"string"},"description":"The list of ID's of users for\u003cspan pulumi-lang-nodejs=\" notifyPersons \" pulumi-lang-dotnet=\" NotifyPersons \" pulumi-lang-go=\" notifyPersons \" pulumi-lang-python=\" notify_persons \" pulumi-lang-yaml=\" notifyPersons \" pulumi-lang-java=\" notifyPersons \"\u003e notify_persons \u003c/span\u003etype step.\n"},"personsToNotifyNextEachTimes":{"type":"array","items":{"type":"string"},"description":"The list of ID's of users for notify*person*next*each*time type step.\n"},"position":{"type":"integer","description":"The position of the escalation step (starts from 0).\n"},"severity":{"type":"string","description":"The severity of the incident for\u003cspan pulumi-lang-nodejs=\" declareIncident \" pulumi-lang-dotnet=\" DeclareIncident \" pulumi-lang-go=\" declareIncident \" pulumi-lang-python=\" declare_incident \" pulumi-lang-yaml=\" declareIncident \" pulumi-lang-java=\" declareIncident \"\u003e declare_incident \u003c/span\u003etype step.\n"},"type":{"type":"string","description":"The type of escalation policy. Can be wait, notify*persons, notify*person*next*each*time, notify*on*call*from*schedule, trigger*webhook, notify*user*group, resolve, notify*whole*channel, notify*if*time*from*to, notify*if*num*alerts*in*window, repeat*escalation, notify*team*members, declare_incident\n"}},"type":"object"}},"grafana:onCall/escalationChain:EscalationChain":{"description":"* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/escalation_chains/)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst myTeam = grafana.oss.getTeam({\n    name: \"my team\",\n});\nconst myTeamGetTeam = myTeam.then(myTeam =\u003e grafana.onCall.getTeam({\n    name: myTeam.name,\n}));\nconst _default = new grafana.oncall.EscalationChain(\"default\", {\n    name: \"default\",\n    teamId: myTeamGetTeam.then(myTeamGetTeam =\u003e myTeamGetTeam.id),\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\nmy_team = grafana.oss.get_team(name=\"my team\")\nmy_team_get_team = grafana.onCall.get_team(name=my_team.name)\ndefault = grafana.oncall.EscalationChain(\"default\",\n    name=\"default\",\n    team_id=my_team_get_team.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var myTeam = Grafana.Oss.GetTeam.Invoke(new()\n    {\n        Name = \"my team\",\n    });\n\n    var myTeamGetTeam = Grafana.OnCall.GetTeam.Invoke(new()\n    {\n        Name = myTeam.Apply(getTeamResult =\u003e getTeamResult.Name),\n    });\n\n    var @default = new Grafana.OnCall.EscalationChain(\"default\", new()\n    {\n        Name = \"default\",\n        TeamId = myTeamGetTeam.Apply(getTeamResult =\u003e getTeamResult.Id),\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oncall\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmyTeam, err := oss.LookupTeam(ctx, \u0026oss.LookupTeamArgs{\n\t\t\tName: \"my team\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmyTeamGetTeam, err := oncall.GetTeam(ctx, \u0026oncall.GetTeamArgs{\n\t\t\tName: myTeam.Name,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oncall.NewEscalationChain(ctx, \"default\", \u0026oncall.EscalationChainArgs{\n\t\t\tName:   pulumi.String(\"default\"),\n\t\t\tTeamId: pulumi.String(myTeamGetTeam.Id),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.OssFunctions;\nimport com.pulumi.grafana.onCall.OnCallFunctions;\nimport com.pulumi.grafana.onCall.EscalationChain;\nimport com.pulumi.grafana.onCall.EscalationChainArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var myTeam = OssFunctions.getTeam(GetTeamArgs.builder()\n            .name(\"my team\")\n            .build());\n\n        final var myTeamGetTeam = OnCallFunctions.getTeam(GetTeamArgs.builder()\n            .name(myTeam.name())\n            .build());\n\n        var default_ = new EscalationChain(\"default\", EscalationChainArgs.builder()\n            .name(\"default\")\n            .teamId(myTeamGetTeam.id())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  default:\n    type: grafana:onCall:EscalationChain\n    properties:\n      name: default\n      teamId: ${myTeamGetTeam.id}\nvariables:\n  myTeam:\n    fn::invoke:\n      function: grafana:oss:getTeam\n      arguments:\n        name: my team\n  myTeamGetTeam:\n    fn::invoke:\n      function: grafana:onCall:getTeam\n      arguments:\n        name: ${myTeam.name}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:onCall/escalationChain:EscalationChain name \"{{ id }}\"\n```\n\n","properties":{"name":{"type":"string","description":"The name of the escalation chain.\n"},"teamId":{"type":"string","description":"The ID of the OnCall team (using the \u003cspan pulumi-lang-nodejs=\"`grafana.onCall.getTeam`\" pulumi-lang-dotnet=\"`grafana.onCall.getTeam`\" pulumi-lang-go=\"`onCall.getTeam`\" pulumi-lang-python=\"`on_call_get_team`\" pulumi-lang-yaml=\"`grafana.onCall.getTeam`\" pulumi-lang-java=\"`grafana.onCall.getTeam`\"\u003e`grafana.onCall.getTeam`\u003c/span\u003e datasource).\n"}},"required":["name"],"inputProperties":{"name":{"type":"string","description":"The name of the escalation chain.\n"},"teamId":{"type":"string","description":"The ID of the OnCall team (using the \u003cspan pulumi-lang-nodejs=\"`grafana.onCall.getTeam`\" pulumi-lang-dotnet=\"`grafana.onCall.getTeam`\" pulumi-lang-go=\"`onCall.getTeam`\" pulumi-lang-python=\"`on_call_get_team`\" pulumi-lang-yaml=\"`grafana.onCall.getTeam`\" pulumi-lang-java=\"`grafana.onCall.getTeam`\"\u003e`grafana.onCall.getTeam`\u003c/span\u003e datasource).\n"}},"stateInputs":{"description":"Input properties used for looking up and filtering EscalationChain resources.\n","properties":{"name":{"type":"string","description":"The name of the escalation chain.\n"},"teamId":{"type":"string","description":"The ID of the OnCall team (using the \u003cspan pulumi-lang-nodejs=\"`grafana.onCall.getTeam`\" pulumi-lang-dotnet=\"`grafana.onCall.getTeam`\" pulumi-lang-go=\"`onCall.getTeam`\" pulumi-lang-python=\"`on_call_get_team`\" pulumi-lang-yaml=\"`grafana.onCall.getTeam`\" pulumi-lang-java=\"`grafana.onCall.getTeam`\"\u003e`grafana.onCall.getTeam`\u003c/span\u003e datasource).\n"}},"type":"object"}},"grafana:onCall/integration:Integration":{"description":"* [Official documentation](https://grafana.com/docs/oncall/latest/configure/integrations/)\n* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/)\n\n## Import\n\n```sh\n$ pulumi import grafana:onCall/integration:Integration name \"{{ id }}\"\n```\n\n","properties":{"defaultRoute":{"$ref":"#/types/grafana:onCall/IntegrationDefaultRoute:IntegrationDefaultRoute","description":"The Default route for all alerts from the given integration\n"},"dynamicLabels":{"type":"array","items":{"type":"object","additionalProperties":{"type":"string"}},"description":"A list of string-to-string mappings for dynamic labels. Each map must include one key named \"key\" and one key named \"value\" (using the \u003cspan pulumi-lang-nodejs=\"`grafana.onCall.getLabel`\" pulumi-lang-dotnet=\"`grafana.onCall.getLabel`\" pulumi-lang-go=\"`onCall.getLabel`\" pulumi-lang-python=\"`on_call_get_label`\" pulumi-lang-yaml=\"`grafana.onCall.getLabel`\" pulumi-lang-java=\"`grafana.onCall.getLabel`\"\u003e`grafana.onCall.getLabel`\u003c/span\u003e datasource).\n"},"labels":{"type":"array","items":{"type":"object","additionalProperties":{"type":"string"}},"description":"A list of string-to-string mappings for static labels. Each map must include one key named \"key\" and one key named \"value\" (using the \u003cspan pulumi-lang-nodejs=\"`grafana.onCall.getLabel`\" pulumi-lang-dotnet=\"`grafana.onCall.getLabel`\" pulumi-lang-go=\"`onCall.getLabel`\" pulumi-lang-python=\"`on_call_get_label`\" pulumi-lang-yaml=\"`grafana.onCall.getLabel`\" pulumi-lang-java=\"`grafana.onCall.getLabel`\"\u003e`grafana.onCall.getLabel`\u003c/span\u003e datasource).\n"},"link":{"type":"string","description":"The link for using in an integrated tool.\n"},"name":{"type":"string","description":"The name of the service integration.\n"},"teamId":{"type":"string","description":"The ID of the OnCall team (using the \u003cspan pulumi-lang-nodejs=\"`grafana.onCall.getTeam`\" pulumi-lang-dotnet=\"`grafana.onCall.getTeam`\" pulumi-lang-go=\"`onCall.getTeam`\" pulumi-lang-python=\"`on_call_get_team`\" pulumi-lang-yaml=\"`grafana.onCall.getTeam`\" pulumi-lang-java=\"`grafana.onCall.getTeam`\"\u003e`grafana.onCall.getTeam`\u003c/span\u003e datasource).\n"},"templates":{"$ref":"#/types/grafana:onCall/IntegrationTemplates:IntegrationTemplates","description":"Jinja2 templates for Alert payload. An empty templates block will be ignored.\n"},"type":{"type":"string","description":"The type of integration. Can be grafana, grafana*alerting, webhook, alertmanager, kapacitor, fabric, newrelic, datadog, pagerduty, pingdom, elastalert, amazon*sns, curler, sentry, formatted*webhook, stackdriver, uptimerobot, sentry, zabbix, prtg, inbound*email, direct_paging, jira, zendesk.\n"}},"required":["defaultRoute","link","name","type"],"inputProperties":{"defaultRoute":{"$ref":"#/types/grafana:onCall/IntegrationDefaultRoute:IntegrationDefaultRoute","description":"The Default route for all alerts from the given integration\n"},"dynamicLabels":{"type":"array","items":{"type":"object","additionalProperties":{"type":"string"}},"description":"A list of string-to-string mappings for dynamic labels. Each map must include one key named \"key\" and one key named \"value\" (using the \u003cspan pulumi-lang-nodejs=\"`grafana.onCall.getLabel`\" pulumi-lang-dotnet=\"`grafana.onCall.getLabel`\" pulumi-lang-go=\"`onCall.getLabel`\" pulumi-lang-python=\"`on_call_get_label`\" pulumi-lang-yaml=\"`grafana.onCall.getLabel`\" pulumi-lang-java=\"`grafana.onCall.getLabel`\"\u003e`grafana.onCall.getLabel`\u003c/span\u003e datasource).\n"},"labels":{"type":"array","items":{"type":"object","additionalProperties":{"type":"string"}},"description":"A list of string-to-string mappings for static labels. Each map must include one key named \"key\" and one key named \"value\" (using the \u003cspan pulumi-lang-nodejs=\"`grafana.onCall.getLabel`\" pulumi-lang-dotnet=\"`grafana.onCall.getLabel`\" pulumi-lang-go=\"`onCall.getLabel`\" pulumi-lang-python=\"`on_call_get_label`\" pulumi-lang-yaml=\"`grafana.onCall.getLabel`\" pulumi-lang-java=\"`grafana.onCall.getLabel`\"\u003e`grafana.onCall.getLabel`\u003c/span\u003e datasource).\n"},"name":{"type":"string","description":"The name of the service integration.\n"},"teamId":{"type":"string","description":"The ID of the OnCall team (using the \u003cspan pulumi-lang-nodejs=\"`grafana.onCall.getTeam`\" pulumi-lang-dotnet=\"`grafana.onCall.getTeam`\" pulumi-lang-go=\"`onCall.getTeam`\" pulumi-lang-python=\"`on_call_get_team`\" pulumi-lang-yaml=\"`grafana.onCall.getTeam`\" pulumi-lang-java=\"`grafana.onCall.getTeam`\"\u003e`grafana.onCall.getTeam`\u003c/span\u003e datasource).\n"},"templates":{"$ref":"#/types/grafana:onCall/IntegrationTemplates:IntegrationTemplates","description":"Jinja2 templates for Alert payload. An empty templates block will be ignored.\n"},"type":{"type":"string","description":"The type of integration. Can be grafana, grafana*alerting, webhook, alertmanager, kapacitor, fabric, newrelic, datadog, pagerduty, pingdom, elastalert, amazon*sns, curler, sentry, formatted*webhook, stackdriver, uptimerobot, sentry, zabbix, prtg, inbound*email, direct_paging, jira, zendesk.\n","willReplaceOnChanges":true}},"requiredInputs":["defaultRoute","type"],"stateInputs":{"description":"Input properties used for looking up and filtering Integration resources.\n","properties":{"defaultRoute":{"$ref":"#/types/grafana:onCall/IntegrationDefaultRoute:IntegrationDefaultRoute","description":"The Default route for all alerts from the given integration\n"},"dynamicLabels":{"type":"array","items":{"type":"object","additionalProperties":{"type":"string"}},"description":"A list of string-to-string mappings for dynamic labels. Each map must include one key named \"key\" and one key named \"value\" (using the \u003cspan pulumi-lang-nodejs=\"`grafana.onCall.getLabel`\" pulumi-lang-dotnet=\"`grafana.onCall.getLabel`\" pulumi-lang-go=\"`onCall.getLabel`\" pulumi-lang-python=\"`on_call_get_label`\" pulumi-lang-yaml=\"`grafana.onCall.getLabel`\" pulumi-lang-java=\"`grafana.onCall.getLabel`\"\u003e`grafana.onCall.getLabel`\u003c/span\u003e datasource).\n"},"labels":{"type":"array","items":{"type":"object","additionalProperties":{"type":"string"}},"description":"A list of string-to-string mappings for static labels. Each map must include one key named \"key\" and one key named \"value\" (using the \u003cspan pulumi-lang-nodejs=\"`grafana.onCall.getLabel`\" pulumi-lang-dotnet=\"`grafana.onCall.getLabel`\" pulumi-lang-go=\"`onCall.getLabel`\" pulumi-lang-python=\"`on_call_get_label`\" pulumi-lang-yaml=\"`grafana.onCall.getLabel`\" pulumi-lang-java=\"`grafana.onCall.getLabel`\"\u003e`grafana.onCall.getLabel`\u003c/span\u003e datasource).\n"},"link":{"type":"string","description":"The link for using in an integrated tool.\n"},"name":{"type":"string","description":"The name of the service integration.\n"},"teamId":{"type":"string","description":"The ID of the OnCall team (using the \u003cspan pulumi-lang-nodejs=\"`grafana.onCall.getTeam`\" pulumi-lang-dotnet=\"`grafana.onCall.getTeam`\" pulumi-lang-go=\"`onCall.getTeam`\" pulumi-lang-python=\"`on_call_get_team`\" pulumi-lang-yaml=\"`grafana.onCall.getTeam`\" pulumi-lang-java=\"`grafana.onCall.getTeam`\"\u003e`grafana.onCall.getTeam`\u003c/span\u003e datasource).\n"},"templates":{"$ref":"#/types/grafana:onCall/IntegrationTemplates:IntegrationTemplates","description":"Jinja2 templates for Alert payload. An empty templates block will be ignored.\n"},"type":{"type":"string","description":"The type of integration. Can be grafana, grafana*alerting, webhook, alertmanager, kapacitor, fabric, newrelic, datadog, pagerduty, pingdom, elastalert, amazon*sns, curler, sentry, formatted*webhook, stackdriver, uptimerobot, sentry, zabbix, prtg, inbound*email, direct_paging, jira, zendesk.\n","willReplaceOnChanges":true}},"type":"object"}},"grafana:onCall/onCallShift:OnCallShift":{"description":"* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/on_call_shifts/)\n\n## Import\n\n```sh\n$ pulumi import grafana:onCall/onCallShift:OnCallShift name \"{{ id }}\"\n```\n\n","properties":{"byDays":{"type":"array","items":{"type":"string"},"description":"This parameter takes a list of days in iCal format. Can be MO, TU, WE, TH, FR, SA, SU\n"},"byMonthdays":{"type":"array","items":{"type":"integer"},"description":"This parameter takes a list of days of the month.  Valid values are 1 to 31 or -31 to -1\n"},"byMonths":{"type":"array","items":{"type":"integer"},"description":"This parameter takes a list of months. Valid values are 1 to 12\n"},"duration":{"type":"integer","description":"The duration of the event.\n"},"frequency":{"type":"string","description":"The frequency of the event. Can be hourly, daily, weekly, monthly\n"},"interval":{"type":"integer","description":"The positive integer representing at which intervals the recurrence rule repeats.\n"},"level":{"type":"integer","description":"The priority level. The higher the value, the higher the priority.\n"},"name":{"type":"string","description":"The shift's name.\n"},"rollingUsers":{"type":"array","items":{"type":"array","items":{"type":"string"}},"description":"The list of lists with on-call users (for\u003cspan pulumi-lang-nodejs=\" rollingUsers \" pulumi-lang-dotnet=\" RollingUsers \" pulumi-lang-go=\" rollingUsers \" pulumi-lang-python=\" rolling_users \" pulumi-lang-yaml=\" rollingUsers \" pulumi-lang-java=\" rollingUsers \"\u003e rolling_users \u003c/span\u003eevent type)\n"},"start":{"type":"string","description":"The start time of the on-call shift. This parameter takes a date format as yyyy-MM-dd'T'HH:mm:ss (for example \"2020-09-05T08:00:00\")\n"},"startRotationFromUserIndex":{"type":"integer","description":"The index of the list of users in rolling_users, from which on-call rotation starts.\n"},"teamId":{"type":"string","description":"The ID of the OnCall team (using the \u003cspan pulumi-lang-nodejs=\"`grafana.onCall.getTeam`\" pulumi-lang-dotnet=\"`grafana.onCall.getTeam`\" pulumi-lang-go=\"`onCall.getTeam`\" pulumi-lang-python=\"`on_call_get_team`\" pulumi-lang-yaml=\"`grafana.onCall.getTeam`\" pulumi-lang-java=\"`grafana.onCall.getTeam`\"\u003e`grafana.onCall.getTeam`\u003c/span\u003e datasource).\n"},"timeZone":{"type":"string","description":"The shift's timezone.  Overrides schedule's timezone.\n"},"type":{"type":"string","description":"The shift's type. Can be rolling*users, recurrent*event, single_event\n"},"until":{"type":"string","description":"The end time of recurrent on-call shifts (endless if null). This parameter takes a date format as yyyy-MM-dd'T'HH:mm:ss (for example \"2020-09-05T08:00:00\")\n"},"users":{"type":"array","items":{"type":"string"},"description":"The list of on-call users (for single*event and recurrent*event event type).\n"},"weekStart":{"type":"string","description":"Start day of the week in iCal format. Can be MO, TU, WE, TH, FR, SA, SU\n"}},"required":["duration","name","start","type"],"inputProperties":{"byDays":{"type":"array","items":{"type":"string"},"description":"This parameter takes a list of days in iCal format. Can be MO, TU, WE, TH, FR, SA, SU\n"},"byMonthdays":{"type":"array","items":{"type":"integer"},"description":"This parameter takes a list of days of the month.  Valid values are 1 to 31 or -31 to -1\n"},"byMonths":{"type":"array","items":{"type":"integer"},"description":"This parameter takes a list of months. Valid values are 1 to 12\n"},"duration":{"type":"integer","description":"The duration of the event.\n"},"frequency":{"type":"string","description":"The frequency of the event. Can be hourly, daily, weekly, monthly\n"},"interval":{"type":"integer","description":"The positive integer representing at which intervals the recurrence rule repeats.\n"},"level":{"type":"integer","description":"The priority level. The higher the value, the higher the priority.\n"},"name":{"type":"string","description":"The shift's name.\n"},"rollingUsers":{"type":"array","items":{"type":"array","items":{"type":"string"}},"description":"The list of lists with on-call users (for\u003cspan pulumi-lang-nodejs=\" rollingUsers \" pulumi-lang-dotnet=\" RollingUsers \" pulumi-lang-go=\" rollingUsers \" pulumi-lang-python=\" rolling_users \" pulumi-lang-yaml=\" rollingUsers \" pulumi-lang-java=\" rollingUsers \"\u003e rolling_users \u003c/span\u003eevent type)\n"},"start":{"type":"string","description":"The start time of the on-call shift. This parameter takes a date format as yyyy-MM-dd'T'HH:mm:ss (for example \"2020-09-05T08:00:00\")\n"},"startRotationFromUserIndex":{"type":"integer","description":"The index of the list of users in rolling_users, from which on-call rotation starts.\n"},"teamId":{"type":"string","description":"The ID of the OnCall team (using the \u003cspan pulumi-lang-nodejs=\"`grafana.onCall.getTeam`\" pulumi-lang-dotnet=\"`grafana.onCall.getTeam`\" pulumi-lang-go=\"`onCall.getTeam`\" pulumi-lang-python=\"`on_call_get_team`\" pulumi-lang-yaml=\"`grafana.onCall.getTeam`\" pulumi-lang-java=\"`grafana.onCall.getTeam`\"\u003e`grafana.onCall.getTeam`\u003c/span\u003e datasource).\n"},"timeZone":{"type":"string","description":"The shift's timezone.  Overrides schedule's timezone.\n"},"type":{"type":"string","description":"The shift's type. Can be rolling*users, recurrent*event, single_event\n"},"until":{"type":"string","description":"The end time of recurrent on-call shifts (endless if null). This parameter takes a date format as yyyy-MM-dd'T'HH:mm:ss (for example \"2020-09-05T08:00:00\")\n"},"users":{"type":"array","items":{"type":"string"},"description":"The list of on-call users (for single*event and recurrent*event event type).\n"},"weekStart":{"type":"string","description":"Start day of the week in iCal format. Can be MO, TU, WE, TH, FR, SA, SU\n"}},"requiredInputs":["duration","start","type"],"stateInputs":{"description":"Input properties used for looking up and filtering OnCallShift resources.\n","properties":{"byDays":{"type":"array","items":{"type":"string"},"description":"This parameter takes a list of days in iCal format. Can be MO, TU, WE, TH, FR, SA, SU\n"},"byMonthdays":{"type":"array","items":{"type":"integer"},"description":"This parameter takes a list of days of the month.  Valid values are 1 to 31 or -31 to -1\n"},"byMonths":{"type":"array","items":{"type":"integer"},"description":"This parameter takes a list of months. Valid values are 1 to 12\n"},"duration":{"type":"integer","description":"The duration of the event.\n"},"frequency":{"type":"string","description":"The frequency of the event. Can be hourly, daily, weekly, monthly\n"},"interval":{"type":"integer","description":"The positive integer representing at which intervals the recurrence rule repeats.\n"},"level":{"type":"integer","description":"The priority level. The higher the value, the higher the priority.\n"},"name":{"type":"string","description":"The shift's name.\n"},"rollingUsers":{"type":"array","items":{"type":"array","items":{"type":"string"}},"description":"The list of lists with on-call users (for\u003cspan pulumi-lang-nodejs=\" rollingUsers \" pulumi-lang-dotnet=\" RollingUsers \" pulumi-lang-go=\" rollingUsers \" pulumi-lang-python=\" rolling_users \" pulumi-lang-yaml=\" rollingUsers \" pulumi-lang-java=\" rollingUsers \"\u003e rolling_users \u003c/span\u003eevent type)\n"},"start":{"type":"string","description":"The start time of the on-call shift. This parameter takes a date format as yyyy-MM-dd'T'HH:mm:ss (for example \"2020-09-05T08:00:00\")\n"},"startRotationFromUserIndex":{"type":"integer","description":"The index of the list of users in rolling_users, from which on-call rotation starts.\n"},"teamId":{"type":"string","description":"The ID of the OnCall team (using the \u003cspan pulumi-lang-nodejs=\"`grafana.onCall.getTeam`\" pulumi-lang-dotnet=\"`grafana.onCall.getTeam`\" pulumi-lang-go=\"`onCall.getTeam`\" pulumi-lang-python=\"`on_call_get_team`\" pulumi-lang-yaml=\"`grafana.onCall.getTeam`\" pulumi-lang-java=\"`grafana.onCall.getTeam`\"\u003e`grafana.onCall.getTeam`\u003c/span\u003e datasource).\n"},"timeZone":{"type":"string","description":"The shift's timezone.  Overrides schedule's timezone.\n"},"type":{"type":"string","description":"The shift's type. Can be rolling*users, recurrent*event, single_event\n"},"until":{"type":"string","description":"The end time of recurrent on-call shifts (endless if null). This parameter takes a date format as yyyy-MM-dd'T'HH:mm:ss (for example \"2020-09-05T08:00:00\")\n"},"users":{"type":"array","items":{"type":"string"},"description":"The list of on-call users (for single*event and recurrent*event event type).\n"},"weekStart":{"type":"string","description":"Start day of the week in iCal format. Can be MO, TU, WE, TH, FR, SA, SU\n"}},"type":"object"}},"grafana:onCall/outgoingWebhook:OutgoingWebhook":{"description":"* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/outgoing_webhooks/)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst myTeam = grafana.oss.getTeam({\n    name: \"my team\",\n});\nconst myTeamGetTeam = myTeam.then(myTeam =\u003e grafana.onCall.getTeam({\n    name: myTeam.name,\n}));\nconst test_acc_outgoingWebhook = new grafana.oncall.OutgoingWebhook(\"test-acc-outgoing_webhook\", {\n    name: \"my outgoing webhook\",\n    url: \"https://example.com/\",\n    teamId: myTeamGetTeam.then(myTeamGetTeam =\u003e myTeamGetTeam.id),\n});\nconst test_acc_outgoingWebhook_incident = new grafana.oncall.OutgoingWebhook(\"test-acc-outgoing_webhook-incident\", {\n    name: \"my outgoing incident webhook\",\n    preset: \"incident_webhook\",\n    httpMethod: \"POST\",\n    url: \"https://example.com/\",\n    triggerType: \"incident declared\",\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\nmy_team = grafana.oss.get_team(name=\"my team\")\nmy_team_get_team = grafana.onCall.get_team(name=my_team.name)\ntest_acc_outgoing_webhook = grafana.oncall.OutgoingWebhook(\"test-acc-outgoing_webhook\",\n    name=\"my outgoing webhook\",\n    url=\"https://example.com/\",\n    team_id=my_team_get_team.id)\ntest_acc_outgoing_webhook_incident = grafana.oncall.OutgoingWebhook(\"test-acc-outgoing_webhook-incident\",\n    name=\"my outgoing incident webhook\",\n    preset=\"incident_webhook\",\n    http_method=\"POST\",\n    url=\"https://example.com/\",\n    trigger_type=\"incident declared\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var myTeam = Grafana.Oss.GetTeam.Invoke(new()\n    {\n        Name = \"my team\",\n    });\n\n    var myTeamGetTeam = Grafana.OnCall.GetTeam.Invoke(new()\n    {\n        Name = myTeam.Apply(getTeamResult =\u003e getTeamResult.Name),\n    });\n\n    var test_acc_outgoingWebhook = new Grafana.OnCall.OutgoingWebhook(\"test-acc-outgoing_webhook\", new()\n    {\n        Name = \"my outgoing webhook\",\n        Url = \"https://example.com/\",\n        TeamId = myTeamGetTeam.Apply(getTeamResult =\u003e getTeamResult.Id),\n    });\n\n    var test_acc_outgoingWebhook_incident = new Grafana.OnCall.OutgoingWebhook(\"test-acc-outgoing_webhook-incident\", new()\n    {\n        Name = \"my outgoing incident webhook\",\n        Preset = \"incident_webhook\",\n        HttpMethod = \"POST\",\n        Url = \"https://example.com/\",\n        TriggerType = \"incident declared\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oncall\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmyTeam, err := oss.LookupTeam(ctx, \u0026oss.LookupTeamArgs{\n\t\t\tName: \"my team\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmyTeamGetTeam, err := oncall.GetTeam(ctx, \u0026oncall.GetTeamArgs{\n\t\t\tName: myTeam.Name,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oncall.NewOutgoingWebhook(ctx, \"test-acc-outgoing_webhook\", \u0026oncall.OutgoingWebhookArgs{\n\t\t\tName:   pulumi.String(\"my outgoing webhook\"),\n\t\t\tUrl:    pulumi.String(\"https://example.com/\"),\n\t\t\tTeamId: pulumi.String(myTeamGetTeam.Id),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oncall.NewOutgoingWebhook(ctx, \"test-acc-outgoing_webhook-incident\", \u0026oncall.OutgoingWebhookArgs{\n\t\t\tName:        pulumi.String(\"my outgoing incident webhook\"),\n\t\t\tPreset:      pulumi.String(\"incident_webhook\"),\n\t\t\tHttpMethod:  pulumi.String(\"POST\"),\n\t\t\tUrl:         pulumi.String(\"https://example.com/\"),\n\t\t\tTriggerType: pulumi.String(\"incident declared\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.OssFunctions;\nimport com.pulumi.grafana.onCall.OnCallFunctions;\nimport com.pulumi.grafana.onCall.OutgoingWebhook;\nimport com.pulumi.grafana.onCall.OutgoingWebhookArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var myTeam = OssFunctions.getTeam(GetTeamArgs.builder()\n            .name(\"my team\")\n            .build());\n\n        final var myTeamGetTeam = OnCallFunctions.getTeam(GetTeamArgs.builder()\n            .name(myTeam.name())\n            .build());\n\n        var test_acc_outgoingWebhook = new OutgoingWebhook(\"test-acc-outgoingWebhook\", OutgoingWebhookArgs.builder()\n            .name(\"my outgoing webhook\")\n            .url(\"https://example.com/\")\n            .teamId(myTeamGetTeam.id())\n            .build());\n\n        var test_acc_outgoingWebhook_incident = new OutgoingWebhook(\"test-acc-outgoingWebhook-incident\", OutgoingWebhookArgs.builder()\n            .name(\"my outgoing incident webhook\")\n            .preset(\"incident_webhook\")\n            .httpMethod(\"POST\")\n            .url(\"https://example.com/\")\n            .triggerType(\"incident declared\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  test-acc-outgoingWebhook:\n    type: grafana:onCall:OutgoingWebhook\n    name: test-acc-outgoing_webhook\n    properties:\n      name: my outgoing webhook\n      url: https://example.com/\n      teamId: ${myTeamGetTeam.id}\n  test-acc-outgoingWebhook-incident:\n    type: grafana:onCall:OutgoingWebhook\n    name: test-acc-outgoing_webhook-incident\n    properties:\n      name: my outgoing incident webhook\n      preset: incident_webhook\n      httpMethod: POST\n      url: https://example.com/\n      triggerType: incident declared\nvariables:\n  myTeam:\n    fn::invoke:\n      function: grafana:oss:getTeam\n      arguments:\n        name: my team\n  myTeamGetTeam:\n    fn::invoke:\n      function: grafana:onCall:getTeam\n      arguments:\n        name: ${myTeam.name}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:onCall/outgoingWebhook:OutgoingWebhook name \"{{ id }}\"\n```\n\n","properties":{"authorizationHeader":{"type":"string","description":"The auth data of the webhook. Used in Authorization header instead of user/password auth.\n","secret":true},"data":{"type":"string","description":"The data of the webhook.\n"},"forwardWholePayload":{"type":"boolean","description":"Toggle to send the entire webhook payload instead of using the values in the Data field.\n"},"headers":{"type":"string","description":"Headers to add to the outgoing webhook request.\n"},"httpMethod":{"type":"string","description":"The HTTP method used in the request made by the outgoing webhook. Defaults to `POST`.\n"},"integrationFilters":{"type":"array","items":{"type":"string"},"description":"Restricts the outgoing webhook to only trigger if the event came from a selected integration. If no integrations are selected the outgoing webhook will trigger for any integration.\n"},"isWebhookEnabled":{"type":"boolean","description":"Controls whether the outgoing webhook will trigger or is ignored. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"name":{"type":"string","description":"The name of the outgoing webhook.\n"},"password":{"type":"string","description":"The auth data of the webhook. Used for Basic authentication\n","secret":true},"preset":{"type":"string","description":"The preset of the outgoing webhook. Possible values are: \u003cspan pulumi-lang-nodejs=\"`simpleWebhook`\" pulumi-lang-dotnet=\"`SimpleWebhook`\" pulumi-lang-go=\"`simpleWebhook`\" pulumi-lang-python=\"`simple_webhook`\" pulumi-lang-yaml=\"`simpleWebhook`\" pulumi-lang-java=\"`simpleWebhook`\"\u003e`simple_webhook`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`advancedWebhook`\" pulumi-lang-dotnet=\"`AdvancedWebhook`\" pulumi-lang-go=\"`advancedWebhook`\" pulumi-lang-python=\"`advanced_webhook`\" pulumi-lang-yaml=\"`advancedWebhook`\" pulumi-lang-java=\"`advancedWebhook`\"\u003e`advanced_webhook`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`grafanaSift`\" pulumi-lang-dotnet=\"`GrafanaSift`\" pulumi-lang-go=\"`grafanaSift`\" pulumi-lang-python=\"`grafana_sift`\" pulumi-lang-yaml=\"`grafanaSift`\" pulumi-lang-java=\"`grafanaSift`\"\u003e`grafana_sift`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`grafanaAssistant`\" pulumi-lang-dotnet=\"`GrafanaAssistant`\" pulumi-lang-go=\"`grafanaAssistant`\" pulumi-lang-python=\"`grafana_assistant`\" pulumi-lang-yaml=\"`grafanaAssistant`\" pulumi-lang-java=\"`grafanaAssistant`\"\u003e`grafana_assistant`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`incidentWebhook`\" pulumi-lang-dotnet=\"`IncidentWebhook`\" pulumi-lang-go=\"`incidentWebhook`\" pulumi-lang-python=\"`incident_webhook`\" pulumi-lang-yaml=\"`incidentWebhook`\" pulumi-lang-java=\"`incidentWebhook`\"\u003e`incident_webhook`\u003c/span\u003e. If no preset is set, the default preset is \u003cspan pulumi-lang-nodejs=\"`advancedWebhook`\" pulumi-lang-dotnet=\"`AdvancedWebhook`\" pulumi-lang-go=\"`advancedWebhook`\" pulumi-lang-python=\"`advanced_webhook`\" pulumi-lang-yaml=\"`advancedWebhook`\" pulumi-lang-java=\"`advancedWebhook`\"\u003e`advanced_webhook`\u003c/span\u003e.\n"},"teamId":{"type":"string","description":"The ID of the OnCall team (using the \u003cspan pulumi-lang-nodejs=\"`grafana.onCall.getTeam`\" pulumi-lang-dotnet=\"`grafana.onCall.getTeam`\" pulumi-lang-go=\"`onCall.getTeam`\" pulumi-lang-python=\"`on_call_get_team`\" pulumi-lang-yaml=\"`grafana.onCall.getTeam`\" pulumi-lang-java=\"`grafana.onCall.getTeam`\"\u003e`grafana.onCall.getTeam`\u003c/span\u003e datasource).\n"},"triggerTemplate":{"type":"string","description":"A template used to dynamically determine whether the webhook should execute based on the content of the payload.\n"},"triggerType":{"type":"string","description":"The type of event that will cause this outgoing webhook to execute. The events available will depend on the preset used. For alert group webhooks, the possible triggers are: \u003cspan pulumi-lang-nodejs=\"`escalation`\" pulumi-lang-dotnet=\"`Escalation`\" pulumi-lang-go=\"`escalation`\" pulumi-lang-python=\"`escalation`\" pulumi-lang-yaml=\"`escalation`\" pulumi-lang-java=\"`escalation`\"\u003e`escalation`\u003c/span\u003e, `alert group created`, `status change`, \u003cspan pulumi-lang-nodejs=\"`acknowledge`\" pulumi-lang-dotnet=\"`Acknowledge`\" pulumi-lang-go=\"`acknowledge`\" pulumi-lang-python=\"`acknowledge`\" pulumi-lang-yaml=\"`acknowledge`\" pulumi-lang-java=\"`acknowledge`\"\u003e`acknowledge`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`resolve`\" pulumi-lang-dotnet=\"`Resolve`\" pulumi-lang-go=\"`resolve`\" pulumi-lang-python=\"`resolve`\" pulumi-lang-yaml=\"`resolve`\" pulumi-lang-java=\"`resolve`\"\u003e`resolve`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`silence`\" pulumi-lang-dotnet=\"`Silence`\" pulumi-lang-go=\"`silence`\" pulumi-lang-python=\"`silence`\" pulumi-lang-yaml=\"`silence`\" pulumi-lang-java=\"`silence`\"\u003e`silence`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`unsilence`\" pulumi-lang-dotnet=\"`Unsilence`\" pulumi-lang-go=\"`unsilence`\" pulumi-lang-python=\"`unsilence`\" pulumi-lang-yaml=\"`unsilence`\" pulumi-lang-java=\"`unsilence`\"\u003e`unsilence`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`unresolve`\" pulumi-lang-dotnet=\"`Unresolve`\" pulumi-lang-go=\"`unresolve`\" pulumi-lang-python=\"`unresolve`\" pulumi-lang-yaml=\"`unresolve`\" pulumi-lang-java=\"`unresolve`\"\u003e`unresolve`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`unacknowledge`\" pulumi-lang-dotnet=\"`Unacknowledge`\" pulumi-lang-go=\"`unacknowledge`\" pulumi-lang-python=\"`unacknowledge`\" pulumi-lang-yaml=\"`unacknowledge`\" pulumi-lang-java=\"`unacknowledge`\"\u003e`unacknowledge`\u003c/span\u003e, `resolution note added`, `personal notification`; for incident webhooks: `incident declared`, `incident changed`, `incident resolved`. Defaults to \u003cspan pulumi-lang-nodejs=\"`escalation`\" pulumi-lang-dotnet=\"`Escalation`\" pulumi-lang-go=\"`escalation`\" pulumi-lang-python=\"`escalation`\" pulumi-lang-yaml=\"`escalation`\" pulumi-lang-java=\"`escalation`\"\u003e`escalation`\u003c/span\u003e.\n"},"url":{"type":"string","description":"The webhook URL. Required when not using a preset that controls this field.\n"},"user":{"type":"string","description":"Username to use when making the outgoing webhook request.\n"}},"required":["name"],"inputProperties":{"authorizationHeader":{"type":"string","description":"The auth data of the webhook. Used in Authorization header instead of user/password auth.\n","secret":true},"data":{"type":"string","description":"The data of the webhook.\n"},"forwardWholePayload":{"type":"boolean","description":"Toggle to send the entire webhook payload instead of using the values in the Data field.\n"},"headers":{"type":"string","description":"Headers to add to the outgoing webhook request.\n"},"httpMethod":{"type":"string","description":"The HTTP method used in the request made by the outgoing webhook. Defaults to `POST`.\n"},"integrationFilters":{"type":"array","items":{"type":"string"},"description":"Restricts the outgoing webhook to only trigger if the event came from a selected integration. If no integrations are selected the outgoing webhook will trigger for any integration.\n"},"isWebhookEnabled":{"type":"boolean","description":"Controls whether the outgoing webhook will trigger or is ignored. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"name":{"type":"string","description":"The name of the outgoing webhook.\n"},"password":{"type":"string","description":"The auth data of the webhook. Used for Basic authentication\n","secret":true},"preset":{"type":"string","description":"The preset of the outgoing webhook. Possible values are: \u003cspan pulumi-lang-nodejs=\"`simpleWebhook`\" pulumi-lang-dotnet=\"`SimpleWebhook`\" pulumi-lang-go=\"`simpleWebhook`\" pulumi-lang-python=\"`simple_webhook`\" pulumi-lang-yaml=\"`simpleWebhook`\" pulumi-lang-java=\"`simpleWebhook`\"\u003e`simple_webhook`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`advancedWebhook`\" pulumi-lang-dotnet=\"`AdvancedWebhook`\" pulumi-lang-go=\"`advancedWebhook`\" pulumi-lang-python=\"`advanced_webhook`\" pulumi-lang-yaml=\"`advancedWebhook`\" pulumi-lang-java=\"`advancedWebhook`\"\u003e`advanced_webhook`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`grafanaSift`\" pulumi-lang-dotnet=\"`GrafanaSift`\" pulumi-lang-go=\"`grafanaSift`\" pulumi-lang-python=\"`grafana_sift`\" pulumi-lang-yaml=\"`grafanaSift`\" pulumi-lang-java=\"`grafanaSift`\"\u003e`grafana_sift`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`grafanaAssistant`\" pulumi-lang-dotnet=\"`GrafanaAssistant`\" pulumi-lang-go=\"`grafanaAssistant`\" pulumi-lang-python=\"`grafana_assistant`\" pulumi-lang-yaml=\"`grafanaAssistant`\" pulumi-lang-java=\"`grafanaAssistant`\"\u003e`grafana_assistant`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`incidentWebhook`\" pulumi-lang-dotnet=\"`IncidentWebhook`\" pulumi-lang-go=\"`incidentWebhook`\" pulumi-lang-python=\"`incident_webhook`\" pulumi-lang-yaml=\"`incidentWebhook`\" pulumi-lang-java=\"`incidentWebhook`\"\u003e`incident_webhook`\u003c/span\u003e. If no preset is set, the default preset is \u003cspan pulumi-lang-nodejs=\"`advancedWebhook`\" pulumi-lang-dotnet=\"`AdvancedWebhook`\" pulumi-lang-go=\"`advancedWebhook`\" pulumi-lang-python=\"`advanced_webhook`\" pulumi-lang-yaml=\"`advancedWebhook`\" pulumi-lang-java=\"`advancedWebhook`\"\u003e`advanced_webhook`\u003c/span\u003e.\n"},"teamId":{"type":"string","description":"The ID of the OnCall team (using the \u003cspan pulumi-lang-nodejs=\"`grafana.onCall.getTeam`\" pulumi-lang-dotnet=\"`grafana.onCall.getTeam`\" pulumi-lang-go=\"`onCall.getTeam`\" pulumi-lang-python=\"`on_call_get_team`\" pulumi-lang-yaml=\"`grafana.onCall.getTeam`\" pulumi-lang-java=\"`grafana.onCall.getTeam`\"\u003e`grafana.onCall.getTeam`\u003c/span\u003e datasource).\n"},"triggerTemplate":{"type":"string","description":"A template used to dynamically determine whether the webhook should execute based on the content of the payload.\n"},"triggerType":{"type":"string","description":"The type of event that will cause this outgoing webhook to execute. The events available will depend on the preset used. For alert group webhooks, the possible triggers are: \u003cspan pulumi-lang-nodejs=\"`escalation`\" pulumi-lang-dotnet=\"`Escalation`\" pulumi-lang-go=\"`escalation`\" pulumi-lang-python=\"`escalation`\" pulumi-lang-yaml=\"`escalation`\" pulumi-lang-java=\"`escalation`\"\u003e`escalation`\u003c/span\u003e, `alert group created`, `status change`, \u003cspan pulumi-lang-nodejs=\"`acknowledge`\" pulumi-lang-dotnet=\"`Acknowledge`\" pulumi-lang-go=\"`acknowledge`\" pulumi-lang-python=\"`acknowledge`\" pulumi-lang-yaml=\"`acknowledge`\" pulumi-lang-java=\"`acknowledge`\"\u003e`acknowledge`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`resolve`\" pulumi-lang-dotnet=\"`Resolve`\" pulumi-lang-go=\"`resolve`\" pulumi-lang-python=\"`resolve`\" pulumi-lang-yaml=\"`resolve`\" pulumi-lang-java=\"`resolve`\"\u003e`resolve`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`silence`\" pulumi-lang-dotnet=\"`Silence`\" pulumi-lang-go=\"`silence`\" pulumi-lang-python=\"`silence`\" pulumi-lang-yaml=\"`silence`\" pulumi-lang-java=\"`silence`\"\u003e`silence`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`unsilence`\" pulumi-lang-dotnet=\"`Unsilence`\" pulumi-lang-go=\"`unsilence`\" pulumi-lang-python=\"`unsilence`\" pulumi-lang-yaml=\"`unsilence`\" pulumi-lang-java=\"`unsilence`\"\u003e`unsilence`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`unresolve`\" pulumi-lang-dotnet=\"`Unresolve`\" pulumi-lang-go=\"`unresolve`\" pulumi-lang-python=\"`unresolve`\" pulumi-lang-yaml=\"`unresolve`\" pulumi-lang-java=\"`unresolve`\"\u003e`unresolve`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`unacknowledge`\" pulumi-lang-dotnet=\"`Unacknowledge`\" pulumi-lang-go=\"`unacknowledge`\" pulumi-lang-python=\"`unacknowledge`\" pulumi-lang-yaml=\"`unacknowledge`\" pulumi-lang-java=\"`unacknowledge`\"\u003e`unacknowledge`\u003c/span\u003e, `resolution note added`, `personal notification`; for incident webhooks: `incident declared`, `incident changed`, `incident resolved`. Defaults to \u003cspan pulumi-lang-nodejs=\"`escalation`\" pulumi-lang-dotnet=\"`Escalation`\" pulumi-lang-go=\"`escalation`\" pulumi-lang-python=\"`escalation`\" pulumi-lang-yaml=\"`escalation`\" pulumi-lang-java=\"`escalation`\"\u003e`escalation`\u003c/span\u003e.\n"},"url":{"type":"string","description":"The webhook URL. Required when not using a preset that controls this field.\n"},"user":{"type":"string","description":"Username to use when making the outgoing webhook request.\n"}},"stateInputs":{"description":"Input properties used for looking up and filtering OutgoingWebhook resources.\n","properties":{"authorizationHeader":{"type":"string","description":"The auth data of the webhook. Used in Authorization header instead of user/password auth.\n","secret":true},"data":{"type":"string","description":"The data of the webhook.\n"},"forwardWholePayload":{"type":"boolean","description":"Toggle to send the entire webhook payload instead of using the values in the Data field.\n"},"headers":{"type":"string","description":"Headers to add to the outgoing webhook request.\n"},"httpMethod":{"type":"string","description":"The HTTP method used in the request made by the outgoing webhook. Defaults to `POST`.\n"},"integrationFilters":{"type":"array","items":{"type":"string"},"description":"Restricts the outgoing webhook to only trigger if the event came from a selected integration. If no integrations are selected the outgoing webhook will trigger for any integration.\n"},"isWebhookEnabled":{"type":"boolean","description":"Controls whether the outgoing webhook will trigger or is ignored. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"name":{"type":"string","description":"The name of the outgoing webhook.\n"},"password":{"type":"string","description":"The auth data of the webhook. Used for Basic authentication\n","secret":true},"preset":{"type":"string","description":"The preset of the outgoing webhook. Possible values are: \u003cspan pulumi-lang-nodejs=\"`simpleWebhook`\" pulumi-lang-dotnet=\"`SimpleWebhook`\" pulumi-lang-go=\"`simpleWebhook`\" pulumi-lang-python=\"`simple_webhook`\" pulumi-lang-yaml=\"`simpleWebhook`\" pulumi-lang-java=\"`simpleWebhook`\"\u003e`simple_webhook`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`advancedWebhook`\" pulumi-lang-dotnet=\"`AdvancedWebhook`\" pulumi-lang-go=\"`advancedWebhook`\" pulumi-lang-python=\"`advanced_webhook`\" pulumi-lang-yaml=\"`advancedWebhook`\" pulumi-lang-java=\"`advancedWebhook`\"\u003e`advanced_webhook`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`grafanaSift`\" pulumi-lang-dotnet=\"`GrafanaSift`\" pulumi-lang-go=\"`grafanaSift`\" pulumi-lang-python=\"`grafana_sift`\" pulumi-lang-yaml=\"`grafanaSift`\" pulumi-lang-java=\"`grafanaSift`\"\u003e`grafana_sift`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`grafanaAssistant`\" pulumi-lang-dotnet=\"`GrafanaAssistant`\" pulumi-lang-go=\"`grafanaAssistant`\" pulumi-lang-python=\"`grafana_assistant`\" pulumi-lang-yaml=\"`grafanaAssistant`\" pulumi-lang-java=\"`grafanaAssistant`\"\u003e`grafana_assistant`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`incidentWebhook`\" pulumi-lang-dotnet=\"`IncidentWebhook`\" pulumi-lang-go=\"`incidentWebhook`\" pulumi-lang-python=\"`incident_webhook`\" pulumi-lang-yaml=\"`incidentWebhook`\" pulumi-lang-java=\"`incidentWebhook`\"\u003e`incident_webhook`\u003c/span\u003e. If no preset is set, the default preset is \u003cspan pulumi-lang-nodejs=\"`advancedWebhook`\" pulumi-lang-dotnet=\"`AdvancedWebhook`\" pulumi-lang-go=\"`advancedWebhook`\" pulumi-lang-python=\"`advanced_webhook`\" pulumi-lang-yaml=\"`advancedWebhook`\" pulumi-lang-java=\"`advancedWebhook`\"\u003e`advanced_webhook`\u003c/span\u003e.\n"},"teamId":{"type":"string","description":"The ID of the OnCall team (using the \u003cspan pulumi-lang-nodejs=\"`grafana.onCall.getTeam`\" pulumi-lang-dotnet=\"`grafana.onCall.getTeam`\" pulumi-lang-go=\"`onCall.getTeam`\" pulumi-lang-python=\"`on_call_get_team`\" pulumi-lang-yaml=\"`grafana.onCall.getTeam`\" pulumi-lang-java=\"`grafana.onCall.getTeam`\"\u003e`grafana.onCall.getTeam`\u003c/span\u003e datasource).\n"},"triggerTemplate":{"type":"string","description":"A template used to dynamically determine whether the webhook should execute based on the content of the payload.\n"},"triggerType":{"type":"string","description":"The type of event that will cause this outgoing webhook to execute. The events available will depend on the preset used. For alert group webhooks, the possible triggers are: \u003cspan pulumi-lang-nodejs=\"`escalation`\" pulumi-lang-dotnet=\"`Escalation`\" pulumi-lang-go=\"`escalation`\" pulumi-lang-python=\"`escalation`\" pulumi-lang-yaml=\"`escalation`\" pulumi-lang-java=\"`escalation`\"\u003e`escalation`\u003c/span\u003e, `alert group created`, `status change`, \u003cspan pulumi-lang-nodejs=\"`acknowledge`\" pulumi-lang-dotnet=\"`Acknowledge`\" pulumi-lang-go=\"`acknowledge`\" pulumi-lang-python=\"`acknowledge`\" pulumi-lang-yaml=\"`acknowledge`\" pulumi-lang-java=\"`acknowledge`\"\u003e`acknowledge`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`resolve`\" pulumi-lang-dotnet=\"`Resolve`\" pulumi-lang-go=\"`resolve`\" pulumi-lang-python=\"`resolve`\" pulumi-lang-yaml=\"`resolve`\" pulumi-lang-java=\"`resolve`\"\u003e`resolve`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`silence`\" pulumi-lang-dotnet=\"`Silence`\" pulumi-lang-go=\"`silence`\" pulumi-lang-python=\"`silence`\" pulumi-lang-yaml=\"`silence`\" pulumi-lang-java=\"`silence`\"\u003e`silence`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`unsilence`\" pulumi-lang-dotnet=\"`Unsilence`\" pulumi-lang-go=\"`unsilence`\" pulumi-lang-python=\"`unsilence`\" pulumi-lang-yaml=\"`unsilence`\" pulumi-lang-java=\"`unsilence`\"\u003e`unsilence`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`unresolve`\" pulumi-lang-dotnet=\"`Unresolve`\" pulumi-lang-go=\"`unresolve`\" pulumi-lang-python=\"`unresolve`\" pulumi-lang-yaml=\"`unresolve`\" pulumi-lang-java=\"`unresolve`\"\u003e`unresolve`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`unacknowledge`\" pulumi-lang-dotnet=\"`Unacknowledge`\" pulumi-lang-go=\"`unacknowledge`\" pulumi-lang-python=\"`unacknowledge`\" pulumi-lang-yaml=\"`unacknowledge`\" pulumi-lang-java=\"`unacknowledge`\"\u003e`unacknowledge`\u003c/span\u003e, `resolution note added`, `personal notification`; for incident webhooks: `incident declared`, `incident changed`, `incident resolved`. Defaults to \u003cspan pulumi-lang-nodejs=\"`escalation`\" pulumi-lang-dotnet=\"`Escalation`\" pulumi-lang-go=\"`escalation`\" pulumi-lang-python=\"`escalation`\" pulumi-lang-yaml=\"`escalation`\" pulumi-lang-java=\"`escalation`\"\u003e`escalation`\u003c/span\u003e.\n"},"url":{"type":"string","description":"The webhook URL. Required when not using a preset that controls this field.\n"},"user":{"type":"string","description":"Username to use when making the outgoing webhook request.\n"}},"type":"object"}},"grafana:onCall/route:Route":{"description":"* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/routes/)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst exampleSlackChannel = grafana.onCall.getSlackChannel({\n    name: \"example_slack_channel\",\n});\nconst _default = new grafana.oncall.EscalationChain(\"default\", {name: \"default\"});\nconst exampleIntegration = new grafana.oncall.Integration(\"example_integration\", {\n    name: \"Grafana Integration\",\n    type: \"grafana\",\n    defaultRoute: {},\n});\nconst exampleRoute = new grafana.oncall.Route(\"example_route\", {\n    integrationId: exampleIntegration.id,\n    escalationChainId: _default.id,\n    routingRegex: \"us-(east|west)\",\n    position: 0,\n    slack: {\n        channelId: exampleSlackChannel.then(exampleSlackChannel =\u003e exampleSlackChannel.slackId),\n        enabled: true,\n    },\n    telegram: {\n        id: \"ONCALLTELEGRAMID\",\n        enabled: true,\n    },\n    msteams: {\n        id: \"ONCALLMSTEAMSID\",\n        enabled: false,\n    },\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\nexample_slack_channel = grafana.onCall.get_slack_channel(name=\"example_slack_channel\")\ndefault = grafana.oncall.EscalationChain(\"default\", name=\"default\")\nexample_integration = grafana.oncall.Integration(\"example_integration\",\n    name=\"Grafana Integration\",\n    type=\"grafana\",\n    default_route={})\nexample_route = grafana.oncall.Route(\"example_route\",\n    integration_id=example_integration.id,\n    escalation_chain_id=default.id,\n    routing_regex=\"us-(east|west)\",\n    position=0,\n    slack={\n        \"channel_id\": example_slack_channel.slack_id,\n        \"enabled\": True,\n    },\n    telegram={\n        \"id\": \"ONCALLTELEGRAMID\",\n        \"enabled\": True,\n    },\n    msteams={\n        \"id\": \"ONCALLMSTEAMSID\",\n        \"enabled\": False,\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var exampleSlackChannel = Grafana.OnCall.GetSlackChannel.Invoke(new()\n    {\n        Name = \"example_slack_channel\",\n    });\n\n    var @default = new Grafana.OnCall.EscalationChain(\"default\", new()\n    {\n        Name = \"default\",\n    });\n\n    var exampleIntegration = new Grafana.OnCall.Integration(\"example_integration\", new()\n    {\n        Name = \"Grafana Integration\",\n        Type = \"grafana\",\n        DefaultRoute = null,\n    });\n\n    var exampleRoute = new Grafana.OnCall.Route(\"example_route\", new()\n    {\n        IntegrationId = exampleIntegration.Id,\n        EscalationChainId = @default.Id,\n        RoutingRegex = \"us-(east|west)\",\n        Position = 0,\n        Slack = new Grafana.OnCall.Inputs.RouteSlackArgs\n        {\n            ChannelId = exampleSlackChannel.Apply(getSlackChannelResult =\u003e getSlackChannelResult.SlackId),\n            Enabled = true,\n        },\n        Telegram = new Grafana.OnCall.Inputs.RouteTelegramArgs\n        {\n            Id = \"ONCALLTELEGRAMID\",\n            Enabled = true,\n        },\n        Msteams = new Grafana.OnCall.Inputs.RouteMsteamsArgs\n        {\n            Id = \"ONCALLMSTEAMSID\",\n            Enabled = false,\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oncall\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleSlackChannel, err := oncall.GetSlackChannel(ctx, \u0026oncall.GetSlackChannelArgs{\n\t\t\tName: \"example_slack_channel\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_default, err := oncall.NewEscalationChain(ctx, \"default\", \u0026oncall.EscalationChainArgs{\n\t\t\tName: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleIntegration, err := oncall.NewIntegration(ctx, \"example_integration\", \u0026oncall.IntegrationArgs{\n\t\t\tName:         pulumi.String(\"Grafana Integration\"),\n\t\t\tType:         pulumi.String(\"grafana\"),\n\t\t\tDefaultRoute: \u0026oncall.IntegrationDefaultRouteArgs{},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oncall.NewRoute(ctx, \"example_route\", \u0026oncall.RouteArgs{\n\t\t\tIntegrationId:     exampleIntegration.ID(),\n\t\t\tEscalationChainId: _default.ID(),\n\t\t\tRoutingRegex:      pulumi.String(\"us-(east|west)\"),\n\t\t\tPosition:          pulumi.Int(0),\n\t\t\tSlack: \u0026oncall.RouteSlackArgs{\n\t\t\t\tChannelId: pulumi.String(exampleSlackChannel.SlackId),\n\t\t\t\tEnabled:   pulumi.Bool(true),\n\t\t\t},\n\t\t\tTelegram: \u0026oncall.RouteTelegramArgs{\n\t\t\t\tId:      pulumi.String(\"ONCALLTELEGRAMID\"),\n\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t},\n\t\t\tMsteams: \u0026oncall.RouteMsteamsArgs{\n\t\t\t\tId:      pulumi.String(\"ONCALLMSTEAMSID\"),\n\t\t\t\tEnabled: pulumi.Bool(false),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.onCall.OnCallFunctions;\nimport com.pulumi.grafana.onCall.inputs.GetSlackChannelArgs;\nimport com.pulumi.grafana.onCall.EscalationChain;\nimport com.pulumi.grafana.onCall.EscalationChainArgs;\nimport com.pulumi.grafana.onCall.Integration;\nimport com.pulumi.grafana.onCall.IntegrationArgs;\nimport com.pulumi.grafana.onCall.inputs.IntegrationDefaultRouteArgs;\nimport com.pulumi.grafana.onCall.Route;\nimport com.pulumi.grafana.onCall.RouteArgs;\nimport com.pulumi.grafana.onCall.inputs.RouteSlackArgs;\nimport com.pulumi.grafana.onCall.inputs.RouteTelegramArgs;\nimport com.pulumi.grafana.onCall.inputs.RouteMsteamsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var exampleSlackChannel = OnCallFunctions.getSlackChannel(GetSlackChannelArgs.builder()\n            .name(\"example_slack_channel\")\n            .build());\n\n        var default_ = new EscalationChain(\"default\", EscalationChainArgs.builder()\n            .name(\"default\")\n            .build());\n\n        var exampleIntegration = new Integration(\"exampleIntegration\", IntegrationArgs.builder()\n            .name(\"Grafana Integration\")\n            .type(\"grafana\")\n            .defaultRoute(IntegrationDefaultRouteArgs.builder()\n                .build())\n            .build());\n\n        var exampleRoute = new Route(\"exampleRoute\", RouteArgs.builder()\n            .integrationId(exampleIntegration.id())\n            .escalationChainId(default_.id())\n            .routingRegex(\"us-(east|west)\")\n            .position(0)\n            .slack(RouteSlackArgs.builder()\n                .channelId(exampleSlackChannel.slackId())\n                .enabled(true)\n                .build())\n            .telegram(RouteTelegramArgs.builder()\n                .id(\"ONCALLTELEGRAMID\")\n                .enabled(true)\n                .build())\n            .msteams(RouteMsteamsArgs.builder()\n                .id(\"ONCALLMSTEAMSID\")\n                .enabled(false)\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  default:\n    type: grafana:onCall:EscalationChain\n    properties:\n      name: default\n  exampleIntegration:\n    type: grafana:onCall:Integration\n    name: example_integration\n    properties:\n      name: Grafana Integration\n      type: grafana\n      defaultRoute: {}\n  exampleRoute:\n    type: grafana:onCall:Route\n    name: example_route\n    properties:\n      integrationId: ${exampleIntegration.id}\n      escalationChainId: ${default.id}\n      routingRegex: us-(east|west)\n      position: 0\n      slack:\n        channelId: ${exampleSlackChannel.slackId}\n        enabled: true\n      telegram:\n        id: ONCALLTELEGRAMID\n        enabled: true\n      msteams:\n        id: ONCALLMSTEAMSID\n        enabled: false\nvariables:\n  exampleSlackChannel:\n    fn::invoke:\n      function: grafana:onCall:getSlackChannel\n      arguments:\n        name: example_slack_channel\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:onCall/route:Route name \"{{ id }}\"\n```\n\n","properties":{"escalationChainId":{"type":"string","description":"The ID of the escalation chain.\n"},"integrationId":{"type":"string","description":"The ID of the integration.\n"},"msteams":{"$ref":"#/types/grafana:onCall/RouteMsteams:RouteMsteams","description":"MS teams-specific settings for a route.\n"},"position":{"type":"integer","description":"The position of the route (starts from 0).\n"},"routingRegex":{"type":"string","description":"Python Regex query. Route is chosen for an alert if there is a match inside the alert payload.\n"},"routingType":{"type":"string","description":"The type of route. Can be jinja2, regex Defaults to \u003cspan pulumi-lang-nodejs=\"`regex`\" pulumi-lang-dotnet=\"`Regex`\" pulumi-lang-go=\"`regex`\" pulumi-lang-python=\"`regex`\" pulumi-lang-yaml=\"`regex`\" pulumi-lang-java=\"`regex`\"\u003e`regex`\u003c/span\u003e.\n"},"slack":{"$ref":"#/types/grafana:onCall/RouteSlack:RouteSlack","description":"Slack-specific settings for a route.\n"},"telegram":{"$ref":"#/types/grafana:onCall/RouteTelegram:RouteTelegram","description":"Telegram-specific settings for a route.\n"}},"required":["escalationChainId","integrationId","position","routingRegex"],"inputProperties":{"escalationChainId":{"type":"string","description":"The ID of the escalation chain.\n"},"integrationId":{"type":"string","description":"The ID of the integration.\n","willReplaceOnChanges":true},"msteams":{"$ref":"#/types/grafana:onCall/RouteMsteams:RouteMsteams","description":"MS teams-specific settings for a route.\n"},"position":{"type":"integer","description":"The position of the route (starts from 0).\n"},"routingRegex":{"type":"string","description":"Python Regex query. Route is chosen for an alert if there is a match inside the alert payload.\n"},"routingType":{"type":"string","description":"The type of route. Can be jinja2, regex Defaults to \u003cspan pulumi-lang-nodejs=\"`regex`\" pulumi-lang-dotnet=\"`Regex`\" pulumi-lang-go=\"`regex`\" pulumi-lang-python=\"`regex`\" pulumi-lang-yaml=\"`regex`\" pulumi-lang-java=\"`regex`\"\u003e`regex`\u003c/span\u003e.\n"},"slack":{"$ref":"#/types/grafana:onCall/RouteSlack:RouteSlack","description":"Slack-specific settings for a route.\n"},"telegram":{"$ref":"#/types/grafana:onCall/RouteTelegram:RouteTelegram","description":"Telegram-specific settings for a route.\n"}},"requiredInputs":["escalationChainId","integrationId","position","routingRegex"],"stateInputs":{"description":"Input properties used for looking up and filtering Route resources.\n","properties":{"escalationChainId":{"type":"string","description":"The ID of the escalation chain.\n"},"integrationId":{"type":"string","description":"The ID of the integration.\n","willReplaceOnChanges":true},"msteams":{"$ref":"#/types/grafana:onCall/RouteMsteams:RouteMsteams","description":"MS teams-specific settings for a route.\n"},"position":{"type":"integer","description":"The position of the route (starts from 0).\n"},"routingRegex":{"type":"string","description":"Python Regex query. Route is chosen for an alert if there is a match inside the alert payload.\n"},"routingType":{"type":"string","description":"The type of route. Can be jinja2, regex Defaults to \u003cspan pulumi-lang-nodejs=\"`regex`\" pulumi-lang-dotnet=\"`Regex`\" pulumi-lang-go=\"`regex`\" pulumi-lang-python=\"`regex`\" pulumi-lang-yaml=\"`regex`\" pulumi-lang-java=\"`regex`\"\u003e`regex`\u003c/span\u003e.\n"},"slack":{"$ref":"#/types/grafana:onCall/RouteSlack:RouteSlack","description":"Slack-specific settings for a route.\n"},"telegram":{"$ref":"#/types/grafana:onCall/RouteTelegram:RouteTelegram","description":"Telegram-specific settings for a route.\n"}},"type":"object"}},"grafana:onCall/schedule:Schedule":{"description":"* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/schedules/)\n\n## Import\n\n```sh\n$ pulumi import grafana:onCall/schedule:Schedule name \"{{ id }}\"\n```\n\n","properties":{"enableWebOverrides":{"type":"boolean","description":"Enable overrides via web UI (it will ignore ical*url*overrides).\n"},"icalUrlOverrides":{"type":"string","description":"The URL of external iCal calendar which override primary events.\n"},"icalUrlPrimary":{"type":"string","description":"The URL of the external calendar iCal file.\n"},"name":{"type":"string","description":"The schedule's name.\n"},"shifts":{"type":"array","items":{"type":"string"},"description":"The list of ID's of on-call shifts.\n"},"slack":{"$ref":"#/types/grafana:onCall/ScheduleSlack:ScheduleSlack","description":"The Slack-specific settings for a schedule.\n"},"teamId":{"type":"string","description":"The ID of the OnCall team (using the \u003cspan pulumi-lang-nodejs=\"`grafana.onCall.getTeam`\" pulumi-lang-dotnet=\"`grafana.onCall.getTeam`\" pulumi-lang-go=\"`onCall.getTeam`\" pulumi-lang-python=\"`on_call_get_team`\" pulumi-lang-yaml=\"`grafana.onCall.getTeam`\" pulumi-lang-java=\"`grafana.onCall.getTeam`\"\u003e`grafana.onCall.getTeam`\u003c/span\u003e datasource).\n"},"timeZone":{"type":"string","description":"The schedule's time zone.\n"},"type":{"type":"string","description":"The schedule's type. Valid values are \u003cspan pulumi-lang-nodejs=\"`ical`\" pulumi-lang-dotnet=\"`Ical`\" pulumi-lang-go=\"`ical`\" pulumi-lang-python=\"`ical`\" pulumi-lang-yaml=\"`ical`\" pulumi-lang-java=\"`ical`\"\u003e`ical`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`calendar`\" pulumi-lang-dotnet=\"`Calendar`\" pulumi-lang-go=\"`calendar`\" pulumi-lang-python=\"`calendar`\" pulumi-lang-yaml=\"`calendar`\" pulumi-lang-java=\"`calendar`\"\u003e`calendar`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`web`\" pulumi-lang-dotnet=\"`Web`\" pulumi-lang-go=\"`web`\" pulumi-lang-python=\"`web`\" pulumi-lang-yaml=\"`web`\" pulumi-lang-java=\"`web`\"\u003e`web`\u003c/span\u003e.\n"}},"required":["name","timeZone","type"],"inputProperties":{"enableWebOverrides":{"type":"boolean","description":"Enable overrides via web UI (it will ignore ical*url*overrides).\n"},"icalUrlOverrides":{"type":"string","description":"The URL of external iCal calendar which override primary events.\n"},"icalUrlPrimary":{"type":"string","description":"The URL of the external calendar iCal file.\n"},"name":{"type":"string","description":"The schedule's name.\n"},"shifts":{"type":"array","items":{"type":"string"},"description":"The list of ID's of on-call shifts.\n"},"slack":{"$ref":"#/types/grafana:onCall/ScheduleSlack:ScheduleSlack","description":"The Slack-specific settings for a schedule.\n"},"teamId":{"type":"string","description":"The ID of the OnCall team (using the \u003cspan pulumi-lang-nodejs=\"`grafana.onCall.getTeam`\" pulumi-lang-dotnet=\"`grafana.onCall.getTeam`\" pulumi-lang-go=\"`onCall.getTeam`\" pulumi-lang-python=\"`on_call_get_team`\" pulumi-lang-yaml=\"`grafana.onCall.getTeam`\" pulumi-lang-java=\"`grafana.onCall.getTeam`\"\u003e`grafana.onCall.getTeam`\u003c/span\u003e datasource).\n"},"timeZone":{"type":"string","description":"The schedule's time zone.\n"},"type":{"type":"string","description":"The schedule's type. Valid values are \u003cspan pulumi-lang-nodejs=\"`ical`\" pulumi-lang-dotnet=\"`Ical`\" pulumi-lang-go=\"`ical`\" pulumi-lang-python=\"`ical`\" pulumi-lang-yaml=\"`ical`\" pulumi-lang-java=\"`ical`\"\u003e`ical`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`calendar`\" pulumi-lang-dotnet=\"`Calendar`\" pulumi-lang-go=\"`calendar`\" pulumi-lang-python=\"`calendar`\" pulumi-lang-yaml=\"`calendar`\" pulumi-lang-java=\"`calendar`\"\u003e`calendar`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`web`\" pulumi-lang-dotnet=\"`Web`\" pulumi-lang-go=\"`web`\" pulumi-lang-python=\"`web`\" pulumi-lang-yaml=\"`web`\" pulumi-lang-java=\"`web`\"\u003e`web`\u003c/span\u003e.\n","willReplaceOnChanges":true}},"requiredInputs":["type"],"stateInputs":{"description":"Input properties used for looking up and filtering Schedule resources.\n","properties":{"enableWebOverrides":{"type":"boolean","description":"Enable overrides via web UI (it will ignore ical*url*overrides).\n"},"icalUrlOverrides":{"type":"string","description":"The URL of external iCal calendar which override primary events.\n"},"icalUrlPrimary":{"type":"string","description":"The URL of the external calendar iCal file.\n"},"name":{"type":"string","description":"The schedule's name.\n"},"shifts":{"type":"array","items":{"type":"string"},"description":"The list of ID's of on-call shifts.\n"},"slack":{"$ref":"#/types/grafana:onCall/ScheduleSlack:ScheduleSlack","description":"The Slack-specific settings for a schedule.\n"},"teamId":{"type":"string","description":"The ID of the OnCall team (using the \u003cspan pulumi-lang-nodejs=\"`grafana.onCall.getTeam`\" pulumi-lang-dotnet=\"`grafana.onCall.getTeam`\" pulumi-lang-go=\"`onCall.getTeam`\" pulumi-lang-python=\"`on_call_get_team`\" pulumi-lang-yaml=\"`grafana.onCall.getTeam`\" pulumi-lang-java=\"`grafana.onCall.getTeam`\"\u003e`grafana.onCall.getTeam`\u003c/span\u003e datasource).\n"},"timeZone":{"type":"string","description":"The schedule's time zone.\n"},"type":{"type":"string","description":"The schedule's type. Valid values are \u003cspan pulumi-lang-nodejs=\"`ical`\" pulumi-lang-dotnet=\"`Ical`\" pulumi-lang-go=\"`ical`\" pulumi-lang-python=\"`ical`\" pulumi-lang-yaml=\"`ical`\" pulumi-lang-java=\"`ical`\"\u003e`ical`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`calendar`\" pulumi-lang-dotnet=\"`Calendar`\" pulumi-lang-go=\"`calendar`\" pulumi-lang-python=\"`calendar`\" pulumi-lang-yaml=\"`calendar`\" pulumi-lang-java=\"`calendar`\"\u003e`calendar`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`web`\" pulumi-lang-dotnet=\"`Web`\" pulumi-lang-go=\"`web`\" pulumi-lang-python=\"`web`\" pulumi-lang-yaml=\"`web`\" pulumi-lang-java=\"`web`\"\u003e`web`\u003c/span\u003e.\n","willReplaceOnChanges":true}},"type":"object"}},"grafana:onCall/userNotificationRule:UserNotificationRule":{"description":"* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/personal_notification_rules/)\n\n**Note**: you must be running Grafana OnCall \u003e= v1.8.0 to use this resource.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst myUser = grafana.onCall.getUser({\n    username: \"my_username\",\n});\nconst myUserStep1 = new grafana.oncall.UserNotificationRule(\"my_user_step_1\", {\n    userId: myUser.then(myUser =\u003e myUser.id),\n    position: 0,\n    type: \"notify_by_mobile_app\",\n});\nconst myUserStep2 = new grafana.oncall.UserNotificationRule(\"my_user_step_2\", {\n    userId: myUser.then(myUser =\u003e myUser.id),\n    position: 1,\n    duration: 600,\n    type: \"wait\",\n});\nconst myUserStep3 = new grafana.oncall.UserNotificationRule(\"my_user_step_3\", {\n    userId: myUser.then(myUser =\u003e myUser.id),\n    position: 2,\n    type: \"notify_by_phone_call\",\n});\nconst myUserStep4 = new grafana.oncall.UserNotificationRule(\"my_user_step_4\", {\n    userId: myUser.then(myUser =\u003e myUser.id),\n    position: 3,\n    duration: 300,\n    type: \"wait\",\n});\nconst myUserStep5 = new grafana.oncall.UserNotificationRule(\"my_user_step_5\", {\n    userId: myUser.then(myUser =\u003e myUser.id),\n    position: 4,\n    type: \"notify_by_slack\",\n});\nconst myUserImportantStep1 = new grafana.oncall.UserNotificationRule(\"my_user_important_step_1\", {\n    userId: myUser.then(myUser =\u003e myUser.id),\n    important: true,\n    position: 0,\n    type: \"notify_by_mobile_app_critical\",\n});\nconst myUserImportantStep2 = new grafana.oncall.UserNotificationRule(\"my_user_important_step_2\", {\n    userId: myUser.then(myUser =\u003e myUser.id),\n    important: true,\n    position: 1,\n    duration: 300,\n    type: \"wait\",\n});\nconst myUserImportantStep3 = new grafana.oncall.UserNotificationRule(\"my_user_important_step_3\", {\n    userId: myUser.then(myUser =\u003e myUser.id),\n    important: true,\n    position: 2,\n    type: \"notify_by_mobile_app_critical\",\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\nmy_user = grafana.onCall.get_user(username=\"my_username\")\nmy_user_step1 = grafana.oncall.UserNotificationRule(\"my_user_step_1\",\n    user_id=my_user.id,\n    position=0,\n    type=\"notify_by_mobile_app\")\nmy_user_step2 = grafana.oncall.UserNotificationRule(\"my_user_step_2\",\n    user_id=my_user.id,\n    position=1,\n    duration=600,\n    type=\"wait\")\nmy_user_step3 = grafana.oncall.UserNotificationRule(\"my_user_step_3\",\n    user_id=my_user.id,\n    position=2,\n    type=\"notify_by_phone_call\")\nmy_user_step4 = grafana.oncall.UserNotificationRule(\"my_user_step_4\",\n    user_id=my_user.id,\n    position=3,\n    duration=300,\n    type=\"wait\")\nmy_user_step5 = grafana.oncall.UserNotificationRule(\"my_user_step_5\",\n    user_id=my_user.id,\n    position=4,\n    type=\"notify_by_slack\")\nmy_user_important_step1 = grafana.oncall.UserNotificationRule(\"my_user_important_step_1\",\n    user_id=my_user.id,\n    important=True,\n    position=0,\n    type=\"notify_by_mobile_app_critical\")\nmy_user_important_step2 = grafana.oncall.UserNotificationRule(\"my_user_important_step_2\",\n    user_id=my_user.id,\n    important=True,\n    position=1,\n    duration=300,\n    type=\"wait\")\nmy_user_important_step3 = grafana.oncall.UserNotificationRule(\"my_user_important_step_3\",\n    user_id=my_user.id,\n    important=True,\n    position=2,\n    type=\"notify_by_mobile_app_critical\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var myUser = Grafana.OnCall.GetUser.Invoke(new()\n    {\n        Username = \"my_username\",\n    });\n\n    var myUserStep1 = new Grafana.OnCall.UserNotificationRule(\"my_user_step_1\", new()\n    {\n        UserId = myUser.Apply(getUserResult =\u003e getUserResult.Id),\n        Position = 0,\n        Type = \"notify_by_mobile_app\",\n    });\n\n    var myUserStep2 = new Grafana.OnCall.UserNotificationRule(\"my_user_step_2\", new()\n    {\n        UserId = myUser.Apply(getUserResult =\u003e getUserResult.Id),\n        Position = 1,\n        Duration = 600,\n        Type = \"wait\",\n    });\n\n    var myUserStep3 = new Grafana.OnCall.UserNotificationRule(\"my_user_step_3\", new()\n    {\n        UserId = myUser.Apply(getUserResult =\u003e getUserResult.Id),\n        Position = 2,\n        Type = \"notify_by_phone_call\",\n    });\n\n    var myUserStep4 = new Grafana.OnCall.UserNotificationRule(\"my_user_step_4\", new()\n    {\n        UserId = myUser.Apply(getUserResult =\u003e getUserResult.Id),\n        Position = 3,\n        Duration = 300,\n        Type = \"wait\",\n    });\n\n    var myUserStep5 = new Grafana.OnCall.UserNotificationRule(\"my_user_step_5\", new()\n    {\n        UserId = myUser.Apply(getUserResult =\u003e getUserResult.Id),\n        Position = 4,\n        Type = \"notify_by_slack\",\n    });\n\n    var myUserImportantStep1 = new Grafana.OnCall.UserNotificationRule(\"my_user_important_step_1\", new()\n    {\n        UserId = myUser.Apply(getUserResult =\u003e getUserResult.Id),\n        Important = true,\n        Position = 0,\n        Type = \"notify_by_mobile_app_critical\",\n    });\n\n    var myUserImportantStep2 = new Grafana.OnCall.UserNotificationRule(\"my_user_important_step_2\", new()\n    {\n        UserId = myUser.Apply(getUserResult =\u003e getUserResult.Id),\n        Important = true,\n        Position = 1,\n        Duration = 300,\n        Type = \"wait\",\n    });\n\n    var myUserImportantStep3 = new Grafana.OnCall.UserNotificationRule(\"my_user_important_step_3\", new()\n    {\n        UserId = myUser.Apply(getUserResult =\u003e getUserResult.Id),\n        Important = true,\n        Position = 2,\n        Type = \"notify_by_mobile_app_critical\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oncall\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmyUser, err := oncall.GetUser(ctx, \u0026oncall.GetUserArgs{\n\t\t\tUsername: \"my_username\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oncall.NewUserNotificationRule(ctx, \"my_user_step_1\", \u0026oncall.UserNotificationRuleArgs{\n\t\t\tUserId:   pulumi.String(myUser.Id),\n\t\t\tPosition: pulumi.Int(0),\n\t\t\tType:     pulumi.String(\"notify_by_mobile_app\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oncall.NewUserNotificationRule(ctx, \"my_user_step_2\", \u0026oncall.UserNotificationRuleArgs{\n\t\t\tUserId:   pulumi.String(myUser.Id),\n\t\t\tPosition: pulumi.Int(1),\n\t\t\tDuration: pulumi.Int(600),\n\t\t\tType:     pulumi.String(\"wait\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oncall.NewUserNotificationRule(ctx, \"my_user_step_3\", \u0026oncall.UserNotificationRuleArgs{\n\t\t\tUserId:   pulumi.String(myUser.Id),\n\t\t\tPosition: pulumi.Int(2),\n\t\t\tType:     pulumi.String(\"notify_by_phone_call\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oncall.NewUserNotificationRule(ctx, \"my_user_step_4\", \u0026oncall.UserNotificationRuleArgs{\n\t\t\tUserId:   pulumi.String(myUser.Id),\n\t\t\tPosition: pulumi.Int(3),\n\t\t\tDuration: pulumi.Int(300),\n\t\t\tType:     pulumi.String(\"wait\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oncall.NewUserNotificationRule(ctx, \"my_user_step_5\", \u0026oncall.UserNotificationRuleArgs{\n\t\t\tUserId:   pulumi.String(myUser.Id),\n\t\t\tPosition: pulumi.Int(4),\n\t\t\tType:     pulumi.String(\"notify_by_slack\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oncall.NewUserNotificationRule(ctx, \"my_user_important_step_1\", \u0026oncall.UserNotificationRuleArgs{\n\t\t\tUserId:    pulumi.String(myUser.Id),\n\t\t\tImportant: pulumi.Bool(true),\n\t\t\tPosition:  pulumi.Int(0),\n\t\t\tType:      pulumi.String(\"notify_by_mobile_app_critical\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oncall.NewUserNotificationRule(ctx, \"my_user_important_step_2\", \u0026oncall.UserNotificationRuleArgs{\n\t\t\tUserId:    pulumi.String(myUser.Id),\n\t\t\tImportant: pulumi.Bool(true),\n\t\t\tPosition:  pulumi.Int(1),\n\t\t\tDuration:  pulumi.Int(300),\n\t\t\tType:      pulumi.String(\"wait\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oncall.NewUserNotificationRule(ctx, \"my_user_important_step_3\", \u0026oncall.UserNotificationRuleArgs{\n\t\t\tUserId:    pulumi.String(myUser.Id),\n\t\t\tImportant: pulumi.Bool(true),\n\t\t\tPosition:  pulumi.Int(2),\n\t\t\tType:      pulumi.String(\"notify_by_mobile_app_critical\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.onCall.OnCallFunctions;\nimport com.pulumi.grafana.onCall.inputs.GetUserArgs;\nimport com.pulumi.grafana.onCall.UserNotificationRule;\nimport com.pulumi.grafana.onCall.UserNotificationRuleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var myUser = OnCallFunctions.getUser(GetUserArgs.builder()\n            .username(\"my_username\")\n            .build());\n\n        var myUserStep1 = new UserNotificationRule(\"myUserStep1\", UserNotificationRuleArgs.builder()\n            .userId(myUser.id())\n            .position(0)\n            .type(\"notify_by_mobile_app\")\n            .build());\n\n        var myUserStep2 = new UserNotificationRule(\"myUserStep2\", UserNotificationRuleArgs.builder()\n            .userId(myUser.id())\n            .position(1)\n            .duration(600)\n            .type(\"wait\")\n            .build());\n\n        var myUserStep3 = new UserNotificationRule(\"myUserStep3\", UserNotificationRuleArgs.builder()\n            .userId(myUser.id())\n            .position(2)\n            .type(\"notify_by_phone_call\")\n            .build());\n\n        var myUserStep4 = new UserNotificationRule(\"myUserStep4\", UserNotificationRuleArgs.builder()\n            .userId(myUser.id())\n            .position(3)\n            .duration(300)\n            .type(\"wait\")\n            .build());\n\n        var myUserStep5 = new UserNotificationRule(\"myUserStep5\", UserNotificationRuleArgs.builder()\n            .userId(myUser.id())\n            .position(4)\n            .type(\"notify_by_slack\")\n            .build());\n\n        var myUserImportantStep1 = new UserNotificationRule(\"myUserImportantStep1\", UserNotificationRuleArgs.builder()\n            .userId(myUser.id())\n            .important(true)\n            .position(0)\n            .type(\"notify_by_mobile_app_critical\")\n            .build());\n\n        var myUserImportantStep2 = new UserNotificationRule(\"myUserImportantStep2\", UserNotificationRuleArgs.builder()\n            .userId(myUser.id())\n            .important(true)\n            .position(1)\n            .duration(300)\n            .type(\"wait\")\n            .build());\n\n        var myUserImportantStep3 = new UserNotificationRule(\"myUserImportantStep3\", UserNotificationRuleArgs.builder()\n            .userId(myUser.id())\n            .important(true)\n            .position(2)\n            .type(\"notify_by_mobile_app_critical\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  myUserStep1:\n    type: grafana:onCall:UserNotificationRule\n    name: my_user_step_1\n    properties:\n      userId: ${myUser.id}\n      position: 0\n      type: notify_by_mobile_app\n  myUserStep2:\n    type: grafana:onCall:UserNotificationRule\n    name: my_user_step_2\n    properties:\n      userId: ${myUser.id}\n      position: 1\n      duration: 600 # 10 minutes\n      type: wait\n  myUserStep3:\n    type: grafana:onCall:UserNotificationRule\n    name: my_user_step_3\n    properties:\n      userId: ${myUser.id}\n      position: 2\n      type: notify_by_phone_call\n  myUserStep4:\n    type: grafana:onCall:UserNotificationRule\n    name: my_user_step_4\n    properties:\n      userId: ${myUser.id}\n      position: 3\n      duration: 300 # 5 minutes\n      type: wait\n  myUserStep5:\n    type: grafana:onCall:UserNotificationRule\n    name: my_user_step_5\n    properties:\n      userId: ${myUser.id}\n      position: 4\n      type: notify_by_slack\n  myUserImportantStep1:\n    type: grafana:onCall:UserNotificationRule\n    name: my_user_important_step_1\n    properties:\n      userId: ${myUser.id}\n      important: true\n      position: 0\n      type: notify_by_mobile_app_critical\n  myUserImportantStep2:\n    type: grafana:onCall:UserNotificationRule\n    name: my_user_important_step_2\n    properties:\n      userId: ${myUser.id}\n      important: true\n      position: 1\n      duration: 300 # 5 minutes\n      type: wait\n  myUserImportantStep3:\n    type: grafana:onCall:UserNotificationRule\n    name: my_user_important_step_3\n    properties:\n      userId: ${myUser.id}\n      important: true\n      position: 2\n      type: notify_by_mobile_app_critical\nvariables:\n  myUser:\n    fn::invoke:\n      function: grafana:onCall:getUser\n      arguments:\n        username: my_username\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:onCall/userNotificationRule:UserNotificationRule name \"{{ id }}\"\n```\n\n","properties":{"duration":{"type":"integer","description":"A time in seconds to wait (when `type=wait`). Can be 60, 300, 900, 1800, 3600\n"},"important":{"type":"boolean","description":"Boolean value which indicates if a rule is “important”\n"},"position":{"type":"integer","description":"Personal notification rules execute one after another starting from position=0. A new escalation policy created with a position of an existing escalation policy will move the old one (and all following) down on the list.\n"},"type":{"type":"string","description":"The type of notification rule. Can be wait, notify*by*slack, notify*by*msteams, notify*by*sms, notify*by*phone*call, notify*by*telegram, notify*by*email, notify*by*mobile*app, notify*by*mobile*app*critical. NOTE: \u003cspan pulumi-lang-nodejs=\"`notifyByMsteams`\" pulumi-lang-dotnet=\"`NotifyByMsteams`\" pulumi-lang-go=\"`notifyByMsteams`\" pulumi-lang-python=\"`notify_by_msteams`\" pulumi-lang-yaml=\"`notifyByMsteams`\" pulumi-lang-java=\"`notifyByMsteams`\"\u003e`notify_by_msteams`\u003c/span\u003e is only available for Grafana Cloud customers.\n"},"userId":{"type":"string","description":"User ID\n"}},"required":["important","type","userId"],"inputProperties":{"duration":{"type":"integer","description":"A time in seconds to wait (when `type=wait`). Can be 60, 300, 900, 1800, 3600\n"},"important":{"type":"boolean","description":"Boolean value which indicates if a rule is “important”\n"},"position":{"type":"integer","description":"Personal notification rules execute one after another starting from position=0. A new escalation policy created with a position of an existing escalation policy will move the old one (and all following) down on the list.\n"},"type":{"type":"string","description":"The type of notification rule. Can be wait, notify*by*slack, notify*by*msteams, notify*by*sms, notify*by*phone*call, notify*by*telegram, notify*by*email, notify*by*mobile*app, notify*by*mobile*app*critical. NOTE: \u003cspan pulumi-lang-nodejs=\"`notifyByMsteams`\" pulumi-lang-dotnet=\"`NotifyByMsteams`\" pulumi-lang-go=\"`notifyByMsteams`\" pulumi-lang-python=\"`notify_by_msteams`\" pulumi-lang-yaml=\"`notifyByMsteams`\" pulumi-lang-java=\"`notifyByMsteams`\"\u003e`notify_by_msteams`\u003c/span\u003e is only available for Grafana Cloud customers.\n"},"userId":{"type":"string","description":"User ID\n"}},"requiredInputs":["type","userId"],"stateInputs":{"description":"Input properties used for looking up and filtering UserNotificationRule resources.\n","properties":{"duration":{"type":"integer","description":"A time in seconds to wait (when `type=wait`). Can be 60, 300, 900, 1800, 3600\n"},"important":{"type":"boolean","description":"Boolean value which indicates if a rule is “important”\n"},"position":{"type":"integer","description":"Personal notification rules execute one after another starting from position=0. A new escalation policy created with a position of an existing escalation policy will move the old one (and all following) down on the list.\n"},"type":{"type":"string","description":"The type of notification rule. Can be wait, notify*by*slack, notify*by*msteams, notify*by*sms, notify*by*phone*call, notify*by*telegram, notify*by*email, notify*by*mobile*app, notify*by*mobile*app*critical. NOTE: \u003cspan pulumi-lang-nodejs=\"`notifyByMsteams`\" pulumi-lang-dotnet=\"`NotifyByMsteams`\" pulumi-lang-go=\"`notifyByMsteams`\" pulumi-lang-python=\"`notify_by_msteams`\" pulumi-lang-yaml=\"`notifyByMsteams`\" pulumi-lang-java=\"`notifyByMsteams`\"\u003e`notify_by_msteams`\u003c/span\u003e is only available for Grafana Cloud customers.\n"},"userId":{"type":"string","description":"User ID\n"}},"type":"object"}},"grafana:oss/annotation:Annotation":{"description":"* [Official documentation](https://grafana.com/docs/grafana/latest/dashboards/build-dashboards/annotate-visualizations/)\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/annotations/)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst test = new grafana.oss.Annotation(\"test\", {text: \"basic text\"});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\ntest = grafana.oss.Annotation(\"test\", text=\"basic text\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var test = new Grafana.Oss.Annotation(\"test\", new()\n    {\n        Text = \"basic text\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := oss.NewAnnotation(ctx, \"test\", \u0026oss.AnnotationArgs{\n\t\t\tText: pulumi.String(\"basic text\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.Annotation;\nimport com.pulumi.grafana.oss.AnnotationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var test = new Annotation(\"test\", AnnotationArgs.builder()\n            .text(\"basic text\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  test:\n    type: grafana:oss:Annotation\n    properties:\n      text: basic text\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:oss/annotation:Annotation name \"{{ id }}\"\n```\n\n```sh\n$ pulumi import grafana:oss/annotation:Annotation name \"{{ orgID }}:{{ id }}\"\n```\n\n","properties":{"dashboardUid":{"type":"string","description":"The UID of the dashboard on which to create the annotation.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n"},"panelId":{"type":"integer","description":"The ID of the dashboard panel on which to create the annotation.\n"},"tags":{"type":"array","items":{"type":"string"},"description":"The tags to associate with the annotation.\n"},"text":{"type":"string","description":"The text to associate with the annotation.\n"},"time":{"type":"string","description":"The RFC 3339-formatted time string indicating the annotation's time.\n"},"timeEnd":{"type":"string","description":"The RFC 3339-formatted time string indicating the annotation's end time.\n"}},"required":["text","time","timeEnd"],"inputProperties":{"dashboardUid":{"type":"string","description":"The UID of the dashboard on which to create the annotation.\n","willReplaceOnChanges":true},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"panelId":{"type":"integer","description":"The ID of the dashboard panel on which to create the annotation.\n","willReplaceOnChanges":true},"tags":{"type":"array","items":{"type":"string"},"description":"The tags to associate with the annotation.\n"},"text":{"type":"string","description":"The text to associate with the annotation.\n"},"time":{"type":"string","description":"The RFC 3339-formatted time string indicating the annotation's time.\n"},"timeEnd":{"type":"string","description":"The RFC 3339-formatted time string indicating the annotation's end time.\n"}},"requiredInputs":["text"],"stateInputs":{"description":"Input properties used for looking up and filtering Annotation resources.\n","properties":{"dashboardUid":{"type":"string","description":"The UID of the dashboard on which to create the annotation.\n","willReplaceOnChanges":true},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"panelId":{"type":"integer","description":"The ID of the dashboard panel on which to create the annotation.\n","willReplaceOnChanges":true},"tags":{"type":"array","items":{"type":"string"},"description":"The tags to associate with the annotation.\n"},"text":{"type":"string","description":"The text to associate with the annotation.\n"},"time":{"type":"string","description":"The RFC 3339-formatted time string indicating the annotation's time.\n"},"timeEnd":{"type":"string","description":"The RFC 3339-formatted time string indicating the annotation's end time.\n"}},"type":"object"},"aliases":[{"type":"grafana:index/annotation:Annotation"}]},"grafana:oss/dashboard:Dashboard":{"description":"Manages Grafana dashboards.\n\n* [Official documentation](https://grafana.com/docs/grafana/latest/dashboards/)\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/dashboard/)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst test = new grafana.oss.Folder(\"test\", {\n    title: \"My Folder\",\n    uid: \"my-folder-uid\",\n});\nconst testDashboard = new grafana.oss.Dashboard(\"test\", {\n    folder: test.uid,\n    configJson: JSON.stringify({\n        title: \"My Dashboard\",\n        uid: \"my-dashboard-uid\",\n    }),\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumiverse_grafana as grafana\n\ntest = grafana.oss.Folder(\"test\",\n    title=\"My Folder\",\n    uid=\"my-folder-uid\")\ntest_dashboard = grafana.oss.Dashboard(\"test\",\n    folder=test.uid,\n    config_json=json.dumps({\n        \"title\": \"My Dashboard\",\n        \"uid\": \"my-dashboard-uid\",\n    }))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var test = new Grafana.Oss.Folder(\"test\", new()\n    {\n        Title = \"My Folder\",\n        Uid = \"my-folder-uid\",\n    });\n\n    var testDashboard = new Grafana.Oss.Dashboard(\"test\", new()\n    {\n        Folder = test.Uid,\n        ConfigJson = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n        {\n            [\"title\"] = \"My Dashboard\",\n            [\"uid\"] = \"my-dashboard-uid\",\n        }),\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := oss.NewFolder(ctx, \"test\", \u0026oss.FolderArgs{\n\t\t\tTitle: pulumi.String(\"My Folder\"),\n\t\t\tUid:   pulumi.String(\"my-folder-uid\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"title\": \"My Dashboard\",\n\t\t\t\"uid\":   \"my-dashboard-uid\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\t_, err = oss.NewDashboard(ctx, \"test\", \u0026oss.DashboardArgs{\n\t\t\tFolder:     test.Uid,\n\t\t\tConfigJson: pulumi.String(json0),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.Folder;\nimport com.pulumi.grafana.oss.FolderArgs;\nimport com.pulumi.grafana.oss.Dashboard;\nimport com.pulumi.grafana.oss.DashboardArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var test = new Folder(\"test\", FolderArgs.builder()\n            .title(\"My Folder\")\n            .uid(\"my-folder-uid\")\n            .build());\n\n        var testDashboard = new Dashboard(\"testDashboard\", DashboardArgs.builder()\n            .folder(test.uid())\n            .configJson(serializeJson(\n                jsonObject(\n                    jsonProperty(\"title\", \"My Dashboard\"),\n                    jsonProperty(\"uid\", \"my-dashboard-uid\")\n                )))\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  test:\n    type: grafana:oss:Folder\n    properties:\n      title: My Folder\n      uid: my-folder-uid\n  testDashboard:\n    type: grafana:oss:Dashboard\n    name: test\n    properties:\n      folder: ${test.uid}\n      configJson:\n        fn::toJSON:\n          title: My Dashboard\n          uid: my-dashboard-uid\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:oss/dashboard:Dashboard name \"{{ uid }}\"\n```\n\n```sh\n$ pulumi import grafana:oss/dashboard:Dashboard name \"{{ orgID }}:{{ uid }}\"\n```\n\n","properties":{"configJson":{"type":"string","description":"The complete dashboard model JSON.\n"},"dashboardId":{"type":"integer","description":"The numeric ID of the dashboard computed by Grafana.\n"},"folder":{"type":"string","description":"The id or UID of the folder to save the dashboard in.\n"},"message":{"type":"string","description":"Set a commit message for the version history.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n"},"overwrite":{"type":"boolean","description":"Set to true if you want to overwrite existing dashboard with newer version, same dashboard title in folder or same dashboard uid.\n"},"uid":{"type":"string","description":"The unique identifier of a dashboard. This is used to construct its URL. It's automatically generated if not provided when creating a dashboard. The uid allows having consistent URLs for accessing dashboards and when syncing dashboards between multiple Grafana installs.\n"},"url":{"type":"string","description":"The full URL of the dashboard.\n"},"version":{"type":"integer","description":"Whenever you save a version of your dashboard, a copy of that version is saved so that previous versions of your dashboard are not lost.\n"}},"required":["configJson","dashboardId","uid","url","version"],"inputProperties":{"configJson":{"type":"string","description":"The complete dashboard model JSON.\n"},"folder":{"type":"string","description":"The id or UID of the folder to save the dashboard in.\n"},"message":{"type":"string","description":"Set a commit message for the version history.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"overwrite":{"type":"boolean","description":"Set to true if you want to overwrite existing dashboard with newer version, same dashboard title in folder or same dashboard uid.\n"}},"requiredInputs":["configJson"],"stateInputs":{"description":"Input properties used for looking up and filtering Dashboard resources.\n","properties":{"configJson":{"type":"string","description":"The complete dashboard model JSON.\n"},"dashboardId":{"type":"integer","description":"The numeric ID of the dashboard computed by Grafana.\n"},"folder":{"type":"string","description":"The id or UID of the folder to save the dashboard in.\n"},"message":{"type":"string","description":"Set a commit message for the version history.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"overwrite":{"type":"boolean","description":"Set to true if you want to overwrite existing dashboard with newer version, same dashboard title in folder or same dashboard uid.\n"},"uid":{"type":"string","description":"The unique identifier of a dashboard. This is used to construct its URL. It's automatically generated if not provided when creating a dashboard. The uid allows having consistent URLs for accessing dashboards and when syncing dashboards between multiple Grafana installs.\n"},"url":{"type":"string","description":"The full URL of the dashboard.\n"},"version":{"type":"integer","description":"Whenever you save a version of your dashboard, a copy of that version is saved so that previous versions of your dashboard are not lost.\n"}},"type":"object"},"aliases":[{"type":"grafana:index/dashboard:Dashboard"}]},"grafana:oss/dashboardPermission:DashboardPermission":{"description":"Manages the entire set of permissions for a dashboard. Permissions that aren't specified when applying this resource will be removed.\n* [Official documentation](https://grafana.com/docs/grafana/latest/administration/roles-and-permissions/access-control/)\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/dashboard_permissions/)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst team = new grafana.oss.Team(\"team\", {name: \"Team Name\"});\nconst user = new grafana.oss.User(\"user\", {\n    email: \"user.name@example.com\",\n    password: \"my-password\",\n    login: \"user.name\",\n});\nconst metrics = new grafana.oss.Dashboard(\"metrics\", {configJson: JSON.stringify({\n    title: \"My Dashboard\",\n    uid: \"my-dashboard-uid\",\n})});\nconst collectionPermission = new grafana.oss.DashboardPermission(\"collectionPermission\", {\n    dashboardUid: metrics.uid,\n    permissions: [\n        {\n            role: \"Editor\",\n            permission: \"Edit\",\n        },\n        {\n            teamId: team.id,\n            permission: \"View\",\n        },\n        {\n            userId: user.id,\n            permission: \"Admin\",\n        },\n    ],\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumiverse_grafana as grafana\n\nteam = grafana.oss.Team(\"team\", name=\"Team Name\")\nuser = grafana.oss.User(\"user\",\n    email=\"user.name@example.com\",\n    password=\"my-password\",\n    login=\"user.name\")\nmetrics = grafana.oss.Dashboard(\"metrics\", config_json=json.dumps({\n    \"title\": \"My Dashboard\",\n    \"uid\": \"my-dashboard-uid\",\n}))\ncollection_permission = grafana.oss.DashboardPermission(\"collectionPermission\",\n    dashboard_uid=metrics.uid,\n    permissions=[\n        {\n            \"role\": \"Editor\",\n            \"permission\": \"Edit\",\n        },\n        {\n            \"team_id\": team.id,\n            \"permission\": \"View\",\n        },\n        {\n            \"user_id\": user.id,\n            \"permission\": \"Admin\",\n        },\n    ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var team = new Grafana.Oss.Team(\"team\", new()\n    {\n        Name = \"Team Name\",\n    });\n\n    var user = new Grafana.Oss.User(\"user\", new()\n    {\n        Email = \"user.name@example.com\",\n        Password = \"my-password\",\n        Login = \"user.name\",\n    });\n\n    var metrics = new Grafana.Oss.Dashboard(\"metrics\", new()\n    {\n        ConfigJson = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n        {\n            [\"title\"] = \"My Dashboard\",\n            [\"uid\"] = \"my-dashboard-uid\",\n        }),\n    });\n\n    var collectionPermission = new Grafana.Oss.DashboardPermission(\"collectionPermission\", new()\n    {\n        DashboardUid = metrics.Uid,\n        Permissions = new[]\n        {\n            new Grafana.Oss.Inputs.DashboardPermissionPermissionArgs\n            {\n                Role = \"Editor\",\n                Permission = \"Edit\",\n            },\n            new Grafana.Oss.Inputs.DashboardPermissionPermissionArgs\n            {\n                TeamId = team.Id,\n                Permission = \"View\",\n            },\n            new Grafana.Oss.Inputs.DashboardPermissionPermissionArgs\n            {\n                UserId = user.Id,\n                Permission = \"Admin\",\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tteam, err := oss.NewTeam(ctx, \"team\", \u0026oss.TeamArgs{\n\t\t\tName: pulumi.String(\"Team Name\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tuser, err := oss.NewUser(ctx, \"user\", \u0026oss.UserArgs{\n\t\t\tEmail:    pulumi.String(\"user.name@example.com\"),\n\t\t\tPassword: pulumi.String(\"my-password\"),\n\t\t\tLogin:    pulumi.String(\"user.name\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"title\": \"My Dashboard\",\n\t\t\t\"uid\":   \"my-dashboard-uid\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\tmetrics, err := oss.NewDashboard(ctx, \"metrics\", \u0026oss.DashboardArgs{\n\t\t\tConfigJson: pulumi.String(json0),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oss.NewDashboardPermission(ctx, \"collectionPermission\", \u0026oss.DashboardPermissionArgs{\n\t\t\tDashboardUid: metrics.Uid,\n\t\t\tPermissions: oss.DashboardPermissionPermissionArray{\n\t\t\t\t\u0026oss.DashboardPermissionPermissionArgs{\n\t\t\t\t\tRole:       pulumi.String(\"Editor\"),\n\t\t\t\t\tPermission: pulumi.String(\"Edit\"),\n\t\t\t\t},\n\t\t\t\t\u0026oss.DashboardPermissionPermissionArgs{\n\t\t\t\t\tTeamId:     team.ID(),\n\t\t\t\t\tPermission: pulumi.String(\"View\"),\n\t\t\t\t},\n\t\t\t\t\u0026oss.DashboardPermissionPermissionArgs{\n\t\t\t\t\tUserId:     user.ID(),\n\t\t\t\t\tPermission: pulumi.String(\"Admin\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.Team;\nimport com.pulumi.grafana.oss.TeamArgs;\nimport com.pulumi.grafana.oss.User;\nimport com.pulumi.grafana.oss.UserArgs;\nimport com.pulumi.grafana.oss.Dashboard;\nimport com.pulumi.grafana.oss.DashboardArgs;\nimport com.pulumi.grafana.oss.DashboardPermission;\nimport com.pulumi.grafana.oss.DashboardPermissionArgs;\nimport com.pulumi.grafana.oss.inputs.DashboardPermissionPermissionArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var team = new Team(\"team\", TeamArgs.builder()\n            .name(\"Team Name\")\n            .build());\n\n        var user = new User(\"user\", UserArgs.builder()\n            .email(\"user.name@example.com\")\n            .password(\"my-password\")\n            .login(\"user.name\")\n            .build());\n\n        var metrics = new Dashboard(\"metrics\", DashboardArgs.builder()\n            .configJson(serializeJson(\n                jsonObject(\n                    jsonProperty(\"title\", \"My Dashboard\"),\n                    jsonProperty(\"uid\", \"my-dashboard-uid\")\n                )))\n            .build());\n\n        var collectionPermission = new DashboardPermission(\"collectionPermission\", DashboardPermissionArgs.builder()\n            .dashboardUid(metrics.uid())\n            .permissions(            \n                DashboardPermissionPermissionArgs.builder()\n                    .role(\"Editor\")\n                    .permission(\"Edit\")\n                    .build(),\n                DashboardPermissionPermissionArgs.builder()\n                    .teamId(team.id())\n                    .permission(\"View\")\n                    .build(),\n                DashboardPermissionPermissionArgs.builder()\n                    .userId(user.id())\n                    .permission(\"Admin\")\n                    .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  team:\n    type: grafana:oss:Team\n    properties:\n      name: Team Name\n  user:\n    type: grafana:oss:User\n    properties:\n      email: user.name@example.com\n      password: my-password\n      login: user.name\n  metrics:\n    type: grafana:oss:Dashboard\n    properties:\n      configJson:\n        fn::toJSON:\n          title: My Dashboard\n          uid: my-dashboard-uid\n  collectionPermission:\n    type: grafana:oss:DashboardPermission\n    properties:\n      dashboardUid: ${metrics.uid}\n      permissions:\n        - role: Editor\n          permission: Edit\n        - teamId: ${team.id}\n          permission: View\n        - userId: ${user.id}\n          permission: Admin\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:oss/dashboardPermission:DashboardPermission name \"{{ dashboardUID }}\"\n```\n\n```sh\n$ pulumi import grafana:oss/dashboardPermission:DashboardPermission name \"{{ orgID }}:{{ dashboardUID }}\"\n```\n\n","properties":{"dashboardUid":{"type":"string","description":"UID of the dashboard to apply permissions to.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n"},"permissions":{"type":"array","items":{"$ref":"#/types/grafana:oss/DashboardPermissionPermission:DashboardPermissionPermission"},"description":"The permission items to add/update. Items that are omitted from the list will be removed.\n"}},"required":["dashboardUid"],"inputProperties":{"dashboardUid":{"type":"string","description":"UID of the dashboard to apply permissions to.\n","willReplaceOnChanges":true},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"permissions":{"type":"array","items":{"$ref":"#/types/grafana:oss/DashboardPermissionPermission:DashboardPermissionPermission"},"description":"The permission items to add/update. Items that are omitted from the list will be removed.\n"}},"stateInputs":{"description":"Input properties used for looking up and filtering DashboardPermission resources.\n","properties":{"dashboardUid":{"type":"string","description":"UID of the dashboard to apply permissions to.\n","willReplaceOnChanges":true},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"permissions":{"type":"array","items":{"$ref":"#/types/grafana:oss/DashboardPermissionPermission:DashboardPermissionPermission"},"description":"The permission items to add/update. Items that are omitted from the list will be removed.\n"}},"type":"object"},"aliases":[{"type":"grafana:index/dashboardPermission:DashboardPermission"}]},"grafana:oss/dashboardPermissionItem:DashboardPermissionItem":{"description":"Manages a single permission item for a dashboard. Conflicts with the \u003cspan pulumi-lang-nodejs=\"\"grafana.oss.DashboardPermission\"\" pulumi-lang-dotnet=\"\"grafana.oss.DashboardPermission\"\" pulumi-lang-go=\"\"oss.DashboardPermission\"\" pulumi-lang-python=\"\"oss.DashboardPermission\"\" pulumi-lang-yaml=\"\"grafana.oss.DashboardPermission\"\" pulumi-lang-java=\"\"grafana.oss.DashboardPermission\"\"\u003e\"grafana.oss.DashboardPermission\"\u003c/span\u003e resource which manages the entire set of permissions for a dashboard.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst team = new grafana.oss.Team(\"team\", {name: \"Team Name\"});\nconst user = new grafana.oss.User(\"user\", {\n    email: \"user.name@example.com\",\n    password: \"my-password\",\n    login: \"user.name\",\n});\nconst dashboard = new grafana.oss.Dashboard(\"dashboard\", {configJson: JSON.stringify({\n    title: \"My Dashboard\",\n    uid: \"my-dashboard-uid\",\n})});\nconst role = new grafana.oss.DashboardPermissionItem(\"role\", {\n    dashboardUid: dashboard.uid,\n    role: \"Viewer\",\n    permission: \"View\",\n});\nconst userDashboardPermissionItem = new grafana.oss.DashboardPermissionItem(\"user\", {\n    dashboardUid: dashboard.uid,\n    user: user.id,\n    permission: \"Admin\",\n});\nconst teamDashboardPermissionItem = new grafana.oss.DashboardPermissionItem(\"team\", {\n    dashboardUid: dashboard.uid,\n    team: team.id,\n    permission: \"Edit\",\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumiverse_grafana as grafana\n\nteam = grafana.oss.Team(\"team\", name=\"Team Name\")\nuser = grafana.oss.User(\"user\",\n    email=\"user.name@example.com\",\n    password=\"my-password\",\n    login=\"user.name\")\ndashboard = grafana.oss.Dashboard(\"dashboard\", config_json=json.dumps({\n    \"title\": \"My Dashboard\",\n    \"uid\": \"my-dashboard-uid\",\n}))\nrole = grafana.oss.DashboardPermissionItem(\"role\",\n    dashboard_uid=dashboard.uid,\n    role=\"Viewer\",\n    permission=\"View\")\nuser_dashboard_permission_item = grafana.oss.DashboardPermissionItem(\"user\",\n    dashboard_uid=dashboard.uid,\n    user=user.id,\n    permission=\"Admin\")\nteam_dashboard_permission_item = grafana.oss.DashboardPermissionItem(\"team\",\n    dashboard_uid=dashboard.uid,\n    team=team.id,\n    permission=\"Edit\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var team = new Grafana.Oss.Team(\"team\", new()\n    {\n        Name = \"Team Name\",\n    });\n\n    var user = new Grafana.Oss.User(\"user\", new()\n    {\n        Email = \"user.name@example.com\",\n        Password = \"my-password\",\n        Login = \"user.name\",\n    });\n\n    var dashboard = new Grafana.Oss.Dashboard(\"dashboard\", new()\n    {\n        ConfigJson = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n        {\n            [\"title\"] = \"My Dashboard\",\n            [\"uid\"] = \"my-dashboard-uid\",\n        }),\n    });\n\n    var role = new Grafana.Oss.DashboardPermissionItem(\"role\", new()\n    {\n        DashboardUid = dashboard.Uid,\n        Role = \"Viewer\",\n        Permission = \"View\",\n    });\n\n    var userDashboardPermissionItem = new Grafana.Oss.DashboardPermissionItem(\"user\", new()\n    {\n        DashboardUid = dashboard.Uid,\n        User = user.Id,\n        Permission = \"Admin\",\n    });\n\n    var teamDashboardPermissionItem = new Grafana.Oss.DashboardPermissionItem(\"team\", new()\n    {\n        DashboardUid = dashboard.Uid,\n        Team = team.Id,\n        Permission = \"Edit\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tteam, err := oss.NewTeam(ctx, \"team\", \u0026oss.TeamArgs{\n\t\t\tName: pulumi.String(\"Team Name\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tuser, err := oss.NewUser(ctx, \"user\", \u0026oss.UserArgs{\n\t\t\tEmail:    pulumi.String(\"user.name@example.com\"),\n\t\t\tPassword: pulumi.String(\"my-password\"),\n\t\t\tLogin:    pulumi.String(\"user.name\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"title\": \"My Dashboard\",\n\t\t\t\"uid\":   \"my-dashboard-uid\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\tdashboard, err := oss.NewDashboard(ctx, \"dashboard\", \u0026oss.DashboardArgs{\n\t\t\tConfigJson: pulumi.String(json0),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oss.NewDashboardPermissionItem(ctx, \"role\", \u0026oss.DashboardPermissionItemArgs{\n\t\t\tDashboardUid: dashboard.Uid,\n\t\t\tRole:         pulumi.String(\"Viewer\"),\n\t\t\tPermission:   pulumi.String(\"View\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oss.NewDashboardPermissionItem(ctx, \"user\", \u0026oss.DashboardPermissionItemArgs{\n\t\t\tDashboardUid: dashboard.Uid,\n\t\t\tUser:         user.ID(),\n\t\t\tPermission:   pulumi.String(\"Admin\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oss.NewDashboardPermissionItem(ctx, \"team\", \u0026oss.DashboardPermissionItemArgs{\n\t\t\tDashboardUid: dashboard.Uid,\n\t\t\tTeam:         team.ID(),\n\t\t\tPermission:   pulumi.String(\"Edit\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.Team;\nimport com.pulumi.grafana.oss.TeamArgs;\nimport com.pulumi.grafana.oss.User;\nimport com.pulumi.grafana.oss.UserArgs;\nimport com.pulumi.grafana.oss.Dashboard;\nimport com.pulumi.grafana.oss.DashboardArgs;\nimport com.pulumi.grafana.oss.DashboardPermissionItem;\nimport com.pulumi.grafana.oss.DashboardPermissionItemArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var team = new Team(\"team\", TeamArgs.builder()\n            .name(\"Team Name\")\n            .build());\n\n        var user = new User(\"user\", UserArgs.builder()\n            .email(\"user.name@example.com\")\n            .password(\"my-password\")\n            .login(\"user.name\")\n            .build());\n\n        var dashboard = new Dashboard(\"dashboard\", DashboardArgs.builder()\n            .configJson(serializeJson(\n                jsonObject(\n                    jsonProperty(\"title\", \"My Dashboard\"),\n                    jsonProperty(\"uid\", \"my-dashboard-uid\")\n                )))\n            .build());\n\n        var role = new DashboardPermissionItem(\"role\", DashboardPermissionItemArgs.builder()\n            .dashboardUid(dashboard.uid())\n            .role(\"Viewer\")\n            .permission(\"View\")\n            .build());\n\n        var userDashboardPermissionItem = new DashboardPermissionItem(\"userDashboardPermissionItem\", DashboardPermissionItemArgs.builder()\n            .dashboardUid(dashboard.uid())\n            .user(user.id())\n            .permission(\"Admin\")\n            .build());\n\n        var teamDashboardPermissionItem = new DashboardPermissionItem(\"teamDashboardPermissionItem\", DashboardPermissionItemArgs.builder()\n            .dashboardUid(dashboard.uid())\n            .team(team.id())\n            .permission(\"Edit\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  team:\n    type: grafana:oss:Team\n    properties:\n      name: Team Name\n  user:\n    type: grafana:oss:User\n    properties:\n      email: user.name@example.com\n      password: my-password\n      login: user.name\n  dashboard:\n    type: grafana:oss:Dashboard\n    properties:\n      configJson:\n        fn::toJSON:\n          title: My Dashboard\n          uid: my-dashboard-uid\n  role:\n    type: grafana:oss:DashboardPermissionItem\n    properties:\n      dashboardUid: ${dashboard.uid}\n      role: Viewer\n      permission: View\n  userDashboardPermissionItem:\n    type: grafana:oss:DashboardPermissionItem\n    name: user\n    properties:\n      dashboardUid: ${dashboard.uid}\n      user: ${user.id}\n      permission: Admin\n  teamDashboardPermissionItem:\n    type: grafana:oss:DashboardPermissionItem\n    name: team\n    properties:\n      dashboardUid: ${dashboard.uid}\n      team: ${team.id}\n      permission: Edit\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:oss/dashboardPermissionItem:DashboardPermissionItem name \"{{ dashboardUID }}:{{ type (role, team, or user) }}:{{ identifier }}\"\n```\n\n```sh\n$ pulumi import grafana:oss/dashboardPermissionItem:DashboardPermissionItem name \"{{ orgID }}:{{ dashboardUID }}:{{ type (role, team, or user) }}:{{ identifier }}\"\n```\n\n","properties":{"dashboardUid":{"type":"string","description":"The UID of the dashboard.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the default organization is used for basic authentication, or the one that owns your service account for token authentication.\n"},"permission":{"type":"string","description":"the permission to be assigned\n"},"role":{"type":"string","description":"the role onto which the permission is to be assigned\n"},"team":{"type":"string","description":"the team onto which the permission is to be assigned\n"},"user":{"type":"string","description":"the user or service account onto which the permission is to be assigned\n"}},"required":["dashboardUid","orgId","permission"],"inputProperties":{"dashboardUid":{"type":"string","description":"The UID of the dashboard.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the default organization is used for basic authentication, or the one that owns your service account for token authentication.\n"},"permission":{"type":"string","description":"the permission to be assigned\n"},"role":{"type":"string","description":"the role onto which the permission is to be assigned\n"},"team":{"type":"string","description":"the team onto which the permission is to be assigned\n"},"user":{"type":"string","description":"the user or service account onto which the permission is to be assigned\n"}},"requiredInputs":["dashboardUid","permission"],"stateInputs":{"description":"Input properties used for looking up and filtering DashboardPermissionItem resources.\n","properties":{"dashboardUid":{"type":"string","description":"The UID of the dashboard.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the default organization is used for basic authentication, or the one that owns your service account for token authentication.\n"},"permission":{"type":"string","description":"the permission to be assigned\n"},"role":{"type":"string","description":"the role onto which the permission is to be assigned\n"},"team":{"type":"string","description":"the team onto which the permission is to be assigned\n"},"user":{"type":"string","description":"the user or service account onto which the permission is to be assigned\n"}},"type":"object"},"aliases":[{"type":"grafana:index/dashboardPermissionItem:DashboardPermissionItem"}]},"grafana:oss/dashboardPublic:DashboardPublic":{"description":"Manages Grafana public dashboards.\n\n**Note:** This resource is available only with Grafana 10.2+.\n\n* [Official documentation](https://grafana.com/docs/grafana/latest/dashboards/share-dashboards-panels/shared-dashboards/)\n* [HTTP API](https://grafana.com/docs/grafana/next/developers/http_api/dashboard_public/)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\n// Optional (On-premise, not supported in Grafana Cloud): Create an organization\nconst myOrg = new grafana.oss.Organization(\"my_org\", {name: \"test 1\"});\n// Create resources (optional: within the organization)\nconst myFolder = new grafana.oss.Folder(\"my_folder\", {\n    orgId: myOrg.orgId,\n    title: \"test Folder\",\n});\nconst testDash = new grafana.oss.Dashboard(\"test_dash\", {\n    orgId: myOrg.orgId,\n    folder: myFolder.id,\n    configJson: JSON.stringify({\n        title: \"My Terraform Dashboard\",\n        uid: \"my-dashboard-uid\",\n    }),\n});\nconst myPublicDashboard = new grafana.oss.DashboardPublic(\"my_public_dashboard\", {\n    orgId: myOrg.orgId,\n    dashboardUid: testDash.uid,\n    uid: \"my-custom-public-uid\",\n    accessToken: \"e99e4275da6f410d83760eefa934d8d2\",\n    timeSelectionEnabled: true,\n    isEnabled: true,\n    annotationsEnabled: true,\n    share: \"public\",\n});\n// Optional (On-premise, not supported in Grafana Cloud): Create an organization\nconst myOrg2 = new grafana.oss.Organization(\"my_org2\", {name: \"test 2\"});\nconst testDash2 = new grafana.oss.Dashboard(\"test_dash2\", {\n    orgId: myOrg2.orgId,\n    configJson: JSON.stringify({\n        title: \"My Terraform Dashboard2\",\n        uid: \"my-dashboard-uid2\",\n    }),\n});\nconst myPublicDashboard2 = new grafana.oss.DashboardPublic(\"my_public_dashboard2\", {\n    orgId: myOrg2.orgId,\n    dashboardUid: testDash2.uid,\n    share: \"public\",\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumiverse_grafana as grafana\n\n# Optional (On-premise, not supported in Grafana Cloud): Create an organization\nmy_org = grafana.oss.Organization(\"my_org\", name=\"test 1\")\n# Create resources (optional: within the organization)\nmy_folder = grafana.oss.Folder(\"my_folder\",\n    org_id=my_org.org_id,\n    title=\"test Folder\")\ntest_dash = grafana.oss.Dashboard(\"test_dash\",\n    org_id=my_org.org_id,\n    folder=my_folder.id,\n    config_json=json.dumps({\n        \"title\": \"My Terraform Dashboard\",\n        \"uid\": \"my-dashboard-uid\",\n    }))\nmy_public_dashboard = grafana.oss.DashboardPublic(\"my_public_dashboard\",\n    org_id=my_org.org_id,\n    dashboard_uid=test_dash.uid,\n    uid=\"my-custom-public-uid\",\n    access_token=\"e99e4275da6f410d83760eefa934d8d2\",\n    time_selection_enabled=True,\n    is_enabled=True,\n    annotations_enabled=True,\n    share=\"public\")\n# Optional (On-premise, not supported in Grafana Cloud): Create an organization\nmy_org2 = grafana.oss.Organization(\"my_org2\", name=\"test 2\")\ntest_dash2 = grafana.oss.Dashboard(\"test_dash2\",\n    org_id=my_org2.org_id,\n    config_json=json.dumps({\n        \"title\": \"My Terraform Dashboard2\",\n        \"uid\": \"my-dashboard-uid2\",\n    }))\nmy_public_dashboard2 = grafana.oss.DashboardPublic(\"my_public_dashboard2\",\n    org_id=my_org2.org_id,\n    dashboard_uid=test_dash2.uid,\n    share=\"public\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    // Optional (On-premise, not supported in Grafana Cloud): Create an organization\n    var myOrg = new Grafana.Oss.Organization(\"my_org\", new()\n    {\n        Name = \"test 1\",\n    });\n\n    // Create resources (optional: within the organization)\n    var myFolder = new Grafana.Oss.Folder(\"my_folder\", new()\n    {\n        OrgId = myOrg.OrgId,\n        Title = \"test Folder\",\n    });\n\n    var testDash = new Grafana.Oss.Dashboard(\"test_dash\", new()\n    {\n        OrgId = myOrg.OrgId,\n        Folder = myFolder.Id,\n        ConfigJson = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n        {\n            [\"title\"] = \"My Terraform Dashboard\",\n            [\"uid\"] = \"my-dashboard-uid\",\n        }),\n    });\n\n    var myPublicDashboard = new Grafana.Oss.DashboardPublic(\"my_public_dashboard\", new()\n    {\n        OrgId = myOrg.OrgId,\n        DashboardUid = testDash.Uid,\n        Uid = \"my-custom-public-uid\",\n        AccessToken = \"e99e4275da6f410d83760eefa934d8d2\",\n        TimeSelectionEnabled = true,\n        IsEnabled = true,\n        AnnotationsEnabled = true,\n        Share = \"public\",\n    });\n\n    // Optional (On-premise, not supported in Grafana Cloud): Create an organization\n    var myOrg2 = new Grafana.Oss.Organization(\"my_org2\", new()\n    {\n        Name = \"test 2\",\n    });\n\n    var testDash2 = new Grafana.Oss.Dashboard(\"test_dash2\", new()\n    {\n        OrgId = myOrg2.OrgId,\n        ConfigJson = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n        {\n            [\"title\"] = \"My Terraform Dashboard2\",\n            [\"uid\"] = \"my-dashboard-uid2\",\n        }),\n    });\n\n    var myPublicDashboard2 = new Grafana.Oss.DashboardPublic(\"my_public_dashboard2\", new()\n    {\n        OrgId = myOrg2.OrgId,\n        DashboardUid = testDash2.Uid,\n        Share = \"public\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t// Optional (On-premise, not supported in Grafana Cloud): Create an organization\n\t\tmyOrg, err := oss.NewOrganization(ctx, \"my_org\", \u0026oss.OrganizationArgs{\n\t\t\tName: pulumi.String(\"test 1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Create resources (optional: within the organization)\n\t\tmyFolder, err := oss.NewFolder(ctx, \"my_folder\", \u0026oss.FolderArgs{\n\t\t\tOrgId: myOrg.OrgId,\n\t\t\tTitle: pulumi.String(\"test Folder\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"title\": \"My Terraform Dashboard\",\n\t\t\t\"uid\":   \"my-dashboard-uid\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\ttestDash, err := oss.NewDashboard(ctx, \"test_dash\", \u0026oss.DashboardArgs{\n\t\t\tOrgId:      myOrg.OrgId,\n\t\t\tFolder:     myFolder.ID(),\n\t\t\tConfigJson: pulumi.String(json0),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oss.NewDashboardPublic(ctx, \"my_public_dashboard\", \u0026oss.DashboardPublicArgs{\n\t\t\tOrgId:                myOrg.OrgId,\n\t\t\tDashboardUid:         testDash.Uid,\n\t\t\tUid:                  pulumi.String(\"my-custom-public-uid\"),\n\t\t\tAccessToken:          pulumi.String(\"e99e4275da6f410d83760eefa934d8d2\"),\n\t\t\tTimeSelectionEnabled: pulumi.Bool(true),\n\t\t\tIsEnabled:            pulumi.Bool(true),\n\t\t\tAnnotationsEnabled:   pulumi.Bool(true),\n\t\t\tShare:                pulumi.String(\"public\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Optional (On-premise, not supported in Grafana Cloud): Create an organization\n\t\tmyOrg2, err := oss.NewOrganization(ctx, \"my_org2\", \u0026oss.OrganizationArgs{\n\t\t\tName: pulumi.String(\"test 2\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttmpJSON1, err := json.Marshal(map[string]interface{}{\n\t\t\t\"title\": \"My Terraform Dashboard2\",\n\t\t\t\"uid\":   \"my-dashboard-uid2\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson1 := string(tmpJSON1)\n\t\ttestDash2, err := oss.NewDashboard(ctx, \"test_dash2\", \u0026oss.DashboardArgs{\n\t\t\tOrgId:      myOrg2.OrgId,\n\t\t\tConfigJson: pulumi.String(json1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oss.NewDashboardPublic(ctx, \"my_public_dashboard2\", \u0026oss.DashboardPublicArgs{\n\t\t\tOrgId:        myOrg2.OrgId,\n\t\t\tDashboardUid: testDash2.Uid,\n\t\t\tShare:        pulumi.String(\"public\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.Organization;\nimport com.pulumi.grafana.oss.OrganizationArgs;\nimport com.pulumi.grafana.oss.Folder;\nimport com.pulumi.grafana.oss.FolderArgs;\nimport com.pulumi.grafana.oss.Dashboard;\nimport com.pulumi.grafana.oss.DashboardArgs;\nimport com.pulumi.grafana.oss.DashboardPublic;\nimport com.pulumi.grafana.oss.DashboardPublicArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        // Optional (On-premise, not supported in Grafana Cloud): Create an organization\n        var myOrg = new Organization(\"myOrg\", OrganizationArgs.builder()\n            .name(\"test 1\")\n            .build());\n\n        // Create resources (optional: within the organization)\n        var myFolder = new Folder(\"myFolder\", FolderArgs.builder()\n            .orgId(myOrg.orgId())\n            .title(\"test Folder\")\n            .build());\n\n        var testDash = new Dashboard(\"testDash\", DashboardArgs.builder()\n            .orgId(myOrg.orgId())\n            .folder(myFolder.id())\n            .configJson(serializeJson(\n                jsonObject(\n                    jsonProperty(\"title\", \"My Terraform Dashboard\"),\n                    jsonProperty(\"uid\", \"my-dashboard-uid\")\n                )))\n            .build());\n\n        var myPublicDashboard = new DashboardPublic(\"myPublicDashboard\", DashboardPublicArgs.builder()\n            .orgId(myOrg.orgId())\n            .dashboardUid(testDash.uid())\n            .uid(\"my-custom-public-uid\")\n            .accessToken(\"e99e4275da6f410d83760eefa934d8d2\")\n            .timeSelectionEnabled(true)\n            .isEnabled(true)\n            .annotationsEnabled(true)\n            .share(\"public\")\n            .build());\n\n        // Optional (On-premise, not supported in Grafana Cloud): Create an organization\n        var myOrg2 = new Organization(\"myOrg2\", OrganizationArgs.builder()\n            .name(\"test 2\")\n            .build());\n\n        var testDash2 = new Dashboard(\"testDash2\", DashboardArgs.builder()\n            .orgId(myOrg2.orgId())\n            .configJson(serializeJson(\n                jsonObject(\n                    jsonProperty(\"title\", \"My Terraform Dashboard2\"),\n                    jsonProperty(\"uid\", \"my-dashboard-uid2\")\n                )))\n            .build());\n\n        var myPublicDashboard2 = new DashboardPublic(\"myPublicDashboard2\", DashboardPublicArgs.builder()\n            .orgId(myOrg2.orgId())\n            .dashboardUid(testDash2.uid())\n            .share(\"public\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  # Optional (On-premise, not supported in Grafana Cloud): Create an organization\n  myOrg:\n    type: grafana:oss:Organization\n    name: my_org\n    properties:\n      name: test 1\n  # Create resources (optional: within the organization)\n  myFolder:\n    type: grafana:oss:Folder\n    name: my_folder\n    properties:\n      orgId: ${myOrg.orgId}\n      title: test Folder\n  testDash:\n    type: grafana:oss:Dashboard\n    name: test_dash\n    properties:\n      orgId: ${myOrg.orgId}\n      folder: ${myFolder.id}\n      configJson:\n        fn::toJSON:\n          title: My Terraform Dashboard\n          uid: my-dashboard-uid\n  myPublicDashboard:\n    type: grafana:oss:DashboardPublic\n    name: my_public_dashboard\n    properties:\n      orgId: ${myOrg.orgId}\n      dashboardUid: ${testDash.uid}\n      uid: my-custom-public-uid\n      accessToken: e99e4275da6f410d83760eefa934d8d2\n      timeSelectionEnabled: true\n      isEnabled: true\n      annotationsEnabled: true\n      share: public\n  # Optional (On-premise, not supported in Grafana Cloud): Create an organization\n  myOrg2:\n    type: grafana:oss:Organization\n    name: my_org2\n    properties:\n      name: test 2\n  testDash2:\n    type: grafana:oss:Dashboard\n    name: test_dash2\n    properties:\n      orgId: ${myOrg2.orgId}\n      configJson:\n        fn::toJSON:\n          title: My Terraform Dashboard2\n          uid: my-dashboard-uid2\n  myPublicDashboard2:\n    type: grafana:oss:DashboardPublic\n    name: my_public_dashboard2\n    properties:\n      orgId: ${myOrg2.orgId}\n      dashboardUid: ${testDash2.uid}\n      share: public\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:oss/dashboardPublic:DashboardPublic name \"{{ dashboardUID }}:{{ publicDashboardUID }}\"\n```\n\n```sh\n$ pulumi import grafana:oss/dashboardPublic:DashboardPublic name \"{{ orgID }}:{{ dashboardUID }}:{{ publicDashboardUID }}\"\n```\n\n","properties":{"accessToken":{"type":"string","description":"A public unique identifier of a public dashboard. This is used to construct its URL. It's automatically generated if not provided when creating a public dashboard.\n"},"annotationsEnabled":{"type":"boolean","description":"Set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e to show annotations. The default value is \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"dashboardUid":{"type":"string","description":"The unique identifier of the original dashboard.\n"},"isEnabled":{"type":"boolean","description":"Set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e to enable the public dashboard. The default value is \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n"},"share":{"type":"string","description":"Set the share mode. The default value is \u003cspan pulumi-lang-nodejs=\"`public`\" pulumi-lang-dotnet=\"`Public`\" pulumi-lang-go=\"`public`\" pulumi-lang-python=\"`public`\" pulumi-lang-yaml=\"`public`\" pulumi-lang-java=\"`public`\"\u003e`public`\u003c/span\u003e.\n"},"timeSelectionEnabled":{"type":"boolean","description":"Set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e to enable the time picker in the public dashboard. The default value is \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"uid":{"type":"string","description":"The unique identifier of a public dashboard. It's automatically generated if not provided when creating a public dashboard.\n"}},"required":["accessToken","dashboardUid","uid"],"inputProperties":{"accessToken":{"type":"string","description":"A public unique identifier of a public dashboard. This is used to construct its URL. It's automatically generated if not provided when creating a public dashboard.\n"},"annotationsEnabled":{"type":"boolean","description":"Set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e to show annotations. The default value is \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"dashboardUid":{"type":"string","description":"The unique identifier of the original dashboard.\n"},"isEnabled":{"type":"boolean","description":"Set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e to enable the public dashboard. The default value is \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"share":{"type":"string","description":"Set the share mode. The default value is \u003cspan pulumi-lang-nodejs=\"`public`\" pulumi-lang-dotnet=\"`Public`\" pulumi-lang-go=\"`public`\" pulumi-lang-python=\"`public`\" pulumi-lang-yaml=\"`public`\" pulumi-lang-java=\"`public`\"\u003e`public`\u003c/span\u003e.\n"},"timeSelectionEnabled":{"type":"boolean","description":"Set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e to enable the time picker in the public dashboard. The default value is \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"uid":{"type":"string","description":"The unique identifier of a public dashboard. It's automatically generated if not provided when creating a public dashboard.\n"}},"requiredInputs":["dashboardUid"],"stateInputs":{"description":"Input properties used for looking up and filtering DashboardPublic resources.\n","properties":{"accessToken":{"type":"string","description":"A public unique identifier of a public dashboard. This is used to construct its URL. It's automatically generated if not provided when creating a public dashboard.\n"},"annotationsEnabled":{"type":"boolean","description":"Set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e to show annotations. The default value is \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"dashboardUid":{"type":"string","description":"The unique identifier of the original dashboard.\n"},"isEnabled":{"type":"boolean","description":"Set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e to enable the public dashboard. The default value is \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"share":{"type":"string","description":"Set the share mode. The default value is \u003cspan pulumi-lang-nodejs=\"`public`\" pulumi-lang-dotnet=\"`Public`\" pulumi-lang-go=\"`public`\" pulumi-lang-python=\"`public`\" pulumi-lang-yaml=\"`public`\" pulumi-lang-java=\"`public`\"\u003e`public`\u003c/span\u003e.\n"},"timeSelectionEnabled":{"type":"boolean","description":"Set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e to enable the time picker in the public dashboard. The default value is \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"uid":{"type":"string","description":"The unique identifier of a public dashboard. It's automatically generated if not provided when creating a public dashboard.\n"}},"type":"object"},"aliases":[{"type":"grafana:index/dashboardPublic:DashboardPublic"}]},"grafana:oss/dataSource:DataSource":{"description":"* [Official documentation](https://grafana.com/docs/grafana/latest/datasources/)\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/data_source/)\n\nThe required arguments for this resource vary depending on the type of data\nsource selected (via the 'type' argument).\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst arbitrary_data = new grafana.oss.DataSource(\"arbitrary-data\", {\n    type: \"stackdriver\",\n    name: \"sd-arbitrary-data\",\n    jsonDataEncoded: JSON.stringify({\n        tokenUri: \"https://oauth2.googleapis.com/token\",\n        authenticationType: \"jwt\",\n        defaultProject: \"default-project\",\n        clientEmail: \"client-email@default-project.iam.gserviceaccount.com\",\n    }),\n    secureJsonDataEncoded: JSON.stringify({\n        privateKey: `-----BEGIN PRIVATE KEY-----\nprivate-key\n-----END PRIVATE KEY-----\n`,\n    }),\n});\nconst influxdb = new grafana.oss.DataSource(\"influxdb\", {\n    type: \"influxdb\",\n    name: \"myapp-metrics\",\n    url: \"http://influxdb.example.net:8086/\",\n    basicAuthEnabled: true,\n    basicAuthUsername: \"username\",\n    databaseName: \"dbname\",\n    jsonDataEncoded: JSON.stringify({\n        authType: \"default\",\n        basicAuthPassword: \"mypassword\",\n    }),\n});\nconst cloudwatch = new grafana.oss.DataSource(\"cloudwatch\", {\n    type: \"cloudwatch\",\n    name: \"cw-example\",\n    jsonDataEncoded: JSON.stringify({\n        defaultRegion: \"us-east-1\",\n        authType: \"keys\",\n    }),\n    secureJsonDataEncoded: JSON.stringify({\n        accessKey: \"123\",\n        secretKey: \"456\",\n    }),\n});\nconst cloudwatchAssumeARN = new grafana.oss.DataSource(\"cloudwatch_assumeARN\", {\n    type: \"cloudwatch\",\n    name: \"cw-assumeARN-example\",\n    jsonDataEncoded: JSON.stringify({\n        defaultRegion: \"us-east-1\",\n        authType: \"grafana_assume_role\",\n        assumeRoleArn: \"arn:aws:iam::123456789012:root\",\n    }),\n});\nconst prometheus = new grafana.oss.DataSource(\"prometheus\", {\n    type: \"prometheus\",\n    name: \"mimir\",\n    url: \"https://my-instances.com\",\n    basicAuthEnabled: true,\n    basicAuthUsername: \"username\",\n    jsonDataEncoded: JSON.stringify({\n        httpMethod: \"POST\",\n        prometheusType: \"Mimir\",\n        prometheusVersion: \"2.4.0\",\n    }),\n    secureJsonDataEncoded: JSON.stringify({\n        basicAuthPassword: \"password\",\n    }),\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumiverse_grafana as grafana\n\narbitrary_data = grafana.oss.DataSource(\"arbitrary-data\",\n    type=\"stackdriver\",\n    name=\"sd-arbitrary-data\",\n    json_data_encoded=json.dumps({\n        \"tokenUri\": \"https://oauth2.googleapis.com/token\",\n        \"authenticationType\": \"jwt\",\n        \"defaultProject\": \"default-project\",\n        \"clientEmail\": \"client-email@default-project.iam.gserviceaccount.com\",\n    }),\n    secure_json_data_encoded=json.dumps({\n        \"privateKey\": \"\"\"-----BEGIN PRIVATE KEY-----\nprivate-key\n-----END PRIVATE KEY-----\n\"\"\",\n    }))\ninfluxdb = grafana.oss.DataSource(\"influxdb\",\n    type=\"influxdb\",\n    name=\"myapp-metrics\",\n    url=\"http://influxdb.example.net:8086/\",\n    basic_auth_enabled=True,\n    basic_auth_username=\"username\",\n    database_name=\"dbname\",\n    json_data_encoded=json.dumps({\n        \"authType\": \"default\",\n        \"basicAuthPassword\": \"mypassword\",\n    }))\ncloudwatch = grafana.oss.DataSource(\"cloudwatch\",\n    type=\"cloudwatch\",\n    name=\"cw-example\",\n    json_data_encoded=json.dumps({\n        \"defaultRegion\": \"us-east-1\",\n        \"authType\": \"keys\",\n    }),\n    secure_json_data_encoded=json.dumps({\n        \"accessKey\": \"123\",\n        \"secretKey\": \"456\",\n    }))\ncloudwatch_assume_arn = grafana.oss.DataSource(\"cloudwatch_assumeARN\",\n    type=\"cloudwatch\",\n    name=\"cw-assumeARN-example\",\n    json_data_encoded=json.dumps({\n        \"defaultRegion\": \"us-east-1\",\n        \"authType\": \"grafana_assume_role\",\n        \"assumeRoleArn\": \"arn:aws:iam::123456789012:root\",\n    }))\nprometheus = grafana.oss.DataSource(\"prometheus\",\n    type=\"prometheus\",\n    name=\"mimir\",\n    url=\"https://my-instances.com\",\n    basic_auth_enabled=True,\n    basic_auth_username=\"username\",\n    json_data_encoded=json.dumps({\n        \"httpMethod\": \"POST\",\n        \"prometheusType\": \"Mimir\",\n        \"prometheusVersion\": \"2.4.0\",\n    }),\n    secure_json_data_encoded=json.dumps({\n        \"basicAuthPassword\": \"password\",\n    }))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var arbitrary_data = new Grafana.Oss.DataSource(\"arbitrary-data\", new()\n    {\n        Type = \"stackdriver\",\n        Name = \"sd-arbitrary-data\",\n        JsonDataEncoded = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n        {\n            [\"tokenUri\"] = \"https://oauth2.googleapis.com/token\",\n            [\"authenticationType\"] = \"jwt\",\n            [\"defaultProject\"] = \"default-project\",\n            [\"clientEmail\"] = \"client-email@default-project.iam.gserviceaccount.com\",\n        }),\n        SecureJsonDataEncoded = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n        {\n            [\"privateKey\"] = @\"-----BEGIN PRIVATE KEY-----\nprivate-key\n-----END PRIVATE KEY-----\n\",\n        }),\n    });\n\n    var influxdb = new Grafana.Oss.DataSource(\"influxdb\", new()\n    {\n        Type = \"influxdb\",\n        Name = \"myapp-metrics\",\n        Url = \"http://influxdb.example.net:8086/\",\n        BasicAuthEnabled = true,\n        BasicAuthUsername = \"username\",\n        DatabaseName = \"dbname\",\n        JsonDataEncoded = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n        {\n            [\"authType\"] = \"default\",\n            [\"basicAuthPassword\"] = \"mypassword\",\n        }),\n    });\n\n    var cloudwatch = new Grafana.Oss.DataSource(\"cloudwatch\", new()\n    {\n        Type = \"cloudwatch\",\n        Name = \"cw-example\",\n        JsonDataEncoded = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n        {\n            [\"defaultRegion\"] = \"us-east-1\",\n            [\"authType\"] = \"keys\",\n        }),\n        SecureJsonDataEncoded = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n        {\n            [\"accessKey\"] = \"123\",\n            [\"secretKey\"] = \"456\",\n        }),\n    });\n\n    var cloudwatchAssumeARN = new Grafana.Oss.DataSource(\"cloudwatch_assumeARN\", new()\n    {\n        Type = \"cloudwatch\",\n        Name = \"cw-assumeARN-example\",\n        JsonDataEncoded = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n        {\n            [\"defaultRegion\"] = \"us-east-1\",\n            [\"authType\"] = \"grafana_assume_role\",\n            [\"assumeRoleArn\"] = \"arn:aws:iam::123456789012:root\",\n        }),\n    });\n\n    var prometheus = new Grafana.Oss.DataSource(\"prometheus\", new()\n    {\n        Type = \"prometheus\",\n        Name = \"mimir\",\n        Url = \"https://my-instances.com\",\n        BasicAuthEnabled = true,\n        BasicAuthUsername = \"username\",\n        JsonDataEncoded = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n        {\n            [\"httpMethod\"] = \"POST\",\n            [\"prometheusType\"] = \"Mimir\",\n            [\"prometheusVersion\"] = \"2.4.0\",\n        }),\n        SecureJsonDataEncoded = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n        {\n            [\"basicAuthPassword\"] = \"password\",\n        }),\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"tokenUri\":           \"https://oauth2.googleapis.com/token\",\n\t\t\t\"authenticationType\": \"jwt\",\n\t\t\t\"defaultProject\":     \"default-project\",\n\t\t\t\"clientEmail\":        \"client-email@default-project.iam.gserviceaccount.com\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\ttmpJSON1, err := json.Marshal(map[string]interface{}{\n\t\t\t\"privateKey\": \"-----BEGIN PRIVATE KEY-----\\nprivate-key\\n-----END PRIVATE KEY-----\\n\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson1 := string(tmpJSON1)\n\t\t_, err = oss.NewDataSource(ctx, \"arbitrary-data\", \u0026oss.DataSourceArgs{\n\t\t\tType:                  pulumi.String(\"stackdriver\"),\n\t\t\tName:                  pulumi.String(\"sd-arbitrary-data\"),\n\t\t\tJsonDataEncoded:       pulumi.String(json0),\n\t\t\tSecureJsonDataEncoded: pulumi.String(json1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttmpJSON2, err := json.Marshal(map[string]interface{}{\n\t\t\t\"authType\":          \"default\",\n\t\t\t\"basicAuthPassword\": \"mypassword\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson2 := string(tmpJSON2)\n\t\t_, err = oss.NewDataSource(ctx, \"influxdb\", \u0026oss.DataSourceArgs{\n\t\t\tType:              pulumi.String(\"influxdb\"),\n\t\t\tName:              pulumi.String(\"myapp-metrics\"),\n\t\t\tUrl:               pulumi.String(\"http://influxdb.example.net:8086/\"),\n\t\t\tBasicAuthEnabled:  pulumi.Bool(true),\n\t\t\tBasicAuthUsername: pulumi.String(\"username\"),\n\t\t\tDatabaseName:      pulumi.String(\"dbname\"),\n\t\t\tJsonDataEncoded:   pulumi.String(json2),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttmpJSON3, err := json.Marshal(map[string]interface{}{\n\t\t\t\"defaultRegion\": \"us-east-1\",\n\t\t\t\"authType\":      \"keys\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson3 := string(tmpJSON3)\n\t\ttmpJSON4, err := json.Marshal(map[string]interface{}{\n\t\t\t\"accessKey\": \"123\",\n\t\t\t\"secretKey\": \"456\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson4 := string(tmpJSON4)\n\t\t_, err = oss.NewDataSource(ctx, \"cloudwatch\", \u0026oss.DataSourceArgs{\n\t\t\tType:                  pulumi.String(\"cloudwatch\"),\n\t\t\tName:                  pulumi.String(\"cw-example\"),\n\t\t\tJsonDataEncoded:       pulumi.String(json3),\n\t\t\tSecureJsonDataEncoded: pulumi.String(json4),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttmpJSON5, err := json.Marshal(map[string]interface{}{\n\t\t\t\"defaultRegion\": \"us-east-1\",\n\t\t\t\"authType\":      \"grafana_assume_role\",\n\t\t\t\"assumeRoleArn\": \"arn:aws:iam::123456789012:root\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson5 := string(tmpJSON5)\n\t\t_, err = oss.NewDataSource(ctx, \"cloudwatch_assumeARN\", \u0026oss.DataSourceArgs{\n\t\t\tType:            pulumi.String(\"cloudwatch\"),\n\t\t\tName:            pulumi.String(\"cw-assumeARN-example\"),\n\t\t\tJsonDataEncoded: pulumi.String(json5),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttmpJSON6, err := json.Marshal(map[string]interface{}{\n\t\t\t\"httpMethod\":        \"POST\",\n\t\t\t\"prometheusType\":    \"Mimir\",\n\t\t\t\"prometheusVersion\": \"2.4.0\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson6 := string(tmpJSON6)\n\t\ttmpJSON7, err := json.Marshal(map[string]interface{}{\n\t\t\t\"basicAuthPassword\": \"password\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson7 := string(tmpJSON7)\n\t\t_, err = oss.NewDataSource(ctx, \"prometheus\", \u0026oss.DataSourceArgs{\n\t\t\tType:                  pulumi.String(\"prometheus\"),\n\t\t\tName:                  pulumi.String(\"mimir\"),\n\t\t\tUrl:                   pulumi.String(\"https://my-instances.com\"),\n\t\t\tBasicAuthEnabled:      pulumi.Bool(true),\n\t\t\tBasicAuthUsername:     pulumi.String(\"username\"),\n\t\t\tJsonDataEncoded:       pulumi.String(json6),\n\t\t\tSecureJsonDataEncoded: pulumi.String(json7),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.DataSource;\nimport com.pulumi.grafana.oss.DataSourceArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var arbitrary_data = new DataSource(\"arbitrary-data\", DataSourceArgs.builder()\n            .type(\"stackdriver\")\n            .name(\"sd-arbitrary-data\")\n            .jsonDataEncoded(serializeJson(\n                jsonObject(\n                    jsonProperty(\"tokenUri\", \"https://oauth2.googleapis.com/token\"),\n                    jsonProperty(\"authenticationType\", \"jwt\"),\n                    jsonProperty(\"defaultProject\", \"default-project\"),\n                    jsonProperty(\"clientEmail\", \"client-email@default-project.iam.gserviceaccount.com\")\n                )))\n            .secureJsonDataEncoded(serializeJson(\n                jsonObject(\n                    jsonProperty(\"privateKey\", \"\"\"\n-----BEGIN PRIVATE KEY-----\nprivate-key\n-----END PRIVATE KEY-----\n                    \"\"\")\n                )))\n            .build());\n\n        var influxdb = new DataSource(\"influxdb\", DataSourceArgs.builder()\n            .type(\"influxdb\")\n            .name(\"myapp-metrics\")\n            .url(\"http://influxdb.example.net:8086/\")\n            .basicAuthEnabled(true)\n            .basicAuthUsername(\"username\")\n            .databaseName(\"dbname\")\n            .jsonDataEncoded(serializeJson(\n                jsonObject(\n                    jsonProperty(\"authType\", \"default\"),\n                    jsonProperty(\"basicAuthPassword\", \"mypassword\")\n                )))\n            .build());\n\n        var cloudwatch = new DataSource(\"cloudwatch\", DataSourceArgs.builder()\n            .type(\"cloudwatch\")\n            .name(\"cw-example\")\n            .jsonDataEncoded(serializeJson(\n                jsonObject(\n                    jsonProperty(\"defaultRegion\", \"us-east-1\"),\n                    jsonProperty(\"authType\", \"keys\")\n                )))\n            .secureJsonDataEncoded(serializeJson(\n                jsonObject(\n                    jsonProperty(\"accessKey\", \"123\"),\n                    jsonProperty(\"secretKey\", \"456\")\n                )))\n            .build());\n\n        var cloudwatchAssumeARN = new DataSource(\"cloudwatchAssumeARN\", DataSourceArgs.builder()\n            .type(\"cloudwatch\")\n            .name(\"cw-assumeARN-example\")\n            .jsonDataEncoded(serializeJson(\n                jsonObject(\n                    jsonProperty(\"defaultRegion\", \"us-east-1\"),\n                    jsonProperty(\"authType\", \"grafana_assume_role\"),\n                    jsonProperty(\"assumeRoleArn\", \"arn:aws:iam::123456789012:root\")\n                )))\n            .build());\n\n        var prometheus = new DataSource(\"prometheus\", DataSourceArgs.builder()\n            .type(\"prometheus\")\n            .name(\"mimir\")\n            .url(\"https://my-instances.com\")\n            .basicAuthEnabled(true)\n            .basicAuthUsername(\"username\")\n            .jsonDataEncoded(serializeJson(\n                jsonObject(\n                    jsonProperty(\"httpMethod\", \"POST\"),\n                    jsonProperty(\"prometheusType\", \"Mimir\"),\n                    jsonProperty(\"prometheusVersion\", \"2.4.0\")\n                )))\n            .secureJsonDataEncoded(serializeJson(\n                jsonObject(\n                    jsonProperty(\"basicAuthPassword\", \"password\")\n                )))\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  arbitrary-data:\n    type: grafana:oss:DataSource\n    properties:\n      type: stackdriver\n      name: sd-arbitrary-data\n      jsonDataEncoded:\n        fn::toJSON:\n          tokenUri: https://oauth2.googleapis.com/token\n          authenticationType: jwt\n          defaultProject: default-project\n          clientEmail: client-email@default-project.iam.gserviceaccount.com\n      secureJsonDataEncoded:\n        fn::toJSON:\n          privateKey: |\n            -----BEGIN PRIVATE KEY-----\n            private-key\n            -----END PRIVATE KEY-----\n  influxdb:\n    type: grafana:oss:DataSource\n    properties:\n      type: influxdb\n      name: myapp-metrics\n      url: http://influxdb.example.net:8086/\n      basicAuthEnabled: true\n      basicAuthUsername: username\n      databaseName: dbname\n      jsonDataEncoded:\n        fn::toJSON:\n          authType: default\n          basicAuthPassword: mypassword\n  cloudwatch:\n    type: grafana:oss:DataSource\n    properties:\n      type: cloudwatch\n      name: cw-example\n      jsonDataEncoded:\n        fn::toJSON:\n          defaultRegion: us-east-1\n          authType: keys\n      secureJsonDataEncoded:\n        fn::toJSON:\n          accessKey: '123'\n          secretKey: '456'\n  cloudwatchAssumeARN:\n    type: grafana:oss:DataSource\n    name: cloudwatch_assumeARN\n    properties:\n      type: cloudwatch\n      name: cw-assumeARN-example\n      jsonDataEncoded:\n        fn::toJSON:\n          defaultRegion: us-east-1\n          authType: grafana_assume_role\n          assumeRoleArn: arn:aws:iam::123456789012:root\n  prometheus:\n    type: grafana:oss:DataSource\n    properties:\n      type: prometheus\n      name: mimir\n      url: https://my-instances.com\n      basicAuthEnabled: true\n      basicAuthUsername: username\n      jsonDataEncoded:\n        fn::toJSON:\n          httpMethod: POST\n          prometheusType: Mimir\n          prometheusVersion: 2.4.0\n      secureJsonDataEncoded:\n        fn::toJSON:\n          basicAuthPassword: password\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:oss/dataSource:DataSource name \"{{ uid }}\"\n```\n\n```sh\n$ pulumi import grafana:oss/dataSource:DataSource name \"{{ orgID }}:{{ uid }}\"\n```\n\n","properties":{"accessMode":{"type":"string","description":"The method by which Grafana will access the data source: \u003cspan pulumi-lang-nodejs=\"`proxy`\" pulumi-lang-dotnet=\"`Proxy`\" pulumi-lang-go=\"`proxy`\" pulumi-lang-python=\"`proxy`\" pulumi-lang-yaml=\"`proxy`\" pulumi-lang-java=\"`proxy`\"\u003e`proxy`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`direct`\" pulumi-lang-dotnet=\"`Direct`\" pulumi-lang-go=\"`direct`\" pulumi-lang-python=\"`direct`\" pulumi-lang-yaml=\"`direct`\" pulumi-lang-java=\"`direct`\"\u003e`direct`\u003c/span\u003e. Defaults to \u003cspan pulumi-lang-nodejs=\"`proxy`\" pulumi-lang-dotnet=\"`Proxy`\" pulumi-lang-go=\"`proxy`\" pulumi-lang-python=\"`proxy`\" pulumi-lang-yaml=\"`proxy`\" pulumi-lang-java=\"`proxy`\"\u003e`proxy`\u003c/span\u003e.\n"},"basicAuthEnabled":{"type":"boolean","description":"Whether to enable basic auth for the data source. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"basicAuthUsername":{"type":"string","description":"Basic auth username. Defaults to ``.\n"},"databaseName":{"type":"string","description":"(Required by some data source types) The name of the database to use on the selected data source server. Defaults to ``.\n"},"httpHeaders":{"type":"object","additionalProperties":{"type":"string"},"description":"Custom HTTP headers\n","secret":true},"isDefault":{"type":"boolean","description":"Whether to set the data source as default. This should only be \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e to a single data source. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"jsonDataEncoded":{"type":"string","description":"Serialized JSON string containing the json data. This attribute can be used to pass configuration options to the data source. To figure out what options a datasource has available, see its docs or inspect the network data when saving it from the Grafana UI. Note that keys in this map are usually camelCased.\n"},"name":{"type":"string","description":"A unique name for the data source.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n"},"privateDataSourceConnectNetworkId":{"type":"string","description":"(Can only be used with data sources in Grafana Cloud) The ID of the Private Data source Connect network to use with this data source. Defaults to ``.\n"},"secureJsonDataEncoded":{"type":"string","description":"Serialized JSON string containing the secure json data. This attribute can be used to pass secure configuration options to the data source. To figure out what options a datasource has available, see its docs or inspect the network data when saving it from the Grafana UI. Note that keys in this map are usually camelCased.\n","secret":true},"type":{"type":"string","description":"The data source type. Must be one of the supported data source keywords.\n"},"uid":{"type":"string","description":"Unique identifier. If unset, this will be automatically generated.\n"},"url":{"type":"string","description":"The URL for the data source. The type of URL required varies depending on the chosen data source type.\n"},"username":{"type":"string","description":"(Required by some data source types) The username to use to authenticate to the data source. Defaults to ``.\n"}},"required":["name","type","uid"],"inputProperties":{"accessMode":{"type":"string","description":"The method by which Grafana will access the data source: \u003cspan pulumi-lang-nodejs=\"`proxy`\" pulumi-lang-dotnet=\"`Proxy`\" pulumi-lang-go=\"`proxy`\" pulumi-lang-python=\"`proxy`\" pulumi-lang-yaml=\"`proxy`\" pulumi-lang-java=\"`proxy`\"\u003e`proxy`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`direct`\" pulumi-lang-dotnet=\"`Direct`\" pulumi-lang-go=\"`direct`\" pulumi-lang-python=\"`direct`\" pulumi-lang-yaml=\"`direct`\" pulumi-lang-java=\"`direct`\"\u003e`direct`\u003c/span\u003e. Defaults to \u003cspan pulumi-lang-nodejs=\"`proxy`\" pulumi-lang-dotnet=\"`Proxy`\" pulumi-lang-go=\"`proxy`\" pulumi-lang-python=\"`proxy`\" pulumi-lang-yaml=\"`proxy`\" pulumi-lang-java=\"`proxy`\"\u003e`proxy`\u003c/span\u003e.\n"},"basicAuthEnabled":{"type":"boolean","description":"Whether to enable basic auth for the data source. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"basicAuthUsername":{"type":"string","description":"Basic auth username. Defaults to ``.\n"},"databaseName":{"type":"string","description":"(Required by some data source types) The name of the database to use on the selected data source server. Defaults to ``.\n"},"httpHeaders":{"type":"object","additionalProperties":{"type":"string"},"description":"Custom HTTP headers\n","secret":true},"isDefault":{"type":"boolean","description":"Whether to set the data source as default. This should only be \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e to a single data source. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"jsonDataEncoded":{"type":"string","description":"Serialized JSON string containing the json data. This attribute can be used to pass configuration options to the data source. To figure out what options a datasource has available, see its docs or inspect the network data when saving it from the Grafana UI. Note that keys in this map are usually camelCased.\n"},"name":{"type":"string","description":"A unique name for the data source.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"privateDataSourceConnectNetworkId":{"type":"string","description":"(Can only be used with data sources in Grafana Cloud) The ID of the Private Data source Connect network to use with this data source. Defaults to ``.\n"},"secureJsonDataEncoded":{"type":"string","description":"Serialized JSON string containing the secure json data. This attribute can be used to pass secure configuration options to the data source. To figure out what options a datasource has available, see its docs or inspect the network data when saving it from the Grafana UI. Note that keys in this map are usually camelCased.\n","secret":true},"type":{"type":"string","description":"The data source type. Must be one of the supported data source keywords.\n"},"uid":{"type":"string","description":"Unique identifier. If unset, this will be automatically generated.\n","willReplaceOnChanges":true},"url":{"type":"string","description":"The URL for the data source. The type of URL required varies depending on the chosen data source type.\n"},"username":{"type":"string","description":"(Required by some data source types) The username to use to authenticate to the data source. Defaults to ``.\n"}},"requiredInputs":["type"],"stateInputs":{"description":"Input properties used for looking up and filtering DataSource resources.\n","properties":{"accessMode":{"type":"string","description":"The method by which Grafana will access the data source: \u003cspan pulumi-lang-nodejs=\"`proxy`\" pulumi-lang-dotnet=\"`Proxy`\" pulumi-lang-go=\"`proxy`\" pulumi-lang-python=\"`proxy`\" pulumi-lang-yaml=\"`proxy`\" pulumi-lang-java=\"`proxy`\"\u003e`proxy`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`direct`\" pulumi-lang-dotnet=\"`Direct`\" pulumi-lang-go=\"`direct`\" pulumi-lang-python=\"`direct`\" pulumi-lang-yaml=\"`direct`\" pulumi-lang-java=\"`direct`\"\u003e`direct`\u003c/span\u003e. Defaults to \u003cspan pulumi-lang-nodejs=\"`proxy`\" pulumi-lang-dotnet=\"`Proxy`\" pulumi-lang-go=\"`proxy`\" pulumi-lang-python=\"`proxy`\" pulumi-lang-yaml=\"`proxy`\" pulumi-lang-java=\"`proxy`\"\u003e`proxy`\u003c/span\u003e.\n"},"basicAuthEnabled":{"type":"boolean","description":"Whether to enable basic auth for the data source. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"basicAuthUsername":{"type":"string","description":"Basic auth username. Defaults to ``.\n"},"databaseName":{"type":"string","description":"(Required by some data source types) The name of the database to use on the selected data source server. Defaults to ``.\n"},"httpHeaders":{"type":"object","additionalProperties":{"type":"string"},"description":"Custom HTTP headers\n","secret":true},"isDefault":{"type":"boolean","description":"Whether to set the data source as default. This should only be \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e to a single data source. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"jsonDataEncoded":{"type":"string","description":"Serialized JSON string containing the json data. This attribute can be used to pass configuration options to the data source. To figure out what options a datasource has available, see its docs or inspect the network data when saving it from the Grafana UI. Note that keys in this map are usually camelCased.\n"},"name":{"type":"string","description":"A unique name for the data source.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"privateDataSourceConnectNetworkId":{"type":"string","description":"(Can only be used with data sources in Grafana Cloud) The ID of the Private Data source Connect network to use with this data source. Defaults to ``.\n"},"secureJsonDataEncoded":{"type":"string","description":"Serialized JSON string containing the secure json data. This attribute can be used to pass secure configuration options to the data source. To figure out what options a datasource has available, see its docs or inspect the network data when saving it from the Grafana UI. Note that keys in this map are usually camelCased.\n","secret":true},"type":{"type":"string","description":"The data source type. Must be one of the supported data source keywords.\n"},"uid":{"type":"string","description":"Unique identifier. If unset, this will be automatically generated.\n","willReplaceOnChanges":true},"url":{"type":"string","description":"The URL for the data source. The type of URL required varies depending on the chosen data source type.\n"},"username":{"type":"string","description":"(Required by some data source types) The username to use to authenticate to the data source. Defaults to ``.\n"}},"type":"object"},"aliases":[{"type":"grafana:index/dataSource:DataSource"}]},"grafana:oss/dataSourceConfig:DataSourceConfig":{"description":"* [Official documentation](https://grafana.com/docs/grafana/latest/datasources/)\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/data_source/)\n\nThe required arguments for this resource vary depending on the type of data\nsource selected (via the 'type' argument).\n\nUse this resource for configuring multiple datasources, when that configuration (\u003cspan pulumi-lang-nodejs=\"`jsonDataEncoded`\" pulumi-lang-dotnet=\"`JsonDataEncoded`\" pulumi-lang-go=\"`jsonDataEncoded`\" pulumi-lang-python=\"`json_data_encoded`\" pulumi-lang-yaml=\"`jsonDataEncoded`\" pulumi-lang-java=\"`jsonDataEncoded`\"\u003e`json_data_encoded`\u003c/span\u003e field) requires circular references like in the example below.\n\n\u003e When using the \u003cspan pulumi-lang-nodejs=\"`grafana.oss.DataSourceConfig`\" pulumi-lang-dotnet=\"`grafana.oss.DataSourceConfig`\" pulumi-lang-go=\"`oss.DataSourceConfig`\" pulumi-lang-python=\"`oss.DataSourceConfig`\" pulumi-lang-yaml=\"`grafana.oss.DataSourceConfig`\" pulumi-lang-java=\"`grafana.oss.DataSourceConfig`\"\u003e`grafana.oss.DataSourceConfig`\u003c/span\u003e resource, the corresponding \u003cspan pulumi-lang-nodejs=\"`grafana.oss.DataSource`\" pulumi-lang-dotnet=\"`grafana.oss.DataSource`\" pulumi-lang-go=\"`oss.DataSource`\" pulumi-lang-python=\"`oss.DataSource`\" pulumi-lang-yaml=\"`grafana.oss.DataSource`\" pulumi-lang-java=\"`grafana.oss.DataSource`\"\u003e`grafana.oss.DataSource`\u003c/span\u003e resources must have the \u003cspan pulumi-lang-nodejs=\"`jsonDataEncoded`\" pulumi-lang-dotnet=\"`JsonDataEncoded`\" pulumi-lang-go=\"`jsonDataEncoded`\" pulumi-lang-python=\"`json_data_encoded`\" pulumi-lang-yaml=\"`jsonDataEncoded`\" pulumi-lang-java=\"`jsonDataEncoded`\"\u003e`json_data_encoded`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`httpHeaders`\" pulumi-lang-dotnet=\"`HttpHeaders`\" pulumi-lang-go=\"`httpHeaders`\" pulumi-lang-python=\"`http_headers`\" pulumi-lang-yaml=\"`httpHeaders`\" pulumi-lang-java=\"`httpHeaders`\"\u003e`http_headers`\u003c/span\u003e fields ignored. Otherwise, an infinite update loop will occur. See the example below.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst loki = new grafana.oss.DataSource(\"loki\", {\n    type: \"loki\",\n    name: \"loki\",\n    url: \"http://localhost:3100\",\n});\nconst tempo = new grafana.oss.DataSource(\"tempo\", {\n    type: \"tempo\",\n    name: \"tempo\",\n    url: \"http://localhost:3200\",\n});\nconst lokiDataSourceConfig = new grafana.oss.DataSourceConfig(\"loki\", {\n    uid: loki.uid,\n    jsonDataEncoded: pulumi.jsonStringify({\n        derivedFields: [{\n            datasourceUid: tempo.uid,\n            matcherRegex: \"[tT]race_?[iI][dD]\\\"?[:=]\\\"?(\\\\w+)\",\n            matcherType: \"regex\",\n            name: \"traceID\",\n            url: \"${__value.raw}\",\n        }],\n    }),\n});\nconst tempoDataSourceConfig = new grafana.oss.DataSourceConfig(\"tempo\", {\n    uid: tempo.uid,\n    jsonDataEncoded: pulumi.jsonStringify({\n        tracesToLogsV2: {\n            customQuery: true,\n            datasourceUid: loki.uid,\n            filterBySpanID: false,\n            filterByTraceID: false,\n            query: \"|=\\\"${__trace.traceId}\\\" | json\",\n        },\n    }),\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumiverse_grafana as grafana\n\nloki = grafana.oss.DataSource(\"loki\",\n    type=\"loki\",\n    name=\"loki\",\n    url=\"http://localhost:3100\")\ntempo = grafana.oss.DataSource(\"tempo\",\n    type=\"tempo\",\n    name=\"tempo\",\n    url=\"http://localhost:3200\")\nloki_data_source_config = grafana.oss.DataSourceConfig(\"loki\",\n    uid=loki.uid,\n    json_data_encoded=pulumi.Output.json_dumps({\n        \"derivedFields\": [{\n            \"datasourceUid\": tempo.uid,\n            \"matcherRegex\": \"[tT]race_?[iI][dD]\\\"?[:=]\\\"?(\\\\w+)\",\n            \"matcherType\": \"regex\",\n            \"name\": \"traceID\",\n            \"url\": \"${__value.raw}\",\n        }],\n    }))\ntempo_data_source_config = grafana.oss.DataSourceConfig(\"tempo\",\n    uid=tempo.uid,\n    json_data_encoded=pulumi.Output.json_dumps({\n        \"tracesToLogsV2\": {\n            \"customQuery\": True,\n            \"datasourceUid\": loki.uid,\n            \"filterBySpanID\": False,\n            \"filterByTraceID\": False,\n            \"query\": \"|=\\\"${__trace.traceId}\\\" | json\",\n        },\n    }))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var loki = new Grafana.Oss.DataSource(\"loki\", new()\n    {\n        Type = \"loki\",\n        Name = \"loki\",\n        Url = \"http://localhost:3100\",\n    });\n\n    var tempo = new Grafana.Oss.DataSource(\"tempo\", new()\n    {\n        Type = \"tempo\",\n        Name = \"tempo\",\n        Url = \"http://localhost:3200\",\n    });\n\n    var lokiDataSourceConfig = new Grafana.Oss.DataSourceConfig(\"loki\", new()\n    {\n        Uid = loki.Uid,\n        JsonDataEncoded = Output.JsonSerialize(Output.Create(new Dictionary\u003cstring, object?\u003e\n        {\n            [\"derivedFields\"] = new[]\n            {\n                new Dictionary\u003cstring, object?\u003e\n                {\n                    [\"datasourceUid\"] = tempo.Uid,\n                    [\"matcherRegex\"] = \"[tT]race_?[iI][dD]\\\"?[:=]\\\"?(\\\\w+)\",\n                    [\"matcherType\"] = \"regex\",\n                    [\"name\"] = \"traceID\",\n                    [\"url\"] = \"${__value.raw}\",\n                },\n            },\n        })),\n    });\n\n    var tempoDataSourceConfig = new Grafana.Oss.DataSourceConfig(\"tempo\", new()\n    {\n        Uid = tempo.Uid,\n        JsonDataEncoded = Output.JsonSerialize(Output.Create(new Dictionary\u003cstring, object?\u003e\n        {\n            [\"tracesToLogsV2\"] = new Dictionary\u003cstring, object?\u003e\n            {\n                [\"customQuery\"] = true,\n                [\"datasourceUid\"] = loki.Uid,\n                [\"filterBySpanID\"] = false,\n                [\"filterByTraceID\"] = false,\n                [\"query\"] = \"|=\\\"${__trace.traceId}\\\" | json\",\n            },\n        })),\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tloki, err := oss.NewDataSource(ctx, \"loki\", \u0026oss.DataSourceArgs{\n\t\t\tType: pulumi.String(\"loki\"),\n\t\t\tName: pulumi.String(\"loki\"),\n\t\t\tUrl:  pulumi.String(\"http://localhost:3100\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttempo, err := oss.NewDataSource(ctx, \"tempo\", \u0026oss.DataSourceArgs{\n\t\t\tType: pulumi.String(\"tempo\"),\n\t\t\tName: pulumi.String(\"tempo\"),\n\t\t\tUrl:  pulumi.String(\"http://localhost:3200\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oss.NewDataSourceConfig(ctx, \"loki\", \u0026oss.DataSourceConfigArgs{\n\t\t\tUid: loki.Uid,\n\t\t\tJsonDataEncoded: tempo.Uid.ApplyT(func(uid string) (pulumi.String, error) {\n\t\t\t\tvar _zero pulumi.String\n\t\t\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\t\t\"derivedFields\": []map[string]interface{}{\n\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\"datasourceUid\": uid,\n\t\t\t\t\t\t\t\"matcherRegex\":  \"[tT]race_?[iI][dD]\\\"?[:=]\\\"?(\\\\w+)\",\n\t\t\t\t\t\t\t\"matcherType\":   \"regex\",\n\t\t\t\t\t\t\t\"name\":          \"traceID\",\n\t\t\t\t\t\t\t\"url\":           \"${__value.raw}\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn _zero, err\n\t\t\t\t}\n\t\t\t\tjson0 := string(tmpJSON0)\n\t\t\t\treturn pulumi.String(json0), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oss.NewDataSourceConfig(ctx, \"tempo\", \u0026oss.DataSourceConfigArgs{\n\t\t\tUid: tempo.Uid,\n\t\t\tJsonDataEncoded: loki.Uid.ApplyT(func(uid string) (pulumi.String, error) {\n\t\t\t\tvar _zero pulumi.String\n\t\t\t\ttmpJSON1, err := json.Marshal(map[string]interface{}{\n\t\t\t\t\t\"tracesToLogsV2\": map[string]interface{}{\n\t\t\t\t\t\t\"customQuery\":     true,\n\t\t\t\t\t\t\"datasourceUid\":   uid,\n\t\t\t\t\t\t\"filterBySpanID\":  false,\n\t\t\t\t\t\t\"filterByTraceID\": false,\n\t\t\t\t\t\t\"query\":           \"|=\\\"${__trace.traceId}\\\" | json\",\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn _zero, err\n\t\t\t\t}\n\t\t\t\tjson1 := string(tmpJSON1)\n\t\t\t\treturn pulumi.String(json1), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.DataSource;\nimport com.pulumi.grafana.oss.DataSourceArgs;\nimport com.pulumi.grafana.oss.DataSourceConfig;\nimport com.pulumi.grafana.oss.DataSourceConfigArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var loki = new DataSource(\"loki\", DataSourceArgs.builder()\n            .type(\"loki\")\n            .name(\"loki\")\n            .url(\"http://localhost:3100\")\n            .build());\n\n        var tempo = new DataSource(\"tempo\", DataSourceArgs.builder()\n            .type(\"tempo\")\n            .name(\"tempo\")\n            .url(\"http://localhost:3200\")\n            .build());\n\n        var lokiDataSourceConfig = new DataSourceConfig(\"lokiDataSourceConfig\", DataSourceConfigArgs.builder()\n            .uid(loki.uid())\n            .jsonDataEncoded(tempo.uid().applyValue(_uid -\u003e serializeJson(\n                jsonObject(\n                    jsonProperty(\"derivedFields\", jsonArray(jsonObject(\n                        jsonProperty(\"datasourceUid\", _uid),\n                        jsonProperty(\"matcherRegex\", \"[tT]race_?[iI][dD]\\\"?[:=]\\\"?(\\\\w+)\"),\n                        jsonProperty(\"matcherType\", \"regex\"),\n                        jsonProperty(\"name\", \"traceID\"),\n                        jsonProperty(\"url\", \"${__value.raw}\")\n                    )))\n                ))))\n            .build());\n\n        var tempoDataSourceConfig = new DataSourceConfig(\"tempoDataSourceConfig\", DataSourceConfigArgs.builder()\n            .uid(tempo.uid())\n            .jsonDataEncoded(loki.uid().applyValue(_uid -\u003e serializeJson(\n                jsonObject(\n                    jsonProperty(\"tracesToLogsV2\", jsonObject(\n                        jsonProperty(\"customQuery\", true),\n                        jsonProperty(\"datasourceUid\", _uid),\n                        jsonProperty(\"filterBySpanID\", false),\n                        jsonProperty(\"filterByTraceID\", false),\n                        jsonProperty(\"query\", \"|=\\\"${__trace.traceId}\\\" | json\")\n                    ))\n                ))))\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  loki:\n    type: grafana:oss:DataSource\n    properties:\n      type: loki\n      name: loki\n      url: http://localhost:3100\n  tempo:\n    type: grafana:oss:DataSource\n    properties:\n      type: tempo\n      name: tempo\n      url: http://localhost:3200\n  lokiDataSourceConfig:\n    type: grafana:oss:DataSourceConfig\n    name: loki\n    properties:\n      uid: ${loki.uid}\n      jsonDataEncoded:\n        fn::toJSON:\n          derivedFields:\n            - datasourceUid: ${tempo.uid}\n              matcherRegex: '[tT]race_?[iI][dD]\"?[:=]\"?(\\w+)'\n              matcherType: regex\n              name: traceID\n              url: $${__value.raw}\n  tempoDataSourceConfig:\n    type: grafana:oss:DataSourceConfig\n    name: tempo\n    properties:\n      uid: ${tempo.uid}\n      jsonDataEncoded:\n        fn::toJSON:\n          tracesToLogsV2:\n            customQuery: true\n            datasourceUid: ${loki.uid}\n            filterBySpanID: false\n            filterByTraceID: false\n            query: '|=\"$${__trace.traceId}\" | json'\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:oss/dataSourceConfig:DataSourceConfig name \"{{ uid }}\"\n```\n\n```sh\n$ pulumi import grafana:oss/dataSourceConfig:DataSourceConfig name \"{{ orgID }}:{{ uid }}\"\n```\n\n","properties":{"httpHeaders":{"type":"object","additionalProperties":{"type":"string"},"description":"Custom HTTP headers\n","secret":true},"jsonDataEncoded":{"type":"string","description":"Serialized JSON string containing the json data. This attribute can be used to pass configuration options to the data source. To figure out what options a datasource has available, see its docs or inspect the network data when saving it from the Grafana UI. Note that keys in this map are usually camelCased.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n"},"secureJsonDataEncoded":{"type":"string","description":"Serialized JSON string containing the secure json data. This attribute can be used to pass secure configuration options to the data source. To figure out what options a datasource has available, see its docs or inspect the network data when saving it from the Grafana UI. Note that keys in this map are usually camelCased.\n","secret":true},"uid":{"type":"string","description":"Unique identifier. If unset, this will be automatically generated.\n"}},"required":["uid"],"inputProperties":{"httpHeaders":{"type":"object","additionalProperties":{"type":"string"},"description":"Custom HTTP headers\n","secret":true},"jsonDataEncoded":{"type":"string","description":"Serialized JSON string containing the json data. This attribute can be used to pass configuration options to the data source. To figure out what options a datasource has available, see its docs or inspect the network data when saving it from the Grafana UI. Note that keys in this map are usually camelCased.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"secureJsonDataEncoded":{"type":"string","description":"Serialized JSON string containing the secure json data. This attribute can be used to pass secure configuration options to the data source. To figure out what options a datasource has available, see its docs or inspect the network data when saving it from the Grafana UI. Note that keys in this map are usually camelCased.\n","secret":true},"uid":{"type":"string","description":"Unique identifier. If unset, this will be automatically generated.\n","willReplaceOnChanges":true}},"stateInputs":{"description":"Input properties used for looking up and filtering DataSourceConfig resources.\n","properties":{"httpHeaders":{"type":"object","additionalProperties":{"type":"string"},"description":"Custom HTTP headers\n","secret":true},"jsonDataEncoded":{"type":"string","description":"Serialized JSON string containing the json data. This attribute can be used to pass configuration options to the data source. To figure out what options a datasource has available, see its docs or inspect the network data when saving it from the Grafana UI. Note that keys in this map are usually camelCased.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"secureJsonDataEncoded":{"type":"string","description":"Serialized JSON string containing the secure json data. This attribute can be used to pass secure configuration options to the data source. To figure out what options a datasource has available, see its docs or inspect the network data when saving it from the Grafana UI. Note that keys in this map are usually camelCased.\n","secret":true},"uid":{"type":"string","description":"Unique identifier. If unset, this will be automatically generated.\n","willReplaceOnChanges":true}},"type":"object"},"aliases":[{"type":"grafana:index/dataSourceConfig:DataSourceConfig"}]},"grafana:oss/folder:Folder":{"description":"* [Official documentation](https://grafana.com/docs/grafana/latest/dashboards/manage-dashboards/)\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/folder/)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst testFolder = new grafana.oss.Folder(\"test_folder\", {title: \"Terraform Test Folder\"});\nconst testFolderDashboard = new grafana.oss.Dashboard(\"test_folder\", {\n    folder: testFolder.id,\n    configJson: `{\n  \\\\\"title\\\\\": \\\\\"Dashboard in folder\\\\\",\n  \\\\\"uid\\\\\": \\\\\"dashboard-in-folder\\\\\"\n}\n`,\n});\nconst testFolderWithUid = new grafana.oss.Folder(\"test_folder_with_uid\", {\n    uid: \"test-folder-uid\",\n    title: \"Terraform Test Folder With UID\",\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\ntest_folder = grafana.oss.Folder(\"test_folder\", title=\"Terraform Test Folder\")\ntest_folder_dashboard = grafana.oss.Dashboard(\"test_folder\",\n    folder=test_folder.id,\n    config_json=\"\"\"{\n  \\\"title\\\": \\\"Dashboard in folder\\\",\n  \\\"uid\\\": \\\"dashboard-in-folder\\\"\n}\n\"\"\")\ntest_folder_with_uid = grafana.oss.Folder(\"test_folder_with_uid\",\n    uid=\"test-folder-uid\",\n    title=\"Terraform Test Folder With UID\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var testFolder = new Grafana.Oss.Folder(\"test_folder\", new()\n    {\n        Title = \"Terraform Test Folder\",\n    });\n\n    var testFolderDashboard = new Grafana.Oss.Dashboard(\"test_folder\", new()\n    {\n        Folder = testFolder.Id,\n        ConfigJson = @\"{\n  \\\"\"title\\\"\": \\\"\"Dashboard in folder\\\"\",\n  \\\"\"uid\\\"\": \\\"\"dashboard-in-folder\\\"\"\n}\n\",\n    });\n\n    var testFolderWithUid = new Grafana.Oss.Folder(\"test_folder_with_uid\", new()\n    {\n        Uid = \"test-folder-uid\",\n        Title = \"Terraform Test Folder With UID\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttestFolder, err := oss.NewFolder(ctx, \"test_folder\", \u0026oss.FolderArgs{\n\t\t\tTitle: pulumi.String(\"Terraform Test Folder\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oss.NewDashboard(ctx, \"test_folder\", \u0026oss.DashboardArgs{\n\t\t\tFolder:     testFolder.ID(),\n\t\t\tConfigJson: pulumi.String(\"{\\n  \\\\\\\"title\\\\\\\": \\\\\\\"Dashboard in folder\\\\\\\",\\n  \\\\\\\"uid\\\\\\\": \\\\\\\"dashboard-in-folder\\\\\\\"\\n}\\n\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oss.NewFolder(ctx, \"test_folder_with_uid\", \u0026oss.FolderArgs{\n\t\t\tUid:   pulumi.String(\"test-folder-uid\"),\n\t\t\tTitle: pulumi.String(\"Terraform Test Folder With UID\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.Folder;\nimport com.pulumi.grafana.oss.FolderArgs;\nimport com.pulumi.grafana.oss.Dashboard;\nimport com.pulumi.grafana.oss.DashboardArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var testFolder = new Folder(\"testFolder\", FolderArgs.builder()\n            .title(\"Terraform Test Folder\")\n            .build());\n\n        var testFolderDashboard = new Dashboard(\"testFolderDashboard\", DashboardArgs.builder()\n            .folder(testFolder.id())\n            .configJson(\"\"\"\n{\n  \\\"title\\\": \\\"Dashboard in folder\\\",\n  \\\"uid\\\": \\\"dashboard-in-folder\\\"\n}\n            \"\"\")\n            .build());\n\n        var testFolderWithUid = new Folder(\"testFolderWithUid\", FolderArgs.builder()\n            .uid(\"test-folder-uid\")\n            .title(\"Terraform Test Folder With UID\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  testFolder:\n    type: grafana:oss:Folder\n    name: test_folder\n    properties:\n      title: Terraform Test Folder\n  testFolderDashboard:\n    type: grafana:oss:Dashboard\n    name: test_folder\n    properties:\n      folder: ${testFolder.id}\n      configJson: |\n        {\n          \\\"title\\\": \\\"Dashboard in folder\\\",\n          \\\"uid\\\": \\\"dashboard-in-folder\\\"\n        }\n  testFolderWithUid:\n    type: grafana:oss:Folder\n    name: test_folder_with_uid\n    properties:\n      uid: test-folder-uid\n      title: Terraform Test Folder With UID\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:oss/folder:Folder name \"{{ uid }}\"\n```\n\n```sh\n$ pulumi import grafana:oss/folder:Folder name \"{{ orgID }}:{{ uid }}\"\n```\n\n","properties":{"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n"},"parentFolderUid":{"type":"string","description":"The uid of the parent folder. If set, the folder will be nested. If not set, the folder will be created in the root folder. Note: This requires the nestedFolders feature flag to be enabled on your Grafana instance.\n"},"preventDestroyIfNotEmpty":{"type":"boolean","description":"Prevent deletion of the folder if it is not empty (contains dashboards or alert rules). This feature requires Grafana 10.2 or later. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"title":{"type":"string","description":"The title of the folder.\n"},"uid":{"type":"string","description":"Unique identifier.\n"},"url":{"type":"string","description":"The full URL of the folder.\n"}},"required":["title","uid","url"],"inputProperties":{"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"parentFolderUid":{"type":"string","description":"The uid of the parent folder. If set, the folder will be nested. If not set, the folder will be created in the root folder. Note: This requires the nestedFolders feature flag to be enabled on your Grafana instance.\n"},"preventDestroyIfNotEmpty":{"type":"boolean","description":"Prevent deletion of the folder if it is not empty (contains dashboards or alert rules). This feature requires Grafana 10.2 or later. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"title":{"type":"string","description":"The title of the folder.\n"},"uid":{"type":"string","description":"Unique identifier.\n","willReplaceOnChanges":true}},"requiredInputs":["title"],"stateInputs":{"description":"Input properties used for looking up and filtering Folder resources.\n","properties":{"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"parentFolderUid":{"type":"string","description":"The uid of the parent folder. If set, the folder will be nested. If not set, the folder will be created in the root folder. Note: This requires the nestedFolders feature flag to be enabled on your Grafana instance.\n"},"preventDestroyIfNotEmpty":{"type":"boolean","description":"Prevent deletion of the folder if it is not empty (contains dashboards or alert rules). This feature requires Grafana 10.2 or later. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"title":{"type":"string","description":"The title of the folder.\n"},"uid":{"type":"string","description":"Unique identifier.\n","willReplaceOnChanges":true},"url":{"type":"string","description":"The full URL of the folder.\n"}},"type":"object"},"aliases":[{"type":"grafana:index/folder:Folder"}]},"grafana:oss/folderPermission:FolderPermission":{"description":"Manages the entire set of permissions for a folder. Permissions that aren't specified when applying this resource will be removed.\n* [Official documentation](https://grafana.com/docs/grafana/latest/administration/roles-and-permissions/access-control/)\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/folder_permissions/)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst team = new grafana.oss.Team(\"team\", {name: \"Team Name\"});\nconst user = new grafana.oss.User(\"user\", {\n    email: \"user.name@example.com\",\n    login: \"user.name\",\n    password: \"my-password\",\n});\nconst collection = new grafana.oss.Folder(\"collection\", {title: \"Folder Title\"});\nconst collectionPermission = new grafana.oss.FolderPermission(\"collectionPermission\", {\n    folderUid: collection.uid,\n    permissions: [\n        {\n            role: \"Editor\",\n            permission: \"Edit\",\n        },\n        {\n            teamId: team.id,\n            permission: \"View\",\n        },\n        {\n            userId: user.id,\n            permission: \"Admin\",\n        },\n    ],\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\nteam = grafana.oss.Team(\"team\", name=\"Team Name\")\nuser = grafana.oss.User(\"user\",\n    email=\"user.name@example.com\",\n    login=\"user.name\",\n    password=\"my-password\")\ncollection = grafana.oss.Folder(\"collection\", title=\"Folder Title\")\ncollection_permission = grafana.oss.FolderPermission(\"collectionPermission\",\n    folder_uid=collection.uid,\n    permissions=[\n        {\n            \"role\": \"Editor\",\n            \"permission\": \"Edit\",\n        },\n        {\n            \"team_id\": team.id,\n            \"permission\": \"View\",\n        },\n        {\n            \"user_id\": user.id,\n            \"permission\": \"Admin\",\n        },\n    ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var team = new Grafana.Oss.Team(\"team\", new()\n    {\n        Name = \"Team Name\",\n    });\n\n    var user = new Grafana.Oss.User(\"user\", new()\n    {\n        Email = \"user.name@example.com\",\n        Login = \"user.name\",\n        Password = \"my-password\",\n    });\n\n    var collection = new Grafana.Oss.Folder(\"collection\", new()\n    {\n        Title = \"Folder Title\",\n    });\n\n    var collectionPermission = new Grafana.Oss.FolderPermission(\"collectionPermission\", new()\n    {\n        FolderUid = collection.Uid,\n        Permissions = new[]\n        {\n            new Grafana.Oss.Inputs.FolderPermissionPermissionArgs\n            {\n                Role = \"Editor\",\n                Permission = \"Edit\",\n            },\n            new Grafana.Oss.Inputs.FolderPermissionPermissionArgs\n            {\n                TeamId = team.Id,\n                Permission = \"View\",\n            },\n            new Grafana.Oss.Inputs.FolderPermissionPermissionArgs\n            {\n                UserId = user.Id,\n                Permission = \"Admin\",\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tteam, err := oss.NewTeam(ctx, \"team\", \u0026oss.TeamArgs{\n\t\t\tName: pulumi.String(\"Team Name\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tuser, err := oss.NewUser(ctx, \"user\", \u0026oss.UserArgs{\n\t\t\tEmail:    pulumi.String(\"user.name@example.com\"),\n\t\t\tLogin:    pulumi.String(\"user.name\"),\n\t\t\tPassword: pulumi.String(\"my-password\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcollection, err := oss.NewFolder(ctx, \"collection\", \u0026oss.FolderArgs{\n\t\t\tTitle: pulumi.String(\"Folder Title\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oss.NewFolderPermission(ctx, \"collectionPermission\", \u0026oss.FolderPermissionArgs{\n\t\t\tFolderUid: collection.Uid,\n\t\t\tPermissions: oss.FolderPermissionPermissionArray{\n\t\t\t\t\u0026oss.FolderPermissionPermissionArgs{\n\t\t\t\t\tRole:       pulumi.String(\"Editor\"),\n\t\t\t\t\tPermission: pulumi.String(\"Edit\"),\n\t\t\t\t},\n\t\t\t\t\u0026oss.FolderPermissionPermissionArgs{\n\t\t\t\t\tTeamId:     team.ID(),\n\t\t\t\t\tPermission: pulumi.String(\"View\"),\n\t\t\t\t},\n\t\t\t\t\u0026oss.FolderPermissionPermissionArgs{\n\t\t\t\t\tUserId:     user.ID(),\n\t\t\t\t\tPermission: pulumi.String(\"Admin\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.Team;\nimport com.pulumi.grafana.oss.TeamArgs;\nimport com.pulumi.grafana.oss.User;\nimport com.pulumi.grafana.oss.UserArgs;\nimport com.pulumi.grafana.oss.Folder;\nimport com.pulumi.grafana.oss.FolderArgs;\nimport com.pulumi.grafana.oss.FolderPermission;\nimport com.pulumi.grafana.oss.FolderPermissionArgs;\nimport com.pulumi.grafana.oss.inputs.FolderPermissionPermissionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var team = new Team(\"team\", TeamArgs.builder()\n            .name(\"Team Name\")\n            .build());\n\n        var user = new User(\"user\", UserArgs.builder()\n            .email(\"user.name@example.com\")\n            .login(\"user.name\")\n            .password(\"my-password\")\n            .build());\n\n        var collection = new Folder(\"collection\", FolderArgs.builder()\n            .title(\"Folder Title\")\n            .build());\n\n        var collectionPermission = new FolderPermission(\"collectionPermission\", FolderPermissionArgs.builder()\n            .folderUid(collection.uid())\n            .permissions(            \n                FolderPermissionPermissionArgs.builder()\n                    .role(\"Editor\")\n                    .permission(\"Edit\")\n                    .build(),\n                FolderPermissionPermissionArgs.builder()\n                    .teamId(team.id())\n                    .permission(\"View\")\n                    .build(),\n                FolderPermissionPermissionArgs.builder()\n                    .userId(user.id())\n                    .permission(\"Admin\")\n                    .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  team:\n    type: grafana:oss:Team\n    properties:\n      name: Team Name\n  user:\n    type: grafana:oss:User\n    properties:\n      email: user.name@example.com\n      login: user.name\n      password: my-password\n  collection:\n    type: grafana:oss:Folder\n    properties:\n      title: Folder Title\n  collectionPermission:\n    type: grafana:oss:FolderPermission\n    properties:\n      folderUid: ${collection.uid}\n      permissions:\n        - role: Editor\n          permission: Edit\n        - teamId: ${team.id}\n          permission: View\n        - userId: ${user.id}\n          permission: Admin\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:oss/folderPermission:FolderPermission name \"{{ folderUID }}\"\n```\n\n```sh\n$ pulumi import grafana:oss/folderPermission:FolderPermission name \"{{ orgID }}:{{ folderUID }}\"\n```\n\n","properties":{"folderUid":{"type":"string","description":"The UID of the folder.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n"},"permissions":{"type":"array","items":{"$ref":"#/types/grafana:oss/FolderPermissionPermission:FolderPermissionPermission"},"description":"The permission items to add/update. Items that are omitted from the list will be removed.\n"}},"required":["folderUid"],"inputProperties":{"folderUid":{"type":"string","description":"The UID of the folder.\n","willReplaceOnChanges":true},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"permissions":{"type":"array","items":{"$ref":"#/types/grafana:oss/FolderPermissionPermission:FolderPermissionPermission"},"description":"The permission items to add/update. Items that are omitted from the list will be removed.\n"}},"requiredInputs":["folderUid"],"stateInputs":{"description":"Input properties used for looking up and filtering FolderPermission resources.\n","properties":{"folderUid":{"type":"string","description":"The UID of the folder.\n","willReplaceOnChanges":true},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"permissions":{"type":"array","items":{"$ref":"#/types/grafana:oss/FolderPermissionPermission:FolderPermissionPermission"},"description":"The permission items to add/update. Items that are omitted from the list will be removed.\n"}},"type":"object"},"aliases":[{"type":"grafana:index/folderPermission:FolderPermission"}]},"grafana:oss/folderPermissionItem:FolderPermissionItem":{"description":"Manages a single permission item for a folder. Conflicts with the \u003cspan pulumi-lang-nodejs=\"\"grafana.oss.FolderPermission\"\" pulumi-lang-dotnet=\"\"grafana.oss.FolderPermission\"\" pulumi-lang-go=\"\"oss.FolderPermission\"\" pulumi-lang-python=\"\"oss.FolderPermission\"\" pulumi-lang-yaml=\"\"grafana.oss.FolderPermission\"\" pulumi-lang-java=\"\"grafana.oss.FolderPermission\"\"\u003e\"grafana.oss.FolderPermission\"\u003c/span\u003e resource which manages the entire set of permissions for a folder.\n\t\t* [Official documentation](https://grafana.com/docs/grafana/latest/administration/roles-and-permissions/access-control/)\n\t\t* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/folder_permissions/)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst team = new grafana.oss.Team(\"team\", {name: \"Team Name\"});\nconst user = new grafana.oss.User(\"user\", {\n    email: \"user.name@example.com\",\n    login: \"user.name\",\n    password: \"my-password\",\n});\nconst collection = new grafana.oss.Folder(\"collection\", {title: \"Folder Title\"});\nconst onRole = new grafana.oss.FolderPermissionItem(\"on_role\", {\n    folderUid: collection.uid,\n    role: \"Viewer\",\n    permission: \"Edit\",\n});\nconst onTeam = new grafana.oss.FolderPermissionItem(\"on_team\", {\n    folderUid: collection.uid,\n    team: team.id,\n    permission: \"View\",\n});\nconst onUser = new grafana.oss.FolderPermissionItem(\"on_user\", {\n    folderUid: collection.uid,\n    user: user.id,\n    permission: \"Admin\",\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\nteam = grafana.oss.Team(\"team\", name=\"Team Name\")\nuser = grafana.oss.User(\"user\",\n    email=\"user.name@example.com\",\n    login=\"user.name\",\n    password=\"my-password\")\ncollection = grafana.oss.Folder(\"collection\", title=\"Folder Title\")\non_role = grafana.oss.FolderPermissionItem(\"on_role\",\n    folder_uid=collection.uid,\n    role=\"Viewer\",\n    permission=\"Edit\")\non_team = grafana.oss.FolderPermissionItem(\"on_team\",\n    folder_uid=collection.uid,\n    team=team.id,\n    permission=\"View\")\non_user = grafana.oss.FolderPermissionItem(\"on_user\",\n    folder_uid=collection.uid,\n    user=user.id,\n    permission=\"Admin\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var team = new Grafana.Oss.Team(\"team\", new()\n    {\n        Name = \"Team Name\",\n    });\n\n    var user = new Grafana.Oss.User(\"user\", new()\n    {\n        Email = \"user.name@example.com\",\n        Login = \"user.name\",\n        Password = \"my-password\",\n    });\n\n    var collection = new Grafana.Oss.Folder(\"collection\", new()\n    {\n        Title = \"Folder Title\",\n    });\n\n    var onRole = new Grafana.Oss.FolderPermissionItem(\"on_role\", new()\n    {\n        FolderUid = collection.Uid,\n        Role = \"Viewer\",\n        Permission = \"Edit\",\n    });\n\n    var onTeam = new Grafana.Oss.FolderPermissionItem(\"on_team\", new()\n    {\n        FolderUid = collection.Uid,\n        Team = team.Id,\n        Permission = \"View\",\n    });\n\n    var onUser = new Grafana.Oss.FolderPermissionItem(\"on_user\", new()\n    {\n        FolderUid = collection.Uid,\n        User = user.Id,\n        Permission = \"Admin\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tteam, err := oss.NewTeam(ctx, \"team\", \u0026oss.TeamArgs{\n\t\t\tName: pulumi.String(\"Team Name\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tuser, err := oss.NewUser(ctx, \"user\", \u0026oss.UserArgs{\n\t\t\tEmail:    pulumi.String(\"user.name@example.com\"),\n\t\t\tLogin:    pulumi.String(\"user.name\"),\n\t\t\tPassword: pulumi.String(\"my-password\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcollection, err := oss.NewFolder(ctx, \"collection\", \u0026oss.FolderArgs{\n\t\t\tTitle: pulumi.String(\"Folder Title\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oss.NewFolderPermissionItem(ctx, \"on_role\", \u0026oss.FolderPermissionItemArgs{\n\t\t\tFolderUid:  collection.Uid,\n\t\t\tRole:       pulumi.String(\"Viewer\"),\n\t\t\tPermission: pulumi.String(\"Edit\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oss.NewFolderPermissionItem(ctx, \"on_team\", \u0026oss.FolderPermissionItemArgs{\n\t\t\tFolderUid:  collection.Uid,\n\t\t\tTeam:       team.ID(),\n\t\t\tPermission: pulumi.String(\"View\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oss.NewFolderPermissionItem(ctx, \"on_user\", \u0026oss.FolderPermissionItemArgs{\n\t\t\tFolderUid:  collection.Uid,\n\t\t\tUser:       user.ID(),\n\t\t\tPermission: pulumi.String(\"Admin\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.Team;\nimport com.pulumi.grafana.oss.TeamArgs;\nimport com.pulumi.grafana.oss.User;\nimport com.pulumi.grafana.oss.UserArgs;\nimport com.pulumi.grafana.oss.Folder;\nimport com.pulumi.grafana.oss.FolderArgs;\nimport com.pulumi.grafana.oss.FolderPermissionItem;\nimport com.pulumi.grafana.oss.FolderPermissionItemArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var team = new Team(\"team\", TeamArgs.builder()\n            .name(\"Team Name\")\n            .build());\n\n        var user = new User(\"user\", UserArgs.builder()\n            .email(\"user.name@example.com\")\n            .login(\"user.name\")\n            .password(\"my-password\")\n            .build());\n\n        var collection = new Folder(\"collection\", FolderArgs.builder()\n            .title(\"Folder Title\")\n            .build());\n\n        var onRole = new FolderPermissionItem(\"onRole\", FolderPermissionItemArgs.builder()\n            .folderUid(collection.uid())\n            .role(\"Viewer\")\n            .permission(\"Edit\")\n            .build());\n\n        var onTeam = new FolderPermissionItem(\"onTeam\", FolderPermissionItemArgs.builder()\n            .folderUid(collection.uid())\n            .team(team.id())\n            .permission(\"View\")\n            .build());\n\n        var onUser = new FolderPermissionItem(\"onUser\", FolderPermissionItemArgs.builder()\n            .folderUid(collection.uid())\n            .user(user.id())\n            .permission(\"Admin\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  team:\n    type: grafana:oss:Team\n    properties:\n      name: Team Name\n  user:\n    type: grafana:oss:User\n    properties:\n      email: user.name@example.com\n      login: user.name\n      password: my-password\n  collection:\n    type: grafana:oss:Folder\n    properties:\n      title: Folder Title\n  onRole:\n    type: grafana:oss:FolderPermissionItem\n    name: on_role\n    properties:\n      folderUid: ${collection.uid}\n      role: Viewer\n      permission: Edit\n  onTeam:\n    type: grafana:oss:FolderPermissionItem\n    name: on_team\n    properties:\n      folderUid: ${collection.uid}\n      team: ${team.id}\n      permission: View\n  onUser:\n    type: grafana:oss:FolderPermissionItem\n    name: on_user\n    properties:\n      folderUid: ${collection.uid}\n      user: ${user.id}\n      permission: Admin\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:oss/folderPermissionItem:FolderPermissionItem name \"{{ folderUID }}:{{ type (role, team, or user) }}:{{ identifier }}\"\n```\n\n```sh\n$ pulumi import grafana:oss/folderPermissionItem:FolderPermissionItem name \"{{ orgID }}:{{ folderUID }}:{{ type (role, team, or user) }}:{{ identifier }}\"\n```\n\n","properties":{"folderUid":{"type":"string","description":"The UID of the folder.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the default organization is used for basic authentication, or the one that owns your service account for token authentication.\n"},"permission":{"type":"string","description":"the permission to be assigned\n"},"role":{"type":"string","description":"the role onto which the permission is to be assigned\n"},"team":{"type":"string","description":"the team onto which the permission is to be assigned\n"},"user":{"type":"string","description":"the user or service account onto which the permission is to be assigned\n"}},"required":["folderUid","orgId","permission"],"inputProperties":{"folderUid":{"type":"string","description":"The UID of the folder.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the default organization is used for basic authentication, or the one that owns your service account for token authentication.\n"},"permission":{"type":"string","description":"the permission to be assigned\n"},"role":{"type":"string","description":"the role onto which the permission is to be assigned\n"},"team":{"type":"string","description":"the team onto which the permission is to be assigned\n"},"user":{"type":"string","description":"the user or service account onto which the permission is to be assigned\n"}},"requiredInputs":["folderUid","permission"],"stateInputs":{"description":"Input properties used for looking up and filtering FolderPermissionItem resources.\n","properties":{"folderUid":{"type":"string","description":"The UID of the folder.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the default organization is used for basic authentication, or the one that owns your service account for token authentication.\n"},"permission":{"type":"string","description":"the permission to be assigned\n"},"role":{"type":"string","description":"the role onto which the permission is to be assigned\n"},"team":{"type":"string","description":"the team onto which the permission is to be assigned\n"},"user":{"type":"string","description":"the user or service account onto which the permission is to be assigned\n"}},"type":"object"},"aliases":[{"type":"grafana:index/folderPermissionItem:FolderPermissionItem"}]},"grafana:oss/libraryPanel:LibraryPanel":{"description":"Manages Grafana library panels.\n\n* [Official documentation](https://grafana.com/docs/grafana/latest/dashboards/build-dashboards/manage-library-panels/)\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/library_element/)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst test = new grafana.oss.LibraryPanel(\"test\", {\n    name: \"panel\",\n    modelJson: JSON.stringify({\n        gridPos: {\n            x: 0,\n            y: 0,\n            h: 10,\n            w: 10,\n        },\n        title: \"panel\",\n        type: \"text\",\n        version: 0,\n    }),\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumiverse_grafana as grafana\n\ntest = grafana.oss.LibraryPanel(\"test\",\n    name=\"panel\",\n    model_json=json.dumps({\n        \"gridPos\": {\n            \"x\": 0,\n            \"y\": 0,\n            \"h\": 10,\n            \"w\": 10,\n        },\n        \"title\": \"panel\",\n        \"type\": \"text\",\n        \"version\": 0,\n    }))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var test = new Grafana.Oss.LibraryPanel(\"test\", new()\n    {\n        Name = \"panel\",\n        ModelJson = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n        {\n            [\"gridPos\"] = new Dictionary\u003cstring, object?\u003e\n            {\n                [\"x\"] = 0,\n                [\"y\"] = 0,\n                [\"h\"] = 10,\n                [\"w\"] = 10,\n            },\n            [\"title\"] = \"panel\",\n            [\"type\"] = \"text\",\n            [\"version\"] = 0,\n        }),\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"gridPos\": map[string]interface{}{\n\t\t\t\t\"x\": 0,\n\t\t\t\t\"y\": 0,\n\t\t\t\t\"h\": 10,\n\t\t\t\t\"w\": 10,\n\t\t\t},\n\t\t\t\"title\":   \"panel\",\n\t\t\t\"type\":    \"text\",\n\t\t\t\"version\": 0,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\t_, err = oss.NewLibraryPanel(ctx, \"test\", \u0026oss.LibraryPanelArgs{\n\t\t\tName:      pulumi.String(\"panel\"),\n\t\t\tModelJson: pulumi.String(json0),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.LibraryPanel;\nimport com.pulumi.grafana.oss.LibraryPanelArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var test = new LibraryPanel(\"test\", LibraryPanelArgs.builder()\n            .name(\"panel\")\n            .modelJson(serializeJson(\n                jsonObject(\n                    jsonProperty(\"gridPos\", jsonObject(\n                        jsonProperty(\"x\", 0),\n                        jsonProperty(\"y\", 0),\n                        jsonProperty(\"h\", 10),\n                        jsonProperty(\"w\", 10)\n                    )),\n                    jsonProperty(\"title\", \"panel\"),\n                    jsonProperty(\"type\", \"text\"),\n                    jsonProperty(\"version\", 0)\n                )))\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  test:\n    type: grafana:oss:LibraryPanel\n    properties:\n      name: panel\n      modelJson:\n        fn::toJSON:\n          gridPos:\n            x: 0\n            y: 0\n            h: 10\n            w: 10\n          title: panel\n          type: text\n          version: 0\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:oss/libraryPanel:LibraryPanel name \"{{ uid }}\"\n```\n\n```sh\n$ pulumi import grafana:oss/libraryPanel:LibraryPanel name \"{{ orgID }}:{{ uid }}\"\n```\n\n","properties":{"created":{"type":"string","description":"Timestamp when the library panel was created.\n"},"dashboardIds":{"type":"array","items":{"type":"integer"},"description":"Numerical IDs of Grafana dashboards containing the library panel.\n"},"description":{"type":"string","description":"Description of the library panel.\n"},"folderName":{"type":"string","description":"Name of the folder containing the library panel.\n"},"folderUid":{"type":"string","description":"Unique ID (UID) of the folder containing the library panel.\n"},"modelJson":{"type":"string","description":"The JSON model for the library panel.\n"},"name":{"type":"string","description":"Name of the library panel.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n"},"panelId":{"type":"integer","description":"The numeric ID of the library panel computed by Grafana.\n"},"type":{"type":"string","description":"Type of the library panel (eg. text).\n"},"uid":{"type":"string","description":"The unique identifier (UID) of a library panel uniquely identifies library panels between multiple Grafana installs. It’s automatically generated unless you specify it during library panel creation.The UID provides consistent URLs for accessing library panels and when syncing library panels between multiple Grafana installs.\n"},"updated":{"type":"string","description":"Timestamp when the library panel was last modified.\n"},"version":{"type":"integer","description":"Version of the library panel.\n"}},"required":["created","dashboardIds","description","folderName","modelJson","name","panelId","type","uid","updated","version"],"inputProperties":{"folderUid":{"type":"string","description":"Unique ID (UID) of the folder containing the library panel.\n"},"modelJson":{"type":"string","description":"The JSON model for the library panel.\n"},"name":{"type":"string","description":"Name of the library panel.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"uid":{"type":"string","description":"The unique identifier (UID) of a library panel uniquely identifies library panels between multiple Grafana installs. It’s automatically generated unless you specify it during library panel creation.The UID provides consistent URLs for accessing library panels and when syncing library panels between multiple Grafana installs.\n"}},"requiredInputs":["modelJson"],"stateInputs":{"description":"Input properties used for looking up and filtering LibraryPanel resources.\n","properties":{"created":{"type":"string","description":"Timestamp when the library panel was created.\n"},"dashboardIds":{"type":"array","items":{"type":"integer"},"description":"Numerical IDs of Grafana dashboards containing the library panel.\n"},"description":{"type":"string","description":"Description of the library panel.\n"},"folderName":{"type":"string","description":"Name of the folder containing the library panel.\n"},"folderUid":{"type":"string","description":"Unique ID (UID) of the folder containing the library panel.\n"},"modelJson":{"type":"string","description":"The JSON model for the library panel.\n"},"name":{"type":"string","description":"Name of the library panel.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"panelId":{"type":"integer","description":"The numeric ID of the library panel computed by Grafana.\n"},"type":{"type":"string","description":"Type of the library panel (eg. text).\n"},"uid":{"type":"string","description":"The unique identifier (UID) of a library panel uniquely identifies library panels between multiple Grafana installs. It’s automatically generated unless you specify it during library panel creation.The UID provides consistent URLs for accessing library panels and when syncing library panels between multiple Grafana installs.\n"},"updated":{"type":"string","description":"Timestamp when the library panel was last modified.\n"},"version":{"type":"integer","description":"Version of the library panel.\n"}},"type":"object"},"aliases":[{"type":"grafana:index/libraryPanel:LibraryPanel"}]},"grafana:oss/organization:Organization":{"description":"* [Official documentation](https://grafana.com/docs/grafana/latest/administration/organization-management/)\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/org/)\n\nThis resource represents an instance-scoped resource and uses Grafana's admin APIs.\nIt does not work with API tokens or service accounts which are org-scoped.\nYou must use basic auth. \nThis resource is also not compatible with Grafana Cloud, as it does not allow basic auth.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst test = new grafana.oss.Organization(\"test\", {\n    name: \"Test Organization\",\n    adminUser: \"admin\",\n    createUsers: true,\n    admins: [\"admin@example.com\"],\n    editors: [\n        \"editor-01@example.com\",\n        \"editor-02@example.com\",\n    ],\n    viewers: [\n        \"viewer-01@example.com\",\n        \"viewer-02@example.com\",\n    ],\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\ntest = grafana.oss.Organization(\"test\",\n    name=\"Test Organization\",\n    admin_user=\"admin\",\n    create_users=True,\n    admins=[\"admin@example.com\"],\n    editors=[\n        \"editor-01@example.com\",\n        \"editor-02@example.com\",\n    ],\n    viewers=[\n        \"viewer-01@example.com\",\n        \"viewer-02@example.com\",\n    ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var test = new Grafana.Oss.Organization(\"test\", new()\n    {\n        Name = \"Test Organization\",\n        AdminUser = \"admin\",\n        CreateUsers = true,\n        Admins = new[]\n        {\n            \"admin@example.com\",\n        },\n        Editors = new[]\n        {\n            \"editor-01@example.com\",\n            \"editor-02@example.com\",\n        },\n        Viewers = new[]\n        {\n            \"viewer-01@example.com\",\n            \"viewer-02@example.com\",\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := oss.NewOrganization(ctx, \"test\", \u0026oss.OrganizationArgs{\n\t\t\tName:        pulumi.String(\"Test Organization\"),\n\t\t\tAdminUser:   pulumi.String(\"admin\"),\n\t\t\tCreateUsers: pulumi.Bool(true),\n\t\t\tAdmins: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"admin@example.com\"),\n\t\t\t},\n\t\t\tEditors: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"editor-01@example.com\"),\n\t\t\t\tpulumi.String(\"editor-02@example.com\"),\n\t\t\t},\n\t\t\tViewers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"viewer-01@example.com\"),\n\t\t\t\tpulumi.String(\"viewer-02@example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.Organization;\nimport com.pulumi.grafana.oss.OrganizationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var test = new Organization(\"test\", OrganizationArgs.builder()\n            .name(\"Test Organization\")\n            .adminUser(\"admin\")\n            .createUsers(true)\n            .admins(\"admin@example.com\")\n            .editors(            \n                \"editor-01@example.com\",\n                \"editor-02@example.com\")\n            .viewers(            \n                \"viewer-01@example.com\",\n                \"viewer-02@example.com\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  test:\n    type: grafana:oss:Organization\n    properties:\n      name: Test Organization\n      adminUser: admin\n      createUsers: true\n      admins:\n        - admin@example.com\n      editors:\n        - editor-01@example.com\n        - editor-02@example.com\n      viewers:\n        - viewer-01@example.com\n        - viewer-02@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:oss/organization:Organization name \"{{ id }}\"\n```\n\n","properties":{"adminUser":{"type":"string"},"admins":{"type":"array","items":{"type":"string"},"description":"A list of email addresses corresponding to users who should be given admin\naccess to the organization. Note: users specified here must already exist in\nGrafana unless 'create_users' is set to true.\n"},"createUsers":{"type":"boolean","description":"Whether or not to create Grafana users specified in the organization's\nmembership if they don't already exist in Grafana. If unspecified, this\nparameter defaults to true, creating placeholder users with the name, login,\nand email set to the email of the user, and a random password. Setting this\noption to false will cause an error to be thrown for any users that do not\nalready exist in Grafana.\nDefaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"editors":{"type":"array","items":{"type":"string"},"description":"A list of email addresses corresponding to users who should be given editor\naccess to the organization. Note: users specified here must already exist in\nGrafana unless 'create_users' is set to true.\n"},"name":{"type":"string","description":"The display name for the Grafana organization created.\n"},"orgId":{"type":"integer","description":"The organization id assigned to this organization by Grafana.\n"},"usersWithoutAccesses":{"type":"array","items":{"type":"string"},"description":"A list of email addresses corresponding to users who should be given none access to the organization.\nNote: users specified here must already exist in Grafana, unless 'create_users' is\nset to true. This feature is only available in Grafana 10.2+.\n"},"viewers":{"type":"array","items":{"type":"string"},"description":"A list of email addresses corresponding to users who should be given viewer\naccess to the organization. Note: users specified here must already exist in\nGrafana unless 'create_users' is set to true.\n"}},"required":["name","orgId"],"inputProperties":{"adminUser":{"type":"string"},"admins":{"type":"array","items":{"type":"string"},"description":"A list of email addresses corresponding to users who should be given admin\naccess to the organization. Note: users specified here must already exist in\nGrafana unless 'create_users' is set to true.\n"},"createUsers":{"type":"boolean","description":"Whether or not to create Grafana users specified in the organization's\nmembership if they don't already exist in Grafana. If unspecified, this\nparameter defaults to true, creating placeholder users with the name, login,\nand email set to the email of the user, and a random password. Setting this\noption to false will cause an error to be thrown for any users that do not\nalready exist in Grafana.\nDefaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"editors":{"type":"array","items":{"type":"string"},"description":"A list of email addresses corresponding to users who should be given editor\naccess to the organization. Note: users specified here must already exist in\nGrafana unless 'create_users' is set to true.\n"},"name":{"type":"string","description":"The display name for the Grafana organization created.\n"},"usersWithoutAccesses":{"type":"array","items":{"type":"string"},"description":"A list of email addresses corresponding to users who should be given none access to the organization.\nNote: users specified here must already exist in Grafana, unless 'create_users' is\nset to true. This feature is only available in Grafana 10.2+.\n"},"viewers":{"type":"array","items":{"type":"string"},"description":"A list of email addresses corresponding to users who should be given viewer\naccess to the organization. Note: users specified here must already exist in\nGrafana unless 'create_users' is set to true.\n"}},"stateInputs":{"description":"Input properties used for looking up and filtering Organization resources.\n","properties":{"adminUser":{"type":"string"},"admins":{"type":"array","items":{"type":"string"},"description":"A list of email addresses corresponding to users who should be given admin\naccess to the organization. Note: users specified here must already exist in\nGrafana unless 'create_users' is set to true.\n"},"createUsers":{"type":"boolean","description":"Whether or not to create Grafana users specified in the organization's\nmembership if they don't already exist in Grafana. If unspecified, this\nparameter defaults to true, creating placeholder users with the name, login,\nand email set to the email of the user, and a random password. Setting this\noption to false will cause an error to be thrown for any users that do not\nalready exist in Grafana.\nDefaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"editors":{"type":"array","items":{"type":"string"},"description":"A list of email addresses corresponding to users who should be given editor\naccess to the organization. Note: users specified here must already exist in\nGrafana unless 'create_users' is set to true.\n"},"name":{"type":"string","description":"The display name for the Grafana organization created.\n"},"orgId":{"type":"integer","description":"The organization id assigned to this organization by Grafana.\n"},"usersWithoutAccesses":{"type":"array","items":{"type":"string"},"description":"A list of email addresses corresponding to users who should be given none access to the organization.\nNote: users specified here must already exist in Grafana, unless 'create_users' is\nset to true. This feature is only available in Grafana 10.2+.\n"},"viewers":{"type":"array","items":{"type":"string"},"description":"A list of email addresses corresponding to users who should be given viewer\naccess to the organization. Note: users specified here must already exist in\nGrafana unless 'create_users' is set to true.\n"}},"type":"object"},"aliases":[{"type":"grafana:index/organization:Organization"}]},"grafana:oss/organizationPreferences:OrganizationPreferences":{"description":"* [Official documentation](https://grafana.com/docs/grafana/latest/administration/organization-management/)\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/preferences/#get-current-org-prefs)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst test = new grafana.oss.OrganizationPreferences(\"test\", {\n    theme: \"light\",\n    timezone: \"utc\",\n    weekStart: \"sunday\",\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\ntest = grafana.oss.OrganizationPreferences(\"test\",\n    theme=\"light\",\n    timezone=\"utc\",\n    week_start=\"sunday\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var test = new Grafana.Oss.OrganizationPreferences(\"test\", new()\n    {\n        Theme = \"light\",\n        Timezone = \"utc\",\n        WeekStart = \"sunday\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := oss.NewOrganizationPreferences(ctx, \"test\", \u0026oss.OrganizationPreferencesArgs{\n\t\t\tTheme:     pulumi.String(\"light\"),\n\t\t\tTimezone:  pulumi.String(\"utc\"),\n\t\t\tWeekStart: pulumi.String(\"sunday\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.OrganizationPreferences;\nimport com.pulumi.grafana.oss.OrganizationPreferencesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var test = new OrganizationPreferences(\"test\", OrganizationPreferencesArgs.builder()\n            .theme(\"light\")\n            .timezone(\"utc\")\n            .weekStart(\"sunday\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  test:\n    type: grafana:oss:OrganizationPreferences\n    properties:\n      theme: light\n      timezone: utc\n      weekStart: sunday\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:oss/organizationPreferences:OrganizationPreferences name \"{{ orgID }}\"\n```\n\n","properties":{"homeDashboardUid":{"type":"string","description":"The Organization home dashboard UID. This is only available in Grafana 9.0+.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n"},"theme":{"type":"string","description":"The Organization theme. Any string value is supported, including custom themes. Common values are \u003cspan pulumi-lang-nodejs=\"`light`\" pulumi-lang-dotnet=\"`Light`\" pulumi-lang-go=\"`light`\" pulumi-lang-python=\"`light`\" pulumi-lang-yaml=\"`light`\" pulumi-lang-java=\"`light`\"\u003e`light`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`dark`\" pulumi-lang-dotnet=\"`Dark`\" pulumi-lang-go=\"`dark`\" pulumi-lang-python=\"`dark`\" pulumi-lang-yaml=\"`dark`\" pulumi-lang-java=\"`dark`\"\u003e`dark`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`system`\" pulumi-lang-dotnet=\"`System`\" pulumi-lang-go=\"`system`\" pulumi-lang-python=\"`system`\" pulumi-lang-yaml=\"`system`\" pulumi-lang-java=\"`system`\"\u003e`system`\u003c/span\u003e, or an empty string for the default.\n"},"timezone":{"type":"string","description":"The Organization timezone. Any string value is supported, including IANA timezone names. Common values are \u003cspan pulumi-lang-nodejs=\"`utc`\" pulumi-lang-dotnet=\"`Utc`\" pulumi-lang-go=\"`utc`\" pulumi-lang-python=\"`utc`\" pulumi-lang-yaml=\"`utc`\" pulumi-lang-java=\"`utc`\"\u003e`utc`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`browser`\" pulumi-lang-dotnet=\"`Browser`\" pulumi-lang-go=\"`browser`\" pulumi-lang-python=\"`browser`\" pulumi-lang-yaml=\"`browser`\" pulumi-lang-java=\"`browser`\"\u003e`browser`\u003c/span\u003e, or an empty string for the default.\n"},"weekStart":{"type":"string","description":"The Organization week start day. Available values are \u003cspan pulumi-lang-nodejs=\"`sunday`\" pulumi-lang-dotnet=\"`Sunday`\" pulumi-lang-go=\"`sunday`\" pulumi-lang-python=\"`sunday`\" pulumi-lang-yaml=\"`sunday`\" pulumi-lang-java=\"`sunday`\"\u003e`sunday`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`monday`\" pulumi-lang-dotnet=\"`Monday`\" pulumi-lang-go=\"`monday`\" pulumi-lang-python=\"`monday`\" pulumi-lang-yaml=\"`monday`\" pulumi-lang-java=\"`monday`\"\u003e`monday`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`saturday`\" pulumi-lang-dotnet=\"`Saturday`\" pulumi-lang-go=\"`saturday`\" pulumi-lang-python=\"`saturday`\" pulumi-lang-yaml=\"`saturday`\" pulumi-lang-java=\"`saturday`\"\u003e`saturday`\u003c/span\u003e, or an empty string for the default. Defaults to ``.\n"}},"inputProperties":{"homeDashboardUid":{"type":"string","description":"The Organization home dashboard UID. This is only available in Grafana 9.0+.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"theme":{"type":"string","description":"The Organization theme. Any string value is supported, including custom themes. Common values are \u003cspan pulumi-lang-nodejs=\"`light`\" pulumi-lang-dotnet=\"`Light`\" pulumi-lang-go=\"`light`\" pulumi-lang-python=\"`light`\" pulumi-lang-yaml=\"`light`\" pulumi-lang-java=\"`light`\"\u003e`light`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`dark`\" pulumi-lang-dotnet=\"`Dark`\" pulumi-lang-go=\"`dark`\" pulumi-lang-python=\"`dark`\" pulumi-lang-yaml=\"`dark`\" pulumi-lang-java=\"`dark`\"\u003e`dark`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`system`\" pulumi-lang-dotnet=\"`System`\" pulumi-lang-go=\"`system`\" pulumi-lang-python=\"`system`\" pulumi-lang-yaml=\"`system`\" pulumi-lang-java=\"`system`\"\u003e`system`\u003c/span\u003e, or an empty string for the default.\n"},"timezone":{"type":"string","description":"The Organization timezone. Any string value is supported, including IANA timezone names. Common values are \u003cspan pulumi-lang-nodejs=\"`utc`\" pulumi-lang-dotnet=\"`Utc`\" pulumi-lang-go=\"`utc`\" pulumi-lang-python=\"`utc`\" pulumi-lang-yaml=\"`utc`\" pulumi-lang-java=\"`utc`\"\u003e`utc`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`browser`\" pulumi-lang-dotnet=\"`Browser`\" pulumi-lang-go=\"`browser`\" pulumi-lang-python=\"`browser`\" pulumi-lang-yaml=\"`browser`\" pulumi-lang-java=\"`browser`\"\u003e`browser`\u003c/span\u003e, or an empty string for the default.\n"},"weekStart":{"type":"string","description":"The Organization week start day. Available values are \u003cspan pulumi-lang-nodejs=\"`sunday`\" pulumi-lang-dotnet=\"`Sunday`\" pulumi-lang-go=\"`sunday`\" pulumi-lang-python=\"`sunday`\" pulumi-lang-yaml=\"`sunday`\" pulumi-lang-java=\"`sunday`\"\u003e`sunday`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`monday`\" pulumi-lang-dotnet=\"`Monday`\" pulumi-lang-go=\"`monday`\" pulumi-lang-python=\"`monday`\" pulumi-lang-yaml=\"`monday`\" pulumi-lang-java=\"`monday`\"\u003e`monday`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`saturday`\" pulumi-lang-dotnet=\"`Saturday`\" pulumi-lang-go=\"`saturday`\" pulumi-lang-python=\"`saturday`\" pulumi-lang-yaml=\"`saturday`\" pulumi-lang-java=\"`saturday`\"\u003e`saturday`\u003c/span\u003e, or an empty string for the default. Defaults to ``.\n"}},"stateInputs":{"description":"Input properties used for looking up and filtering OrganizationPreferences resources.\n","properties":{"homeDashboardUid":{"type":"string","description":"The Organization home dashboard UID. This is only available in Grafana 9.0+.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"theme":{"type":"string","description":"The Organization theme. Any string value is supported, including custom themes. Common values are \u003cspan pulumi-lang-nodejs=\"`light`\" pulumi-lang-dotnet=\"`Light`\" pulumi-lang-go=\"`light`\" pulumi-lang-python=\"`light`\" pulumi-lang-yaml=\"`light`\" pulumi-lang-java=\"`light`\"\u003e`light`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`dark`\" pulumi-lang-dotnet=\"`Dark`\" pulumi-lang-go=\"`dark`\" pulumi-lang-python=\"`dark`\" pulumi-lang-yaml=\"`dark`\" pulumi-lang-java=\"`dark`\"\u003e`dark`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`system`\" pulumi-lang-dotnet=\"`System`\" pulumi-lang-go=\"`system`\" pulumi-lang-python=\"`system`\" pulumi-lang-yaml=\"`system`\" pulumi-lang-java=\"`system`\"\u003e`system`\u003c/span\u003e, or an empty string for the default.\n"},"timezone":{"type":"string","description":"The Organization timezone. Any string value is supported, including IANA timezone names. Common values are \u003cspan pulumi-lang-nodejs=\"`utc`\" pulumi-lang-dotnet=\"`Utc`\" pulumi-lang-go=\"`utc`\" pulumi-lang-python=\"`utc`\" pulumi-lang-yaml=\"`utc`\" pulumi-lang-java=\"`utc`\"\u003e`utc`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`browser`\" pulumi-lang-dotnet=\"`Browser`\" pulumi-lang-go=\"`browser`\" pulumi-lang-python=\"`browser`\" pulumi-lang-yaml=\"`browser`\" pulumi-lang-java=\"`browser`\"\u003e`browser`\u003c/span\u003e, or an empty string for the default.\n"},"weekStart":{"type":"string","description":"The Organization week start day. Available values are \u003cspan pulumi-lang-nodejs=\"`sunday`\" pulumi-lang-dotnet=\"`Sunday`\" pulumi-lang-go=\"`sunday`\" pulumi-lang-python=\"`sunday`\" pulumi-lang-yaml=\"`sunday`\" pulumi-lang-java=\"`sunday`\"\u003e`sunday`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`monday`\" pulumi-lang-dotnet=\"`Monday`\" pulumi-lang-go=\"`monday`\" pulumi-lang-python=\"`monday`\" pulumi-lang-yaml=\"`monday`\" pulumi-lang-java=\"`monday`\"\u003e`monday`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`saturday`\" pulumi-lang-dotnet=\"`Saturday`\" pulumi-lang-go=\"`saturday`\" pulumi-lang-python=\"`saturday`\" pulumi-lang-yaml=\"`saturday`\" pulumi-lang-java=\"`saturday`\"\u003e`saturday`\u003c/span\u003e, or an empty string for the default. Defaults to ``.\n"}},"type":"object"},"aliases":[{"type":"grafana:index/organizationPreferences:OrganizationPreferences"}]},"grafana:oss/playlist:Playlist":{"description":"* [Official documentation](https://grafana.com/docs/grafana/latest/dashboards/create-manage-playlists/)\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/playlist/)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst test = new grafana.oss.Playlist(\"test\", {\n    name: \"My Playlist!\",\n    interval: \"5m\",\n    items: [\n        {\n            order: 2,\n            type: \"dashboard_by_tag\",\n            value: \"terraform\",\n        },\n        {\n            order: 1,\n            type: \"dashboard_by_uid\",\n            value: \"cIBgcSjkk\",\n        },\n    ],\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\ntest = grafana.oss.Playlist(\"test\",\n    name=\"My Playlist!\",\n    interval=\"5m\",\n    items=[\n        {\n            \"order\": 2,\n            \"type\": \"dashboard_by_tag\",\n            \"value\": \"terraform\",\n        },\n        {\n            \"order\": 1,\n            \"type\": \"dashboard_by_uid\",\n            \"value\": \"cIBgcSjkk\",\n        },\n    ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var test = new Grafana.Oss.Playlist(\"test\", new()\n    {\n        Name = \"My Playlist!\",\n        Interval = \"5m\",\n        Items = new[]\n        {\n            new Grafana.Oss.Inputs.PlaylistItemArgs\n            {\n                Order = 2,\n                Type = \"dashboard_by_tag\",\n                Value = \"terraform\",\n            },\n            new Grafana.Oss.Inputs.PlaylistItemArgs\n            {\n                Order = 1,\n                Type = \"dashboard_by_uid\",\n                Value = \"cIBgcSjkk\",\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := oss.NewPlaylist(ctx, \"test\", \u0026oss.PlaylistArgs{\n\t\t\tName:     pulumi.String(\"My Playlist!\"),\n\t\t\tInterval: pulumi.String(\"5m\"),\n\t\t\tItems: oss.PlaylistItemArray{\n\t\t\t\t\u0026oss.PlaylistItemArgs{\n\t\t\t\t\tOrder: pulumi.Int(2),\n\t\t\t\t\tType:  pulumi.String(\"dashboard_by_tag\"),\n\t\t\t\t\tValue: pulumi.String(\"terraform\"),\n\t\t\t\t},\n\t\t\t\t\u0026oss.PlaylistItemArgs{\n\t\t\t\t\tOrder: pulumi.Int(1),\n\t\t\t\t\tType:  pulumi.String(\"dashboard_by_uid\"),\n\t\t\t\t\tValue: pulumi.String(\"cIBgcSjkk\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.Playlist;\nimport com.pulumi.grafana.oss.PlaylistArgs;\nimport com.pulumi.grafana.oss.inputs.PlaylistItemArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var test = new Playlist(\"test\", PlaylistArgs.builder()\n            .name(\"My Playlist!\")\n            .interval(\"5m\")\n            .items(            \n                PlaylistItemArgs.builder()\n                    .order(2)\n                    .type(\"dashboard_by_tag\")\n                    .value(\"terraform\")\n                    .build(),\n                PlaylistItemArgs.builder()\n                    .order(1)\n                    .type(\"dashboard_by_uid\")\n                    .value(\"cIBgcSjkk\")\n                    .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  test:\n    type: grafana:oss:Playlist\n    properties:\n      name: My Playlist!\n      interval: 5m\n      items:\n        - order: 2\n          type: dashboard_by_tag\n          value: terraform\n        - order: 1\n          type: dashboard_by_uid\n          value: cIBgcSjkk\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:oss/playlist:Playlist name \"{{ uid }}\"\n```\n\n```sh\n$ pulumi import grafana:oss/playlist:Playlist name \"{{ orgID }}:{{ uid }}\"\n```\n\n","properties":{"interval":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/types/grafana:oss/PlaylistItem:PlaylistItem"}},"name":{"type":"string","description":"The name of the playlist.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n"}},"required":["interval","items","name"],"inputProperties":{"interval":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/types/grafana:oss/PlaylistItem:PlaylistItem"}},"name":{"type":"string","description":"The name of the playlist.\n","willReplaceOnChanges":true},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true}},"requiredInputs":["interval","items"],"stateInputs":{"description":"Input properties used for looking up and filtering Playlist resources.\n","properties":{"interval":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/types/grafana:oss/PlaylistItem:PlaylistItem"}},"name":{"type":"string","description":"The name of the playlist.\n","willReplaceOnChanges":true},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true}},"type":"object"},"aliases":[{"type":"grafana:index/playlist:Playlist"}]},"grafana:oss/serviceAccount:ServiceAccount":{"description":"**Note:** This resource is available only with Grafana 9.1+.\n\n* [Official documentation](https://grafana.com/docs/grafana/latest/administration/service-accounts/)\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/serviceaccount/#service-account-api)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst admin = new grafana.oss.ServiceAccount(\"admin\", {\n    name: \"admin sa\",\n    role: \"Admin\",\n    isDisabled: false,\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\nadmin = grafana.oss.ServiceAccount(\"admin\",\n    name=\"admin sa\",\n    role=\"Admin\",\n    is_disabled=False)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var admin = new Grafana.Oss.ServiceAccount(\"admin\", new()\n    {\n        Name = \"admin sa\",\n        Role = \"Admin\",\n        IsDisabled = false,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := oss.NewServiceAccount(ctx, \"admin\", \u0026oss.ServiceAccountArgs{\n\t\t\tName:       pulumi.String(\"admin sa\"),\n\t\t\tRole:       pulumi.String(\"Admin\"),\n\t\t\tIsDisabled: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.ServiceAccount;\nimport com.pulumi.grafana.oss.ServiceAccountArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var admin = new ServiceAccount(\"admin\", ServiceAccountArgs.builder()\n            .name(\"admin sa\")\n            .role(\"Admin\")\n            .isDisabled(false)\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  admin:\n    type: grafana:oss:ServiceAccount\n    properties:\n      name: admin sa\n      role: Admin\n      isDisabled: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:oss/serviceAccount:ServiceAccount name \"{{ id }}\"\n```\n\n```sh\n$ pulumi import grafana:oss/serviceAccount:ServiceAccount name \"{{ orgID }}:{{ id }}\"\n```\n\n","properties":{"isDisabled":{"type":"boolean","description":"The disabled status for the service account. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"name":{"type":"string","description":"The name of the service account.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n"},"role":{"type":"string","description":"The basic role of the service account in the organization.\n"}},"required":["name","role"],"inputProperties":{"isDisabled":{"type":"boolean","description":"The disabled status for the service account. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"name":{"type":"string","description":"The name of the service account.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"role":{"type":"string","description":"The basic role of the service account in the organization.\n"}},"requiredInputs":["role"],"stateInputs":{"description":"Input properties used for looking up and filtering ServiceAccount resources.\n","properties":{"isDisabled":{"type":"boolean","description":"The disabled status for the service account. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"name":{"type":"string","description":"The name of the service account.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"role":{"type":"string","description":"The basic role of the service account in the organization.\n"}},"type":"object"},"aliases":[{"type":"grafana:index/serviceAccount:ServiceAccount"}]},"grafana:oss/serviceAccountPermission:ServiceAccountPermission":{"description":"Manages the entire set of permissions for a service account. Permissions that aren't specified when applying this resource will be removed.\n\n**Note:** This resource is available from Grafana 9.2.4 onwards.\n\n* [Official documentation](https://grafana.com/docs/grafana/latest/administration/service-accounts/#manage-users-and-teams-permissions-for-a-service-account-in-grafana)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst test = new grafana.oss.ServiceAccount(\"test\", {\n    name: \"sa-terraform-test\",\n    role: \"Editor\",\n    isDisabled: false,\n});\nconst testTeam = new grafana.oss.Team(\"test_team\", {name: \"tf_test_team\"});\nconst testUser = new grafana.oss.User(\"test_user\", {\n    email: \"tf_user@test.com\",\n    login: \"tf_user@test.com\",\n    password: \"password\",\n});\nconst testPermissions = new grafana.oss.ServiceAccountPermission(\"test_permissions\", {\n    serviceAccountId: test.id,\n    permissions: [\n        {\n            userId: testUser.id,\n            permission: \"Edit\",\n        },\n        {\n            teamId: testTeam.id,\n            permission: \"Admin\",\n        },\n    ],\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\ntest = grafana.oss.ServiceAccount(\"test\",\n    name=\"sa-terraform-test\",\n    role=\"Editor\",\n    is_disabled=False)\ntest_team = grafana.oss.Team(\"test_team\", name=\"tf_test_team\")\ntest_user = grafana.oss.User(\"test_user\",\n    email=\"tf_user@test.com\",\n    login=\"tf_user@test.com\",\n    password=\"password\")\ntest_permissions = grafana.oss.ServiceAccountPermission(\"test_permissions\",\n    service_account_id=test.id,\n    permissions=[\n        {\n            \"user_id\": test_user.id,\n            \"permission\": \"Edit\",\n        },\n        {\n            \"team_id\": test_team.id,\n            \"permission\": \"Admin\",\n        },\n    ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var test = new Grafana.Oss.ServiceAccount(\"test\", new()\n    {\n        Name = \"sa-terraform-test\",\n        Role = \"Editor\",\n        IsDisabled = false,\n    });\n\n    var testTeam = new Grafana.Oss.Team(\"test_team\", new()\n    {\n        Name = \"tf_test_team\",\n    });\n\n    var testUser = new Grafana.Oss.User(\"test_user\", new()\n    {\n        Email = \"tf_user@test.com\",\n        Login = \"tf_user@test.com\",\n        Password = \"password\",\n    });\n\n    var testPermissions = new Grafana.Oss.ServiceAccountPermission(\"test_permissions\", new()\n    {\n        ServiceAccountId = test.Id,\n        Permissions = new[]\n        {\n            new Grafana.Oss.Inputs.ServiceAccountPermissionPermissionArgs\n            {\n                UserId = testUser.Id,\n                Permission = \"Edit\",\n            },\n            new Grafana.Oss.Inputs.ServiceAccountPermissionPermissionArgs\n            {\n                TeamId = testTeam.Id,\n                Permission = \"Admin\",\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := oss.NewServiceAccount(ctx, \"test\", \u0026oss.ServiceAccountArgs{\n\t\t\tName:       pulumi.String(\"sa-terraform-test\"),\n\t\t\tRole:       pulumi.String(\"Editor\"),\n\t\t\tIsDisabled: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestTeam, err := oss.NewTeam(ctx, \"test_team\", \u0026oss.TeamArgs{\n\t\t\tName: pulumi.String(\"tf_test_team\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestUser, err := oss.NewUser(ctx, \"test_user\", \u0026oss.UserArgs{\n\t\t\tEmail:    pulumi.String(\"tf_user@test.com\"),\n\t\t\tLogin:    pulumi.String(\"tf_user@test.com\"),\n\t\t\tPassword: pulumi.String(\"password\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oss.NewServiceAccountPermission(ctx, \"test_permissions\", \u0026oss.ServiceAccountPermissionArgs{\n\t\t\tServiceAccountId: test.ID(),\n\t\t\tPermissions: oss.ServiceAccountPermissionPermissionArray{\n\t\t\t\t\u0026oss.ServiceAccountPermissionPermissionArgs{\n\t\t\t\t\tUserId:     testUser.ID(),\n\t\t\t\t\tPermission: pulumi.String(\"Edit\"),\n\t\t\t\t},\n\t\t\t\t\u0026oss.ServiceAccountPermissionPermissionArgs{\n\t\t\t\t\tTeamId:     testTeam.ID(),\n\t\t\t\t\tPermission: pulumi.String(\"Admin\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.ServiceAccount;\nimport com.pulumi.grafana.oss.ServiceAccountArgs;\nimport com.pulumi.grafana.oss.Team;\nimport com.pulumi.grafana.oss.TeamArgs;\nimport com.pulumi.grafana.oss.User;\nimport com.pulumi.grafana.oss.UserArgs;\nimport com.pulumi.grafana.oss.ServiceAccountPermission;\nimport com.pulumi.grafana.oss.ServiceAccountPermissionArgs;\nimport com.pulumi.grafana.oss.inputs.ServiceAccountPermissionPermissionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var test = new ServiceAccount(\"test\", ServiceAccountArgs.builder()\n            .name(\"sa-terraform-test\")\n            .role(\"Editor\")\n            .isDisabled(false)\n            .build());\n\n        var testTeam = new Team(\"testTeam\", TeamArgs.builder()\n            .name(\"tf_test_team\")\n            .build());\n\n        var testUser = new User(\"testUser\", UserArgs.builder()\n            .email(\"tf_user@test.com\")\n            .login(\"tf_user@test.com\")\n            .password(\"password\")\n            .build());\n\n        var testPermissions = new ServiceAccountPermission(\"testPermissions\", ServiceAccountPermissionArgs.builder()\n            .serviceAccountId(test.id())\n            .permissions(            \n                ServiceAccountPermissionPermissionArgs.builder()\n                    .userId(testUser.id())\n                    .permission(\"Edit\")\n                    .build(),\n                ServiceAccountPermissionPermissionArgs.builder()\n                    .teamId(testTeam.id())\n                    .permission(\"Admin\")\n                    .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  test:\n    type: grafana:oss:ServiceAccount\n    properties:\n      name: sa-terraform-test\n      role: Editor\n      isDisabled: false\n  testTeam:\n    type: grafana:oss:Team\n    name: test_team\n    properties:\n      name: tf_test_team\n  testUser:\n    type: grafana:oss:User\n    name: test_user\n    properties:\n      email: tf_user@test.com\n      login: tf_user@test.com\n      password: password\n  testPermissions:\n    type: grafana:oss:ServiceAccountPermission\n    name: test_permissions\n    properties:\n      serviceAccountId: ${test.id}\n      permissions:\n        - userId: ${testUser.id}\n          permission: Edit\n        - teamId: ${testTeam.id}\n          permission: Admin\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:oss/serviceAccountPermission:ServiceAccountPermission name \"{{ serviceAccountID }}\"\n```\n\n```sh\n$ pulumi import grafana:oss/serviceAccountPermission:ServiceAccountPermission name \"{{ orgID }}:{{ serviceAccountID }}\"\n```\n\n","properties":{"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n"},"permissions":{"type":"array","items":{"$ref":"#/types/grafana:oss/ServiceAccountPermissionPermission:ServiceAccountPermissionPermission"},"description":"The permission items to add/update. Items that are omitted from the list will be removed.\n"},"serviceAccountId":{"type":"string","description":"The id of the service account.\n"}},"required":["serviceAccountId"],"inputProperties":{"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"permissions":{"type":"array","items":{"$ref":"#/types/grafana:oss/ServiceAccountPermissionPermission:ServiceAccountPermissionPermission"},"description":"The permission items to add/update. Items that are omitted from the list will be removed.\n"},"serviceAccountId":{"type":"string","description":"The id of the service account.\n","willReplaceOnChanges":true}},"requiredInputs":["serviceAccountId"],"stateInputs":{"description":"Input properties used for looking up and filtering ServiceAccountPermission resources.\n","properties":{"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"permissions":{"type":"array","items":{"$ref":"#/types/grafana:oss/ServiceAccountPermissionPermission:ServiceAccountPermissionPermission"},"description":"The permission items to add/update. Items that are omitted from the list will be removed.\n"},"serviceAccountId":{"type":"string","description":"The id of the service account.\n","willReplaceOnChanges":true}},"type":"object"},"aliases":[{"type":"grafana:index/serviceAccountPermission:ServiceAccountPermission"}]},"grafana:oss/serviceAccountPermissionItem:ServiceAccountPermissionItem":{"description":"Manages a single permission item for a service account. Conflicts with the \u003cspan pulumi-lang-nodejs=\"\"grafana.oss.ServiceAccountPermission\"\" pulumi-lang-dotnet=\"\"grafana.oss.ServiceAccountPermission\"\" pulumi-lang-go=\"\"oss.ServiceAccountPermission\"\" pulumi-lang-python=\"\"oss.ServiceAccountPermission\"\" pulumi-lang-yaml=\"\"grafana.oss.ServiceAccountPermission\"\" pulumi-lang-java=\"\"grafana.oss.ServiceAccountPermission\"\"\u003e\"grafana.oss.ServiceAccountPermission\"\u003c/span\u003e resource which manages the entire set of permissions for a service account.\n* [Official documentation](https://grafana.com/docs/grafana/latest/administration/service-accounts/#manage-users-and-teams-permissions-for-a-service-account-in-grafana)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst test = new grafana.oss.ServiceAccount(\"test\", {\n    name: \"terraform-sa\",\n    role: \"Editor\",\n    isDisabled: false,\n});\nconst team = new grafana.oss.Team(\"team\", {name: \"Team Name\"});\nconst user = new grafana.oss.User(\"user\", {\n    email: \"user.name@example.com\",\n    login: \"user.name\",\n    password: \"my-password\",\n});\nconst onTeam = new grafana.oss.ServiceAccountPermissionItem(\"on_team\", {\n    serviceAccountId: test.id,\n    team: team.id,\n    permission: \"Admin\",\n});\nconst onUser = new grafana.oss.ServiceAccountPermissionItem(\"on_user\", {\n    serviceAccountId: test.id,\n    user: user.id,\n    permission: \"Admin\",\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\ntest = grafana.oss.ServiceAccount(\"test\",\n    name=\"terraform-sa\",\n    role=\"Editor\",\n    is_disabled=False)\nteam = grafana.oss.Team(\"team\", name=\"Team Name\")\nuser = grafana.oss.User(\"user\",\n    email=\"user.name@example.com\",\n    login=\"user.name\",\n    password=\"my-password\")\non_team = grafana.oss.ServiceAccountPermissionItem(\"on_team\",\n    service_account_id=test.id,\n    team=team.id,\n    permission=\"Admin\")\non_user = grafana.oss.ServiceAccountPermissionItem(\"on_user\",\n    service_account_id=test.id,\n    user=user.id,\n    permission=\"Admin\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var test = new Grafana.Oss.ServiceAccount(\"test\", new()\n    {\n        Name = \"terraform-sa\",\n        Role = \"Editor\",\n        IsDisabled = false,\n    });\n\n    var team = new Grafana.Oss.Team(\"team\", new()\n    {\n        Name = \"Team Name\",\n    });\n\n    var user = new Grafana.Oss.User(\"user\", new()\n    {\n        Email = \"user.name@example.com\",\n        Login = \"user.name\",\n        Password = \"my-password\",\n    });\n\n    var onTeam = new Grafana.Oss.ServiceAccountPermissionItem(\"on_team\", new()\n    {\n        ServiceAccountId = test.Id,\n        Team = team.Id,\n        Permission = \"Admin\",\n    });\n\n    var onUser = new Grafana.Oss.ServiceAccountPermissionItem(\"on_user\", new()\n    {\n        ServiceAccountId = test.Id,\n        User = user.Id,\n        Permission = \"Admin\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := oss.NewServiceAccount(ctx, \"test\", \u0026oss.ServiceAccountArgs{\n\t\t\tName:       pulumi.String(\"terraform-sa\"),\n\t\t\tRole:       pulumi.String(\"Editor\"),\n\t\t\tIsDisabled: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tteam, err := oss.NewTeam(ctx, \"team\", \u0026oss.TeamArgs{\n\t\t\tName: pulumi.String(\"Team Name\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tuser, err := oss.NewUser(ctx, \"user\", \u0026oss.UserArgs{\n\t\t\tEmail:    pulumi.String(\"user.name@example.com\"),\n\t\t\tLogin:    pulumi.String(\"user.name\"),\n\t\t\tPassword: pulumi.String(\"my-password\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oss.NewServiceAccountPermissionItem(ctx, \"on_team\", \u0026oss.ServiceAccountPermissionItemArgs{\n\t\t\tServiceAccountId: test.ID(),\n\t\t\tTeam:             team.ID(),\n\t\t\tPermission:       pulumi.String(\"Admin\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oss.NewServiceAccountPermissionItem(ctx, \"on_user\", \u0026oss.ServiceAccountPermissionItemArgs{\n\t\t\tServiceAccountId: test.ID(),\n\t\t\tUser:             user.ID(),\n\t\t\tPermission:       pulumi.String(\"Admin\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.ServiceAccount;\nimport com.pulumi.grafana.oss.ServiceAccountArgs;\nimport com.pulumi.grafana.oss.Team;\nimport com.pulumi.grafana.oss.TeamArgs;\nimport com.pulumi.grafana.oss.User;\nimport com.pulumi.grafana.oss.UserArgs;\nimport com.pulumi.grafana.oss.ServiceAccountPermissionItem;\nimport com.pulumi.grafana.oss.ServiceAccountPermissionItemArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var test = new ServiceAccount(\"test\", ServiceAccountArgs.builder()\n            .name(\"terraform-sa\")\n            .role(\"Editor\")\n            .isDisabled(false)\n            .build());\n\n        var team = new Team(\"team\", TeamArgs.builder()\n            .name(\"Team Name\")\n            .build());\n\n        var user = new User(\"user\", UserArgs.builder()\n            .email(\"user.name@example.com\")\n            .login(\"user.name\")\n            .password(\"my-password\")\n            .build());\n\n        var onTeam = new ServiceAccountPermissionItem(\"onTeam\", ServiceAccountPermissionItemArgs.builder()\n            .serviceAccountId(test.id())\n            .team(team.id())\n            .permission(\"Admin\")\n            .build());\n\n        var onUser = new ServiceAccountPermissionItem(\"onUser\", ServiceAccountPermissionItemArgs.builder()\n            .serviceAccountId(test.id())\n            .user(user.id())\n            .permission(\"Admin\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  test:\n    type: grafana:oss:ServiceAccount\n    properties:\n      name: terraform-sa\n      role: Editor\n      isDisabled: false\n  team:\n    type: grafana:oss:Team\n    properties:\n      name: Team Name\n  user:\n    type: grafana:oss:User\n    properties:\n      email: user.name@example.com\n      login: user.name\n      password: my-password\n  onTeam:\n    type: grafana:oss:ServiceAccountPermissionItem\n    name: on_team\n    properties:\n      serviceAccountId: ${test.id}\n      team: ${team.id}\n      permission: Admin\n  onUser:\n    type: grafana:oss:ServiceAccountPermissionItem\n    name: on_user\n    properties:\n      serviceAccountId: ${test.id}\n      user: ${user.id}\n      permission: Admin\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:oss/serviceAccountPermissionItem:ServiceAccountPermissionItem name \"{{ serviceAccountID }}:{{ type (role, team, or user) }}:{{ identifier }}\"\n```\n\n```sh\n$ pulumi import grafana:oss/serviceAccountPermissionItem:ServiceAccountPermissionItem name \"{{ orgID }}:{{ serviceAccountID }}:{{ type (role, team, or user) }}:{{ identifier }}\"\n```\n\n","properties":{"orgId":{"type":"string","description":"The Organization ID. If not set, the default organization is used for basic authentication, or the one that owns your service account for token authentication.\n"},"permission":{"type":"string","description":"the permission to be assigned\n"},"serviceAccountId":{"type":"string","description":"The ID of the service account.\n"},"team":{"type":"string","description":"the team onto which the permission is to be assigned\n"},"user":{"type":"string","description":"the user or service account onto which the permission is to be assigned\n"}},"required":["orgId","permission","serviceAccountId"],"inputProperties":{"orgId":{"type":"string","description":"The Organization ID. If not set, the default organization is used for basic authentication, or the one that owns your service account for token authentication.\n"},"permission":{"type":"string","description":"the permission to be assigned\n"},"serviceAccountId":{"type":"string","description":"The ID of the service account.\n"},"team":{"type":"string","description":"the team onto which the permission is to be assigned\n"},"user":{"type":"string","description":"the user or service account onto which the permission is to be assigned\n"}},"requiredInputs":["permission","serviceAccountId"],"stateInputs":{"description":"Input properties used for looking up and filtering ServiceAccountPermissionItem resources.\n","properties":{"orgId":{"type":"string","description":"The Organization ID. If not set, the default organization is used for basic authentication, or the one that owns your service account for token authentication.\n"},"permission":{"type":"string","description":"the permission to be assigned\n"},"serviceAccountId":{"type":"string","description":"The ID of the service account.\n"},"team":{"type":"string","description":"the team onto which the permission is to be assigned\n"},"user":{"type":"string","description":"the user or service account onto which the permission is to be assigned\n"}},"type":"object"},"aliases":[{"type":"grafana:index/serviceAccountPermissionItem:ServiceAccountPermissionItem"}]},"grafana:oss/serviceAccountRotatingToken:ServiceAccountRotatingToken":{"description":"**Note:** This resource is available only with Grafana 9.1+.\n\n* [Official documentation](https://grafana.com/docs/grafana/latest/administration/service-accounts/)\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/serviceaccount/#service-account-api)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst test = new grafana.oss.ServiceAccount(\"test\", {\n    name: \"test-service-account\",\n    role: \"Viewer\",\n});\nconst foo = new grafana.oss.ServiceAccountRotatingToken(\"foo\", {\n    namePrefix: \"key_foo\",\n    serviceAccountId: test.id,\n    secondsToLive: 7776000,\n    earlyRotationWindowSeconds: 604800,\n});\nexport const serviceAccountTokenFooKey = foo.key;\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\ntest = grafana.oss.ServiceAccount(\"test\",\n    name=\"test-service-account\",\n    role=\"Viewer\")\nfoo = grafana.oss.ServiceAccountRotatingToken(\"foo\",\n    name_prefix=\"key_foo\",\n    service_account_id=test.id,\n    seconds_to_live=7776000,\n    early_rotation_window_seconds=604800)\npulumi.export(\"serviceAccountTokenFooKey\", foo.key)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var test = new Grafana.Oss.ServiceAccount(\"test\", new()\n    {\n        Name = \"test-service-account\",\n        Role = \"Viewer\",\n    });\n\n    var foo = new Grafana.Oss.ServiceAccountRotatingToken(\"foo\", new()\n    {\n        NamePrefix = \"key_foo\",\n        ServiceAccountId = test.Id,\n        SecondsToLive = 7776000,\n        EarlyRotationWindowSeconds = 604800,\n    });\n\n    return new Dictionary\u003cstring, object?\u003e\n    {\n        [\"serviceAccountTokenFooKey\"] = foo.Key,\n    };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := oss.NewServiceAccount(ctx, \"test\", \u0026oss.ServiceAccountArgs{\n\t\t\tName: pulumi.String(\"test-service-account\"),\n\t\t\tRole: pulumi.String(\"Viewer\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfoo, err := oss.NewServiceAccountRotatingToken(ctx, \"foo\", \u0026oss.ServiceAccountRotatingTokenArgs{\n\t\t\tNamePrefix:                 pulumi.String(\"key_foo\"),\n\t\t\tServiceAccountId:           test.ID(),\n\t\t\tSecondsToLive:              pulumi.Int(7776000),\n\t\t\tEarlyRotationWindowSeconds: pulumi.Int(604800),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"serviceAccountTokenFooKey\", foo.Key)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.ServiceAccount;\nimport com.pulumi.grafana.oss.ServiceAccountArgs;\nimport com.pulumi.grafana.oss.ServiceAccountRotatingToken;\nimport com.pulumi.grafana.oss.ServiceAccountRotatingTokenArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var test = new ServiceAccount(\"test\", ServiceAccountArgs.builder()\n            .name(\"test-service-account\")\n            .role(\"Viewer\")\n            .build());\n\n        var foo = new ServiceAccountRotatingToken(\"foo\", ServiceAccountRotatingTokenArgs.builder()\n            .namePrefix(\"key_foo\")\n            .serviceAccountId(test.id())\n            .secondsToLive(7776000)\n            .earlyRotationWindowSeconds(604800)\n            .build());\n\n        ctx.export(\"serviceAccountTokenFooKey\", foo.key());\n    }\n}\n```\n```yaml\nresources:\n  test:\n    type: grafana:oss:ServiceAccount\n    properties:\n      name: test-service-account\n      role: Viewer\n  foo:\n    type: grafana:oss:ServiceAccountRotatingToken\n    properties:\n      namePrefix: key_foo\n      serviceAccountId: ${test.id}\n      secondsToLive: 7.776e+06 # 3 months\n      earlyRotationWindowSeconds: 604800 # 1 week\noutputs:\n  serviceAccountTokenFooKey: ${foo.key}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"deleteOnDestroy":{"type":"boolean"},"earlyRotationWindowSeconds":{"type":"integer","description":"Duration of the time window before expiring where the token can be rotated, in seconds.\n"},"expiration":{"type":"string","description":"The expiration date of the service account token.\n"},"hasExpired":{"type":"boolean","description":"The status of the service account token.\n"},"key":{"type":"string","description":"The key of the service account token.\n","secret":true},"name":{"type":"string","description":"The name of the service account token. It will start with `\u003cname_prefix\u003e-` and will have characters appended to it to make the name unique.\n"},"namePrefix":{"type":"string","description":"Prefix for the name of the service account tokens created by this resource. The actual name will be stored in the computed field \u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e, which will be in the format `\u003cname_prefix\u003e-\u003cadditional_characters\u003e`.\n"},"readyForRotation":{"type":"boolean","description":"Signals that the service account token is expired or within the period to be early rotated.\n"},"secondsToLive":{"type":"integer","description":"The token expiration in seconds.\n"},"serviceAccountId":{"type":"string","description":"The ID of the service account to which the token belongs.\n"}},"required":["earlyRotationWindowSeconds","expiration","hasExpired","key","name","namePrefix","readyForRotation","secondsToLive","serviceAccountId"],"inputProperties":{"deleteOnDestroy":{"type":"boolean"},"earlyRotationWindowSeconds":{"type":"integer","description":"Duration of the time window before expiring where the token can be rotated, in seconds.\n"},"namePrefix":{"type":"string","description":"Prefix for the name of the service account tokens created by this resource. The actual name will be stored in the computed field \u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e, which will be in the format `\u003cname_prefix\u003e-\u003cadditional_characters\u003e`.\n","willReplaceOnChanges":true},"secondsToLive":{"type":"integer","description":"The token expiration in seconds.\n","willReplaceOnChanges":true},"serviceAccountId":{"type":"string","description":"The ID of the service account to which the token belongs.\n","willReplaceOnChanges":true}},"requiredInputs":["earlyRotationWindowSeconds","namePrefix","secondsToLive","serviceAccountId"],"stateInputs":{"description":"Input properties used for looking up and filtering ServiceAccountRotatingToken resources.\n","properties":{"deleteOnDestroy":{"type":"boolean"},"earlyRotationWindowSeconds":{"type":"integer","description":"Duration of the time window before expiring where the token can be rotated, in seconds.\n"},"expiration":{"type":"string","description":"The expiration date of the service account token.\n"},"hasExpired":{"type":"boolean","description":"The status of the service account token.\n"},"key":{"type":"string","description":"The key of the service account token.\n","secret":true},"name":{"type":"string","description":"The name of the service account token. It will start with `\u003cname_prefix\u003e-` and will have characters appended to it to make the name unique.\n"},"namePrefix":{"type":"string","description":"Prefix for the name of the service account tokens created by this resource. The actual name will be stored in the computed field \u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e, which will be in the format `\u003cname_prefix\u003e-\u003cadditional_characters\u003e`.\n","willReplaceOnChanges":true},"readyForRotation":{"type":"boolean","description":"Signals that the service account token is expired or within the period to be early rotated.\n","willReplaceOnChanges":true},"secondsToLive":{"type":"integer","description":"The token expiration in seconds.\n","willReplaceOnChanges":true},"serviceAccountId":{"type":"string","description":"The ID of the service account to which the token belongs.\n","willReplaceOnChanges":true}},"type":"object"}},"grafana:oss/serviceAccountToken:ServiceAccountToken":{"description":"**Note:** This resource is available only with Grafana 9.1+.\n\n* [Official documentation](https://grafana.com/docs/grafana/latest/administration/service-accounts/)\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/serviceaccount/#service-account-api)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst test = new grafana.oss.ServiceAccount(\"test\", {\n    name: \"test-service-account\",\n    role: \"Viewer\",\n});\nconst foo = new grafana.oss.ServiceAccountToken(\"foo\", {\n    name: \"key_foo\",\n    serviceAccountId: test.id,\n});\nconst bar = new grafana.oss.ServiceAccountToken(\"bar\", {\n    name: \"key_bar\",\n    serviceAccountId: test.id,\n    secondsToLive: 30,\n});\nexport const serviceAccountTokenFooKeyOnly = foo.key;\nexport const serviceAccountTokenBar = bar;\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\ntest = grafana.oss.ServiceAccount(\"test\",\n    name=\"test-service-account\",\n    role=\"Viewer\")\nfoo = grafana.oss.ServiceAccountToken(\"foo\",\n    name=\"key_foo\",\n    service_account_id=test.id)\nbar = grafana.oss.ServiceAccountToken(\"bar\",\n    name=\"key_bar\",\n    service_account_id=test.id,\n    seconds_to_live=30)\npulumi.export(\"serviceAccountTokenFooKeyOnly\", foo.key)\npulumi.export(\"serviceAccountTokenBar\", bar)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var test = new Grafana.Oss.ServiceAccount(\"test\", new()\n    {\n        Name = \"test-service-account\",\n        Role = \"Viewer\",\n    });\n\n    var foo = new Grafana.Oss.ServiceAccountToken(\"foo\", new()\n    {\n        Name = \"key_foo\",\n        ServiceAccountId = test.Id,\n    });\n\n    var bar = new Grafana.Oss.ServiceAccountToken(\"bar\", new()\n    {\n        Name = \"key_bar\",\n        ServiceAccountId = test.Id,\n        SecondsToLive = 30,\n    });\n\n    return new Dictionary\u003cstring, object?\u003e\n    {\n        [\"serviceAccountTokenFooKeyOnly\"] = foo.Key,\n        [\"serviceAccountTokenBar\"] = bar,\n    };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := oss.NewServiceAccount(ctx, \"test\", \u0026oss.ServiceAccountArgs{\n\t\t\tName: pulumi.String(\"test-service-account\"),\n\t\t\tRole: pulumi.String(\"Viewer\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfoo, err := oss.NewServiceAccountToken(ctx, \"foo\", \u0026oss.ServiceAccountTokenArgs{\n\t\t\tName:             pulumi.String(\"key_foo\"),\n\t\t\tServiceAccountId: test.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbar, err := oss.NewServiceAccountToken(ctx, \"bar\", \u0026oss.ServiceAccountTokenArgs{\n\t\t\tName:             pulumi.String(\"key_bar\"),\n\t\t\tServiceAccountId: test.ID(),\n\t\t\tSecondsToLive:    pulumi.Int(30),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"serviceAccountTokenFooKeyOnly\", foo.Key)\n\t\tctx.Export(\"serviceAccountTokenBar\", bar)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.ServiceAccount;\nimport com.pulumi.grafana.oss.ServiceAccountArgs;\nimport com.pulumi.grafana.oss.ServiceAccountToken;\nimport com.pulumi.grafana.oss.ServiceAccountTokenArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var test = new ServiceAccount(\"test\", ServiceAccountArgs.builder()\n            .name(\"test-service-account\")\n            .role(\"Viewer\")\n            .build());\n\n        var foo = new ServiceAccountToken(\"foo\", ServiceAccountTokenArgs.builder()\n            .name(\"key_foo\")\n            .serviceAccountId(test.id())\n            .build());\n\n        var bar = new ServiceAccountToken(\"bar\", ServiceAccountTokenArgs.builder()\n            .name(\"key_bar\")\n            .serviceAccountId(test.id())\n            .secondsToLive(30)\n            .build());\n\n        ctx.export(\"serviceAccountTokenFooKeyOnly\", foo.key());\n        ctx.export(\"serviceAccountTokenBar\", bar);\n    }\n}\n```\n```yaml\nresources:\n  test:\n    type: grafana:oss:ServiceAccount\n    properties:\n      name: test-service-account\n      role: Viewer\n  foo:\n    type: grafana:oss:ServiceAccountToken\n    properties:\n      name: key_foo\n      serviceAccountId: ${test.id}\n  bar:\n    type: grafana:oss:ServiceAccountToken\n    properties:\n      name: key_bar\n      serviceAccountId: ${test.id}\n      secondsToLive: 30\noutputs:\n  serviceAccountTokenFooKeyOnly: ${foo.key}\n  serviceAccountTokenBar: ${bar}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"expiration":{"type":"string","description":"The expiration date of the service account token.\n"},"hasExpired":{"type":"boolean","description":"The status of the service account token.\n"},"key":{"type":"string","description":"The key of the service account token.\n","secret":true},"name":{"type":"string","description":"The name of the service account token.\n"},"secondsToLive":{"type":"integer","description":"The key expiration in seconds. It is optional. If it is a positive number an expiration date for the key is set. If it is null, zero or is omitted completely (unless \u003cspan pulumi-lang-nodejs=\"`apiKeyMaxSecondsToLive`\" pulumi-lang-dotnet=\"`ApiKeyMaxSecondsToLive`\" pulumi-lang-go=\"`apiKeyMaxSecondsToLive`\" pulumi-lang-python=\"`api_key_max_seconds_to_live`\" pulumi-lang-yaml=\"`apiKeyMaxSecondsToLive`\" pulumi-lang-java=\"`apiKeyMaxSecondsToLive`\"\u003e`api_key_max_seconds_to_live`\u003c/span\u003e configuration option is set) the key will never expire.\n"},"serviceAccountId":{"type":"string","description":"The ID of the service account to which the token belongs.\n"}},"required":["expiration","hasExpired","key","name","serviceAccountId"],"inputProperties":{"name":{"type":"string","description":"The name of the service account token.\n","willReplaceOnChanges":true},"secondsToLive":{"type":"integer","description":"The key expiration in seconds. It is optional. If it is a positive number an expiration date for the key is set. If it is null, zero or is omitted completely (unless \u003cspan pulumi-lang-nodejs=\"`apiKeyMaxSecondsToLive`\" pulumi-lang-dotnet=\"`ApiKeyMaxSecondsToLive`\" pulumi-lang-go=\"`apiKeyMaxSecondsToLive`\" pulumi-lang-python=\"`api_key_max_seconds_to_live`\" pulumi-lang-yaml=\"`apiKeyMaxSecondsToLive`\" pulumi-lang-java=\"`apiKeyMaxSecondsToLive`\"\u003e`api_key_max_seconds_to_live`\u003c/span\u003e configuration option is set) the key will never expire.\n","willReplaceOnChanges":true},"serviceAccountId":{"type":"string","description":"The ID of the service account to which the token belongs.\n","willReplaceOnChanges":true}},"requiredInputs":["serviceAccountId"],"stateInputs":{"description":"Input properties used for looking up and filtering ServiceAccountToken resources.\n","properties":{"expiration":{"type":"string","description":"The expiration date of the service account token.\n"},"hasExpired":{"type":"boolean","description":"The status of the service account token.\n"},"key":{"type":"string","description":"The key of the service account token.\n","secret":true},"name":{"type":"string","description":"The name of the service account token.\n","willReplaceOnChanges":true},"secondsToLive":{"type":"integer","description":"The key expiration in seconds. It is optional. If it is a positive number an expiration date for the key is set. If it is null, zero or is omitted completely (unless \u003cspan pulumi-lang-nodejs=\"`apiKeyMaxSecondsToLive`\" pulumi-lang-dotnet=\"`ApiKeyMaxSecondsToLive`\" pulumi-lang-go=\"`apiKeyMaxSecondsToLive`\" pulumi-lang-python=\"`api_key_max_seconds_to_live`\" pulumi-lang-yaml=\"`apiKeyMaxSecondsToLive`\" pulumi-lang-java=\"`apiKeyMaxSecondsToLive`\"\u003e`api_key_max_seconds_to_live`\u003c/span\u003e configuration option is set) the key will never expire.\n","willReplaceOnChanges":true},"serviceAccountId":{"type":"string","description":"The ID of the service account to which the token belongs.\n","willReplaceOnChanges":true}},"type":"object"},"aliases":[{"type":"grafana:index/serviceAccountToken:ServiceAccountToken"}]},"grafana:oss/ssoSettings:SsoSettings":{"description":"Manages Grafana SSO Settings for OAuth2, SAML and LDAP. Support for LDAP is currently in preview, it will be available in Grafana starting with v11.3.\n\n* [Official documentation](https://grafana.com/docs/grafana/latest/setup-grafana/configure-security/configure-authentication/)\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/sso-settings/)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\n// Configure SSO for GitHub using OAuth2\nconst githubSsoSettings = new grafana.oss.SsoSettings(\"github_sso_settings\", {\n    providerName: \"github\",\n    oauth2Settings: {\n        name: \"Github\",\n        clientId: \"\u003cyour GitHub app client id\u003e\",\n        clientSecret: \"\u003cyour GitHub app client secret\u003e\",\n        allowSignUp: true,\n        autoLogin: false,\n        scopes: \"user:email,read:org\",\n        teamIds: \"150,300\",\n        allowedOrganizations: \"[\\\"My Organization\\\", \\\"Octocats\\\"]\",\n        allowedDomains: \"mycompany.com mycompany.org\",\n    },\n});\n// Configure SSO using generic OAuth2\nconst genericSsoSettings = new grafana.oss.SsoSettings(\"generic_sso_settings\", {\n    providerName: \"generic_oauth\",\n    oauth2Settings: {\n        name: \"Auth0\",\n        authUrl: \"https://\u003cdomain\u003e/authorize\",\n        tokenUrl: \"https://\u003cdomain\u003e/oauth/token\",\n        apiUrl: \"https://\u003cdomain\u003e/userinfo\",\n        clientId: \"\u003cclient id\u003e\",\n        clientSecret: \"\u003cclient secret\u003e\",\n        allowSignUp: true,\n        autoLogin: false,\n        scopes: \"openid profile email offline_access\",\n        usePkce: true,\n        useRefreshToken: true,\n    },\n});\n// Configure SSO using SAML\nconst samlSsoSettings = new grafana.oss.SsoSettings(\"saml_sso_settings\", {\n    providerName: \"saml\",\n    samlSettings: {\n        allowSignUp: true,\n        certificatePath: \"/certs/saml.crt\",\n        privateKeyPath: \"/certs/saml.key\",\n        idpMetadataUrl: \"https://nexus.microsoftonline-p.com/federationmetadata/saml20/federationmetadata.xml\",\n        signatureAlgorithm: \"rsa-sha256\",\n        assertionAttributeLogin: \"login\",\n        assertionAttributeEmail: \"email\",\n        nameIdFormat: \"urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress\",\n    },\n});\n// Configure SSO using LDAP\nconst ldapSsoSettings = new grafana.oss.SsoSettings(\"ldap_sso_settings\", {\n    providerName: \"ldap\",\n    ldapSettings: {\n        enabled: true,\n        config: {\n            servers: [{\n                host: \"127.0.0.1\",\n                port: 389,\n                searchFilter: \"(cn=%s)\",\n                bindDn: \"cn=admin,dc=grafana,dc=org\",\n                bindPassword: \"grafana\",\n                searchBaseDns: [\"dc=grafana,dc=org\"],\n                attributes: {\n                    name: \"givenName\",\n                    surname: \"sn\",\n                    username: \"cn\",\n                    member_of: \"memberOf\",\n                    email: \"email\",\n                },\n                groupMappings: [\n                    {\n                        groupDn: \"cn=superadmins,dc=grafana,dc=org\",\n                        orgRole: \"Admin\",\n                        orgId: 1,\n                        grafanaAdmin: true,\n                    },\n                    {\n                        groupDn: \"cn=users,dc=grafana,dc=org\",\n                        orgRole: \"Editor\",\n                    },\n                    {\n                        groupDn: \"*\",\n                        orgRole: \"Viewer\",\n                    },\n                ],\n            }],\n        },\n    },\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\n# Configure SSO for GitHub using OAuth2\ngithub_sso_settings = grafana.oss.SsoSettings(\"github_sso_settings\",\n    provider_name=\"github\",\n    oauth2_settings={\n        \"name\": \"Github\",\n        \"client_id\": \"\u003cyour GitHub app client id\u003e\",\n        \"client_secret\": \"\u003cyour GitHub app client secret\u003e\",\n        \"allow_sign_up\": True,\n        \"auto_login\": False,\n        \"scopes\": \"user:email,read:org\",\n        \"team_ids\": \"150,300\",\n        \"allowed_organizations\": \"[\\\"My Organization\\\", \\\"Octocats\\\"]\",\n        \"allowed_domains\": \"mycompany.com mycompany.org\",\n    })\n# Configure SSO using generic OAuth2\ngeneric_sso_settings = grafana.oss.SsoSettings(\"generic_sso_settings\",\n    provider_name=\"generic_oauth\",\n    oauth2_settings={\n        \"name\": \"Auth0\",\n        \"auth_url\": \"https://\u003cdomain\u003e/authorize\",\n        \"token_url\": \"https://\u003cdomain\u003e/oauth/token\",\n        \"api_url\": \"https://\u003cdomain\u003e/userinfo\",\n        \"client_id\": \"\u003cclient id\u003e\",\n        \"client_secret\": \"\u003cclient secret\u003e\",\n        \"allow_sign_up\": True,\n        \"auto_login\": False,\n        \"scopes\": \"openid profile email offline_access\",\n        \"use_pkce\": True,\n        \"use_refresh_token\": True,\n    })\n# Configure SSO using SAML\nsaml_sso_settings = grafana.oss.SsoSettings(\"saml_sso_settings\",\n    provider_name=\"saml\",\n    saml_settings={\n        \"allow_sign_up\": True,\n        \"certificate_path\": \"/certs/saml.crt\",\n        \"private_key_path\": \"/certs/saml.key\",\n        \"idp_metadata_url\": \"https://nexus.microsoftonline-p.com/federationmetadata/saml20/federationmetadata.xml\",\n        \"signature_algorithm\": \"rsa-sha256\",\n        \"assertion_attribute_login\": \"login\",\n        \"assertion_attribute_email\": \"email\",\n        \"name_id_format\": \"urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress\",\n    })\n# Configure SSO using LDAP\nldap_sso_settings = grafana.oss.SsoSettings(\"ldap_sso_settings\",\n    provider_name=\"ldap\",\n    ldap_settings={\n        \"enabled\": True,\n        \"config\": {\n            \"servers\": [{\n                \"host\": \"127.0.0.1\",\n                \"port\": 389,\n                \"search_filter\": \"(cn=%s)\",\n                \"bind_dn\": \"cn=admin,dc=grafana,dc=org\",\n                \"bind_password\": \"grafana\",\n                \"search_base_dns\": [\"dc=grafana,dc=org\"],\n                \"attributes\": {\n                    \"name\": \"givenName\",\n                    \"surname\": \"sn\",\n                    \"username\": \"cn\",\n                    \"member_of\": \"memberOf\",\n                    \"email\": \"email\",\n                },\n                \"group_mappings\": [\n                    {\n                        \"group_dn\": \"cn=superadmins,dc=grafana,dc=org\",\n                        \"org_role\": \"Admin\",\n                        \"org_id\": 1,\n                        \"grafana_admin\": True,\n                    },\n                    {\n                        \"group_dn\": \"cn=users,dc=grafana,dc=org\",\n                        \"org_role\": \"Editor\",\n                    },\n                    {\n                        \"group_dn\": \"*\",\n                        \"org_role\": \"Viewer\",\n                    },\n                ],\n            }],\n        },\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    // Configure SSO for GitHub using OAuth2\n    var githubSsoSettings = new Grafana.Oss.SsoSettings(\"github_sso_settings\", new()\n    {\n        ProviderName = \"github\",\n        Oauth2Settings = new Grafana.Oss.Inputs.SsoSettingsOauth2SettingsArgs\n        {\n            Name = \"Github\",\n            ClientId = \"\u003cyour GitHub app client id\u003e\",\n            ClientSecret = \"\u003cyour GitHub app client secret\u003e\",\n            AllowSignUp = true,\n            AutoLogin = false,\n            Scopes = \"user:email,read:org\",\n            TeamIds = \"150,300\",\n            AllowedOrganizations = \"[\\\"My Organization\\\", \\\"Octocats\\\"]\",\n            AllowedDomains = \"mycompany.com mycompany.org\",\n        },\n    });\n\n    // Configure SSO using generic OAuth2\n    var genericSsoSettings = new Grafana.Oss.SsoSettings(\"generic_sso_settings\", new()\n    {\n        ProviderName = \"generic_oauth\",\n        Oauth2Settings = new Grafana.Oss.Inputs.SsoSettingsOauth2SettingsArgs\n        {\n            Name = \"Auth0\",\n            AuthUrl = \"https://\u003cdomain\u003e/authorize\",\n            TokenUrl = \"https://\u003cdomain\u003e/oauth/token\",\n            ApiUrl = \"https://\u003cdomain\u003e/userinfo\",\n            ClientId = \"\u003cclient id\u003e\",\n            ClientSecret = \"\u003cclient secret\u003e\",\n            AllowSignUp = true,\n            AutoLogin = false,\n            Scopes = \"openid profile email offline_access\",\n            UsePkce = true,\n            UseRefreshToken = true,\n        },\n    });\n\n    // Configure SSO using SAML\n    var samlSsoSettings = new Grafana.Oss.SsoSettings(\"saml_sso_settings\", new()\n    {\n        ProviderName = \"saml\",\n        SamlSettings = new Grafana.Oss.Inputs.SsoSettingsSamlSettingsArgs\n        {\n            AllowSignUp = true,\n            CertificatePath = \"/certs/saml.crt\",\n            PrivateKeyPath = \"/certs/saml.key\",\n            IdpMetadataUrl = \"https://nexus.microsoftonline-p.com/federationmetadata/saml20/federationmetadata.xml\",\n            SignatureAlgorithm = \"rsa-sha256\",\n            AssertionAttributeLogin = \"login\",\n            AssertionAttributeEmail = \"email\",\n            NameIdFormat = \"urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress\",\n        },\n    });\n\n    // Configure SSO using LDAP\n    var ldapSsoSettings = new Grafana.Oss.SsoSettings(\"ldap_sso_settings\", new()\n    {\n        ProviderName = \"ldap\",\n        LdapSettings = new Grafana.Oss.Inputs.SsoSettingsLdapSettingsArgs\n        {\n            Enabled = true,\n            Config = new Grafana.Oss.Inputs.SsoSettingsLdapSettingsConfigArgs\n            {\n                Servers = new[]\n                {\n                    new Grafana.Oss.Inputs.SsoSettingsLdapSettingsConfigServerArgs\n                    {\n                        Host = \"127.0.0.1\",\n                        Port = 389,\n                        SearchFilter = \"(cn=%s)\",\n                        BindDn = \"cn=admin,dc=grafana,dc=org\",\n                        BindPassword = \"grafana\",\n                        SearchBaseDns = new[]\n                        {\n                            \"dc=grafana,dc=org\",\n                        },\n                        Attributes = \n                        {\n                            { \"name\", \"givenName\" },\n                            { \"surname\", \"sn\" },\n                            { \"username\", \"cn\" },\n                            { \"member_of\", \"memberOf\" },\n                            { \"email\", \"email\" },\n                        },\n                        GroupMappings = new[]\n                        {\n                            new Grafana.Oss.Inputs.SsoSettingsLdapSettingsConfigServerGroupMappingArgs\n                            {\n                                GroupDn = \"cn=superadmins,dc=grafana,dc=org\",\n                                OrgRole = \"Admin\",\n                                OrgId = 1,\n                                GrafanaAdmin = true,\n                            },\n                            new Grafana.Oss.Inputs.SsoSettingsLdapSettingsConfigServerGroupMappingArgs\n                            {\n                                GroupDn = \"cn=users,dc=grafana,dc=org\",\n                                OrgRole = \"Editor\",\n                            },\n                            new Grafana.Oss.Inputs.SsoSettingsLdapSettingsConfigServerGroupMappingArgs\n                            {\n                                GroupDn = \"*\",\n                                OrgRole = \"Viewer\",\n                            },\n                        },\n                    },\n                },\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t// Configure SSO for GitHub using OAuth2\n\t\t_, err := oss.NewSsoSettings(ctx, \"github_sso_settings\", \u0026oss.SsoSettingsArgs{\n\t\t\tProviderName: pulumi.String(\"github\"),\n\t\t\tOauth2Settings: \u0026oss.SsoSettingsOauth2SettingsArgs{\n\t\t\t\tName:                 pulumi.String(\"Github\"),\n\t\t\t\tClientId:             pulumi.String(\"\u003cyour GitHub app client id\u003e\"),\n\t\t\t\tClientSecret:         pulumi.String(\"\u003cyour GitHub app client secret\u003e\"),\n\t\t\t\tAllowSignUp:          pulumi.Bool(true),\n\t\t\t\tAutoLogin:            pulumi.Bool(false),\n\t\t\t\tScopes:               pulumi.String(\"user:email,read:org\"),\n\t\t\t\tTeamIds:              pulumi.String(\"150,300\"),\n\t\t\t\tAllowedOrganizations: pulumi.String(\"[\\\"My Organization\\\", \\\"Octocats\\\"]\"),\n\t\t\t\tAllowedDomains:       pulumi.String(\"mycompany.com mycompany.org\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Configure SSO using generic OAuth2\n\t\t_, err = oss.NewSsoSettings(ctx, \"generic_sso_settings\", \u0026oss.SsoSettingsArgs{\n\t\t\tProviderName: pulumi.String(\"generic_oauth\"),\n\t\t\tOauth2Settings: \u0026oss.SsoSettingsOauth2SettingsArgs{\n\t\t\t\tName:            pulumi.String(\"Auth0\"),\n\t\t\t\tAuthUrl:         pulumi.String(\"https://\u003cdomain\u003e/authorize\"),\n\t\t\t\tTokenUrl:        pulumi.String(\"https://\u003cdomain\u003e/oauth/token\"),\n\t\t\t\tApiUrl:          pulumi.String(\"https://\u003cdomain\u003e/userinfo\"),\n\t\t\t\tClientId:        pulumi.String(\"\u003cclient id\u003e\"),\n\t\t\t\tClientSecret:    pulumi.String(\"\u003cclient secret\u003e\"),\n\t\t\t\tAllowSignUp:     pulumi.Bool(true),\n\t\t\t\tAutoLogin:       pulumi.Bool(false),\n\t\t\t\tScopes:          pulumi.String(\"openid profile email offline_access\"),\n\t\t\t\tUsePkce:         pulumi.Bool(true),\n\t\t\t\tUseRefreshToken: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Configure SSO using SAML\n\t\t_, err = oss.NewSsoSettings(ctx, \"saml_sso_settings\", \u0026oss.SsoSettingsArgs{\n\t\t\tProviderName: pulumi.String(\"saml\"),\n\t\t\tSamlSettings: \u0026oss.SsoSettingsSamlSettingsArgs{\n\t\t\t\tAllowSignUp:             pulumi.Bool(true),\n\t\t\t\tCertificatePath:         pulumi.String(\"/certs/saml.crt\"),\n\t\t\t\tPrivateKeyPath:          pulumi.String(\"/certs/saml.key\"),\n\t\t\t\tIdpMetadataUrl:          pulumi.String(\"https://nexus.microsoftonline-p.com/federationmetadata/saml20/federationmetadata.xml\"),\n\t\t\t\tSignatureAlgorithm:      pulumi.String(\"rsa-sha256\"),\n\t\t\t\tAssertionAttributeLogin: pulumi.String(\"login\"),\n\t\t\t\tAssertionAttributeEmail: pulumi.String(\"email\"),\n\t\t\t\tNameIdFormat:            pulumi.String(\"urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Configure SSO using LDAP\n\t\t_, err = oss.NewSsoSettings(ctx, \"ldap_sso_settings\", \u0026oss.SsoSettingsArgs{\n\t\t\tProviderName: pulumi.String(\"ldap\"),\n\t\t\tLdapSettings: \u0026oss.SsoSettingsLdapSettingsArgs{\n\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\tConfig: \u0026oss.SsoSettingsLdapSettingsConfigArgs{\n\t\t\t\t\tServers: oss.SsoSettingsLdapSettingsConfigServerArray{\n\t\t\t\t\t\t\u0026oss.SsoSettingsLdapSettingsConfigServerArgs{\n\t\t\t\t\t\t\tHost:         pulumi.String(\"127.0.0.1\"),\n\t\t\t\t\t\t\tPort:         pulumi.Int(389),\n\t\t\t\t\t\t\tSearchFilter: pulumi.String(\"(cn=%s)\"),\n\t\t\t\t\t\t\tBindDn:       pulumi.String(\"cn=admin,dc=grafana,dc=org\"),\n\t\t\t\t\t\t\tBindPassword: pulumi.String(\"grafana\"),\n\t\t\t\t\t\t\tSearchBaseDns: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"dc=grafana,dc=org\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tAttributes: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\"name\":      pulumi.String(\"givenName\"),\n\t\t\t\t\t\t\t\t\"surname\":   pulumi.String(\"sn\"),\n\t\t\t\t\t\t\t\t\"username\":  pulumi.String(\"cn\"),\n\t\t\t\t\t\t\t\t\"member_of\": pulumi.String(\"memberOf\"),\n\t\t\t\t\t\t\t\t\"email\":     pulumi.String(\"email\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tGroupMappings: oss.SsoSettingsLdapSettingsConfigServerGroupMappingArray{\n\t\t\t\t\t\t\t\t\u0026oss.SsoSettingsLdapSettingsConfigServerGroupMappingArgs{\n\t\t\t\t\t\t\t\t\tGroupDn:      pulumi.String(\"cn=superadmins,dc=grafana,dc=org\"),\n\t\t\t\t\t\t\t\t\tOrgRole:      pulumi.String(\"Admin\"),\n\t\t\t\t\t\t\t\t\tOrgId:        pulumi.Int(1),\n\t\t\t\t\t\t\t\t\tGrafanaAdmin: pulumi.Bool(true),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\u0026oss.SsoSettingsLdapSettingsConfigServerGroupMappingArgs{\n\t\t\t\t\t\t\t\t\tGroupDn: pulumi.String(\"cn=users,dc=grafana,dc=org\"),\n\t\t\t\t\t\t\t\t\tOrgRole: pulumi.String(\"Editor\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\u0026oss.SsoSettingsLdapSettingsConfigServerGroupMappingArgs{\n\t\t\t\t\t\t\t\t\tGroupDn: pulumi.String(\"*\"),\n\t\t\t\t\t\t\t\t\tOrgRole: pulumi.String(\"Viewer\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.SsoSettings;\nimport com.pulumi.grafana.oss.SsoSettingsArgs;\nimport com.pulumi.grafana.oss.inputs.SsoSettingsOauth2SettingsArgs;\nimport com.pulumi.grafana.oss.inputs.SsoSettingsSamlSettingsArgs;\nimport com.pulumi.grafana.oss.inputs.SsoSettingsLdapSettingsArgs;\nimport com.pulumi.grafana.oss.inputs.SsoSettingsLdapSettingsConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        // Configure SSO for GitHub using OAuth2\n        var githubSsoSettings = new SsoSettings(\"githubSsoSettings\", SsoSettingsArgs.builder()\n            .providerName(\"github\")\n            .oauth2Settings(SsoSettingsOauth2SettingsArgs.builder()\n                .name(\"Github\")\n                .clientId(\"\u003cyour GitHub app client id\u003e\")\n                .clientSecret(\"\u003cyour GitHub app client secret\u003e\")\n                .allowSignUp(true)\n                .autoLogin(false)\n                .scopes(\"user:email,read:org\")\n                .teamIds(\"150,300\")\n                .allowedOrganizations(\"[\\\"My Organization\\\", \\\"Octocats\\\"]\")\n                .allowedDomains(\"mycompany.com mycompany.org\")\n                .build())\n            .build());\n\n        // Configure SSO using generic OAuth2\n        var genericSsoSettings = new SsoSettings(\"genericSsoSettings\", SsoSettingsArgs.builder()\n            .providerName(\"generic_oauth\")\n            .oauth2Settings(SsoSettingsOauth2SettingsArgs.builder()\n                .name(\"Auth0\")\n                .authUrl(\"https://\u003cdomain\u003e/authorize\")\n                .tokenUrl(\"https://\u003cdomain\u003e/oauth/token\")\n                .apiUrl(\"https://\u003cdomain\u003e/userinfo\")\n                .clientId(\"\u003cclient id\u003e\")\n                .clientSecret(\"\u003cclient secret\u003e\")\n                .allowSignUp(true)\n                .autoLogin(false)\n                .scopes(\"openid profile email offline_access\")\n                .usePkce(true)\n                .useRefreshToken(true)\n                .build())\n            .build());\n\n        // Configure SSO using SAML\n        var samlSsoSettings = new SsoSettings(\"samlSsoSettings\", SsoSettingsArgs.builder()\n            .providerName(\"saml\")\n            .samlSettings(SsoSettingsSamlSettingsArgs.builder()\n                .allowSignUp(true)\n                .certificatePath(\"/certs/saml.crt\")\n                .privateKeyPath(\"/certs/saml.key\")\n                .idpMetadataUrl(\"https://nexus.microsoftonline-p.com/federationmetadata/saml20/federationmetadata.xml\")\n                .signatureAlgorithm(\"rsa-sha256\")\n                .assertionAttributeLogin(\"login\")\n                .assertionAttributeEmail(\"email\")\n                .nameIdFormat(\"urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress\")\n                .build())\n            .build());\n\n        // Configure SSO using LDAP\n        var ldapSsoSettings = new SsoSettings(\"ldapSsoSettings\", SsoSettingsArgs.builder()\n            .providerName(\"ldap\")\n            .ldapSettings(SsoSettingsLdapSettingsArgs.builder()\n                .enabled(true)\n                .config(SsoSettingsLdapSettingsConfigArgs.builder()\n                    .servers(SsoSettingsLdapSettingsConfigServerArgs.builder()\n                        .host(\"127.0.0.1\")\n                        .port(389)\n                        .searchFilter(\"(cn=%s)\")\n                        .bindDn(\"cn=admin,dc=grafana,dc=org\")\n                        .bindPassword(\"grafana\")\n                        .searchBaseDns(\"dc=grafana,dc=org\")\n                        .attributes(Map.ofEntries(\n                            Map.entry(\"name\", \"givenName\"),\n                            Map.entry(\"surname\", \"sn\"),\n                            Map.entry(\"username\", \"cn\"),\n                            Map.entry(\"member_of\", \"memberOf\"),\n                            Map.entry(\"email\", \"email\")\n                        ))\n                        .groupMappings(                        \n                            SsoSettingsLdapSettingsConfigServerGroupMappingArgs.builder()\n                                .groupDn(\"cn=superadmins,dc=grafana,dc=org\")\n                                .orgRole(\"Admin\")\n                                .orgId(1)\n                                .grafanaAdmin(true)\n                                .build(),\n                            SsoSettingsLdapSettingsConfigServerGroupMappingArgs.builder()\n                                .groupDn(\"cn=users,dc=grafana,dc=org\")\n                                .orgRole(\"Editor\")\n                                .build(),\n                            SsoSettingsLdapSettingsConfigServerGroupMappingArgs.builder()\n                                .groupDn(\"*\")\n                                .orgRole(\"Viewer\")\n                                .build())\n                        .build())\n                    .build())\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  # Configure SSO for GitHub using OAuth2\n  githubSsoSettings:\n    type: grafana:oss:SsoSettings\n    name: github_sso_settings\n    properties:\n      providerName: github\n      oauth2Settings:\n        name: Github\n        clientId: \u003cyour GitHub app client id\u003e\n        clientSecret: \u003cyour GitHub app client secret\u003e\n        allowSignUp: true\n        autoLogin: false\n        scopes: user:email,read:org\n        teamIds: 150,300\n        allowedOrganizations: '[\"My Organization\", \"Octocats\"]'\n        allowedDomains: mycompany.com mycompany.org\n  # Configure SSO using generic OAuth2\n  genericSsoSettings:\n    type: grafana:oss:SsoSettings\n    name: generic_sso_settings\n    properties:\n      providerName: generic_oauth\n      oauth2Settings:\n        name: Auth0\n        authUrl: https://\u003cdomain\u003e/authorize\n        tokenUrl: https://\u003cdomain\u003e/oauth/token\n        apiUrl: https://\u003cdomain\u003e/userinfo\n        clientId: \u003cclient id\u003e\n        clientSecret: \u003cclient secret\u003e\n        allowSignUp: true\n        autoLogin: false\n        scopes: openid profile email offline_access\n        usePkce: true\n        useRefreshToken: true\n  # Configure SSO using SAML\n  samlSsoSettings:\n    type: grafana:oss:SsoSettings\n    name: saml_sso_settings\n    properties:\n      providerName: saml\n      samlSettings:\n        allowSignUp: true\n        certificatePath: /certs/saml.crt\n        privateKeyPath: /certs/saml.key\n        idpMetadataUrl: https://nexus.microsoftonline-p.com/federationmetadata/saml20/federationmetadata.xml\n        signatureAlgorithm: rsa-sha256\n        assertionAttributeLogin: login\n        assertionAttributeEmail: email\n        nameIdFormat: urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress\n  # Configure SSO using LDAP\n  ldapSsoSettings:\n    type: grafana:oss:SsoSettings\n    name: ldap_sso_settings\n    properties:\n      providerName: ldap\n      ldapSettings:\n        enabled: 'true'\n        config:\n          servers:\n            - host: 127.0.0.1\n              port: 389\n              searchFilter: (cn=%s)\n              bindDn: cn=admin,dc=grafana,dc=org\n              bindPassword: grafana\n              searchBaseDns:\n                - dc=grafana,dc=org\n              attributes:\n                name: givenName\n                surname: sn\n                username: cn\n                member_of: memberOf\n                email: email\n              groupMappings:\n                - groupDn: cn=superadmins,dc=grafana,dc=org\n                  orgRole: Admin\n                  orgId: 1\n                  grafanaAdmin: true\n                - groupDn: cn=users,dc=grafana,dc=org\n                  orgRole: Editor\n                - groupDn: '*'\n                  orgRole: Viewer\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:oss/ssoSettings:SsoSettings name \"{{ provider }}\"\n```\n\n```sh\n$ pulumi import grafana:oss/ssoSettings:SsoSettings name \"{{ orgID }}:{{ provider }}\"\n```\n\n","properties":{"ldapSettings":{"$ref":"#/types/grafana:oss/SsoSettingsLdapSettings:SsoSettingsLdapSettings","description":"The LDAP settings set. Required for the ldap provider.\n"},"oauth2Settings":{"$ref":"#/types/grafana:oss/SsoSettingsOauth2Settings:SsoSettingsOauth2Settings","description":"The OAuth2 settings set. Required for github, gitlab, google, azuread, okta, generic*oauth providers.\n"},"providerName":{"type":"string","description":"The name of the SSO provider. Supported values: github, gitlab, google, azuread, okta, generic_oauth, saml, ldap.\n"},"samlSettings":{"$ref":"#/types/grafana:oss/SsoSettingsSamlSettings:SsoSettingsSamlSettings","description":"The SAML settings set. Required for the saml provider.\n"}},"required":["providerName"],"inputProperties":{"ldapSettings":{"$ref":"#/types/grafana:oss/SsoSettingsLdapSettings:SsoSettingsLdapSettings","description":"The LDAP settings set. Required for the ldap provider.\n"},"oauth2Settings":{"$ref":"#/types/grafana:oss/SsoSettingsOauth2Settings:SsoSettingsOauth2Settings","description":"The OAuth2 settings set. Required for github, gitlab, google, azuread, okta, generic*oauth providers.\n"},"providerName":{"type":"string","description":"The name of the SSO provider. Supported values: github, gitlab, google, azuread, okta, generic_oauth, saml, ldap.\n"},"samlSettings":{"$ref":"#/types/grafana:oss/SsoSettingsSamlSettings:SsoSettingsSamlSettings","description":"The SAML settings set. Required for the saml provider.\n"}},"requiredInputs":["providerName"],"stateInputs":{"description":"Input properties used for looking up and filtering SsoSettings resources.\n","properties":{"ldapSettings":{"$ref":"#/types/grafana:oss/SsoSettingsLdapSettings:SsoSettingsLdapSettings","description":"The LDAP settings set. Required for the ldap provider.\n"},"oauth2Settings":{"$ref":"#/types/grafana:oss/SsoSettingsOauth2Settings:SsoSettingsOauth2Settings","description":"The OAuth2 settings set. Required for github, gitlab, google, azuread, okta, generic*oauth providers.\n"},"providerName":{"type":"string","description":"The name of the SSO provider. Supported values: github, gitlab, google, azuread, okta, generic_oauth, saml, ldap.\n"},"samlSettings":{"$ref":"#/types/grafana:oss/SsoSettingsSamlSettings:SsoSettingsSamlSettings","description":"The SAML settings set. Required for the saml provider.\n"}},"type":"object"},"aliases":[{"type":"grafana:index/ssoSettings:SsoSettings"}]},"grafana:oss/team:Team":{"description":"* [Official documentation](https://grafana.com/docs/grafana/latest/administration/team-management/)\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/team/)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst viewer = new grafana.oss.User(\"viewer\", {\n    name: \"Viewer\",\n    email: \"viewer@example.com\",\n    login: \"viewer\",\n    password: \"my-password\",\n});\nconst test_team = new grafana.oss.Team(\"test-team\", {\n    name: \"Test Team\",\n    email: \"teamemail@example.com\",\n    members: [viewer.email],\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\nviewer = grafana.oss.User(\"viewer\",\n    name=\"Viewer\",\n    email=\"viewer@example.com\",\n    login=\"viewer\",\n    password=\"my-password\")\ntest_team = grafana.oss.Team(\"test-team\",\n    name=\"Test Team\",\n    email=\"teamemail@example.com\",\n    members=[viewer.email])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var viewer = new Grafana.Oss.User(\"viewer\", new()\n    {\n        Name = \"Viewer\",\n        Email = \"viewer@example.com\",\n        Login = \"viewer\",\n        Password = \"my-password\",\n    });\n\n    var test_team = new Grafana.Oss.Team(\"test-team\", new()\n    {\n        Name = \"Test Team\",\n        Email = \"teamemail@example.com\",\n        Members = new[]\n        {\n            viewer.Email,\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tviewer, err := oss.NewUser(ctx, \"viewer\", \u0026oss.UserArgs{\n\t\t\tName:     pulumi.String(\"Viewer\"),\n\t\t\tEmail:    pulumi.String(\"viewer@example.com\"),\n\t\t\tLogin:    pulumi.String(\"viewer\"),\n\t\t\tPassword: pulumi.String(\"my-password\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oss.NewTeam(ctx, \"test-team\", \u0026oss.TeamArgs{\n\t\t\tName:  pulumi.String(\"Test Team\"),\n\t\t\tEmail: pulumi.String(\"teamemail@example.com\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tviewer.Email,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.User;\nimport com.pulumi.grafana.oss.UserArgs;\nimport com.pulumi.grafana.oss.Team;\nimport com.pulumi.grafana.oss.TeamArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var viewer = new User(\"viewer\", UserArgs.builder()\n            .name(\"Viewer\")\n            .email(\"viewer@example.com\")\n            .login(\"viewer\")\n            .password(\"my-password\")\n            .build());\n\n        var test_team = new Team(\"test-team\", TeamArgs.builder()\n            .name(\"Test Team\")\n            .email(\"teamemail@example.com\")\n            .members(viewer.email())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  viewer:\n    type: grafana:oss:User\n    properties:\n      name: Viewer\n      email: viewer@example.com\n      login: viewer\n      password: my-password\n  test-team:\n    type: grafana:oss:Team\n    properties:\n      name: Test Team\n      email: teamemail@example.com\n      members:\n        - ${viewer.email}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:oss/team:Team name \"{{ id }}\"\n```\n\n```sh\n$ pulumi import grafana:oss/team:Team name \"{{ orgID }}:{{ id }}\"\n```\n\n","properties":{"email":{"type":"string","description":"An email address for the team."},"ignoreExternallySyncedMembers":{"type":"boolean"},"members":{"type":"array","items":{"type":"string"},"description":"A set of email addresses corresponding to users who should be given membership\nto the team. Note: users specified here must already exist in Grafana."},"name":{"type":"string","description":"The display name for the Grafana team created."},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used."},"preferences":{"$ref":"#/types/grafana:oss/TeamPreferences:TeamPreferences"},"teamId":{"type":"integer","description":"The team id assigned to this team by Grafana."},"teamSync":{"$ref":"#/types/grafana:oss/TeamTeamSync:TeamTeamSync","description":"Sync external auth provider groups with this Grafana team. Only available in Grafana Enterprise.\n\t* [Official documentation](https://grafana.com/docs/grafana/latest/setup-grafana/configure-security/configure-team-sync/)\n\t* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/team_sync/)"},"teamUid":{"type":"string","description":"The team uid assigned to this team by Grafana."}},"required":["name","teamId","teamUid"],"inputProperties":{"email":{"type":"string","description":"An email address for the team."},"ignoreExternallySyncedMembers":{"type":"boolean"},"members":{"type":"array","items":{"type":"string"},"description":"A set of email addresses corresponding to users who should be given membership\nto the team. Note: users specified here must already exist in Grafana."},"name":{"type":"string","description":"The display name for the Grafana team created."},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","willReplaceOnChanges":true},"preferences":{"$ref":"#/types/grafana:oss/TeamPreferences:TeamPreferences"},"teamSync":{"$ref":"#/types/grafana:oss/TeamTeamSync:TeamTeamSync","description":"Sync external auth provider groups with this Grafana team. Only available in Grafana Enterprise.\n\t* [Official documentation](https://grafana.com/docs/grafana/latest/setup-grafana/configure-security/configure-team-sync/)\n\t* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/team_sync/)"}},"stateInputs":{"description":"Input properties used for looking up and filtering Team resources.\n","properties":{"email":{"type":"string","description":"An email address for the team."},"ignoreExternallySyncedMembers":{"type":"boolean"},"members":{"type":"array","items":{"type":"string"},"description":"A set of email addresses corresponding to users who should be given membership\nto the team. Note: users specified here must already exist in Grafana."},"name":{"type":"string","description":"The display name for the Grafana team created."},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","willReplaceOnChanges":true},"preferences":{"$ref":"#/types/grafana:oss/TeamPreferences:TeamPreferences"},"teamId":{"type":"integer","description":"The team id assigned to this team by Grafana."},"teamSync":{"$ref":"#/types/grafana:oss/TeamTeamSync:TeamTeamSync","description":"Sync external auth provider groups with this Grafana team. Only available in Grafana Enterprise.\n\t* [Official documentation](https://grafana.com/docs/grafana/latest/setup-grafana/configure-security/configure-team-sync/)\n\t* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/team_sync/)"},"teamUid":{"type":"string","description":"The team uid assigned to this team by Grafana."}},"type":"object"},"aliases":[{"type":"grafana:index/team:Team"}]},"grafana:oss/user:User":{"description":"* [Official documentation](https://grafana.com/docs/grafana/latest/administration/user-management/server-user-management/)\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/user/)\n\nThis resource represents an instance-scoped resource and uses Grafana's admin APIs.\nIt does not work with API tokens or service accounts which are org-scoped. \nYou must use basic auth.\nThis resource is also not compatible with Grafana Cloud, as it does not allow basic auth.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst staff = new grafana.oss.User(\"staff\", {\n    email: \"staff.name@example.com\",\n    name: \"Staff Name\",\n    login: \"staff\",\n    password: \"my-password\",\n    isAdmin: false,\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\nstaff = grafana.oss.User(\"staff\",\n    email=\"staff.name@example.com\",\n    name=\"Staff Name\",\n    login=\"staff\",\n    password=\"my-password\",\n    is_admin=False)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var staff = new Grafana.Oss.User(\"staff\", new()\n    {\n        Email = \"staff.name@example.com\",\n        Name = \"Staff Name\",\n        Login = \"staff\",\n        Password = \"my-password\",\n        IsAdmin = false,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := oss.NewUser(ctx, \"staff\", \u0026oss.UserArgs{\n\t\t\tEmail:    pulumi.String(\"staff.name@example.com\"),\n\t\t\tName:     pulumi.String(\"Staff Name\"),\n\t\t\tLogin:    pulumi.String(\"staff\"),\n\t\t\tPassword: pulumi.String(\"my-password\"),\n\t\t\tIsAdmin:  pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.User;\nimport com.pulumi.grafana.oss.UserArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var staff = new User(\"staff\", UserArgs.builder()\n            .email(\"staff.name@example.com\")\n            .name(\"Staff Name\")\n            .login(\"staff\")\n            .password(\"my-password\")\n            .isAdmin(false)\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  staff:\n    type: grafana:oss:User\n    properties:\n      email: staff.name@example.com\n      name: Staff Name\n      login: staff\n      password: my-password\n      isAdmin: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:oss/user:User name \"{{ id }}\"\n```\n\n","properties":{"email":{"type":"string","description":"The email address of the Grafana user.\n"},"isAdmin":{"type":"boolean","description":"Whether to make user an admin. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"login":{"type":"string","description":"The username for the Grafana user.\n"},"name":{"type":"string","description":"The display name for the Grafana user.\n"},"password":{"type":"string","description":"The password for the Grafana user.\n","secret":true},"userId":{"type":"integer","description":"The numerical ID of the Grafana user.\n"}},"required":["email","name","password","userId"],"inputProperties":{"email":{"type":"string","description":"The email address of the Grafana user.\n"},"isAdmin":{"type":"boolean","description":"Whether to make user an admin. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"login":{"type":"string","description":"The username for the Grafana user.\n"},"name":{"type":"string","description":"The display name for the Grafana user.\n"},"password":{"type":"string","description":"The password for the Grafana user.\n","secret":true}},"requiredInputs":["email","password"],"stateInputs":{"description":"Input properties used for looking up and filtering User resources.\n","properties":{"email":{"type":"string","description":"The email address of the Grafana user.\n"},"isAdmin":{"type":"boolean","description":"Whether to make user an admin. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"login":{"type":"string","description":"The username for the Grafana user.\n"},"name":{"type":"string","description":"The display name for the Grafana user.\n"},"password":{"type":"string","description":"The password for the Grafana user.\n","secret":true},"userId":{"type":"integer","description":"The numerical ID of the Grafana user.\n"}},"type":"object"},"aliases":[{"type":"grafana:index/user:User"}]},"grafana:slo/sLO:SLO":{"description":"Resource manages Grafana SLOs (Service Level Objectives).\n\n* [Official documentation](https://grafana.com/docs/grafana-cloud/alerting-and-irm/slo/)\n* [API documentation](https://grafana.com/docs/grafana-cloud/alerting-and-irm/slo/api/)\n* [Additional Information On Alerting Rule Annotations and Labels](https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/#templating/)\n\n## Example Usage\n\n### Ratio\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst ratio = new grafana.slo.SLO(\"ratio\", {\n    name: \"Terraform Testing - Ratio Query\",\n    description: \"Terraform Description - Ratio Query\",\n    queries: [{\n        ratio: {\n            successMetric: \"kubelet_http_requests_total{status!~\\\"5..\\\"}\",\n            totalMetric: \"kubelet_http_requests_total\",\n            groupByLabels: [\n                \"job\",\n                \"instance\",\n            ],\n        },\n        type: \"ratio\",\n    }],\n    objectives: [{\n        value: 0.995,\n        window: \"30d\",\n    }],\n    destinationDatasource: {\n        uid: \"grafanacloud-prom\",\n    },\n    labels: [{\n        key: \"slo\",\n        value: \"terraform\",\n    }],\n    alerting: {\n        fastburn: {\n            annotations: [\n                {\n                    key: \"name\",\n                    value: \"SLO Burn Rate Very High\",\n                },\n                {\n                    key: \"description\",\n                    value: \"Error budget is burning too fast\",\n                },\n            ],\n        },\n        slowburn: {\n            annotations: [\n                {\n                    key: \"name\",\n                    value: \"SLO Burn Rate High\",\n                },\n                {\n                    key: \"description\",\n                    value: \"Error budget is burning too fast\",\n                },\n            ],\n        },\n    },\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\nratio = grafana.slo.SLO(\"ratio\",\n    name=\"Terraform Testing - Ratio Query\",\n    description=\"Terraform Description - Ratio Query\",\n    queries=[{\n        \"ratio\": {\n            \"success_metric\": \"kubelet_http_requests_total{status!~\\\"5..\\\"}\",\n            \"total_metric\": \"kubelet_http_requests_total\",\n            \"group_by_labels\": [\n                \"job\",\n                \"instance\",\n            ],\n        },\n        \"type\": \"ratio\",\n    }],\n    objectives=[{\n        \"value\": 0.995,\n        \"window\": \"30d\",\n    }],\n    destination_datasource={\n        \"uid\": \"grafanacloud-prom\",\n    },\n    labels=[{\n        \"key\": \"slo\",\n        \"value\": \"terraform\",\n    }],\n    alerting={\n        \"fastburn\": {\n            \"annotations\": [\n                {\n                    \"key\": \"name\",\n                    \"value\": \"SLO Burn Rate Very High\",\n                },\n                {\n                    \"key\": \"description\",\n                    \"value\": \"Error budget is burning too fast\",\n                },\n            ],\n        },\n        \"slowburn\": {\n            \"annotations\": [\n                {\n                    \"key\": \"name\",\n                    \"value\": \"SLO Burn Rate High\",\n                },\n                {\n                    \"key\": \"description\",\n                    \"value\": \"Error budget is burning too fast\",\n                },\n            ],\n        },\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var ratio = new Grafana.Slo.SLO(\"ratio\", new()\n    {\n        Name = \"Terraform Testing - Ratio Query\",\n        Description = \"Terraform Description - Ratio Query\",\n        Queries = new[]\n        {\n            new Grafana.Slo.Inputs.SLOQueryArgs\n            {\n                Ratio = new Grafana.Slo.Inputs.SLOQueryRatioArgs\n                {\n                    SuccessMetric = \"kubelet_http_requests_total{status!~\\\"5..\\\"}\",\n                    TotalMetric = \"kubelet_http_requests_total\",\n                    GroupByLabels = new[]\n                    {\n                        \"job\",\n                        \"instance\",\n                    },\n                },\n                Type = \"ratio\",\n            },\n        },\n        Objectives = new[]\n        {\n            new Grafana.Slo.Inputs.SLOObjectiveArgs\n            {\n                Value = 0.995,\n                Window = \"30d\",\n            },\n        },\n        DestinationDatasource = new Grafana.Slo.Inputs.SLODestinationDatasourceArgs\n        {\n            Uid = \"grafanacloud-prom\",\n        },\n        Labels = new[]\n        {\n            new Grafana.Slo.Inputs.SLOLabelArgs\n            {\n                Key = \"slo\",\n                Value = \"terraform\",\n            },\n        },\n        Alerting = new Grafana.Slo.Inputs.SLOAlertingArgs\n        {\n            Fastburn = new Grafana.Slo.Inputs.SLOAlertingFastburnArgs\n            {\n                Annotations = new[]\n                {\n                    new Grafana.Slo.Inputs.SLOAlertingFastburnAnnotationArgs\n                    {\n                        Key = \"name\",\n                        Value = \"SLO Burn Rate Very High\",\n                    },\n                    new Grafana.Slo.Inputs.SLOAlertingFastburnAnnotationArgs\n                    {\n                        Key = \"description\",\n                        Value = \"Error budget is burning too fast\",\n                    },\n                },\n            },\n            Slowburn = new Grafana.Slo.Inputs.SLOAlertingSlowburnArgs\n            {\n                Annotations = new[]\n                {\n                    new Grafana.Slo.Inputs.SLOAlertingSlowburnAnnotationArgs\n                    {\n                        Key = \"name\",\n                        Value = \"SLO Burn Rate High\",\n                    },\n                    new Grafana.Slo.Inputs.SLOAlertingSlowburnAnnotationArgs\n                    {\n                        Key = \"description\",\n                        Value = \"Error budget is burning too fast\",\n                    },\n                },\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/slo\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := slo.NewSLO(ctx, \"ratio\", \u0026slo.SLOArgs{\n\t\t\tName:        pulumi.String(\"Terraform Testing - Ratio Query\"),\n\t\t\tDescription: pulumi.String(\"Terraform Description - Ratio Query\"),\n\t\t\tQueries: slo.SLOQueryArray{\n\t\t\t\t\u0026slo.SLOQueryArgs{\n\t\t\t\t\tRatio: \u0026slo.SLOQueryRatioArgs{\n\t\t\t\t\t\tSuccessMetric: pulumi.String(\"kubelet_http_requests_total{status!~\\\"5..\\\"}\"),\n\t\t\t\t\t\tTotalMetric:   pulumi.String(\"kubelet_http_requests_total\"),\n\t\t\t\t\t\tGroupByLabels: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"job\"),\n\t\t\t\t\t\t\tpulumi.String(\"instance\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tType: pulumi.String(\"ratio\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tObjectives: slo.SLOObjectiveArray{\n\t\t\t\t\u0026slo.SLOObjectiveArgs{\n\t\t\t\t\tValue:  pulumi.Float64(0.995),\n\t\t\t\t\tWindow: pulumi.String(\"30d\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDestinationDatasource: \u0026slo.SLODestinationDatasourceArgs{\n\t\t\t\tUid: pulumi.String(\"grafanacloud-prom\"),\n\t\t\t},\n\t\t\tLabels: slo.SLOLabelArray{\n\t\t\t\t\u0026slo.SLOLabelArgs{\n\t\t\t\t\tKey:   pulumi.String(\"slo\"),\n\t\t\t\t\tValue: pulumi.String(\"terraform\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tAlerting: \u0026slo.SLOAlertingArgs{\n\t\t\t\tFastburn: \u0026slo.SLOAlertingFastburnArgs{\n\t\t\t\t\tAnnotations: slo.SLOAlertingFastburnAnnotationArray{\n\t\t\t\t\t\t\u0026slo.SLOAlertingFastburnAnnotationArgs{\n\t\t\t\t\t\t\tKey:   pulumi.String(\"name\"),\n\t\t\t\t\t\t\tValue: pulumi.String(\"SLO Burn Rate Very High\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026slo.SLOAlertingFastburnAnnotationArgs{\n\t\t\t\t\t\t\tKey:   pulumi.String(\"description\"),\n\t\t\t\t\t\t\tValue: pulumi.String(\"Error budget is burning too fast\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tSlowburn: \u0026slo.SLOAlertingSlowburnArgs{\n\t\t\t\t\tAnnotations: slo.SLOAlertingSlowburnAnnotationArray{\n\t\t\t\t\t\t\u0026slo.SLOAlertingSlowburnAnnotationArgs{\n\t\t\t\t\t\t\tKey:   pulumi.String(\"name\"),\n\t\t\t\t\t\t\tValue: pulumi.String(\"SLO Burn Rate High\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026slo.SLOAlertingSlowburnAnnotationArgs{\n\t\t\t\t\t\t\tKey:   pulumi.String(\"description\"),\n\t\t\t\t\t\t\tValue: pulumi.String(\"Error budget is burning too fast\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.slo.SLO;\nimport com.pulumi.grafana.slo.SLOArgs;\nimport com.pulumi.grafana.slo.inputs.SLOQueryArgs;\nimport com.pulumi.grafana.slo.inputs.SLOQueryRatioArgs;\nimport com.pulumi.grafana.slo.inputs.SLOObjectiveArgs;\nimport com.pulumi.grafana.slo.inputs.SLODestinationDatasourceArgs;\nimport com.pulumi.grafana.slo.inputs.SLOLabelArgs;\nimport com.pulumi.grafana.slo.inputs.SLOAlertingArgs;\nimport com.pulumi.grafana.slo.inputs.SLOAlertingFastburnArgs;\nimport com.pulumi.grafana.slo.inputs.SLOAlertingSlowburnArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var ratio = new SLO(\"ratio\", SLOArgs.builder()\n            .name(\"Terraform Testing - Ratio Query\")\n            .description(\"Terraform Description - Ratio Query\")\n            .queries(SLOQueryArgs.builder()\n                .ratio(SLOQueryRatioArgs.builder()\n                    .successMetric(\"kubelet_http_requests_total{status!~\\\"5..\\\"}\")\n                    .totalMetric(\"kubelet_http_requests_total\")\n                    .groupByLabels(                    \n                        \"job\",\n                        \"instance\")\n                    .build())\n                .type(\"ratio\")\n                .build())\n            .objectives(SLOObjectiveArgs.builder()\n                .value(0.995)\n                .window(\"30d\")\n                .build())\n            .destinationDatasource(SLODestinationDatasourceArgs.builder()\n                .uid(\"grafanacloud-prom\")\n                .build())\n            .labels(SLOLabelArgs.builder()\n                .key(\"slo\")\n                .value(\"terraform\")\n                .build())\n            .alerting(SLOAlertingArgs.builder()\n                .fastburn(SLOAlertingFastburnArgs.builder()\n                    .annotations(                    \n                        SLOAlertingFastburnAnnotationArgs.builder()\n                            .key(\"name\")\n                            .value(\"SLO Burn Rate Very High\")\n                            .build(),\n                        SLOAlertingFastburnAnnotationArgs.builder()\n                            .key(\"description\")\n                            .value(\"Error budget is burning too fast\")\n                            .build())\n                    .build())\n                .slowburn(SLOAlertingSlowburnArgs.builder()\n                    .annotations(                    \n                        SLOAlertingSlowburnAnnotationArgs.builder()\n                            .key(\"name\")\n                            .value(\"SLO Burn Rate High\")\n                            .build(),\n                        SLOAlertingSlowburnAnnotationArgs.builder()\n                            .key(\"description\")\n                            .value(\"Error budget is burning too fast\")\n                            .build())\n                    .build())\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  ratio:\n    type: grafana:slo:SLO\n    properties:\n      name: Terraform Testing - Ratio Query\n      description: Terraform Description - Ratio Query\n      queries:\n        - ratio:\n            successMetric: kubelet_http_requests_total{status!~\"5..\"}\n            totalMetric: kubelet_http_requests_total\n            groupByLabels:\n              - job\n              - instance\n          type: ratio\n      objectives:\n        - value: 0.995\n          window: 30d\n      destinationDatasource:\n        uid: grafanacloud-prom\n      labels:\n        - key: slo\n          value: terraform\n      alerting:\n        fastburn:\n          annotations:\n            - key: name\n              value: SLO Burn Rate Very High\n            - key: description\n              value: Error budget is burning too fast\n        slowburn:\n          annotations:\n            - key: name\n              value: SLO Burn Rate High\n            - key: description\n              value: Error budget is burning too fast\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Advanced\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst test = new grafana.slo.SLO(\"test\", {\n    name: \"Terraform Testing\",\n    description: \"Terraform Description\",\n    queries: [{\n        freeform: {\n            query: \"sum(rate(apiserver_request_total{code!=\\\"500\\\"}[$__rate_interval])) / sum(rate(apiserver_request_total[$__rate_interval]))\",\n        },\n        type: \"freeform\",\n    }],\n    objectives: [{\n        value: 0.995,\n        window: \"30d\",\n    }],\n    destinationDatasource: {\n        uid: \"grafanacloud-prom\",\n    },\n    labels: [{\n        key: \"slo\",\n        value: \"terraform\",\n    }],\n    alerting: {\n        fastburn: {\n            annotations: [\n                {\n                    key: \"name\",\n                    value: \"SLO Burn Rate Very High\",\n                },\n                {\n                    key: \"description\",\n                    value: \"Error budget is burning too fast\",\n                },\n            ],\n        },\n        slowburn: {\n            annotations: [\n                {\n                    key: \"name\",\n                    value: \"SLO Burn Rate High\",\n                },\n                {\n                    key: \"description\",\n                    value: \"Error budget is burning too fast\",\n                },\n            ],\n        },\n    },\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\ntest = grafana.slo.SLO(\"test\",\n    name=\"Terraform Testing\",\n    description=\"Terraform Description\",\n    queries=[{\n        \"freeform\": {\n            \"query\": \"sum(rate(apiserver_request_total{code!=\\\"500\\\"}[$__rate_interval])) / sum(rate(apiserver_request_total[$__rate_interval]))\",\n        },\n        \"type\": \"freeform\",\n    }],\n    objectives=[{\n        \"value\": 0.995,\n        \"window\": \"30d\",\n    }],\n    destination_datasource={\n        \"uid\": \"grafanacloud-prom\",\n    },\n    labels=[{\n        \"key\": \"slo\",\n        \"value\": \"terraform\",\n    }],\n    alerting={\n        \"fastburn\": {\n            \"annotations\": [\n                {\n                    \"key\": \"name\",\n                    \"value\": \"SLO Burn Rate Very High\",\n                },\n                {\n                    \"key\": \"description\",\n                    \"value\": \"Error budget is burning too fast\",\n                },\n            ],\n        },\n        \"slowburn\": {\n            \"annotations\": [\n                {\n                    \"key\": \"name\",\n                    \"value\": \"SLO Burn Rate High\",\n                },\n                {\n                    \"key\": \"description\",\n                    \"value\": \"Error budget is burning too fast\",\n                },\n            ],\n        },\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var test = new Grafana.Slo.SLO(\"test\", new()\n    {\n        Name = \"Terraform Testing\",\n        Description = \"Terraform Description\",\n        Queries = new[]\n        {\n            new Grafana.Slo.Inputs.SLOQueryArgs\n            {\n                Freeform = new Grafana.Slo.Inputs.SLOQueryFreeformArgs\n                {\n                    Query = \"sum(rate(apiserver_request_total{code!=\\\"500\\\"}[$__rate_interval])) / sum(rate(apiserver_request_total[$__rate_interval]))\",\n                },\n                Type = \"freeform\",\n            },\n        },\n        Objectives = new[]\n        {\n            new Grafana.Slo.Inputs.SLOObjectiveArgs\n            {\n                Value = 0.995,\n                Window = \"30d\",\n            },\n        },\n        DestinationDatasource = new Grafana.Slo.Inputs.SLODestinationDatasourceArgs\n        {\n            Uid = \"grafanacloud-prom\",\n        },\n        Labels = new[]\n        {\n            new Grafana.Slo.Inputs.SLOLabelArgs\n            {\n                Key = \"slo\",\n                Value = \"terraform\",\n            },\n        },\n        Alerting = new Grafana.Slo.Inputs.SLOAlertingArgs\n        {\n            Fastburn = new Grafana.Slo.Inputs.SLOAlertingFastburnArgs\n            {\n                Annotations = new[]\n                {\n                    new Grafana.Slo.Inputs.SLOAlertingFastburnAnnotationArgs\n                    {\n                        Key = \"name\",\n                        Value = \"SLO Burn Rate Very High\",\n                    },\n                    new Grafana.Slo.Inputs.SLOAlertingFastburnAnnotationArgs\n                    {\n                        Key = \"description\",\n                        Value = \"Error budget is burning too fast\",\n                    },\n                },\n            },\n            Slowburn = new Grafana.Slo.Inputs.SLOAlertingSlowburnArgs\n            {\n                Annotations = new[]\n                {\n                    new Grafana.Slo.Inputs.SLOAlertingSlowburnAnnotationArgs\n                    {\n                        Key = \"name\",\n                        Value = \"SLO Burn Rate High\",\n                    },\n                    new Grafana.Slo.Inputs.SLOAlertingSlowburnAnnotationArgs\n                    {\n                        Key = \"description\",\n                        Value = \"Error budget is burning too fast\",\n                    },\n                },\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/slo\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := slo.NewSLO(ctx, \"test\", \u0026slo.SLOArgs{\n\t\t\tName:        pulumi.String(\"Terraform Testing\"),\n\t\t\tDescription: pulumi.String(\"Terraform Description\"),\n\t\t\tQueries: slo.SLOQueryArray{\n\t\t\t\t\u0026slo.SLOQueryArgs{\n\t\t\t\t\tFreeform: \u0026slo.SLOQueryFreeformArgs{\n\t\t\t\t\t\tQuery: pulumi.String(\"sum(rate(apiserver_request_total{code!=\\\"500\\\"}[$__rate_interval])) / sum(rate(apiserver_request_total[$__rate_interval]))\"),\n\t\t\t\t\t},\n\t\t\t\t\tType: pulumi.String(\"freeform\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tObjectives: slo.SLOObjectiveArray{\n\t\t\t\t\u0026slo.SLOObjectiveArgs{\n\t\t\t\t\tValue:  pulumi.Float64(0.995),\n\t\t\t\t\tWindow: pulumi.String(\"30d\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDestinationDatasource: \u0026slo.SLODestinationDatasourceArgs{\n\t\t\t\tUid: pulumi.String(\"grafanacloud-prom\"),\n\t\t\t},\n\t\t\tLabels: slo.SLOLabelArray{\n\t\t\t\t\u0026slo.SLOLabelArgs{\n\t\t\t\t\tKey:   pulumi.String(\"slo\"),\n\t\t\t\t\tValue: pulumi.String(\"terraform\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tAlerting: \u0026slo.SLOAlertingArgs{\n\t\t\t\tFastburn: \u0026slo.SLOAlertingFastburnArgs{\n\t\t\t\t\tAnnotations: slo.SLOAlertingFastburnAnnotationArray{\n\t\t\t\t\t\t\u0026slo.SLOAlertingFastburnAnnotationArgs{\n\t\t\t\t\t\t\tKey:   pulumi.String(\"name\"),\n\t\t\t\t\t\t\tValue: pulumi.String(\"SLO Burn Rate Very High\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026slo.SLOAlertingFastburnAnnotationArgs{\n\t\t\t\t\t\t\tKey:   pulumi.String(\"description\"),\n\t\t\t\t\t\t\tValue: pulumi.String(\"Error budget is burning too fast\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tSlowburn: \u0026slo.SLOAlertingSlowburnArgs{\n\t\t\t\t\tAnnotations: slo.SLOAlertingSlowburnAnnotationArray{\n\t\t\t\t\t\t\u0026slo.SLOAlertingSlowburnAnnotationArgs{\n\t\t\t\t\t\t\tKey:   pulumi.String(\"name\"),\n\t\t\t\t\t\t\tValue: pulumi.String(\"SLO Burn Rate High\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026slo.SLOAlertingSlowburnAnnotationArgs{\n\t\t\t\t\t\t\tKey:   pulumi.String(\"description\"),\n\t\t\t\t\t\t\tValue: pulumi.String(\"Error budget is burning too fast\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.slo.SLO;\nimport com.pulumi.grafana.slo.SLOArgs;\nimport com.pulumi.grafana.slo.inputs.SLOQueryArgs;\nimport com.pulumi.grafana.slo.inputs.SLOQueryFreeformArgs;\nimport com.pulumi.grafana.slo.inputs.SLOObjectiveArgs;\nimport com.pulumi.grafana.slo.inputs.SLODestinationDatasourceArgs;\nimport com.pulumi.grafana.slo.inputs.SLOLabelArgs;\nimport com.pulumi.grafana.slo.inputs.SLOAlertingArgs;\nimport com.pulumi.grafana.slo.inputs.SLOAlertingFastburnArgs;\nimport com.pulumi.grafana.slo.inputs.SLOAlertingSlowburnArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var test = new SLO(\"test\", SLOArgs.builder()\n            .name(\"Terraform Testing\")\n            .description(\"Terraform Description\")\n            .queries(SLOQueryArgs.builder()\n                .freeform(SLOQueryFreeformArgs.builder()\n                    .query(\"sum(rate(apiserver_request_total{code!=\\\"500\\\"}[$__rate_interval])) / sum(rate(apiserver_request_total[$__rate_interval]))\")\n                    .build())\n                .type(\"freeform\")\n                .build())\n            .objectives(SLOObjectiveArgs.builder()\n                .value(0.995)\n                .window(\"30d\")\n                .build())\n            .destinationDatasource(SLODestinationDatasourceArgs.builder()\n                .uid(\"grafanacloud-prom\")\n                .build())\n            .labels(SLOLabelArgs.builder()\n                .key(\"slo\")\n                .value(\"terraform\")\n                .build())\n            .alerting(SLOAlertingArgs.builder()\n                .fastburn(SLOAlertingFastburnArgs.builder()\n                    .annotations(                    \n                        SLOAlertingFastburnAnnotationArgs.builder()\n                            .key(\"name\")\n                            .value(\"SLO Burn Rate Very High\")\n                            .build(),\n                        SLOAlertingFastburnAnnotationArgs.builder()\n                            .key(\"description\")\n                            .value(\"Error budget is burning too fast\")\n                            .build())\n                    .build())\n                .slowburn(SLOAlertingSlowburnArgs.builder()\n                    .annotations(                    \n                        SLOAlertingSlowburnAnnotationArgs.builder()\n                            .key(\"name\")\n                            .value(\"SLO Burn Rate High\")\n                            .build(),\n                        SLOAlertingSlowburnAnnotationArgs.builder()\n                            .key(\"description\")\n                            .value(\"Error budget is burning too fast\")\n                            .build())\n                    .build())\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  test:\n    type: grafana:slo:SLO\n    properties:\n      name: Terraform Testing\n      description: Terraform Description\n      queries:\n        - freeform:\n            query: sum(rate(apiserver_request_total{code!=\"500\"}[$__rate_interval])) / sum(rate(apiserver_request_total[$__rate_interval]))\n          type: freeform\n      objectives:\n        - value: 0.995\n          window: 30d\n      destinationDatasource:\n        uid: grafanacloud-prom\n      labels:\n        - key: slo\n          value: terraform\n      alerting:\n        fastburn:\n          annotations:\n            - key: name\n              value: SLO Burn Rate Very High\n            - key: description\n              value: Error budget is burning too fast\n        slowburn:\n          annotations:\n            - key: name\n              value: SLO Burn Rate High\n            - key: description\n              value: Error budget is burning too fast\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Grafana Queries - Any supported datasource\n\nGrafana Queries use the\u003cspan pulumi-lang-nodejs=\" grafanaQueries \" pulumi-lang-dotnet=\" GrafanaQueries \" pulumi-lang-go=\" grafanaQueries \" pulumi-lang-python=\" grafana_queries \" pulumi-lang-yaml=\" grafanaQueries \" pulumi-lang-java=\" grafanaQueries \"\u003e grafana_queries \u003c/span\u003efield. It expects a JSON string list of valid grafana query JSON objects, the same as you'll find assigned to a Grafana Dashboard panel \u003cspan pulumi-lang-nodejs=\"`targets`\" pulumi-lang-dotnet=\"`Targets`\" pulumi-lang-go=\"`targets`\" pulumi-lang-python=\"`targets`\" pulumi-lang-yaml=\"`targets`\" pulumi-lang-java=\"`targets`\"\u003e`targets`\u003c/span\u003e field.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst test = new grafana.slo.SLO(\"test\", {\n    name: \"Terraform Testing\",\n    description: \"Terraform Description\",\n    queries: [{\n        grafanaQueries: {\n            grafanaQueries: JSON.stringify([\n                {\n                    datasource: {\n                        type: \"graphite\",\n                        uid: \"datasource-uid\",\n                    },\n                    refId: \"Success\",\n                    target: \"groupByNode(perSecond(web.*.http.2xx_success.*.*), 3, 'avg')\",\n                },\n                {\n                    datasource: {\n                        type: \"graphite\",\n                        uid: \"datasource-uid\",\n                    },\n                    refId: \"Total\",\n                    target: \"groupByNode(perSecond(web.*.http.5xx_errors.*.*), 3, 'avg')\",\n                },\n                {\n                    datasource: {\n                        type: \"__expr__\",\n                        uid: \"__expr__\",\n                    },\n                    expression: \"$Success / $Total\",\n                    refId: \"Expression\",\n                    type: \"math\",\n                },\n            ]),\n        },\n        type: \"grafana_queries\",\n    }],\n    destinationDatasource: {\n        uid: \"grafanacloud-prom\",\n    },\n    objectives: [{\n        value: 0.995,\n        window: \"30d\",\n    }],\n    labels: [{\n        key: \"slo\",\n        value: \"terraform\",\n    }],\n    alerting: {\n        fastburn: {\n            annotations: [\n                {\n                    key: \"name\",\n                    value: \"SLO Burn Rate Very High\",\n                },\n                {\n                    key: \"description\",\n                    value: \"Error budget is burning too fast\",\n                },\n            ],\n        },\n        slowburn: {\n            annotations: [\n                {\n                    key: \"name\",\n                    value: \"SLO Burn Rate High\",\n                },\n                {\n                    key: \"description\",\n                    value: \"Error budget is burning too fast\",\n                },\n            ],\n        },\n    },\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumiverse_grafana as grafana\n\ntest = grafana.slo.SLO(\"test\",\n    name=\"Terraform Testing\",\n    description=\"Terraform Description\",\n    queries=[{\n        \"grafana_queries\": {\n            \"grafana_queries\": json.dumps([\n                {\n                    \"datasource\": {\n                        \"type\": \"graphite\",\n                        \"uid\": \"datasource-uid\",\n                    },\n                    \"refId\": \"Success\",\n                    \"target\": \"groupByNode(perSecond(web.*.http.2xx_success.*.*), 3, 'avg')\",\n                },\n                {\n                    \"datasource\": {\n                        \"type\": \"graphite\",\n                        \"uid\": \"datasource-uid\",\n                    },\n                    \"refId\": \"Total\",\n                    \"target\": \"groupByNode(perSecond(web.*.http.5xx_errors.*.*), 3, 'avg')\",\n                },\n                {\n                    \"datasource\": {\n                        \"type\": \"__expr__\",\n                        \"uid\": \"__expr__\",\n                    },\n                    \"expression\": \"$Success / $Total\",\n                    \"refId\": \"Expression\",\n                    \"type\": \"math\",\n                },\n            ]),\n        },\n        \"type\": \"grafana_queries\",\n    }],\n    destination_datasource={\n        \"uid\": \"grafanacloud-prom\",\n    },\n    objectives=[{\n        \"value\": 0.995,\n        \"window\": \"30d\",\n    }],\n    labels=[{\n        \"key\": \"slo\",\n        \"value\": \"terraform\",\n    }],\n    alerting={\n        \"fastburn\": {\n            \"annotations\": [\n                {\n                    \"key\": \"name\",\n                    \"value\": \"SLO Burn Rate Very High\",\n                },\n                {\n                    \"key\": \"description\",\n                    \"value\": \"Error budget is burning too fast\",\n                },\n            ],\n        },\n        \"slowburn\": {\n            \"annotations\": [\n                {\n                    \"key\": \"name\",\n                    \"value\": \"SLO Burn Rate High\",\n                },\n                {\n                    \"key\": \"description\",\n                    \"value\": \"Error budget is burning too fast\",\n                },\n            ],\n        },\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var test = new Grafana.Slo.SLO(\"test\", new()\n    {\n        Name = \"Terraform Testing\",\n        Description = \"Terraform Description\",\n        Queries = new[]\n        {\n            new Grafana.Slo.Inputs.SLOQueryArgs\n            {\n                GrafanaQueries = new Grafana.Slo.Inputs.SLOQueryGrafanaQueriesArgs\n                {\n                    GrafanaQueries = JsonSerializer.Serialize(new[]\n                    {\n                        new Dictionary\u003cstring, object?\u003e\n                        {\n                            [\"datasource\"] = new Dictionary\u003cstring, object?\u003e\n                            {\n                                [\"type\"] = \"graphite\",\n                                [\"uid\"] = \"datasource-uid\",\n                            },\n                            [\"refId\"] = \"Success\",\n                            [\"target\"] = \"groupByNode(perSecond(web.*.http.2xx_success.*.*), 3, 'avg')\",\n                        },\n                        new Dictionary\u003cstring, object?\u003e\n                        {\n                            [\"datasource\"] = new Dictionary\u003cstring, object?\u003e\n                            {\n                                [\"type\"] = \"graphite\",\n                                [\"uid\"] = \"datasource-uid\",\n                            },\n                            [\"refId\"] = \"Total\",\n                            [\"target\"] = \"groupByNode(perSecond(web.*.http.5xx_errors.*.*), 3, 'avg')\",\n                        },\n                        new Dictionary\u003cstring, object?\u003e\n                        {\n                            [\"datasource\"] = new Dictionary\u003cstring, object?\u003e\n                            {\n                                [\"type\"] = \"__expr__\",\n                                [\"uid\"] = \"__expr__\",\n                            },\n                            [\"expression\"] = \"$Success / $Total\",\n                            [\"refId\"] = \"Expression\",\n                            [\"type\"] = \"math\",\n                        },\n                    }),\n                },\n                Type = \"grafana_queries\",\n            },\n        },\n        DestinationDatasource = new Grafana.Slo.Inputs.SLODestinationDatasourceArgs\n        {\n            Uid = \"grafanacloud-prom\",\n        },\n        Objectives = new[]\n        {\n            new Grafana.Slo.Inputs.SLOObjectiveArgs\n            {\n                Value = 0.995,\n                Window = \"30d\",\n            },\n        },\n        Labels = new[]\n        {\n            new Grafana.Slo.Inputs.SLOLabelArgs\n            {\n                Key = \"slo\",\n                Value = \"terraform\",\n            },\n        },\n        Alerting = new Grafana.Slo.Inputs.SLOAlertingArgs\n        {\n            Fastburn = new Grafana.Slo.Inputs.SLOAlertingFastburnArgs\n            {\n                Annotations = new[]\n                {\n                    new Grafana.Slo.Inputs.SLOAlertingFastburnAnnotationArgs\n                    {\n                        Key = \"name\",\n                        Value = \"SLO Burn Rate Very High\",\n                    },\n                    new Grafana.Slo.Inputs.SLOAlertingFastburnAnnotationArgs\n                    {\n                        Key = \"description\",\n                        Value = \"Error budget is burning too fast\",\n                    },\n                },\n            },\n            Slowburn = new Grafana.Slo.Inputs.SLOAlertingSlowburnArgs\n            {\n                Annotations = new[]\n                {\n                    new Grafana.Slo.Inputs.SLOAlertingSlowburnAnnotationArgs\n                    {\n                        Key = \"name\",\n                        Value = \"SLO Burn Rate High\",\n                    },\n                    new Grafana.Slo.Inputs.SLOAlertingSlowburnAnnotationArgs\n                    {\n                        Key = \"description\",\n                        Value = \"Error budget is burning too fast\",\n                    },\n                },\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/slo\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttmpJSON0, err := json.Marshal([]interface{}{\n\t\t\tmap[string]interface{}{\n\t\t\t\t\"datasource\": map[string]interface{}{\n\t\t\t\t\t\"type\": \"graphite\",\n\t\t\t\t\t\"uid\":  \"datasource-uid\",\n\t\t\t\t},\n\t\t\t\t\"refId\":  \"Success\",\n\t\t\t\t\"target\": \"groupByNode(perSecond(web.*.http.2xx_success.*.*), 3, 'avg')\",\n\t\t\t},\n\t\t\tmap[string]interface{}{\n\t\t\t\t\"datasource\": map[string]interface{}{\n\t\t\t\t\t\"type\": \"graphite\",\n\t\t\t\t\t\"uid\":  \"datasource-uid\",\n\t\t\t\t},\n\t\t\t\t\"refId\":  \"Total\",\n\t\t\t\t\"target\": \"groupByNode(perSecond(web.*.http.5xx_errors.*.*), 3, 'avg')\",\n\t\t\t},\n\t\t\tmap[string]interface{}{\n\t\t\t\t\"datasource\": map[string]interface{}{\n\t\t\t\t\t\"type\": \"__expr__\",\n\t\t\t\t\t\"uid\":  \"__expr__\",\n\t\t\t\t},\n\t\t\t\t\"expression\": \"$Success / $Total\",\n\t\t\t\t\"refId\":      \"Expression\",\n\t\t\t\t\"type\":       \"math\",\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\t_, err = slo.NewSLO(ctx, \"test\", \u0026slo.SLOArgs{\n\t\t\tName:        pulumi.String(\"Terraform Testing\"),\n\t\t\tDescription: pulumi.String(\"Terraform Description\"),\n\t\t\tQueries: slo.SLOQueryArray{\n\t\t\t\t\u0026slo.SLOQueryArgs{\n\t\t\t\t\tGrafanaQueries: \u0026slo.SLOQueryGrafanaQueriesArgs{\n\t\t\t\t\t\tGrafanaQueries: pulumi.String(json0),\n\t\t\t\t\t},\n\t\t\t\t\tType: pulumi.String(\"grafana_queries\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDestinationDatasource: \u0026slo.SLODestinationDatasourceArgs{\n\t\t\t\tUid: pulumi.String(\"grafanacloud-prom\"),\n\t\t\t},\n\t\t\tObjectives: slo.SLOObjectiveArray{\n\t\t\t\t\u0026slo.SLOObjectiveArgs{\n\t\t\t\t\tValue:  pulumi.Float64(0.995),\n\t\t\t\t\tWindow: pulumi.String(\"30d\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tLabels: slo.SLOLabelArray{\n\t\t\t\t\u0026slo.SLOLabelArgs{\n\t\t\t\t\tKey:   pulumi.String(\"slo\"),\n\t\t\t\t\tValue: pulumi.String(\"terraform\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tAlerting: \u0026slo.SLOAlertingArgs{\n\t\t\t\tFastburn: \u0026slo.SLOAlertingFastburnArgs{\n\t\t\t\t\tAnnotations: slo.SLOAlertingFastburnAnnotationArray{\n\t\t\t\t\t\t\u0026slo.SLOAlertingFastburnAnnotationArgs{\n\t\t\t\t\t\t\tKey:   pulumi.String(\"name\"),\n\t\t\t\t\t\t\tValue: pulumi.String(\"SLO Burn Rate Very High\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026slo.SLOAlertingFastburnAnnotationArgs{\n\t\t\t\t\t\t\tKey:   pulumi.String(\"description\"),\n\t\t\t\t\t\t\tValue: pulumi.String(\"Error budget is burning too fast\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tSlowburn: \u0026slo.SLOAlertingSlowburnArgs{\n\t\t\t\t\tAnnotations: slo.SLOAlertingSlowburnAnnotationArray{\n\t\t\t\t\t\t\u0026slo.SLOAlertingSlowburnAnnotationArgs{\n\t\t\t\t\t\t\tKey:   pulumi.String(\"name\"),\n\t\t\t\t\t\t\tValue: pulumi.String(\"SLO Burn Rate High\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026slo.SLOAlertingSlowburnAnnotationArgs{\n\t\t\t\t\t\t\tKey:   pulumi.String(\"description\"),\n\t\t\t\t\t\t\tValue: pulumi.String(\"Error budget is burning too fast\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.slo.SLO;\nimport com.pulumi.grafana.slo.SLOArgs;\nimport com.pulumi.grafana.slo.inputs.SLOQueryArgs;\nimport com.pulumi.grafana.slo.inputs.SLOQueryGrafanaQueriesArgs;\nimport com.pulumi.grafana.slo.inputs.SLODestinationDatasourceArgs;\nimport com.pulumi.grafana.slo.inputs.SLOObjectiveArgs;\nimport com.pulumi.grafana.slo.inputs.SLOLabelArgs;\nimport com.pulumi.grafana.slo.inputs.SLOAlertingArgs;\nimport com.pulumi.grafana.slo.inputs.SLOAlertingFastburnArgs;\nimport com.pulumi.grafana.slo.inputs.SLOAlertingSlowburnArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var test = new SLO(\"test\", SLOArgs.builder()\n            .name(\"Terraform Testing\")\n            .description(\"Terraform Description\")\n            .queries(SLOQueryArgs.builder()\n                .grafanaQueries(SLOQueryGrafanaQueriesArgs.builder()\n                    .grafanaQueries(serializeJson(\n                        jsonArray(\n                            jsonObject(\n                                jsonProperty(\"datasource\", jsonObject(\n                                    jsonProperty(\"type\", \"graphite\"),\n                                    jsonProperty(\"uid\", \"datasource-uid\")\n                                )),\n                                jsonProperty(\"refId\", \"Success\"),\n                                jsonProperty(\"target\", \"groupByNode(perSecond(web.*.http.2xx_success.*.*), 3, 'avg')\")\n                            ), \n                            jsonObject(\n                                jsonProperty(\"datasource\", jsonObject(\n                                    jsonProperty(\"type\", \"graphite\"),\n                                    jsonProperty(\"uid\", \"datasource-uid\")\n                                )),\n                                jsonProperty(\"refId\", \"Total\"),\n                                jsonProperty(\"target\", \"groupByNode(perSecond(web.*.http.5xx_errors.*.*), 3, 'avg')\")\n                            ), \n                            jsonObject(\n                                jsonProperty(\"datasource\", jsonObject(\n                                    jsonProperty(\"type\", \"__expr__\"),\n                                    jsonProperty(\"uid\", \"__expr__\")\n                                )),\n                                jsonProperty(\"expression\", \"$Success / $Total\"),\n                                jsonProperty(\"refId\", \"Expression\"),\n                                jsonProperty(\"type\", \"math\")\n                            )\n                        )))\n                    .build())\n                .type(\"grafana_queries\")\n                .build())\n            .destinationDatasource(SLODestinationDatasourceArgs.builder()\n                .uid(\"grafanacloud-prom\")\n                .build())\n            .objectives(SLOObjectiveArgs.builder()\n                .value(0.995)\n                .window(\"30d\")\n                .build())\n            .labels(SLOLabelArgs.builder()\n                .key(\"slo\")\n                .value(\"terraform\")\n                .build())\n            .alerting(SLOAlertingArgs.builder()\n                .fastburn(SLOAlertingFastburnArgs.builder()\n                    .annotations(                    \n                        SLOAlertingFastburnAnnotationArgs.builder()\n                            .key(\"name\")\n                            .value(\"SLO Burn Rate Very High\")\n                            .build(),\n                        SLOAlertingFastburnAnnotationArgs.builder()\n                            .key(\"description\")\n                            .value(\"Error budget is burning too fast\")\n                            .build())\n                    .build())\n                .slowburn(SLOAlertingSlowburnArgs.builder()\n                    .annotations(                    \n                        SLOAlertingSlowburnAnnotationArgs.builder()\n                            .key(\"name\")\n                            .value(\"SLO Burn Rate High\")\n                            .build(),\n                        SLOAlertingSlowburnAnnotationArgs.builder()\n                            .key(\"description\")\n                            .value(\"Error budget is burning too fast\")\n                            .build())\n                    .build())\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  test:\n    type: grafana:slo:SLO\n    properties:\n      name: Terraform Testing\n      description: Terraform Description\n      queries:\n        - grafanaQueries:\n            grafanaQueries:\n              fn::toJSON:\n                - datasource:\n                    type: graphite\n                    uid: datasource-uid\n                  refId: Success\n                  target: groupByNode(perSecond(web.*.http.2xx_success.*.*), 3, 'avg')\n                - datasource:\n                    type: graphite\n                    uid: datasource-uid\n                  refId: Total\n                  target: groupByNode(perSecond(web.*.http.5xx_errors.*.*), 3, 'avg')\n                - datasource:\n                    type: __expr__\n                    uid: __expr__\n                  expression: $Success / $Total\n                  refId: Expression\n                  type: math\n          type: grafana_queries\n      destinationDatasource:\n        uid: grafanacloud-prom\n      objectives:\n        - value: 0.995\n          window: 30d\n      labels:\n        - key: slo\n          value: terraform\n      alerting:\n        fastburn:\n          annotations:\n            - key: name\n              value: SLO Burn Rate Very High\n            - key: description\n              value: Error budget is burning too fast\n        slowburn:\n          annotations:\n            - key: name\n              value: SLO Burn Rate High\n            - key: description\n              value: Error budget is burning too fast\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nFor a complete list, see [supported data sources](https://grafana.com/docs/grafana-cloud/alerting-and-irm/slo/set-up/additionaldatasources/#supported-data-sources).\n\nFor additional help with SLOs, view our [documentation](https://grafana.com/docs/grafana-cloud/alerting-and-irm/slo/).\n\n## Import\n\n```sh\n$ pulumi import grafana:slo/sLO:SLO name \"{{ uuid }}\"\n```\n\n","properties":{"alerting":{"$ref":"#/types/grafana:slo/SLOAlerting:SLOAlerting","description":"Configures the alerting rules that will be generated for each\n\t\t\ttime window associated with the SLO. Grafana SLOs can generate\n\t\t\talerts when the short-term error budget burn is very high, the\n\t\t\tlong-term error budget burn rate is high, or when the remaining\n\t\t\terror budget is below a certain threshold. Annotations and Labels support templating.\n"},"description":{"type":"string","description":"Description is a free-text field that can provide more context to an SLO.\n"},"destinationDatasource":{"$ref":"#/types/grafana:slo/SLODestinationDatasource:SLODestinationDatasource","description":"Destination Datasource sets the datasource defined for an SLO\n"},"folderUid":{"type":"string","description":"UID for the SLO folder\n"},"labels":{"type":"array","items":{"$ref":"#/types/grafana:slo/SLOLabel:SLOLabel"},"description":"Additional labels that will be attached to all metrics generated from the query. These labels are useful for grouping SLOs in dashboard views that you create by hand. Labels must adhere to Prometheus label name schema - \"^[a-zA-Z*][a-zA-Z0-9*]*$\"\n"},"name":{"type":"string","description":"Name should be a short description of your indicator. Consider names like \"API Availability\"\n"},"objectives":{"type":"array","items":{"$ref":"#/types/grafana:slo/SLOObjective:SLOObjective"},"description":"Over each rolling time window, the remaining error budget will be calculated, and separate alerts can be generated for each time window based on the SLO burn rate or remaining error budget.\n"},"queries":{"type":"array","items":{"$ref":"#/types/grafana:slo/SLOQuery:SLOQuery"},"description":"Query describes the indicator that will be measured against the objective. Freeform Query types are currently supported.\n"},"searchExpression":{"type":"string","description":"The name of a search expression in Grafana Asserts. This is used in the SLO UI to open the Asserts RCA workbench and in alerts to link to the RCA workbench.\n"},"uuid":{"type":"string","description":"UUID for the SLO. Custom UUIDs can be set. If not provided, a random UUID will be generated by the API.\n"}},"required":["description","destinationDatasource","name","objectives","queries","uuid"],"inputProperties":{"alerting":{"$ref":"#/types/grafana:slo/SLOAlerting:SLOAlerting","description":"Configures the alerting rules that will be generated for each\n\t\t\ttime window associated with the SLO. Grafana SLOs can generate\n\t\t\talerts when the short-term error budget burn is very high, the\n\t\t\tlong-term error budget burn rate is high, or when the remaining\n\t\t\terror budget is below a certain threshold. Annotations and Labels support templating.\n"},"description":{"type":"string","description":"Description is a free-text field that can provide more context to an SLO.\n"},"destinationDatasource":{"$ref":"#/types/grafana:slo/SLODestinationDatasource:SLODestinationDatasource","description":"Destination Datasource sets the datasource defined for an SLO\n"},"folderUid":{"type":"string","description":"UID for the SLO folder\n"},"labels":{"type":"array","items":{"$ref":"#/types/grafana:slo/SLOLabel:SLOLabel"},"description":"Additional labels that will be attached to all metrics generated from the query. These labels are useful for grouping SLOs in dashboard views that you create by hand. Labels must adhere to Prometheus label name schema - \"^[a-zA-Z*][a-zA-Z0-9*]*$\"\n"},"name":{"type":"string","description":"Name should be a short description of your indicator. Consider names like \"API Availability\"\n"},"objectives":{"type":"array","items":{"$ref":"#/types/grafana:slo/SLOObjective:SLOObjective"},"description":"Over each rolling time window, the remaining error budget will be calculated, and separate alerts can be generated for each time window based on the SLO burn rate or remaining error budget.\n"},"queries":{"type":"array","items":{"$ref":"#/types/grafana:slo/SLOQuery:SLOQuery"},"description":"Query describes the indicator that will be measured against the objective. Freeform Query types are currently supported.\n"},"searchExpression":{"type":"string","description":"The name of a search expression in Grafana Asserts. This is used in the SLO UI to open the Asserts RCA workbench and in alerts to link to the RCA workbench.\n"},"uuid":{"type":"string","description":"UUID for the SLO. Custom UUIDs can be set. If not provided, a random UUID will be generated by the API.\n"}},"requiredInputs":["description","destinationDatasource","objectives","queries"],"stateInputs":{"description":"Input properties used for looking up and filtering SLO resources.\n","properties":{"alerting":{"$ref":"#/types/grafana:slo/SLOAlerting:SLOAlerting","description":"Configures the alerting rules that will be generated for each\n\t\t\ttime window associated with the SLO. Grafana SLOs can generate\n\t\t\talerts when the short-term error budget burn is very high, the\n\t\t\tlong-term error budget burn rate is high, or when the remaining\n\t\t\terror budget is below a certain threshold. Annotations and Labels support templating.\n"},"description":{"type":"string","description":"Description is a free-text field that can provide more context to an SLO.\n"},"destinationDatasource":{"$ref":"#/types/grafana:slo/SLODestinationDatasource:SLODestinationDatasource","description":"Destination Datasource sets the datasource defined for an SLO\n"},"folderUid":{"type":"string","description":"UID for the SLO folder\n"},"labels":{"type":"array","items":{"$ref":"#/types/grafana:slo/SLOLabel:SLOLabel"},"description":"Additional labels that will be attached to all metrics generated from the query. These labels are useful for grouping SLOs in dashboard views that you create by hand. Labels must adhere to Prometheus label name schema - \"^[a-zA-Z*][a-zA-Z0-9*]*$\"\n"},"name":{"type":"string","description":"Name should be a short description of your indicator. Consider names like \"API Availability\"\n"},"objectives":{"type":"array","items":{"$ref":"#/types/grafana:slo/SLOObjective:SLOObjective"},"description":"Over each rolling time window, the remaining error budget will be calculated, and separate alerts can be generated for each time window based on the SLO burn rate or remaining error budget.\n"},"queries":{"type":"array","items":{"$ref":"#/types/grafana:slo/SLOQuery:SLOQuery"},"description":"Query describes the indicator that will be measured against the objective. Freeform Query types are currently supported.\n"},"searchExpression":{"type":"string","description":"The name of a search expression in Grafana Asserts. This is used in the SLO UI to open the Asserts RCA workbench and in alerts to link to the RCA workbench.\n"},"uuid":{"type":"string","description":"UUID for the SLO. Custom UUIDs can be set. If not provided, a random UUID will be generated by the API.\n"}},"type":"object"},"aliases":[{"type":"grafana:index/sLO:SLO"}]},"grafana:syntheticMonitoring/check:Check":{"description":"Synthetic Monitoring checks are tests that run on selected probes at defined\nintervals and report metrics and logs back to your Grafana Cloud account. The\ntarget for checks can be a domain name, a server, or a website, depending on\nwhat information you would like to gather about your endpoint. You can define\nmultiple checks for a single endpoint to check different capabilities.\n\n* [Official documentation](https://grafana.com/docs/grafana-cloud/testing/synthetic-monitoring/create-checks/checks/)\n\n## Example Usage\n\n### DNS Basic\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst main = grafana.syntheticMonitoring.getProbes({});\nconst dns = new grafana.syntheticmonitoring.Check(\"dns\", {\n    job: \"DNS Defaults\",\n    target: \"grafana.com\",\n    enabled: false,\n    probes: [main.then(main =\u003e main.probes?.ohio)],\n    labels: {\n        foo: \"bar\",\n    },\n    settings: {\n        dns: {},\n    },\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\nmain = grafana.syntheticMonitoring.get_probes()\ndns = grafana.syntheticmonitoring.Check(\"dns\",\n    job=\"DNS Defaults\",\n    target=\"grafana.com\",\n    enabled=False,\n    probes=[main.probes[\"ohio\"]],\n    labels={\n        \"foo\": \"bar\",\n    },\n    settings={\n        \"dns\": {},\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var main = Grafana.SyntheticMonitoring.GetProbes.Invoke();\n\n    var dns = new Grafana.SyntheticMonitoring.Check(\"dns\", new()\n    {\n        Job = \"DNS Defaults\",\n        Target = \"grafana.com\",\n        Enabled = false,\n        Probes = new[]\n        {\n            main.Apply(getProbesResult =\u003e getProbesResult.Probes?.Ohio),\n        },\n        Labels = \n        {\n            { \"foo\", \"bar\" },\n        },\n        Settings = new Grafana.SyntheticMonitoring.Inputs.CheckSettingsArgs\n        {\n            Dns = null,\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/syntheticmonitoring\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmain, err := syntheticmonitoring.GetProbes(ctx, \u0026syntheticmonitoring.GetProbesArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = syntheticmonitoring.NewCheck(ctx, \"dns\", \u0026syntheticmonitoring.CheckArgs{\n\t\t\tJob:     pulumi.String(\"DNS Defaults\"),\n\t\t\tTarget:  pulumi.String(\"grafana.com\"),\n\t\t\tEnabled: pulumi.Bool(false),\n\t\t\tProbes: pulumi.IntArray{\n\t\t\t\tpulumi.Int(main.Probes.Ohio),\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tSettings: \u0026syntheticmonitoring.CheckSettingsArgs{\n\t\t\t\tDns: \u0026syntheticmonitoring.CheckSettingsDnsArgs{},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.syntheticMonitoring.SyntheticMonitoringFunctions;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.GetProbesArgs;\nimport com.pulumi.grafana.syntheticMonitoring.Check;\nimport com.pulumi.grafana.syntheticMonitoring.CheckArgs;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.CheckSettingsArgs;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.CheckSettingsDnsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var main = SyntheticMonitoringFunctions.getProbes(GetProbesArgs.builder()\n            .build());\n\n        var dns = new Check(\"dns\", CheckArgs.builder()\n            .job(\"DNS Defaults\")\n            .target(\"grafana.com\")\n            .enabled(false)\n            .probes(main.probes().ohio())\n            .labels(Map.of(\"foo\", \"bar\"))\n            .settings(CheckSettingsArgs.builder()\n                .dns(CheckSettingsDnsArgs.builder()\n                    .build())\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  dns:\n    type: grafana:syntheticMonitoring:Check\n    properties:\n      job: DNS Defaults\n      target: grafana.com\n      enabled: false\n      probes:\n        - ${main.probes.ohio}\n      labels:\n        foo: bar\n      settings:\n        dns: {}\nvariables:\n  main:\n    fn::invoke:\n      function: grafana:syntheticMonitoring:getProbes\n      arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### DNS Complex\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst main = grafana.syntheticMonitoring.getProbes({});\nconst dns = new grafana.syntheticmonitoring.Check(\"dns\", {\n    job: \"DNS Updated\",\n    target: \"grafana.net\",\n    enabled: false,\n    probes: [\n        main.then(main =\u003e main.probes?.frankfurt),\n        main.then(main =\u003e main.probes?.london),\n    ],\n    labels: {\n        foo: \"baz\",\n    },\n    settings: {\n        dns: {\n            ipVersion: \"Any\",\n            server: \"8.8.4.4\",\n            port: 8600,\n            recordType: \"CNAME\",\n            protocol: \"TCP\",\n            validRCodes: [\n                \"NOERROR\",\n                \"NOTAUTH\",\n            ],\n            validateAnswerRrs: {\n                failIfMatchesRegexps: [\".+-bad-stuff*\"],\n                failIfNotMatchesRegexps: [\".+-good-stuff*\"],\n            },\n            validateAuthorityRrs: {\n                failIfMatchesRegexps: [\".+-bad-stuff*\"],\n                failIfNotMatchesRegexps: [\".+-good-stuff*\"],\n            },\n            validateAdditionalRrs: [{\n                failIfMatchesRegexps: [\".+-bad-stuff*\"],\n                failIfNotMatchesRegexps: [\".+-good-stuff*\"],\n            }],\n        },\n    },\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\nmain = grafana.syntheticMonitoring.get_probes()\ndns = grafana.syntheticmonitoring.Check(\"dns\",\n    job=\"DNS Updated\",\n    target=\"grafana.net\",\n    enabled=False,\n    probes=[\n        main.probes[\"frankfurt\"],\n        main.probes[\"london\"],\n    ],\n    labels={\n        \"foo\": \"baz\",\n    },\n    settings={\n        \"dns\": {\n            \"ip_version\": \"Any\",\n            \"server\": \"8.8.4.4\",\n            \"port\": 8600,\n            \"record_type\": \"CNAME\",\n            \"protocol\": \"TCP\",\n            \"valid_r_codes\": [\n                \"NOERROR\",\n                \"NOTAUTH\",\n            ],\n            \"validate_answer_rrs\": {\n                \"fail_if_matches_regexps\": [\".+-bad-stuff*\"],\n                \"fail_if_not_matches_regexps\": [\".+-good-stuff*\"],\n            },\n            \"validate_authority_rrs\": {\n                \"fail_if_matches_regexps\": [\".+-bad-stuff*\"],\n                \"fail_if_not_matches_regexps\": [\".+-good-stuff*\"],\n            },\n            \"validate_additional_rrs\": [{\n                \"fail_if_matches_regexps\": [\".+-bad-stuff*\"],\n                \"fail_if_not_matches_regexps\": [\".+-good-stuff*\"],\n            }],\n        },\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var main = Grafana.SyntheticMonitoring.GetProbes.Invoke();\n\n    var dns = new Grafana.SyntheticMonitoring.Check(\"dns\", new()\n    {\n        Job = \"DNS Updated\",\n        Target = \"grafana.net\",\n        Enabled = false,\n        Probes = new[]\n        {\n            main.Apply(getProbesResult =\u003e getProbesResult.Probes?.Frankfurt),\n            main.Apply(getProbesResult =\u003e getProbesResult.Probes?.London),\n        },\n        Labels = \n        {\n            { \"foo\", \"baz\" },\n        },\n        Settings = new Grafana.SyntheticMonitoring.Inputs.CheckSettingsArgs\n        {\n            Dns = new Grafana.SyntheticMonitoring.Inputs.CheckSettingsDnsArgs\n            {\n                IpVersion = \"Any\",\n                Server = \"8.8.4.4\",\n                Port = 8600,\n                RecordType = \"CNAME\",\n                Protocol = \"TCP\",\n                ValidRCodes = new[]\n                {\n                    \"NOERROR\",\n                    \"NOTAUTH\",\n                },\n                ValidateAnswerRrs = new Grafana.SyntheticMonitoring.Inputs.CheckSettingsDnsValidateAnswerRrsArgs\n                {\n                    FailIfMatchesRegexps = new[]\n                    {\n                        \".+-bad-stuff*\",\n                    },\n                    FailIfNotMatchesRegexps = new[]\n                    {\n                        \".+-good-stuff*\",\n                    },\n                },\n                ValidateAuthorityRrs = new Grafana.SyntheticMonitoring.Inputs.CheckSettingsDnsValidateAuthorityRrsArgs\n                {\n                    FailIfMatchesRegexps = new[]\n                    {\n                        \".+-bad-stuff*\",\n                    },\n                    FailIfNotMatchesRegexps = new[]\n                    {\n                        \".+-good-stuff*\",\n                    },\n                },\n                ValidateAdditionalRrs = new[]\n                {\n                    new Grafana.SyntheticMonitoring.Inputs.CheckSettingsDnsValidateAdditionalRrArgs\n                    {\n                        FailIfMatchesRegexps = new[]\n                        {\n                            \".+-bad-stuff*\",\n                        },\n                        FailIfNotMatchesRegexps = new[]\n                        {\n                            \".+-good-stuff*\",\n                        },\n                    },\n                },\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/syntheticmonitoring\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmain, err := syntheticmonitoring.GetProbes(ctx, \u0026syntheticmonitoring.GetProbesArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = syntheticmonitoring.NewCheck(ctx, \"dns\", \u0026syntheticmonitoring.CheckArgs{\n\t\t\tJob:     pulumi.String(\"DNS Updated\"),\n\t\t\tTarget:  pulumi.String(\"grafana.net\"),\n\t\t\tEnabled: pulumi.Bool(false),\n\t\t\tProbes: pulumi.IntArray{\n\t\t\t\tpulumi.Int(main.Probes.Frankfurt),\n\t\t\t\tpulumi.Int(main.Probes.London),\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"baz\"),\n\t\t\t},\n\t\t\tSettings: \u0026syntheticmonitoring.CheckSettingsArgs{\n\t\t\t\tDns: \u0026syntheticmonitoring.CheckSettingsDnsArgs{\n\t\t\t\t\tIpVersion:  pulumi.String(\"Any\"),\n\t\t\t\t\tServer:     pulumi.String(\"8.8.4.4\"),\n\t\t\t\t\tPort:       pulumi.Int(8600),\n\t\t\t\t\tRecordType: pulumi.String(\"CNAME\"),\n\t\t\t\t\tProtocol:   pulumi.String(\"TCP\"),\n\t\t\t\t\tValidRCodes: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"NOERROR\"),\n\t\t\t\t\t\tpulumi.String(\"NOTAUTH\"),\n\t\t\t\t\t},\n\t\t\t\t\tValidateAnswerRrs: \u0026syntheticmonitoring.CheckSettingsDnsValidateAnswerRrsArgs{\n\t\t\t\t\t\tFailIfMatchesRegexps: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\".+-bad-stuff*\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFailIfNotMatchesRegexps: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\".+-good-stuff*\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tValidateAuthorityRrs: \u0026syntheticmonitoring.CheckSettingsDnsValidateAuthorityRrsArgs{\n\t\t\t\t\t\tFailIfMatchesRegexps: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\".+-bad-stuff*\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFailIfNotMatchesRegexps: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\".+-good-stuff*\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tValidateAdditionalRrs: syntheticmonitoring.CheckSettingsDnsValidateAdditionalRrArray{\n\t\t\t\t\t\t\u0026syntheticmonitoring.CheckSettingsDnsValidateAdditionalRrArgs{\n\t\t\t\t\t\t\tFailIfMatchesRegexps: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\".+-bad-stuff*\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tFailIfNotMatchesRegexps: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\".+-good-stuff*\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.syntheticMonitoring.SyntheticMonitoringFunctions;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.GetProbesArgs;\nimport com.pulumi.grafana.syntheticMonitoring.Check;\nimport com.pulumi.grafana.syntheticMonitoring.CheckArgs;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.CheckSettingsArgs;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.CheckSettingsDnsArgs;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.CheckSettingsDnsValidateAnswerRrsArgs;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.CheckSettingsDnsValidateAuthorityRrsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var main = SyntheticMonitoringFunctions.getProbes(GetProbesArgs.builder()\n            .build());\n\n        var dns = new Check(\"dns\", CheckArgs.builder()\n            .job(\"DNS Updated\")\n            .target(\"grafana.net\")\n            .enabled(false)\n            .probes(            \n                main.probes().frankfurt(),\n                main.probes().london())\n            .labels(Map.of(\"foo\", \"baz\"))\n            .settings(CheckSettingsArgs.builder()\n                .dns(CheckSettingsDnsArgs.builder()\n                    .ipVersion(\"Any\")\n                    .server(\"8.8.4.4\")\n                    .port(8600)\n                    .recordType(\"CNAME\")\n                    .protocol(\"TCP\")\n                    .validRCodes(                    \n                        \"NOERROR\",\n                        \"NOTAUTH\")\n                    .validateAnswerRrs(CheckSettingsDnsValidateAnswerRrsArgs.builder()\n                        .failIfMatchesRegexps(\".+-bad-stuff*\")\n                        .failIfNotMatchesRegexps(\".+-good-stuff*\")\n                        .build())\n                    .validateAuthorityRrs(CheckSettingsDnsValidateAuthorityRrsArgs.builder()\n                        .failIfMatchesRegexps(\".+-bad-stuff*\")\n                        .failIfNotMatchesRegexps(\".+-good-stuff*\")\n                        .build())\n                    .validateAdditionalRrs(CheckSettingsDnsValidateAdditionalRrArgs.builder()\n                        .failIfMatchesRegexps(\".+-bad-stuff*\")\n                        .failIfNotMatchesRegexps(\".+-good-stuff*\")\n                        .build())\n                    .build())\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  dns:\n    type: grafana:syntheticMonitoring:Check\n    properties:\n      job: DNS Updated\n      target: grafana.net\n      enabled: false\n      probes:\n        - ${main.probes.frankfurt}\n        - ${main.probes.london}\n      labels:\n        foo: baz\n      settings:\n        dns:\n          ipVersion: Any\n          server: 8.8.4.4\n          port: 8600\n          recordType: CNAME\n          protocol: TCP\n          validRCodes:\n            - NOERROR\n            - NOTAUTH\n          validateAnswerRrs:\n            failIfMatchesRegexps:\n              - .+-bad-stuff*\n            failIfNotMatchesRegexps:\n              - .+-good-stuff*\n          validateAuthorityRrs:\n            failIfMatchesRegexps:\n              - .+-bad-stuff*\n            failIfNotMatchesRegexps:\n              - .+-good-stuff*\n          validateAdditionalRrs:\n            - failIfMatchesRegexps:\n                - .+-bad-stuff*\n              failIfNotMatchesRegexps:\n                - .+-good-stuff*\nvariables:\n  main:\n    fn::invoke:\n      function: grafana:syntheticMonitoring:getProbes\n      arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### HTTP Basic\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst main = grafana.syntheticMonitoring.getProbes({});\nconst http = new grafana.syntheticmonitoring.Check(\"http\", {\n    job: \"HTTP Defaults\",\n    target: \"https://grafana.com\",\n    enabled: false,\n    probes: [main.then(main =\u003e main.probes?.ohio)],\n    labels: {\n        foo: \"bar\",\n    },\n    settings: {\n        http: {},\n    },\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\nmain = grafana.syntheticMonitoring.get_probes()\nhttp = grafana.syntheticmonitoring.Check(\"http\",\n    job=\"HTTP Defaults\",\n    target=\"https://grafana.com\",\n    enabled=False,\n    probes=[main.probes[\"ohio\"]],\n    labels={\n        \"foo\": \"bar\",\n    },\n    settings={\n        \"http\": {},\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var main = Grafana.SyntheticMonitoring.GetProbes.Invoke();\n\n    var http = new Grafana.SyntheticMonitoring.Check(\"http\", new()\n    {\n        Job = \"HTTP Defaults\",\n        Target = \"https://grafana.com\",\n        Enabled = false,\n        Probes = new[]\n        {\n            main.Apply(getProbesResult =\u003e getProbesResult.Probes?.Ohio),\n        },\n        Labels = \n        {\n            { \"foo\", \"bar\" },\n        },\n        Settings = new Grafana.SyntheticMonitoring.Inputs.CheckSettingsArgs\n        {\n            Http = null,\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/syntheticmonitoring\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmain, err := syntheticmonitoring.GetProbes(ctx, \u0026syntheticmonitoring.GetProbesArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = syntheticmonitoring.NewCheck(ctx, \"http\", \u0026syntheticmonitoring.CheckArgs{\n\t\t\tJob:     pulumi.String(\"HTTP Defaults\"),\n\t\t\tTarget:  pulumi.String(\"https://grafana.com\"),\n\t\t\tEnabled: pulumi.Bool(false),\n\t\t\tProbes: pulumi.IntArray{\n\t\t\t\tpulumi.Int(main.Probes.Ohio),\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tSettings: \u0026syntheticmonitoring.CheckSettingsArgs{\n\t\t\t\tHttp: \u0026syntheticmonitoring.CheckSettingsHttpArgs{},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.syntheticMonitoring.SyntheticMonitoringFunctions;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.GetProbesArgs;\nimport com.pulumi.grafana.syntheticMonitoring.Check;\nimport com.pulumi.grafana.syntheticMonitoring.CheckArgs;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.CheckSettingsArgs;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.CheckSettingsHttpArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var main = SyntheticMonitoringFunctions.getProbes(GetProbesArgs.builder()\n            .build());\n\n        var http = new Check(\"http\", CheckArgs.builder()\n            .job(\"HTTP Defaults\")\n            .target(\"https://grafana.com\")\n            .enabled(false)\n            .probes(main.probes().ohio())\n            .labels(Map.of(\"foo\", \"bar\"))\n            .settings(CheckSettingsArgs.builder()\n                .http(CheckSettingsHttpArgs.builder()\n                    .build())\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  http:\n    type: grafana:syntheticMonitoring:Check\n    properties:\n      job: HTTP Defaults\n      target: https://grafana.com\n      enabled: false\n      probes:\n        - ${main.probes.ohio}\n      labels:\n        foo: bar\n      settings:\n        http: {}\nvariables:\n  main:\n    fn::invoke:\n      function: grafana:syntheticMonitoring:getProbes\n      arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### HTTP Complex\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst main = grafana.syntheticMonitoring.getProbes({});\nconst http = new grafana.syntheticmonitoring.Check(\"http\", {\n    job: \"HTTP Defaults\",\n    target: \"https://grafana.org\",\n    enabled: false,\n    probes: [\n        main.then(main =\u003e main.probes?.mumbai),\n        main.then(main =\u003e main.probes?.mumbai),\n    ],\n    labels: {\n        foo: \"bar\",\n    },\n    settings: {\n        http: {\n            ipVersion: \"V6\",\n            method: \"TRACE\",\n            body: \"and spirit\",\n            noFollowRedirects: true,\n            bearerToken: \"asdfjkl;\",\n            proxyUrl: \"https://almost-there\",\n            failIfSsl: true,\n            failIfNotSsl: true,\n            compression: \"deflate\",\n            cacheBustingQueryParamName: \"pineapple\",\n            tlsConfig: {\n                serverName: \"grafana.org\",\n                clientCert: `-----BEGIN CERTIFICATE-----\nMIIEljCCAn4CCQCKJPUQQxeO0zANBgkqhkiG9w0BAQsFADANMQswCQYDVQQGEwJT\nRTAeFw0yMTA1MjkxOTIyNTdaFw0yNDAzMTgxOTIyNTdaMA0xCzAJBgNVBAYTAlNF\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnmbazDNUT0rSI4BpGZK+\n0AJ+9FDkIYWJUtRLJoxw8CF+AobMFploYA2L2Myt80cTA1w8FrewjC8qlqdnrPWr\nh1ely2zsUljgi1/niH0ndjFzliL7UkinXQiAsTtYOrOQmzyd/o5PNdu7dz0m7stD\nBN/Sz5TlXZnA1/eJbqV/kqMau6b1MaBx8SbRfUG9+cSmUobFJwuktDrPuwJhcEkl\niDmhEqu1GuZzmKvzPacLTVia1vSlmCTCu89NiHI8iGiiLtqNrapup7f8j5m3a3SL\na+vXhplFj2piNl7Nc0dfuVgtEliTI+qUL2/+4A7gzRWZpHy21/LxMMXmBhdJW9En\nFWkev97VZLgb5TR3+qpSWmXcodjPy4dibvwsOMpdd+Q4AYulwvlDw5idRPVgGvk7\nqq03+w9ppZ5Fugws9k2CD9F/75JX2mCbRpkuPe8XXZ7bqrMaQgQMLOrs68HuiiCk\nFTklglq4DMKxnf/Y/T/MgIa9Q1o28YSevh6A7FnfPGARj2H2T4rToi+bC1Vf7qNB\nZ18bDpz99tRUTbyiRUSBMWLCGhU6c4HAqUrfrkpperOKFBQ3i38a79838oFdXHBW\n6rx1t5cC3XwtEoUyeBKAygez8G1LDXbN3607MxVhAjhHKtPkYvuBfysSNU6JrR0z\nUV1IURJANt2UMuKgSEkG/IMCAwEAATANBgkqhkiG9w0BAQsFAAOCAgEAcipMhp/w\nyzfPy61faVAw9SPaMNRlnW9FCDC3N9CGOjo2knjXpObPzyzsJiUURTjrA9eFMpRA\ne2Rgn2j+nvm2XdLAlC4Kh8jqv/wCL0X6BTQMdN5aOhXdSiXtpXOMvXYY/dQ4ebRZ\nXeRCVWQD79JbV6/uyx0nCV3FVcU7L1P4UjxroefVr0soLPMirgxHmOxLnkoVgdcB\ntqufP5kJx9CIeJXPx3QQsk1XfEtxtUvuw4ZaZkQnNUqvGl7V+AZpur5Eqfv3zBi8\nQxxL7qGkARNssNWH2Ju+tqpM/UZRnjlFrDR4SXUgT0coTduBalUY6qHkciHmRpiP\ntf3SgpDeiCSOV2iVFGdaR1mz3muWoAYWFstcWN3a3HjjVugIi23yLN8Gv8CNeoH4\nprulinFCLrFgAh8SLAF8mOAZanT06LH8jOIFYrdUxH+ZeRBR0rLoFjUF+JB7UKD9\n5TA+B4EBzQ1tMbGFU1DX79MjAejq0IV0Nzq+GMfBvLHxEf4+Oz8nqhDXQcJ6TdtY\nl3Lyw5zBvOL80SBK+Mr0UP7d9U3VXgbGHCYVJU6Ot1TwiGwahtWALRALA3TWeGkq\n7kyD1H+nm+9lfKhuyBRQnRGBVyze2lAp7oxwshJuhBwEXosXFxq1Cy6QhPN77r6N\nvuhxvtppolNnyOgGxwG4zquqq2V5/+vKjKY=\n-----END CERTIFICATE-----\n`,\n            },\n            headers: [\"Content-Type: multipart/form-data; boundary=something\"],\n            basicAuth: {\n                username: \"open\",\n                password: \"sesame\",\n            },\n            validStatusCodes: [\n                200,\n                201,\n            ],\n            validHttpVersions: [\n                \"HTTP/1.0\",\n                \"HTTP/1.1\",\n                \"HTTP/2.0\",\n            ],\n            failIfBodyMatchesRegexps: [\".*bad stuff.*\"],\n            failIfBodyNotMatchesRegexps: [\".*good stuff.*\"],\n            failIfHeaderMatchesRegexps: [\n                {\n                    header: \"Content-Type\",\n                    regexp: \"application/soap*\",\n                    allowMissing: true,\n                },\n                {\n                    header: \"Content-Type\",\n                    regexp: \"application/json\",\n                    allowMissing: true,\n                },\n            ],\n        },\n    },\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\nmain = grafana.syntheticMonitoring.get_probes()\nhttp = grafana.syntheticmonitoring.Check(\"http\",\n    job=\"HTTP Defaults\",\n    target=\"https://grafana.org\",\n    enabled=False,\n    probes=[\n        main.probes[\"mumbai\"],\n        main.probes[\"mumbai\"],\n    ],\n    labels={\n        \"foo\": \"bar\",\n    },\n    settings={\n        \"http\": {\n            \"ip_version\": \"V6\",\n            \"method\": \"TRACE\",\n            \"body\": \"and spirit\",\n            \"no_follow_redirects\": True,\n            \"bearer_token\": \"asdfjkl;\",\n            \"proxy_url\": \"https://almost-there\",\n            \"fail_if_ssl\": True,\n            \"fail_if_not_ssl\": True,\n            \"compression\": \"deflate\",\n            \"cache_busting_query_param_name\": \"pineapple\",\n            \"tls_config\": {\n                \"server_name\": \"grafana.org\",\n                \"client_cert\": \"\"\"-----BEGIN CERTIFICATE-----\nMIIEljCCAn4CCQCKJPUQQxeO0zANBgkqhkiG9w0BAQsFADANMQswCQYDVQQGEwJT\nRTAeFw0yMTA1MjkxOTIyNTdaFw0yNDAzMTgxOTIyNTdaMA0xCzAJBgNVBAYTAlNF\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnmbazDNUT0rSI4BpGZK+\n0AJ+9FDkIYWJUtRLJoxw8CF+AobMFploYA2L2Myt80cTA1w8FrewjC8qlqdnrPWr\nh1ely2zsUljgi1/niH0ndjFzliL7UkinXQiAsTtYOrOQmzyd/o5PNdu7dz0m7stD\nBN/Sz5TlXZnA1/eJbqV/kqMau6b1MaBx8SbRfUG9+cSmUobFJwuktDrPuwJhcEkl\niDmhEqu1GuZzmKvzPacLTVia1vSlmCTCu89NiHI8iGiiLtqNrapup7f8j5m3a3SL\na+vXhplFj2piNl7Nc0dfuVgtEliTI+qUL2/+4A7gzRWZpHy21/LxMMXmBhdJW9En\nFWkev97VZLgb5TR3+qpSWmXcodjPy4dibvwsOMpdd+Q4AYulwvlDw5idRPVgGvk7\nqq03+w9ppZ5Fugws9k2CD9F/75JX2mCbRpkuPe8XXZ7bqrMaQgQMLOrs68HuiiCk\nFTklglq4DMKxnf/Y/T/MgIa9Q1o28YSevh6A7FnfPGARj2H2T4rToi+bC1Vf7qNB\nZ18bDpz99tRUTbyiRUSBMWLCGhU6c4HAqUrfrkpperOKFBQ3i38a79838oFdXHBW\n6rx1t5cC3XwtEoUyeBKAygez8G1LDXbN3607MxVhAjhHKtPkYvuBfysSNU6JrR0z\nUV1IURJANt2UMuKgSEkG/IMCAwEAATANBgkqhkiG9w0BAQsFAAOCAgEAcipMhp/w\nyzfPy61faVAw9SPaMNRlnW9FCDC3N9CGOjo2knjXpObPzyzsJiUURTjrA9eFMpRA\ne2Rgn2j+nvm2XdLAlC4Kh8jqv/wCL0X6BTQMdN5aOhXdSiXtpXOMvXYY/dQ4ebRZ\nXeRCVWQD79JbV6/uyx0nCV3FVcU7L1P4UjxroefVr0soLPMirgxHmOxLnkoVgdcB\ntqufP5kJx9CIeJXPx3QQsk1XfEtxtUvuw4ZaZkQnNUqvGl7V+AZpur5Eqfv3zBi8\nQxxL7qGkARNssNWH2Ju+tqpM/UZRnjlFrDR4SXUgT0coTduBalUY6qHkciHmRpiP\ntf3SgpDeiCSOV2iVFGdaR1mz3muWoAYWFstcWN3a3HjjVugIi23yLN8Gv8CNeoH4\nprulinFCLrFgAh8SLAF8mOAZanT06LH8jOIFYrdUxH+ZeRBR0rLoFjUF+JB7UKD9\n5TA+B4EBzQ1tMbGFU1DX79MjAejq0IV0Nzq+GMfBvLHxEf4+Oz8nqhDXQcJ6TdtY\nl3Lyw5zBvOL80SBK+Mr0UP7d9U3VXgbGHCYVJU6Ot1TwiGwahtWALRALA3TWeGkq\n7kyD1H+nm+9lfKhuyBRQnRGBVyze2lAp7oxwshJuhBwEXosXFxq1Cy6QhPN77r6N\nvuhxvtppolNnyOgGxwG4zquqq2V5/+vKjKY=\n-----END CERTIFICATE-----\n\"\"\",\n            },\n            \"headers\": [\"Content-Type: multipart/form-data; boundary=something\"],\n            \"basic_auth\": {\n                \"username\": \"open\",\n                \"password\": \"sesame\",\n            },\n            \"valid_status_codes\": [\n                200,\n                201,\n            ],\n            \"valid_http_versions\": [\n                \"HTTP/1.0\",\n                \"HTTP/1.1\",\n                \"HTTP/2.0\",\n            ],\n            \"fail_if_body_matches_regexps\": [\".*bad stuff.*\"],\n            \"fail_if_body_not_matches_regexps\": [\".*good stuff.*\"],\n            \"fail_if_header_matches_regexps\": [\n                {\n                    \"header\": \"Content-Type\",\n                    \"regexp\": \"application/soap*\",\n                    \"allow_missing\": True,\n                },\n                {\n                    \"header\": \"Content-Type\",\n                    \"regexp\": \"application/json\",\n                    \"allow_missing\": True,\n                },\n            ],\n        },\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var main = Grafana.SyntheticMonitoring.GetProbes.Invoke();\n\n    var http = new Grafana.SyntheticMonitoring.Check(\"http\", new()\n    {\n        Job = \"HTTP Defaults\",\n        Target = \"https://grafana.org\",\n        Enabled = false,\n        Probes = new[]\n        {\n            main.Apply(getProbesResult =\u003e getProbesResult.Probes?.Mumbai),\n            main.Apply(getProbesResult =\u003e getProbesResult.Probes?.Mumbai),\n        },\n        Labels = \n        {\n            { \"foo\", \"bar\" },\n        },\n        Settings = new Grafana.SyntheticMonitoring.Inputs.CheckSettingsArgs\n        {\n            Http = new Grafana.SyntheticMonitoring.Inputs.CheckSettingsHttpArgs\n            {\n                IpVersion = \"V6\",\n                Method = \"TRACE\",\n                Body = \"and spirit\",\n                NoFollowRedirects = true,\n                BearerToken = \"asdfjkl;\",\n                ProxyUrl = \"https://almost-there\",\n                FailIfSsl = true,\n                FailIfNotSsl = true,\n                Compression = \"deflate\",\n                CacheBustingQueryParamName = \"pineapple\",\n                TlsConfig = new Grafana.SyntheticMonitoring.Inputs.CheckSettingsHttpTlsConfigArgs\n                {\n                    ServerName = \"grafana.org\",\n                    ClientCert = @\"-----BEGIN CERTIFICATE-----\nMIIEljCCAn4CCQCKJPUQQxeO0zANBgkqhkiG9w0BAQsFADANMQswCQYDVQQGEwJT\nRTAeFw0yMTA1MjkxOTIyNTdaFw0yNDAzMTgxOTIyNTdaMA0xCzAJBgNVBAYTAlNF\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnmbazDNUT0rSI4BpGZK+\n0AJ+9FDkIYWJUtRLJoxw8CF+AobMFploYA2L2Myt80cTA1w8FrewjC8qlqdnrPWr\nh1ely2zsUljgi1/niH0ndjFzliL7UkinXQiAsTtYOrOQmzyd/o5PNdu7dz0m7stD\nBN/Sz5TlXZnA1/eJbqV/kqMau6b1MaBx8SbRfUG9+cSmUobFJwuktDrPuwJhcEkl\niDmhEqu1GuZzmKvzPacLTVia1vSlmCTCu89NiHI8iGiiLtqNrapup7f8j5m3a3SL\na+vXhplFj2piNl7Nc0dfuVgtEliTI+qUL2/+4A7gzRWZpHy21/LxMMXmBhdJW9En\nFWkev97VZLgb5TR3+qpSWmXcodjPy4dibvwsOMpdd+Q4AYulwvlDw5idRPVgGvk7\nqq03+w9ppZ5Fugws9k2CD9F/75JX2mCbRpkuPe8XXZ7bqrMaQgQMLOrs68HuiiCk\nFTklglq4DMKxnf/Y/T/MgIa9Q1o28YSevh6A7FnfPGARj2H2T4rToi+bC1Vf7qNB\nZ18bDpz99tRUTbyiRUSBMWLCGhU6c4HAqUrfrkpperOKFBQ3i38a79838oFdXHBW\n6rx1t5cC3XwtEoUyeBKAygez8G1LDXbN3607MxVhAjhHKtPkYvuBfysSNU6JrR0z\nUV1IURJANt2UMuKgSEkG/IMCAwEAATANBgkqhkiG9w0BAQsFAAOCAgEAcipMhp/w\nyzfPy61faVAw9SPaMNRlnW9FCDC3N9CGOjo2knjXpObPzyzsJiUURTjrA9eFMpRA\ne2Rgn2j+nvm2XdLAlC4Kh8jqv/wCL0X6BTQMdN5aOhXdSiXtpXOMvXYY/dQ4ebRZ\nXeRCVWQD79JbV6/uyx0nCV3FVcU7L1P4UjxroefVr0soLPMirgxHmOxLnkoVgdcB\ntqufP5kJx9CIeJXPx3QQsk1XfEtxtUvuw4ZaZkQnNUqvGl7V+AZpur5Eqfv3zBi8\nQxxL7qGkARNssNWH2Ju+tqpM/UZRnjlFrDR4SXUgT0coTduBalUY6qHkciHmRpiP\ntf3SgpDeiCSOV2iVFGdaR1mz3muWoAYWFstcWN3a3HjjVugIi23yLN8Gv8CNeoH4\nprulinFCLrFgAh8SLAF8mOAZanT06LH8jOIFYrdUxH+ZeRBR0rLoFjUF+JB7UKD9\n5TA+B4EBzQ1tMbGFU1DX79MjAejq0IV0Nzq+GMfBvLHxEf4+Oz8nqhDXQcJ6TdtY\nl3Lyw5zBvOL80SBK+Mr0UP7d9U3VXgbGHCYVJU6Ot1TwiGwahtWALRALA3TWeGkq\n7kyD1H+nm+9lfKhuyBRQnRGBVyze2lAp7oxwshJuhBwEXosXFxq1Cy6QhPN77r6N\nvuhxvtppolNnyOgGxwG4zquqq2V5/+vKjKY=\n-----END CERTIFICATE-----\n\",\n                },\n                Headers = new[]\n                {\n                    \"Content-Type: multipart/form-data; boundary=something\",\n                },\n                BasicAuth = new Grafana.SyntheticMonitoring.Inputs.CheckSettingsHttpBasicAuthArgs\n                {\n                    Username = \"open\",\n                    Password = \"sesame\",\n                },\n                ValidStatusCodes = new[]\n                {\n                    200,\n                    201,\n                },\n                ValidHttpVersions = new[]\n                {\n                    \"HTTP/1.0\",\n                    \"HTTP/1.1\",\n                    \"HTTP/2.0\",\n                },\n                FailIfBodyMatchesRegexps = new[]\n                {\n                    \".*bad stuff.*\",\n                },\n                FailIfBodyNotMatchesRegexps = new[]\n                {\n                    \".*good stuff.*\",\n                },\n                FailIfHeaderMatchesRegexps = new[]\n                {\n                    new Grafana.SyntheticMonitoring.Inputs.CheckSettingsHttpFailIfHeaderMatchesRegexpArgs\n                    {\n                        Header = \"Content-Type\",\n                        Regexp = \"application/soap*\",\n                        AllowMissing = true,\n                    },\n                    new Grafana.SyntheticMonitoring.Inputs.CheckSettingsHttpFailIfHeaderMatchesRegexpArgs\n                    {\n                        Header = \"Content-Type\",\n                        Regexp = \"application/json\",\n                        AllowMissing = true,\n                    },\n                },\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/syntheticmonitoring\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmain, err := syntheticmonitoring.GetProbes(ctx, \u0026syntheticmonitoring.GetProbesArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = syntheticmonitoring.NewCheck(ctx, \"http\", \u0026syntheticmonitoring.CheckArgs{\n\t\t\tJob:     pulumi.String(\"HTTP Defaults\"),\n\t\t\tTarget:  pulumi.String(\"https://grafana.org\"),\n\t\t\tEnabled: pulumi.Bool(false),\n\t\t\tProbes: pulumi.IntArray{\n\t\t\t\tpulumi.Int(main.Probes.Mumbai),\n\t\t\t\tpulumi.Int(main.Probes.Mumbai),\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tSettings: \u0026syntheticmonitoring.CheckSettingsArgs{\n\t\t\t\tHttp: \u0026syntheticmonitoring.CheckSettingsHttpArgs{\n\t\t\t\t\tIpVersion:                  pulumi.String(\"V6\"),\n\t\t\t\t\tMethod:                     pulumi.String(\"TRACE\"),\n\t\t\t\t\tBody:                       pulumi.String(\"and spirit\"),\n\t\t\t\t\tNoFollowRedirects:          pulumi.Bool(true),\n\t\t\t\t\tBearerToken:                pulumi.String(\"asdfjkl;\"),\n\t\t\t\t\tProxyUrl:                   pulumi.String(\"https://almost-there\"),\n\t\t\t\t\tFailIfSsl:                  pulumi.Bool(true),\n\t\t\t\t\tFailIfNotSsl:               pulumi.Bool(true),\n\t\t\t\t\tCompression:                pulumi.String(\"deflate\"),\n\t\t\t\t\tCacheBustingQueryParamName: pulumi.String(\"pineapple\"),\n\t\t\t\t\tTlsConfig: \u0026syntheticmonitoring.CheckSettingsHttpTlsConfigArgs{\n\t\t\t\t\t\tServerName: pulumi.String(\"grafana.org\"),\n\t\t\t\t\t\tClientCert: pulumi.String(`-----BEGIN CERTIFICATE-----\nMIIEljCCAn4CCQCKJPUQQxeO0zANBgkqhkiG9w0BAQsFADANMQswCQYDVQQGEwJT\nRTAeFw0yMTA1MjkxOTIyNTdaFw0yNDAzMTgxOTIyNTdaMA0xCzAJBgNVBAYTAlNF\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnmbazDNUT0rSI4BpGZK+\n0AJ+9FDkIYWJUtRLJoxw8CF+AobMFploYA2L2Myt80cTA1w8FrewjC8qlqdnrPWr\nh1ely2zsUljgi1/niH0ndjFzliL7UkinXQiAsTtYOrOQmzyd/o5PNdu7dz0m7stD\nBN/Sz5TlXZnA1/eJbqV/kqMau6b1MaBx8SbRfUG9+cSmUobFJwuktDrPuwJhcEkl\niDmhEqu1GuZzmKvzPacLTVia1vSlmCTCu89NiHI8iGiiLtqNrapup7f8j5m3a3SL\na+vXhplFj2piNl7Nc0dfuVgtEliTI+qUL2/+4A7gzRWZpHy21/LxMMXmBhdJW9En\nFWkev97VZLgb5TR3+qpSWmXcodjPy4dibvwsOMpdd+Q4AYulwvlDw5idRPVgGvk7\nqq03+w9ppZ5Fugws9k2CD9F/75JX2mCbRpkuPe8XXZ7bqrMaQgQMLOrs68HuiiCk\nFTklglq4DMKxnf/Y/T/MgIa9Q1o28YSevh6A7FnfPGARj2H2T4rToi+bC1Vf7qNB\nZ18bDpz99tRUTbyiRUSBMWLCGhU6c4HAqUrfrkpperOKFBQ3i38a79838oFdXHBW\n6rx1t5cC3XwtEoUyeBKAygez8G1LDXbN3607MxVhAjhHKtPkYvuBfysSNU6JrR0z\nUV1IURJANt2UMuKgSEkG/IMCAwEAATANBgkqhkiG9w0BAQsFAAOCAgEAcipMhp/w\nyzfPy61faVAw9SPaMNRlnW9FCDC3N9CGOjo2knjXpObPzyzsJiUURTjrA9eFMpRA\ne2Rgn2j+nvm2XdLAlC4Kh8jqv/wCL0X6BTQMdN5aOhXdSiXtpXOMvXYY/dQ4ebRZ\nXeRCVWQD79JbV6/uyx0nCV3FVcU7L1P4UjxroefVr0soLPMirgxHmOxLnkoVgdcB\ntqufP5kJx9CIeJXPx3QQsk1XfEtxtUvuw4ZaZkQnNUqvGl7V+AZpur5Eqfv3zBi8\nQxxL7qGkARNssNWH2Ju+tqpM/UZRnjlFrDR4SXUgT0coTduBalUY6qHkciHmRpiP\ntf3SgpDeiCSOV2iVFGdaR1mz3muWoAYWFstcWN3a3HjjVugIi23yLN8Gv8CNeoH4\nprulinFCLrFgAh8SLAF8mOAZanT06LH8jOIFYrdUxH+ZeRBR0rLoFjUF+JB7UKD9\n5TA+B4EBzQ1tMbGFU1DX79MjAejq0IV0Nzq+GMfBvLHxEf4+Oz8nqhDXQcJ6TdtY\nl3Lyw5zBvOL80SBK+Mr0UP7d9U3VXgbGHCYVJU6Ot1TwiGwahtWALRALA3TWeGkq\n7kyD1H+nm+9lfKhuyBRQnRGBVyze2lAp7oxwshJuhBwEXosXFxq1Cy6QhPN77r6N\nvuhxvtppolNnyOgGxwG4zquqq2V5/+vKjKY=\n-----END CERTIFICATE-----\n`),\n\t\t\t\t\t},\n\t\t\t\t\tHeaders: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"Content-Type: multipart/form-data; boundary=something\"),\n\t\t\t\t\t},\n\t\t\t\t\tBasicAuth: \u0026syntheticmonitoring.CheckSettingsHttpBasicAuthArgs{\n\t\t\t\t\t\tUsername: pulumi.String(\"open\"),\n\t\t\t\t\t\tPassword: pulumi.String(\"sesame\"),\n\t\t\t\t\t},\n\t\t\t\t\tValidStatusCodes: pulumi.IntArray{\n\t\t\t\t\t\tpulumi.Int(200),\n\t\t\t\t\t\tpulumi.Int(201),\n\t\t\t\t\t},\n\t\t\t\t\tValidHttpVersions: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"HTTP/1.0\"),\n\t\t\t\t\t\tpulumi.String(\"HTTP/1.1\"),\n\t\t\t\t\t\tpulumi.String(\"HTTP/2.0\"),\n\t\t\t\t\t},\n\t\t\t\t\tFailIfBodyMatchesRegexps: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\".*bad stuff.*\"),\n\t\t\t\t\t},\n\t\t\t\t\tFailIfBodyNotMatchesRegexps: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\".*good stuff.*\"),\n\t\t\t\t\t},\n\t\t\t\t\tFailIfHeaderMatchesRegexps: syntheticmonitoring.CheckSettingsHttpFailIfHeaderMatchesRegexpArray{\n\t\t\t\t\t\t\u0026syntheticmonitoring.CheckSettingsHttpFailIfHeaderMatchesRegexpArgs{\n\t\t\t\t\t\t\tHeader:       pulumi.String(\"Content-Type\"),\n\t\t\t\t\t\t\tRegexp:       pulumi.String(\"application/soap*\"),\n\t\t\t\t\t\t\tAllowMissing: pulumi.Bool(true),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026syntheticmonitoring.CheckSettingsHttpFailIfHeaderMatchesRegexpArgs{\n\t\t\t\t\t\t\tHeader:       pulumi.String(\"Content-Type\"),\n\t\t\t\t\t\t\tRegexp:       pulumi.String(\"application/json\"),\n\t\t\t\t\t\t\tAllowMissing: pulumi.Bool(true),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.syntheticMonitoring.SyntheticMonitoringFunctions;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.GetProbesArgs;\nimport com.pulumi.grafana.syntheticMonitoring.Check;\nimport com.pulumi.grafana.syntheticMonitoring.CheckArgs;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.CheckSettingsArgs;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.CheckSettingsHttpArgs;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.CheckSettingsHttpTlsConfigArgs;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.CheckSettingsHttpBasicAuthArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var main = SyntheticMonitoringFunctions.getProbes(GetProbesArgs.builder()\n            .build());\n\n        var http = new Check(\"http\", CheckArgs.builder()\n            .job(\"HTTP Defaults\")\n            .target(\"https://grafana.org\")\n            .enabled(false)\n            .probes(            \n                main.probes().mumbai(),\n                main.probes().mumbai())\n            .labels(Map.of(\"foo\", \"bar\"))\n            .settings(CheckSettingsArgs.builder()\n                .http(CheckSettingsHttpArgs.builder()\n                    .ipVersion(\"V6\")\n                    .method(\"TRACE\")\n                    .body(\"and spirit\")\n                    .noFollowRedirects(true)\n                    .bearerToken(\"asdfjkl;\")\n                    .proxyUrl(\"https://almost-there\")\n                    .failIfSsl(true)\n                    .failIfNotSsl(true)\n                    .compression(\"deflate\")\n                    .cacheBustingQueryParamName(\"pineapple\")\n                    .tlsConfig(CheckSettingsHttpTlsConfigArgs.builder()\n                        .serverName(\"grafana.org\")\n                        .clientCert(\"\"\"\n-----BEGIN CERTIFICATE-----\nMIIEljCCAn4CCQCKJPUQQxeO0zANBgkqhkiG9w0BAQsFADANMQswCQYDVQQGEwJT\nRTAeFw0yMTA1MjkxOTIyNTdaFw0yNDAzMTgxOTIyNTdaMA0xCzAJBgNVBAYTAlNF\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnmbazDNUT0rSI4BpGZK+\n0AJ+9FDkIYWJUtRLJoxw8CF+AobMFploYA2L2Myt80cTA1w8FrewjC8qlqdnrPWr\nh1ely2zsUljgi1/niH0ndjFzliL7UkinXQiAsTtYOrOQmzyd/o5PNdu7dz0m7stD\nBN/Sz5TlXZnA1/eJbqV/kqMau6b1MaBx8SbRfUG9+cSmUobFJwuktDrPuwJhcEkl\niDmhEqu1GuZzmKvzPacLTVia1vSlmCTCu89NiHI8iGiiLtqNrapup7f8j5m3a3SL\na+vXhplFj2piNl7Nc0dfuVgtEliTI+qUL2/+4A7gzRWZpHy21/LxMMXmBhdJW9En\nFWkev97VZLgb5TR3+qpSWmXcodjPy4dibvwsOMpdd+Q4AYulwvlDw5idRPVgGvk7\nqq03+w9ppZ5Fugws9k2CD9F/75JX2mCbRpkuPe8XXZ7bqrMaQgQMLOrs68HuiiCk\nFTklglq4DMKxnf/Y/T/MgIa9Q1o28YSevh6A7FnfPGARj2H2T4rToi+bC1Vf7qNB\nZ18bDpz99tRUTbyiRUSBMWLCGhU6c4HAqUrfrkpperOKFBQ3i38a79838oFdXHBW\n6rx1t5cC3XwtEoUyeBKAygez8G1LDXbN3607MxVhAjhHKtPkYvuBfysSNU6JrR0z\nUV1IURJANt2UMuKgSEkG/IMCAwEAATANBgkqhkiG9w0BAQsFAAOCAgEAcipMhp/w\nyzfPy61faVAw9SPaMNRlnW9FCDC3N9CGOjo2knjXpObPzyzsJiUURTjrA9eFMpRA\ne2Rgn2j+nvm2XdLAlC4Kh8jqv/wCL0X6BTQMdN5aOhXdSiXtpXOMvXYY/dQ4ebRZ\nXeRCVWQD79JbV6/uyx0nCV3FVcU7L1P4UjxroefVr0soLPMirgxHmOxLnkoVgdcB\ntqufP5kJx9CIeJXPx3QQsk1XfEtxtUvuw4ZaZkQnNUqvGl7V+AZpur5Eqfv3zBi8\nQxxL7qGkARNssNWH2Ju+tqpM/UZRnjlFrDR4SXUgT0coTduBalUY6qHkciHmRpiP\ntf3SgpDeiCSOV2iVFGdaR1mz3muWoAYWFstcWN3a3HjjVugIi23yLN8Gv8CNeoH4\nprulinFCLrFgAh8SLAF8mOAZanT06LH8jOIFYrdUxH+ZeRBR0rLoFjUF+JB7UKD9\n5TA+B4EBzQ1tMbGFU1DX79MjAejq0IV0Nzq+GMfBvLHxEf4+Oz8nqhDXQcJ6TdtY\nl3Lyw5zBvOL80SBK+Mr0UP7d9U3VXgbGHCYVJU6Ot1TwiGwahtWALRALA3TWeGkq\n7kyD1H+nm+9lfKhuyBRQnRGBVyze2lAp7oxwshJuhBwEXosXFxq1Cy6QhPN77r6N\nvuhxvtppolNnyOgGxwG4zquqq2V5/+vKjKY=\n-----END CERTIFICATE-----\n                        \"\"\")\n                        .build())\n                    .headers(\"Content-Type: multipart/form-data; boundary=something\")\n                    .basicAuth(CheckSettingsHttpBasicAuthArgs.builder()\n                        .username(\"open\")\n                        .password(\"sesame\")\n                        .build())\n                    .validStatusCodes(                    \n                        200,\n                        201)\n                    .validHttpVersions(                    \n                        \"HTTP/1.0\",\n                        \"HTTP/1.1\",\n                        \"HTTP/2.0\")\n                    .failIfBodyMatchesRegexps(\".*bad stuff.*\")\n                    .failIfBodyNotMatchesRegexps(\".*good stuff.*\")\n                    .failIfHeaderMatchesRegexps(                    \n                        CheckSettingsHttpFailIfHeaderMatchesRegexpArgs.builder()\n                            .header(\"Content-Type\")\n                            .regexp(\"application/soap*\")\n                            .allowMissing(true)\n                            .build(),\n                        CheckSettingsHttpFailIfHeaderMatchesRegexpArgs.builder()\n                            .header(\"Content-Type\")\n                            .regexp(\"application/json\")\n                            .allowMissing(true)\n                            .build())\n                    .build())\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  http:\n    type: grafana:syntheticMonitoring:Check\n    properties:\n      job: HTTP Defaults\n      target: https://grafana.org\n      enabled: false\n      probes:\n        - ${main.probes.mumbai}\n        - ${main.probes.mumbai}\n      labels:\n        foo: bar\n      settings:\n        http:\n          ipVersion: V6\n          method: TRACE\n          body: and spirit\n          noFollowRedirects: true\n          bearerToken: asdfjkl;\n          proxyUrl: https://almost-there\n          failIfSsl: true\n          failIfNotSsl: true\n          compression: deflate\n          cacheBustingQueryParamName: pineapple\n          tlsConfig:\n            serverName: grafana.org\n            clientCert: |\n              -----BEGIN CERTIFICATE-----\n              MIIEljCCAn4CCQCKJPUQQxeO0zANBgkqhkiG9w0BAQsFADANMQswCQYDVQQGEwJT\n              RTAeFw0yMTA1MjkxOTIyNTdaFw0yNDAzMTgxOTIyNTdaMA0xCzAJBgNVBAYTAlNF\n              MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnmbazDNUT0rSI4BpGZK+\n              0AJ+9FDkIYWJUtRLJoxw8CF+AobMFploYA2L2Myt80cTA1w8FrewjC8qlqdnrPWr\n              h1ely2zsUljgi1/niH0ndjFzliL7UkinXQiAsTtYOrOQmzyd/o5PNdu7dz0m7stD\n              BN/Sz5TlXZnA1/eJbqV/kqMau6b1MaBx8SbRfUG9+cSmUobFJwuktDrPuwJhcEkl\n              iDmhEqu1GuZzmKvzPacLTVia1vSlmCTCu89NiHI8iGiiLtqNrapup7f8j5m3a3SL\n              a+vXhplFj2piNl7Nc0dfuVgtEliTI+qUL2/+4A7gzRWZpHy21/LxMMXmBhdJW9En\n              FWkev97VZLgb5TR3+qpSWmXcodjPy4dibvwsOMpdd+Q4AYulwvlDw5idRPVgGvk7\n              qq03+w9ppZ5Fugws9k2CD9F/75JX2mCbRpkuPe8XXZ7bqrMaQgQMLOrs68HuiiCk\n              FTklglq4DMKxnf/Y/T/MgIa9Q1o28YSevh6A7FnfPGARj2H2T4rToi+bC1Vf7qNB\n              Z18bDpz99tRUTbyiRUSBMWLCGhU6c4HAqUrfrkpperOKFBQ3i38a79838oFdXHBW\n              6rx1t5cC3XwtEoUyeBKAygez8G1LDXbN3607MxVhAjhHKtPkYvuBfysSNU6JrR0z\n              UV1IURJANt2UMuKgSEkG/IMCAwEAATANBgkqhkiG9w0BAQsFAAOCAgEAcipMhp/w\n              yzfPy61faVAw9SPaMNRlnW9FCDC3N9CGOjo2knjXpObPzyzsJiUURTjrA9eFMpRA\n              e2Rgn2j+nvm2XdLAlC4Kh8jqv/wCL0X6BTQMdN5aOhXdSiXtpXOMvXYY/dQ4ebRZ\n              XeRCVWQD79JbV6/uyx0nCV3FVcU7L1P4UjxroefVr0soLPMirgxHmOxLnkoVgdcB\n              tqufP5kJx9CIeJXPx3QQsk1XfEtxtUvuw4ZaZkQnNUqvGl7V+AZpur5Eqfv3zBi8\n              QxxL7qGkARNssNWH2Ju+tqpM/UZRnjlFrDR4SXUgT0coTduBalUY6qHkciHmRpiP\n              tf3SgpDeiCSOV2iVFGdaR1mz3muWoAYWFstcWN3a3HjjVugIi23yLN8Gv8CNeoH4\n              prulinFCLrFgAh8SLAF8mOAZanT06LH8jOIFYrdUxH+ZeRBR0rLoFjUF+JB7UKD9\n              5TA+B4EBzQ1tMbGFU1DX79MjAejq0IV0Nzq+GMfBvLHxEf4+Oz8nqhDXQcJ6TdtY\n              l3Lyw5zBvOL80SBK+Mr0UP7d9U3VXgbGHCYVJU6Ot1TwiGwahtWALRALA3TWeGkq\n              7kyD1H+nm+9lfKhuyBRQnRGBVyze2lAp7oxwshJuhBwEXosXFxq1Cy6QhPN77r6N\n              vuhxvtppolNnyOgGxwG4zquqq2V5/+vKjKY=\n              -----END CERTIFICATE-----\n          headers:\n            - 'Content-Type: multipart/form-data; boundary=something'\n          basicAuth:\n            username: open\n            password: sesame\n          validStatusCodes:\n            - 200\n            - 201\n          validHttpVersions:\n            - HTTP/1.0\n            - HTTP/1.1\n            - HTTP/2.0\n          failIfBodyMatchesRegexps:\n            - .*bad stuff.*\n          failIfBodyNotMatchesRegexps:\n            - .*good stuff.*\n          failIfHeaderMatchesRegexps:\n            - header: Content-Type\n              regexp: application/soap*\n              allowMissing: true\n            - header: Content-Type\n              regexp: application/json\n              allowMissing: true\nvariables:\n  main:\n    fn::invoke:\n      function: grafana:syntheticMonitoring:getProbes\n      arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Ping Basic\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst main = grafana.syntheticMonitoring.getProbes({});\nconst ping = new grafana.syntheticmonitoring.Check(\"ping\", {\n    job: \"Ping Defaults\",\n    target: \"grafana.com\",\n    enabled: false,\n    probes: [main.then(main =\u003e main.probes?.ohio)],\n    labels: {\n        foo: \"bar\",\n    },\n    settings: {\n        ping: {},\n    },\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\nmain = grafana.syntheticMonitoring.get_probes()\nping = grafana.syntheticmonitoring.Check(\"ping\",\n    job=\"Ping Defaults\",\n    target=\"grafana.com\",\n    enabled=False,\n    probes=[main.probes[\"ohio\"]],\n    labels={\n        \"foo\": \"bar\",\n    },\n    settings={\n        \"ping\": {},\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var main = Grafana.SyntheticMonitoring.GetProbes.Invoke();\n\n    var ping = new Grafana.SyntheticMonitoring.Check(\"ping\", new()\n    {\n        Job = \"Ping Defaults\",\n        Target = \"grafana.com\",\n        Enabled = false,\n        Probes = new[]\n        {\n            main.Apply(getProbesResult =\u003e getProbesResult.Probes?.Ohio),\n        },\n        Labels = \n        {\n            { \"foo\", \"bar\" },\n        },\n        Settings = new Grafana.SyntheticMonitoring.Inputs.CheckSettingsArgs\n        {\n            Ping = null,\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/syntheticmonitoring\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmain, err := syntheticmonitoring.GetProbes(ctx, \u0026syntheticmonitoring.GetProbesArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = syntheticmonitoring.NewCheck(ctx, \"ping\", \u0026syntheticmonitoring.CheckArgs{\n\t\t\tJob:     pulumi.String(\"Ping Defaults\"),\n\t\t\tTarget:  pulumi.String(\"grafana.com\"),\n\t\t\tEnabled: pulumi.Bool(false),\n\t\t\tProbes: pulumi.IntArray{\n\t\t\t\tpulumi.Int(main.Probes.Ohio),\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tSettings: \u0026syntheticmonitoring.CheckSettingsArgs{\n\t\t\t\tPing: \u0026syntheticmonitoring.CheckSettingsPingArgs{},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.syntheticMonitoring.SyntheticMonitoringFunctions;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.GetProbesArgs;\nimport com.pulumi.grafana.syntheticMonitoring.Check;\nimport com.pulumi.grafana.syntheticMonitoring.CheckArgs;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.CheckSettingsArgs;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.CheckSettingsPingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var main = SyntheticMonitoringFunctions.getProbes(GetProbesArgs.builder()\n            .build());\n\n        var ping = new Check(\"ping\", CheckArgs.builder()\n            .job(\"Ping Defaults\")\n            .target(\"grafana.com\")\n            .enabled(false)\n            .probes(main.probes().ohio())\n            .labels(Map.of(\"foo\", \"bar\"))\n            .settings(CheckSettingsArgs.builder()\n                .ping(CheckSettingsPingArgs.builder()\n                    .build())\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  ping:\n    type: grafana:syntheticMonitoring:Check\n    properties:\n      job: Ping Defaults\n      target: grafana.com\n      enabled: false\n      probes:\n        - ${main.probes.ohio}\n      labels:\n        foo: bar\n      settings:\n        ping: {}\nvariables:\n  main:\n    fn::invoke:\n      function: grafana:syntheticMonitoring:getProbes\n      arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Ping Complex\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst main = grafana.syntheticMonitoring.getProbes({});\nconst ping = new grafana.syntheticmonitoring.Check(\"ping\", {\n    job: \"Ping Updated\",\n    target: \"grafana.net\",\n    enabled: false,\n    probes: [\n        main.then(main =\u003e main.probes?.frankfurt),\n        main.then(main =\u003e main.probes?.london),\n    ],\n    labels: {\n        foo: \"baz\",\n    },\n    settings: {\n        ping: {\n            ipVersion: \"Any\",\n            payloadSize: 20,\n            dontFragment: true,\n        },\n    },\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\nmain = grafana.syntheticMonitoring.get_probes()\nping = grafana.syntheticmonitoring.Check(\"ping\",\n    job=\"Ping Updated\",\n    target=\"grafana.net\",\n    enabled=False,\n    probes=[\n        main.probes[\"frankfurt\"],\n        main.probes[\"london\"],\n    ],\n    labels={\n        \"foo\": \"baz\",\n    },\n    settings={\n        \"ping\": {\n            \"ip_version\": \"Any\",\n            \"payload_size\": 20,\n            \"dont_fragment\": True,\n        },\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var main = Grafana.SyntheticMonitoring.GetProbes.Invoke();\n\n    var ping = new Grafana.SyntheticMonitoring.Check(\"ping\", new()\n    {\n        Job = \"Ping Updated\",\n        Target = \"grafana.net\",\n        Enabled = false,\n        Probes = new[]\n        {\n            main.Apply(getProbesResult =\u003e getProbesResult.Probes?.Frankfurt),\n            main.Apply(getProbesResult =\u003e getProbesResult.Probes?.London),\n        },\n        Labels = \n        {\n            { \"foo\", \"baz\" },\n        },\n        Settings = new Grafana.SyntheticMonitoring.Inputs.CheckSettingsArgs\n        {\n            Ping = new Grafana.SyntheticMonitoring.Inputs.CheckSettingsPingArgs\n            {\n                IpVersion = \"Any\",\n                PayloadSize = 20,\n                DontFragment = true,\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/syntheticmonitoring\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmain, err := syntheticmonitoring.GetProbes(ctx, \u0026syntheticmonitoring.GetProbesArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = syntheticmonitoring.NewCheck(ctx, \"ping\", \u0026syntheticmonitoring.CheckArgs{\n\t\t\tJob:     pulumi.String(\"Ping Updated\"),\n\t\t\tTarget:  pulumi.String(\"grafana.net\"),\n\t\t\tEnabled: pulumi.Bool(false),\n\t\t\tProbes: pulumi.IntArray{\n\t\t\t\tpulumi.Int(main.Probes.Frankfurt),\n\t\t\t\tpulumi.Int(main.Probes.London),\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"baz\"),\n\t\t\t},\n\t\t\tSettings: \u0026syntheticmonitoring.CheckSettingsArgs{\n\t\t\t\tPing: \u0026syntheticmonitoring.CheckSettingsPingArgs{\n\t\t\t\t\tIpVersion:    pulumi.String(\"Any\"),\n\t\t\t\t\tPayloadSize:  pulumi.Int(20),\n\t\t\t\t\tDontFragment: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.syntheticMonitoring.SyntheticMonitoringFunctions;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.GetProbesArgs;\nimport com.pulumi.grafana.syntheticMonitoring.Check;\nimport com.pulumi.grafana.syntheticMonitoring.CheckArgs;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.CheckSettingsArgs;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.CheckSettingsPingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var main = SyntheticMonitoringFunctions.getProbes(GetProbesArgs.builder()\n            .build());\n\n        var ping = new Check(\"ping\", CheckArgs.builder()\n            .job(\"Ping Updated\")\n            .target(\"grafana.net\")\n            .enabled(false)\n            .probes(            \n                main.probes().frankfurt(),\n                main.probes().london())\n            .labels(Map.of(\"foo\", \"baz\"))\n            .settings(CheckSettingsArgs.builder()\n                .ping(CheckSettingsPingArgs.builder()\n                    .ipVersion(\"Any\")\n                    .payloadSize(20)\n                    .dontFragment(true)\n                    .build())\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  ping:\n    type: grafana:syntheticMonitoring:Check\n    properties:\n      job: Ping Updated\n      target: grafana.net\n      enabled: false\n      probes:\n        - ${main.probes.frankfurt}\n        - ${main.probes.london}\n      labels:\n        foo: baz\n      settings:\n        ping:\n          ipVersion: Any\n          payloadSize: 20\n          dontFragment: true\nvariables:\n  main:\n    fn::invoke:\n      function: grafana:syntheticMonitoring:getProbes\n      arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### TCP Basic\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst main = grafana.syntheticMonitoring.getProbes({});\nconst tcp = new grafana.syntheticmonitoring.Check(\"tcp\", {\n    job: \"TCP Defaults\",\n    target: \"grafana.com:80\",\n    enabled: false,\n    probes: [main.then(main =\u003e main.probes?.ohio)],\n    labels: {\n        foo: \"bar\",\n    },\n    settings: {\n        tcp: {},\n    },\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\nmain = grafana.syntheticMonitoring.get_probes()\ntcp = grafana.syntheticmonitoring.Check(\"tcp\",\n    job=\"TCP Defaults\",\n    target=\"grafana.com:80\",\n    enabled=False,\n    probes=[main.probes[\"ohio\"]],\n    labels={\n        \"foo\": \"bar\",\n    },\n    settings={\n        \"tcp\": {},\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var main = Grafana.SyntheticMonitoring.GetProbes.Invoke();\n\n    var tcp = new Grafana.SyntheticMonitoring.Check(\"tcp\", new()\n    {\n        Job = \"TCP Defaults\",\n        Target = \"grafana.com:80\",\n        Enabled = false,\n        Probes = new[]\n        {\n            main.Apply(getProbesResult =\u003e getProbesResult.Probes?.Ohio),\n        },\n        Labels = \n        {\n            { \"foo\", \"bar\" },\n        },\n        Settings = new Grafana.SyntheticMonitoring.Inputs.CheckSettingsArgs\n        {\n            Tcp = null,\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/syntheticmonitoring\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmain, err := syntheticmonitoring.GetProbes(ctx, \u0026syntheticmonitoring.GetProbesArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = syntheticmonitoring.NewCheck(ctx, \"tcp\", \u0026syntheticmonitoring.CheckArgs{\n\t\t\tJob:     pulumi.String(\"TCP Defaults\"),\n\t\t\tTarget:  pulumi.String(\"grafana.com:80\"),\n\t\t\tEnabled: pulumi.Bool(false),\n\t\t\tProbes: pulumi.IntArray{\n\t\t\t\tpulumi.Int(main.Probes.Ohio),\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tSettings: \u0026syntheticmonitoring.CheckSettingsArgs{\n\t\t\t\tTcp: \u0026syntheticmonitoring.CheckSettingsTcpArgs{},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.syntheticMonitoring.SyntheticMonitoringFunctions;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.GetProbesArgs;\nimport com.pulumi.grafana.syntheticMonitoring.Check;\nimport com.pulumi.grafana.syntheticMonitoring.CheckArgs;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.CheckSettingsArgs;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.CheckSettingsTcpArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var main = SyntheticMonitoringFunctions.getProbes(GetProbesArgs.builder()\n            .build());\n\n        var tcp = new Check(\"tcp\", CheckArgs.builder()\n            .job(\"TCP Defaults\")\n            .target(\"grafana.com:80\")\n            .enabled(false)\n            .probes(main.probes().ohio())\n            .labels(Map.of(\"foo\", \"bar\"))\n            .settings(CheckSettingsArgs.builder()\n                .tcp(CheckSettingsTcpArgs.builder()\n                    .build())\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  tcp:\n    type: grafana:syntheticMonitoring:Check\n    properties:\n      job: TCP Defaults\n      target: grafana.com:80\n      enabled: false\n      probes:\n        - ${main.probes.ohio}\n      labels:\n        foo: bar\n      settings:\n        tcp: {}\nvariables:\n  main:\n    fn::invoke:\n      function: grafana:syntheticMonitoring:getProbes\n      arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### TCP Complex\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst main = grafana.syntheticMonitoring.getProbes({});\nconst tcp = new grafana.syntheticmonitoring.Check(\"tcp\", {\n    job: \"TCP Defaults\",\n    target: \"grafana.com:443\",\n    enabled: false,\n    probes: [\n        main.then(main =\u003e main.probes?.frankfurt),\n        main.then(main =\u003e main.probes?.london),\n    ],\n    labels: {\n        foo: \"baz\",\n    },\n    settings: {\n        tcp: {\n            ipVersion: \"V6\",\n            tls: true,\n            queryResponses: [\n                {\n                    send: \"howdy\",\n                    expect: \"hi\",\n                },\n                {\n                    send: \"like this\",\n                    expect: \"like that\",\n                    startTls: true,\n                },\n            ],\n            tlsConfig: {\n                serverName: \"grafana.com\",\n                caCert: `-----BEGIN CERTIFICATE-----\nMIIEljCCAn4CCQCKJPUQQxeO0zANBgkqhkiG9w0BAQsFADANMQswCQYDVQQGEwJT\nRTAeFw0yMTA1MjkxOTIyNTdaFw0yNDAzMTgxOTIyNTdaMA0xCzAJBgNVBAYTAlNF\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnmbazDNUT0rSI4BpGZK+\n0AJ+9FDkIYWJUtRLJoxw8CF+AobMFploYA2L2Myt80cTA1w8FrewjC8qlqdnrPWr\nh1ely2zsUljgi1/niH0ndjFzliL7UkinXQiAsTtYOrOQmzyd/o5PNdu7dz0m7stD\nBN/Sz5TlXZnA1/eJbqV/kqMau6b1MaBx8SbRfUG9+cSmUobFJwuktDrPuwJhcEkl\niDmhEqu1GuZzmKvzPacLTVia1vSlmCTCu89NiHI8iGiiLtqNrapup7f8j5m3a3SL\na+vXhplFj2piNl7Nc0dfuVgtEliTI+qUL2/+4A7gzRWZpHy21/LxMMXmBhdJW9En\nFWkev97VZLgb5TR3+qpSWmXcodjPy4dibvwsOMpdd+Q4AYulwvlDw5idRPVgGvk7\nqq03+w9ppZ5Fugws9k2CD9F/75JX2mCbRpkuPe8XXZ7bqrMaQgQMLOrs68HuiiCk\nFTklglq4DMKxnf/Y/T/MgIa9Q1o28YSevh6A7FnfPGARj2H2T4rToi+bC1Vf7qNB\nZ18bDpz99tRUTbyiRUSBMWLCGhU6c4HAqUrfrkpperOKFBQ3i38a79838oFdXHBW\n6rx1t5cC3XwtEoUyeBKAygez8G1LDXbN3607MxVhAjhHKtPkYvuBfysSNU6JrR0z\nUV1IURJANt2UMuKgSEkG/IMCAwEAATANBgkqhkiG9w0BAQsFAAOCAgEAcipMhp/w\nyzfPy61faVAw9SPaMNRlnW9FCDC3N9CGOjo2knjXpObPzyzsJiUURTjrA9eFMpRA\ne2Rgn2j+nvm2XdLAlC4Kh8jqv/wCL0X6BTQMdN5aOhXdSiXtpXOMvXYY/dQ4ebRZ\nXeRCVWQD79JbV6/uyx0nCV3FVcU7L1P4UjxroefVr0soLPMirgxHmOxLnkoVgdcB\ntqufP5kJx9CIeJXPx3QQsk1XfEtxtUvuw4ZaZkQnNUqvGl7V+AZpur5Eqfv3zBi8\nQxxL7qGkARNssNWH2Ju+tqpM/UZRnjlFrDR4SXUgT0coTduBalUY6qHkciHmRpiP\ntf3SgpDeiCSOV2iVFGdaR1mz3muWoAYWFstcWN3a3HjjVugIi23yLN8Gv8CNeoH4\nprulinFCLrFgAh8SLAF8mOAZanT06LH8jOIFYrdUxH+ZeRBR0rLoFjUF+JB7UKD9\n5TA+B4EBzQ1tMbGFU1DX79MjAejq0IV0Nzq+GMfBvLHxEf4+Oz8nqhDXQcJ6TdtY\nl3Lyw5zBvOL80SBK+Mr0UP7d9U3VXgbGHCYVJU6Ot1TwiGwahtWALRALA3TWeGkq\n7kyD1H+nm+9lfKhuyBRQnRGBVyze2lAp7oxwshJuhBwEXosXFxq1Cy6QhPN77r6N\nvuhxvtppolNnyOgGxwG4zquqq2V5/+vKjKY=\n-----END CERTIFICATE-----\n`,\n            },\n        },\n    },\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\nmain = grafana.syntheticMonitoring.get_probes()\ntcp = grafana.syntheticmonitoring.Check(\"tcp\",\n    job=\"TCP Defaults\",\n    target=\"grafana.com:443\",\n    enabled=False,\n    probes=[\n        main.probes[\"frankfurt\"],\n        main.probes[\"london\"],\n    ],\n    labels={\n        \"foo\": \"baz\",\n    },\n    settings={\n        \"tcp\": {\n            \"ip_version\": \"V6\",\n            \"tls\": True,\n            \"query_responses\": [\n                {\n                    \"send\": \"howdy\",\n                    \"expect\": \"hi\",\n                },\n                {\n                    \"send\": \"like this\",\n                    \"expect\": \"like that\",\n                    \"start_tls\": True,\n                },\n            ],\n            \"tls_config\": {\n                \"server_name\": \"grafana.com\",\n                \"ca_cert\": \"\"\"-----BEGIN CERTIFICATE-----\nMIIEljCCAn4CCQCKJPUQQxeO0zANBgkqhkiG9w0BAQsFADANMQswCQYDVQQGEwJT\nRTAeFw0yMTA1MjkxOTIyNTdaFw0yNDAzMTgxOTIyNTdaMA0xCzAJBgNVBAYTAlNF\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnmbazDNUT0rSI4BpGZK+\n0AJ+9FDkIYWJUtRLJoxw8CF+AobMFploYA2L2Myt80cTA1w8FrewjC8qlqdnrPWr\nh1ely2zsUljgi1/niH0ndjFzliL7UkinXQiAsTtYOrOQmzyd/o5PNdu7dz0m7stD\nBN/Sz5TlXZnA1/eJbqV/kqMau6b1MaBx8SbRfUG9+cSmUobFJwuktDrPuwJhcEkl\niDmhEqu1GuZzmKvzPacLTVia1vSlmCTCu89NiHI8iGiiLtqNrapup7f8j5m3a3SL\na+vXhplFj2piNl7Nc0dfuVgtEliTI+qUL2/+4A7gzRWZpHy21/LxMMXmBhdJW9En\nFWkev97VZLgb5TR3+qpSWmXcodjPy4dibvwsOMpdd+Q4AYulwvlDw5idRPVgGvk7\nqq03+w9ppZ5Fugws9k2CD9F/75JX2mCbRpkuPe8XXZ7bqrMaQgQMLOrs68HuiiCk\nFTklglq4DMKxnf/Y/T/MgIa9Q1o28YSevh6A7FnfPGARj2H2T4rToi+bC1Vf7qNB\nZ18bDpz99tRUTbyiRUSBMWLCGhU6c4HAqUrfrkpperOKFBQ3i38a79838oFdXHBW\n6rx1t5cC3XwtEoUyeBKAygez8G1LDXbN3607MxVhAjhHKtPkYvuBfysSNU6JrR0z\nUV1IURJANt2UMuKgSEkG/IMCAwEAATANBgkqhkiG9w0BAQsFAAOCAgEAcipMhp/w\nyzfPy61faVAw9SPaMNRlnW9FCDC3N9CGOjo2knjXpObPzyzsJiUURTjrA9eFMpRA\ne2Rgn2j+nvm2XdLAlC4Kh8jqv/wCL0X6BTQMdN5aOhXdSiXtpXOMvXYY/dQ4ebRZ\nXeRCVWQD79JbV6/uyx0nCV3FVcU7L1P4UjxroefVr0soLPMirgxHmOxLnkoVgdcB\ntqufP5kJx9CIeJXPx3QQsk1XfEtxtUvuw4ZaZkQnNUqvGl7V+AZpur5Eqfv3zBi8\nQxxL7qGkARNssNWH2Ju+tqpM/UZRnjlFrDR4SXUgT0coTduBalUY6qHkciHmRpiP\ntf3SgpDeiCSOV2iVFGdaR1mz3muWoAYWFstcWN3a3HjjVugIi23yLN8Gv8CNeoH4\nprulinFCLrFgAh8SLAF8mOAZanT06LH8jOIFYrdUxH+ZeRBR0rLoFjUF+JB7UKD9\n5TA+B4EBzQ1tMbGFU1DX79MjAejq0IV0Nzq+GMfBvLHxEf4+Oz8nqhDXQcJ6TdtY\nl3Lyw5zBvOL80SBK+Mr0UP7d9U3VXgbGHCYVJU6Ot1TwiGwahtWALRALA3TWeGkq\n7kyD1H+nm+9lfKhuyBRQnRGBVyze2lAp7oxwshJuhBwEXosXFxq1Cy6QhPN77r6N\nvuhxvtppolNnyOgGxwG4zquqq2V5/+vKjKY=\n-----END CERTIFICATE-----\n\"\"\",\n            },\n        },\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var main = Grafana.SyntheticMonitoring.GetProbes.Invoke();\n\n    var tcp = new Grafana.SyntheticMonitoring.Check(\"tcp\", new()\n    {\n        Job = \"TCP Defaults\",\n        Target = \"grafana.com:443\",\n        Enabled = false,\n        Probes = new[]\n        {\n            main.Apply(getProbesResult =\u003e getProbesResult.Probes?.Frankfurt),\n            main.Apply(getProbesResult =\u003e getProbesResult.Probes?.London),\n        },\n        Labels = \n        {\n            { \"foo\", \"baz\" },\n        },\n        Settings = new Grafana.SyntheticMonitoring.Inputs.CheckSettingsArgs\n        {\n            Tcp = new Grafana.SyntheticMonitoring.Inputs.CheckSettingsTcpArgs\n            {\n                IpVersion = \"V6\",\n                Tls = true,\n                QueryResponses = new[]\n                {\n                    new Grafana.SyntheticMonitoring.Inputs.CheckSettingsTcpQueryResponseArgs\n                    {\n                        Send = \"howdy\",\n                        Expect = \"hi\",\n                    },\n                    new Grafana.SyntheticMonitoring.Inputs.CheckSettingsTcpQueryResponseArgs\n                    {\n                        Send = \"like this\",\n                        Expect = \"like that\",\n                        StartTls = true,\n                    },\n                },\n                TlsConfig = new Grafana.SyntheticMonitoring.Inputs.CheckSettingsTcpTlsConfigArgs\n                {\n                    ServerName = \"grafana.com\",\n                    CaCert = @\"-----BEGIN CERTIFICATE-----\nMIIEljCCAn4CCQCKJPUQQxeO0zANBgkqhkiG9w0BAQsFADANMQswCQYDVQQGEwJT\nRTAeFw0yMTA1MjkxOTIyNTdaFw0yNDAzMTgxOTIyNTdaMA0xCzAJBgNVBAYTAlNF\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnmbazDNUT0rSI4BpGZK+\n0AJ+9FDkIYWJUtRLJoxw8CF+AobMFploYA2L2Myt80cTA1w8FrewjC8qlqdnrPWr\nh1ely2zsUljgi1/niH0ndjFzliL7UkinXQiAsTtYOrOQmzyd/o5PNdu7dz0m7stD\nBN/Sz5TlXZnA1/eJbqV/kqMau6b1MaBx8SbRfUG9+cSmUobFJwuktDrPuwJhcEkl\niDmhEqu1GuZzmKvzPacLTVia1vSlmCTCu89NiHI8iGiiLtqNrapup7f8j5m3a3SL\na+vXhplFj2piNl7Nc0dfuVgtEliTI+qUL2/+4A7gzRWZpHy21/LxMMXmBhdJW9En\nFWkev97VZLgb5TR3+qpSWmXcodjPy4dibvwsOMpdd+Q4AYulwvlDw5idRPVgGvk7\nqq03+w9ppZ5Fugws9k2CD9F/75JX2mCbRpkuPe8XXZ7bqrMaQgQMLOrs68HuiiCk\nFTklglq4DMKxnf/Y/T/MgIa9Q1o28YSevh6A7FnfPGARj2H2T4rToi+bC1Vf7qNB\nZ18bDpz99tRUTbyiRUSBMWLCGhU6c4HAqUrfrkpperOKFBQ3i38a79838oFdXHBW\n6rx1t5cC3XwtEoUyeBKAygez8G1LDXbN3607MxVhAjhHKtPkYvuBfysSNU6JrR0z\nUV1IURJANt2UMuKgSEkG/IMCAwEAATANBgkqhkiG9w0BAQsFAAOCAgEAcipMhp/w\nyzfPy61faVAw9SPaMNRlnW9FCDC3N9CGOjo2knjXpObPzyzsJiUURTjrA9eFMpRA\ne2Rgn2j+nvm2XdLAlC4Kh8jqv/wCL0X6BTQMdN5aOhXdSiXtpXOMvXYY/dQ4ebRZ\nXeRCVWQD79JbV6/uyx0nCV3FVcU7L1P4UjxroefVr0soLPMirgxHmOxLnkoVgdcB\ntqufP5kJx9CIeJXPx3QQsk1XfEtxtUvuw4ZaZkQnNUqvGl7V+AZpur5Eqfv3zBi8\nQxxL7qGkARNssNWH2Ju+tqpM/UZRnjlFrDR4SXUgT0coTduBalUY6qHkciHmRpiP\ntf3SgpDeiCSOV2iVFGdaR1mz3muWoAYWFstcWN3a3HjjVugIi23yLN8Gv8CNeoH4\nprulinFCLrFgAh8SLAF8mOAZanT06LH8jOIFYrdUxH+ZeRBR0rLoFjUF+JB7UKD9\n5TA+B4EBzQ1tMbGFU1DX79MjAejq0IV0Nzq+GMfBvLHxEf4+Oz8nqhDXQcJ6TdtY\nl3Lyw5zBvOL80SBK+Mr0UP7d9U3VXgbGHCYVJU6Ot1TwiGwahtWALRALA3TWeGkq\n7kyD1H+nm+9lfKhuyBRQnRGBVyze2lAp7oxwshJuhBwEXosXFxq1Cy6QhPN77r6N\nvuhxvtppolNnyOgGxwG4zquqq2V5/+vKjKY=\n-----END CERTIFICATE-----\n\",\n                },\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/syntheticmonitoring\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmain, err := syntheticmonitoring.GetProbes(ctx, \u0026syntheticmonitoring.GetProbesArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = syntheticmonitoring.NewCheck(ctx, \"tcp\", \u0026syntheticmonitoring.CheckArgs{\n\t\t\tJob:     pulumi.String(\"TCP Defaults\"),\n\t\t\tTarget:  pulumi.String(\"grafana.com:443\"),\n\t\t\tEnabled: pulumi.Bool(false),\n\t\t\tProbes: pulumi.IntArray{\n\t\t\t\tpulumi.Int(main.Probes.Frankfurt),\n\t\t\t\tpulumi.Int(main.Probes.London),\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"baz\"),\n\t\t\t},\n\t\t\tSettings: \u0026syntheticmonitoring.CheckSettingsArgs{\n\t\t\t\tTcp: \u0026syntheticmonitoring.CheckSettingsTcpArgs{\n\t\t\t\t\tIpVersion: pulumi.String(\"V6\"),\n\t\t\t\t\tTls:       pulumi.Bool(true),\n\t\t\t\t\tQueryResponses: syntheticmonitoring.CheckSettingsTcpQueryResponseArray{\n\t\t\t\t\t\t\u0026syntheticmonitoring.CheckSettingsTcpQueryResponseArgs{\n\t\t\t\t\t\t\tSend:   pulumi.String(\"howdy\"),\n\t\t\t\t\t\t\tExpect: pulumi.String(\"hi\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026syntheticmonitoring.CheckSettingsTcpQueryResponseArgs{\n\t\t\t\t\t\t\tSend:     pulumi.String(\"like this\"),\n\t\t\t\t\t\t\tExpect:   pulumi.String(\"like that\"),\n\t\t\t\t\t\t\tStartTls: pulumi.Bool(true),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tTlsConfig: \u0026syntheticmonitoring.CheckSettingsTcpTlsConfigArgs{\n\t\t\t\t\t\tServerName: pulumi.String(\"grafana.com\"),\n\t\t\t\t\t\tCaCert: pulumi.String(`-----BEGIN CERTIFICATE-----\nMIIEljCCAn4CCQCKJPUQQxeO0zANBgkqhkiG9w0BAQsFADANMQswCQYDVQQGEwJT\nRTAeFw0yMTA1MjkxOTIyNTdaFw0yNDAzMTgxOTIyNTdaMA0xCzAJBgNVBAYTAlNF\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnmbazDNUT0rSI4BpGZK+\n0AJ+9FDkIYWJUtRLJoxw8CF+AobMFploYA2L2Myt80cTA1w8FrewjC8qlqdnrPWr\nh1ely2zsUljgi1/niH0ndjFzliL7UkinXQiAsTtYOrOQmzyd/o5PNdu7dz0m7stD\nBN/Sz5TlXZnA1/eJbqV/kqMau6b1MaBx8SbRfUG9+cSmUobFJwuktDrPuwJhcEkl\niDmhEqu1GuZzmKvzPacLTVia1vSlmCTCu89NiHI8iGiiLtqNrapup7f8j5m3a3SL\na+vXhplFj2piNl7Nc0dfuVgtEliTI+qUL2/+4A7gzRWZpHy21/LxMMXmBhdJW9En\nFWkev97VZLgb5TR3+qpSWmXcodjPy4dibvwsOMpdd+Q4AYulwvlDw5idRPVgGvk7\nqq03+w9ppZ5Fugws9k2CD9F/75JX2mCbRpkuPe8XXZ7bqrMaQgQMLOrs68HuiiCk\nFTklglq4DMKxnf/Y/T/MgIa9Q1o28YSevh6A7FnfPGARj2H2T4rToi+bC1Vf7qNB\nZ18bDpz99tRUTbyiRUSBMWLCGhU6c4HAqUrfrkpperOKFBQ3i38a79838oFdXHBW\n6rx1t5cC3XwtEoUyeBKAygez8G1LDXbN3607MxVhAjhHKtPkYvuBfysSNU6JrR0z\nUV1IURJANt2UMuKgSEkG/IMCAwEAATANBgkqhkiG9w0BAQsFAAOCAgEAcipMhp/w\nyzfPy61faVAw9SPaMNRlnW9FCDC3N9CGOjo2knjXpObPzyzsJiUURTjrA9eFMpRA\ne2Rgn2j+nvm2XdLAlC4Kh8jqv/wCL0X6BTQMdN5aOhXdSiXtpXOMvXYY/dQ4ebRZ\nXeRCVWQD79JbV6/uyx0nCV3FVcU7L1P4UjxroefVr0soLPMirgxHmOxLnkoVgdcB\ntqufP5kJx9CIeJXPx3QQsk1XfEtxtUvuw4ZaZkQnNUqvGl7V+AZpur5Eqfv3zBi8\nQxxL7qGkARNssNWH2Ju+tqpM/UZRnjlFrDR4SXUgT0coTduBalUY6qHkciHmRpiP\ntf3SgpDeiCSOV2iVFGdaR1mz3muWoAYWFstcWN3a3HjjVugIi23yLN8Gv8CNeoH4\nprulinFCLrFgAh8SLAF8mOAZanT06LH8jOIFYrdUxH+ZeRBR0rLoFjUF+JB7UKD9\n5TA+B4EBzQ1tMbGFU1DX79MjAejq0IV0Nzq+GMfBvLHxEf4+Oz8nqhDXQcJ6TdtY\nl3Lyw5zBvOL80SBK+Mr0UP7d9U3VXgbGHCYVJU6Ot1TwiGwahtWALRALA3TWeGkq\n7kyD1H+nm+9lfKhuyBRQnRGBVyze2lAp7oxwshJuhBwEXosXFxq1Cy6QhPN77r6N\nvuhxvtppolNnyOgGxwG4zquqq2V5/+vKjKY=\n-----END CERTIFICATE-----\n`),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.syntheticMonitoring.SyntheticMonitoringFunctions;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.GetProbesArgs;\nimport com.pulumi.grafana.syntheticMonitoring.Check;\nimport com.pulumi.grafana.syntheticMonitoring.CheckArgs;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.CheckSettingsArgs;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.CheckSettingsTcpArgs;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.CheckSettingsTcpTlsConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var main = SyntheticMonitoringFunctions.getProbes(GetProbesArgs.builder()\n            .build());\n\n        var tcp = new Check(\"tcp\", CheckArgs.builder()\n            .job(\"TCP Defaults\")\n            .target(\"grafana.com:443\")\n            .enabled(false)\n            .probes(            \n                main.probes().frankfurt(),\n                main.probes().london())\n            .labels(Map.of(\"foo\", \"baz\"))\n            .settings(CheckSettingsArgs.builder()\n                .tcp(CheckSettingsTcpArgs.builder()\n                    .ipVersion(\"V6\")\n                    .tls(true)\n                    .queryResponses(                    \n                        CheckSettingsTcpQueryResponseArgs.builder()\n                            .send(\"howdy\")\n                            .expect(\"hi\")\n                            .build(),\n                        CheckSettingsTcpQueryResponseArgs.builder()\n                            .send(\"like this\")\n                            .expect(\"like that\")\n                            .startTls(true)\n                            .build())\n                    .tlsConfig(CheckSettingsTcpTlsConfigArgs.builder()\n                        .serverName(\"grafana.com\")\n                        .caCert(\"\"\"\n-----BEGIN CERTIFICATE-----\nMIIEljCCAn4CCQCKJPUQQxeO0zANBgkqhkiG9w0BAQsFADANMQswCQYDVQQGEwJT\nRTAeFw0yMTA1MjkxOTIyNTdaFw0yNDAzMTgxOTIyNTdaMA0xCzAJBgNVBAYTAlNF\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnmbazDNUT0rSI4BpGZK+\n0AJ+9FDkIYWJUtRLJoxw8CF+AobMFploYA2L2Myt80cTA1w8FrewjC8qlqdnrPWr\nh1ely2zsUljgi1/niH0ndjFzliL7UkinXQiAsTtYOrOQmzyd/o5PNdu7dz0m7stD\nBN/Sz5TlXZnA1/eJbqV/kqMau6b1MaBx8SbRfUG9+cSmUobFJwuktDrPuwJhcEkl\niDmhEqu1GuZzmKvzPacLTVia1vSlmCTCu89NiHI8iGiiLtqNrapup7f8j5m3a3SL\na+vXhplFj2piNl7Nc0dfuVgtEliTI+qUL2/+4A7gzRWZpHy21/LxMMXmBhdJW9En\nFWkev97VZLgb5TR3+qpSWmXcodjPy4dibvwsOMpdd+Q4AYulwvlDw5idRPVgGvk7\nqq03+w9ppZ5Fugws9k2CD9F/75JX2mCbRpkuPe8XXZ7bqrMaQgQMLOrs68HuiiCk\nFTklglq4DMKxnf/Y/T/MgIa9Q1o28YSevh6A7FnfPGARj2H2T4rToi+bC1Vf7qNB\nZ18bDpz99tRUTbyiRUSBMWLCGhU6c4HAqUrfrkpperOKFBQ3i38a79838oFdXHBW\n6rx1t5cC3XwtEoUyeBKAygez8G1LDXbN3607MxVhAjhHKtPkYvuBfysSNU6JrR0z\nUV1IURJANt2UMuKgSEkG/IMCAwEAATANBgkqhkiG9w0BAQsFAAOCAgEAcipMhp/w\nyzfPy61faVAw9SPaMNRlnW9FCDC3N9CGOjo2knjXpObPzyzsJiUURTjrA9eFMpRA\ne2Rgn2j+nvm2XdLAlC4Kh8jqv/wCL0X6BTQMdN5aOhXdSiXtpXOMvXYY/dQ4ebRZ\nXeRCVWQD79JbV6/uyx0nCV3FVcU7L1P4UjxroefVr0soLPMirgxHmOxLnkoVgdcB\ntqufP5kJx9CIeJXPx3QQsk1XfEtxtUvuw4ZaZkQnNUqvGl7V+AZpur5Eqfv3zBi8\nQxxL7qGkARNssNWH2Ju+tqpM/UZRnjlFrDR4SXUgT0coTduBalUY6qHkciHmRpiP\ntf3SgpDeiCSOV2iVFGdaR1mz3muWoAYWFstcWN3a3HjjVugIi23yLN8Gv8CNeoH4\nprulinFCLrFgAh8SLAF8mOAZanT06LH8jOIFYrdUxH+ZeRBR0rLoFjUF+JB7UKD9\n5TA+B4EBzQ1tMbGFU1DX79MjAejq0IV0Nzq+GMfBvLHxEf4+Oz8nqhDXQcJ6TdtY\nl3Lyw5zBvOL80SBK+Mr0UP7d9U3VXgbGHCYVJU6Ot1TwiGwahtWALRALA3TWeGkq\n7kyD1H+nm+9lfKhuyBRQnRGBVyze2lAp7oxwshJuhBwEXosXFxq1Cy6QhPN77r6N\nvuhxvtppolNnyOgGxwG4zquqq2V5/+vKjKY=\n-----END CERTIFICATE-----\n                        \"\"\")\n                        .build())\n                    .build())\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  tcp:\n    type: grafana:syntheticMonitoring:Check\n    properties:\n      job: TCP Defaults\n      target: grafana.com:443\n      enabled: false\n      probes:\n        - ${main.probes.frankfurt}\n        - ${main.probes.london}\n      labels:\n        foo: baz\n      settings:\n        tcp:\n          ipVersion: V6\n          tls: true\n          queryResponses:\n            - send: howdy\n              expect: hi\n            - send: like this\n              expect: like that\n              startTls: true\n          tlsConfig:\n            serverName: grafana.com\n            caCert: |\n              -----BEGIN CERTIFICATE-----\n              MIIEljCCAn4CCQCKJPUQQxeO0zANBgkqhkiG9w0BAQsFADANMQswCQYDVQQGEwJT\n              RTAeFw0yMTA1MjkxOTIyNTdaFw0yNDAzMTgxOTIyNTdaMA0xCzAJBgNVBAYTAlNF\n              MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnmbazDNUT0rSI4BpGZK+\n              0AJ+9FDkIYWJUtRLJoxw8CF+AobMFploYA2L2Myt80cTA1w8FrewjC8qlqdnrPWr\n              h1ely2zsUljgi1/niH0ndjFzliL7UkinXQiAsTtYOrOQmzyd/o5PNdu7dz0m7stD\n              BN/Sz5TlXZnA1/eJbqV/kqMau6b1MaBx8SbRfUG9+cSmUobFJwuktDrPuwJhcEkl\n              iDmhEqu1GuZzmKvzPacLTVia1vSlmCTCu89NiHI8iGiiLtqNrapup7f8j5m3a3SL\n              a+vXhplFj2piNl7Nc0dfuVgtEliTI+qUL2/+4A7gzRWZpHy21/LxMMXmBhdJW9En\n              FWkev97VZLgb5TR3+qpSWmXcodjPy4dibvwsOMpdd+Q4AYulwvlDw5idRPVgGvk7\n              qq03+w9ppZ5Fugws9k2CD9F/75JX2mCbRpkuPe8XXZ7bqrMaQgQMLOrs68HuiiCk\n              FTklglq4DMKxnf/Y/T/MgIa9Q1o28YSevh6A7FnfPGARj2H2T4rToi+bC1Vf7qNB\n              Z18bDpz99tRUTbyiRUSBMWLCGhU6c4HAqUrfrkpperOKFBQ3i38a79838oFdXHBW\n              6rx1t5cC3XwtEoUyeBKAygez8G1LDXbN3607MxVhAjhHKtPkYvuBfysSNU6JrR0z\n              UV1IURJANt2UMuKgSEkG/IMCAwEAATANBgkqhkiG9w0BAQsFAAOCAgEAcipMhp/w\n              yzfPy61faVAw9SPaMNRlnW9FCDC3N9CGOjo2knjXpObPzyzsJiUURTjrA9eFMpRA\n              e2Rgn2j+nvm2XdLAlC4Kh8jqv/wCL0X6BTQMdN5aOhXdSiXtpXOMvXYY/dQ4ebRZ\n              XeRCVWQD79JbV6/uyx0nCV3FVcU7L1P4UjxroefVr0soLPMirgxHmOxLnkoVgdcB\n              tqufP5kJx9CIeJXPx3QQsk1XfEtxtUvuw4ZaZkQnNUqvGl7V+AZpur5Eqfv3zBi8\n              QxxL7qGkARNssNWH2Ju+tqpM/UZRnjlFrDR4SXUgT0coTduBalUY6qHkciHmRpiP\n              tf3SgpDeiCSOV2iVFGdaR1mz3muWoAYWFstcWN3a3HjjVugIi23yLN8Gv8CNeoH4\n              prulinFCLrFgAh8SLAF8mOAZanT06LH8jOIFYrdUxH+ZeRBR0rLoFjUF+JB7UKD9\n              5TA+B4EBzQ1tMbGFU1DX79MjAejq0IV0Nzq+GMfBvLHxEf4+Oz8nqhDXQcJ6TdtY\n              l3Lyw5zBvOL80SBK+Mr0UP7d9U3VXgbGHCYVJU6Ot1TwiGwahtWALRALA3TWeGkq\n              7kyD1H+nm+9lfKhuyBRQnRGBVyze2lAp7oxwshJuhBwEXosXFxq1Cy6QhPN77r6N\n              vuhxvtppolNnyOgGxwG4zquqq2V5/+vKjKY=\n              -----END CERTIFICATE-----\nvariables:\n  main:\n    fn::invoke:\n      function: grafana:syntheticMonitoring:getProbes\n      arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Traceroute Basic\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst main = grafana.syntheticMonitoring.getProbes({});\nconst traceroute = new grafana.syntheticmonitoring.Check(\"traceroute\", {\n    job: \"Traceroute defaults\",\n    target: \"grafana.com\",\n    enabled: false,\n    frequency: 120000,\n    timeout: 30000,\n    probes: [main.then(main =\u003e main.probes?.ohio)],\n    labels: {\n        foo: \"bar\",\n    },\n    settings: {\n        traceroute: {},\n    },\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\nmain = grafana.syntheticMonitoring.get_probes()\ntraceroute = grafana.syntheticmonitoring.Check(\"traceroute\",\n    job=\"Traceroute defaults\",\n    target=\"grafana.com\",\n    enabled=False,\n    frequency=120000,\n    timeout=30000,\n    probes=[main.probes[\"ohio\"]],\n    labels={\n        \"foo\": \"bar\",\n    },\n    settings={\n        \"traceroute\": {},\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var main = Grafana.SyntheticMonitoring.GetProbes.Invoke();\n\n    var traceroute = new Grafana.SyntheticMonitoring.Check(\"traceroute\", new()\n    {\n        Job = \"Traceroute defaults\",\n        Target = \"grafana.com\",\n        Enabled = false,\n        Frequency = 120000,\n        Timeout = 30000,\n        Probes = new[]\n        {\n            main.Apply(getProbesResult =\u003e getProbesResult.Probes?.Ohio),\n        },\n        Labels = \n        {\n            { \"foo\", \"bar\" },\n        },\n        Settings = new Grafana.SyntheticMonitoring.Inputs.CheckSettingsArgs\n        {\n            Traceroute = null,\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/syntheticmonitoring\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmain, err := syntheticmonitoring.GetProbes(ctx, \u0026syntheticmonitoring.GetProbesArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = syntheticmonitoring.NewCheck(ctx, \"traceroute\", \u0026syntheticmonitoring.CheckArgs{\n\t\t\tJob:       pulumi.String(\"Traceroute defaults\"),\n\t\t\tTarget:    pulumi.String(\"grafana.com\"),\n\t\t\tEnabled:   pulumi.Bool(false),\n\t\t\tFrequency: pulumi.Int(120000),\n\t\t\tTimeout:   pulumi.Int(30000),\n\t\t\tProbes: pulumi.IntArray{\n\t\t\t\tpulumi.Int(main.Probes.Ohio),\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tSettings: \u0026syntheticmonitoring.CheckSettingsArgs{\n\t\t\t\tTraceroute: \u0026syntheticmonitoring.CheckSettingsTracerouteArgs{},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.syntheticMonitoring.SyntheticMonitoringFunctions;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.GetProbesArgs;\nimport com.pulumi.grafana.syntheticMonitoring.Check;\nimport com.pulumi.grafana.syntheticMonitoring.CheckArgs;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.CheckSettingsArgs;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.CheckSettingsTracerouteArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var main = SyntheticMonitoringFunctions.getProbes(GetProbesArgs.builder()\n            .build());\n\n        var traceroute = new Check(\"traceroute\", CheckArgs.builder()\n            .job(\"Traceroute defaults\")\n            .target(\"grafana.com\")\n            .enabled(false)\n            .frequency(120000)\n            .timeout(30000)\n            .probes(main.probes().ohio())\n            .labels(Map.of(\"foo\", \"bar\"))\n            .settings(CheckSettingsArgs.builder()\n                .traceroute(CheckSettingsTracerouteArgs.builder()\n                    .build())\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  traceroute:\n    type: grafana:syntheticMonitoring:Check\n    properties:\n      job: Traceroute defaults\n      target: grafana.com\n      enabled: false\n      frequency: 120000\n      timeout: 30000\n      probes:\n        - ${main.probes.ohio}\n      labels:\n        foo: bar\n      settings:\n        traceroute: {}\nvariables:\n  main:\n    fn::invoke:\n      function: grafana:syntheticMonitoring:getProbes\n      arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Traceroute Complex\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst main = grafana.syntheticMonitoring.getProbes({});\nconst traceroute = new grafana.syntheticmonitoring.Check(\"traceroute\", {\n    job: \"Traceroute complex\",\n    target: \"grafana.net\",\n    enabled: false,\n    frequency: 120000,\n    timeout: 30000,\n    probes: [\n        main.then(main =\u003e main.probes?.frankfurt),\n        main.then(main =\u003e main.probes?.london),\n    ],\n    labels: {\n        foo: \"baz\",\n    },\n    settings: {\n        traceroute: {\n            maxHops: 25,\n            maxUnknownHops: 10,\n            ptrLookup: false,\n        },\n    },\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\nmain = grafana.syntheticMonitoring.get_probes()\ntraceroute = grafana.syntheticmonitoring.Check(\"traceroute\",\n    job=\"Traceroute complex\",\n    target=\"grafana.net\",\n    enabled=False,\n    frequency=120000,\n    timeout=30000,\n    probes=[\n        main.probes[\"frankfurt\"],\n        main.probes[\"london\"],\n    ],\n    labels={\n        \"foo\": \"baz\",\n    },\n    settings={\n        \"traceroute\": {\n            \"max_hops\": 25,\n            \"max_unknown_hops\": 10,\n            \"ptr_lookup\": False,\n        },\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var main = Grafana.SyntheticMonitoring.GetProbes.Invoke();\n\n    var traceroute = new Grafana.SyntheticMonitoring.Check(\"traceroute\", new()\n    {\n        Job = \"Traceroute complex\",\n        Target = \"grafana.net\",\n        Enabled = false,\n        Frequency = 120000,\n        Timeout = 30000,\n        Probes = new[]\n        {\n            main.Apply(getProbesResult =\u003e getProbesResult.Probes?.Frankfurt),\n            main.Apply(getProbesResult =\u003e getProbesResult.Probes?.London),\n        },\n        Labels = \n        {\n            { \"foo\", \"baz\" },\n        },\n        Settings = new Grafana.SyntheticMonitoring.Inputs.CheckSettingsArgs\n        {\n            Traceroute = new Grafana.SyntheticMonitoring.Inputs.CheckSettingsTracerouteArgs\n            {\n                MaxHops = 25,\n                MaxUnknownHops = 10,\n                PtrLookup = false,\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/syntheticmonitoring\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmain, err := syntheticmonitoring.GetProbes(ctx, \u0026syntheticmonitoring.GetProbesArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = syntheticmonitoring.NewCheck(ctx, \"traceroute\", \u0026syntheticmonitoring.CheckArgs{\n\t\t\tJob:       pulumi.String(\"Traceroute complex\"),\n\t\t\tTarget:    pulumi.String(\"grafana.net\"),\n\t\t\tEnabled:   pulumi.Bool(false),\n\t\t\tFrequency: pulumi.Int(120000),\n\t\t\tTimeout:   pulumi.Int(30000),\n\t\t\tProbes: pulumi.IntArray{\n\t\t\t\tpulumi.Int(main.Probes.Frankfurt),\n\t\t\t\tpulumi.Int(main.Probes.London),\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"baz\"),\n\t\t\t},\n\t\t\tSettings: \u0026syntheticmonitoring.CheckSettingsArgs{\n\t\t\t\tTraceroute: \u0026syntheticmonitoring.CheckSettingsTracerouteArgs{\n\t\t\t\t\tMaxHops:        pulumi.Int(25),\n\t\t\t\t\tMaxUnknownHops: pulumi.Int(10),\n\t\t\t\t\tPtrLookup:      pulumi.Bool(false),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.syntheticMonitoring.SyntheticMonitoringFunctions;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.GetProbesArgs;\nimport com.pulumi.grafana.syntheticMonitoring.Check;\nimport com.pulumi.grafana.syntheticMonitoring.CheckArgs;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.CheckSettingsArgs;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.CheckSettingsTracerouteArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var main = SyntheticMonitoringFunctions.getProbes(GetProbesArgs.builder()\n            .build());\n\n        var traceroute = new Check(\"traceroute\", CheckArgs.builder()\n            .job(\"Traceroute complex\")\n            .target(\"grafana.net\")\n            .enabled(false)\n            .frequency(120000)\n            .timeout(30000)\n            .probes(            \n                main.probes().frankfurt(),\n                main.probes().london())\n            .labels(Map.of(\"foo\", \"baz\"))\n            .settings(CheckSettingsArgs.builder()\n                .traceroute(CheckSettingsTracerouteArgs.builder()\n                    .maxHops(25)\n                    .maxUnknownHops(10)\n                    .ptrLookup(false)\n                    .build())\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  traceroute:\n    type: grafana:syntheticMonitoring:Check\n    properties:\n      job: Traceroute complex\n      target: grafana.net\n      enabled: false\n      frequency: 120000\n      timeout: 30000\n      probes:\n        - ${main.probes.frankfurt}\n        - ${main.probes.london}\n      labels:\n        foo: baz\n      settings:\n        traceroute:\n          maxHops: 25\n          maxUnknownHops: 10\n          ptrLookup: false\nvariables:\n  main:\n    fn::invoke:\n      function: grafana:syntheticMonitoring:getProbes\n      arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:syntheticMonitoring/check:Check name \"{{ id }}\"\n```\n\n","properties":{"alertSensitivity":{"type":"string","description":"Can be set to \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`low`\" pulumi-lang-dotnet=\"`Low`\" pulumi-lang-go=\"`low`\" pulumi-lang-python=\"`low`\" pulumi-lang-yaml=\"`low`\" pulumi-lang-java=\"`low`\"\u003e`low`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`medium`\" pulumi-lang-dotnet=\"`Medium`\" pulumi-lang-go=\"`medium`\" pulumi-lang-python=\"`medium`\" pulumi-lang-yaml=\"`medium`\" pulumi-lang-java=\"`medium`\"\u003e`medium`\u003c/span\u003e, or \u003cspan pulumi-lang-nodejs=\"`high`\" pulumi-lang-dotnet=\"`High`\" pulumi-lang-go=\"`high`\" pulumi-lang-python=\"`high`\" pulumi-lang-yaml=\"`high`\" pulumi-lang-java=\"`high`\"\u003e`high`\u003c/span\u003e to correspond to the check [alert levels](https://grafana.com/docs/grafana-cloud/testing/synthetic-monitoring/configure-alerts/synthetic-monitoring-alerting/). Defaults to \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e.\n"},"basicMetricsOnly":{"type":"boolean","description":"Metrics are reduced by default. Set this to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e if you'd like to publish all metrics. We maintain a [full list of metrics](https://github.com/grafana/synthetic-monitoring-agent/tree/main/internal/scraper/testdata) collected for each. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"enabled":{"type":"boolean","description":"Whether to enable the check. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"frequency":{"type":"integer","description":"How often the check runs in milliseconds (the value is not truly a \"frequency\" but a \"period\"). The minimum acceptable value is 1 second (1000 ms), and the maximum is 1 hour (3600000 ms). Defaults to \u003cspan pulumi-lang-nodejs=\"`60000`\" pulumi-lang-dotnet=\"`60000`\" pulumi-lang-go=\"`60000`\" pulumi-lang-python=\"`60000`\" pulumi-lang-yaml=\"`60000`\" pulumi-lang-java=\"`60000`\"\u003e`60000`\u003c/span\u003e.\n"},"job":{"type":"string","description":"Name used for job label.\n"},"labels":{"type":"object","additionalProperties":{"type":"string"},"description":"Custom labels to be included with collected metrics and logs. The maximum number of labels that can be specified per check is 5. These are applied, along with the probe-specific labels, to the outgoing metrics. The names and values of the labels cannot be empty, and the maximum length is 32 bytes.\n"},"probes":{"type":"array","items":{"type":"integer"},"description":"List of probe location IDs where this target will be checked from.\n"},"settings":{"$ref":"#/types/grafana:syntheticMonitoring/CheckSettings:CheckSettings","description":"Check settings. Should contain exactly one nested block.\n"},"target":{"type":"string","description":"Hostname to ping.\n"},"tenantId":{"type":"integer","description":"The tenant ID of the check.\n"},"timeout":{"type":"integer","description":"Specifies the maximum running time for the check in milliseconds. The minimum acceptable value is 1 second (1000 ms), and the maximum 180 seconds (180000 ms). Defaults to \u003cspan pulumi-lang-nodejs=\"`3000`\" pulumi-lang-dotnet=\"`3000`\" pulumi-lang-go=\"`3000`\" pulumi-lang-python=\"`3000`\" pulumi-lang-yaml=\"`3000`\" pulumi-lang-java=\"`3000`\"\u003e`3000`\u003c/span\u003e.\n"}},"required":["job","probes","settings","target","tenantId"],"inputProperties":{"alertSensitivity":{"type":"string","description":"Can be set to \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`low`\" pulumi-lang-dotnet=\"`Low`\" pulumi-lang-go=\"`low`\" pulumi-lang-python=\"`low`\" pulumi-lang-yaml=\"`low`\" pulumi-lang-java=\"`low`\"\u003e`low`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`medium`\" pulumi-lang-dotnet=\"`Medium`\" pulumi-lang-go=\"`medium`\" pulumi-lang-python=\"`medium`\" pulumi-lang-yaml=\"`medium`\" pulumi-lang-java=\"`medium`\"\u003e`medium`\u003c/span\u003e, or \u003cspan pulumi-lang-nodejs=\"`high`\" pulumi-lang-dotnet=\"`High`\" pulumi-lang-go=\"`high`\" pulumi-lang-python=\"`high`\" pulumi-lang-yaml=\"`high`\" pulumi-lang-java=\"`high`\"\u003e`high`\u003c/span\u003e to correspond to the check [alert levels](https://grafana.com/docs/grafana-cloud/testing/synthetic-monitoring/configure-alerts/synthetic-monitoring-alerting/). Defaults to \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e.\n"},"basicMetricsOnly":{"type":"boolean","description":"Metrics are reduced by default. Set this to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e if you'd like to publish all metrics. We maintain a [full list of metrics](https://github.com/grafana/synthetic-monitoring-agent/tree/main/internal/scraper/testdata) collected for each. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"enabled":{"type":"boolean","description":"Whether to enable the check. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"frequency":{"type":"integer","description":"How often the check runs in milliseconds (the value is not truly a \"frequency\" but a \"period\"). The minimum acceptable value is 1 second (1000 ms), and the maximum is 1 hour (3600000 ms). Defaults to \u003cspan pulumi-lang-nodejs=\"`60000`\" pulumi-lang-dotnet=\"`60000`\" pulumi-lang-go=\"`60000`\" pulumi-lang-python=\"`60000`\" pulumi-lang-yaml=\"`60000`\" pulumi-lang-java=\"`60000`\"\u003e`60000`\u003c/span\u003e.\n"},"job":{"type":"string","description":"Name used for job label.\n"},"labels":{"type":"object","additionalProperties":{"type":"string"},"description":"Custom labels to be included with collected metrics and logs. The maximum number of labels that can be specified per check is 5. These are applied, along with the probe-specific labels, to the outgoing metrics. The names and values of the labels cannot be empty, and the maximum length is 32 bytes.\n"},"probes":{"type":"array","items":{"type":"integer"},"description":"List of probe location IDs where this target will be checked from.\n"},"settings":{"$ref":"#/types/grafana:syntheticMonitoring/CheckSettings:CheckSettings","description":"Check settings. Should contain exactly one nested block.\n"},"target":{"type":"string","description":"Hostname to ping.\n"},"timeout":{"type":"integer","description":"Specifies the maximum running time for the check in milliseconds. The minimum acceptable value is 1 second (1000 ms), and the maximum 180 seconds (180000 ms). Defaults to \u003cspan pulumi-lang-nodejs=\"`3000`\" pulumi-lang-dotnet=\"`3000`\" pulumi-lang-go=\"`3000`\" pulumi-lang-python=\"`3000`\" pulumi-lang-yaml=\"`3000`\" pulumi-lang-java=\"`3000`\"\u003e`3000`\u003c/span\u003e.\n"}},"requiredInputs":["job","probes","settings","target"],"stateInputs":{"description":"Input properties used for looking up and filtering Check resources.\n","properties":{"alertSensitivity":{"type":"string","description":"Can be set to \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`low`\" pulumi-lang-dotnet=\"`Low`\" pulumi-lang-go=\"`low`\" pulumi-lang-python=\"`low`\" pulumi-lang-yaml=\"`low`\" pulumi-lang-java=\"`low`\"\u003e`low`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`medium`\" pulumi-lang-dotnet=\"`Medium`\" pulumi-lang-go=\"`medium`\" pulumi-lang-python=\"`medium`\" pulumi-lang-yaml=\"`medium`\" pulumi-lang-java=\"`medium`\"\u003e`medium`\u003c/span\u003e, or \u003cspan pulumi-lang-nodejs=\"`high`\" pulumi-lang-dotnet=\"`High`\" pulumi-lang-go=\"`high`\" pulumi-lang-python=\"`high`\" pulumi-lang-yaml=\"`high`\" pulumi-lang-java=\"`high`\"\u003e`high`\u003c/span\u003e to correspond to the check [alert levels](https://grafana.com/docs/grafana-cloud/testing/synthetic-monitoring/configure-alerts/synthetic-monitoring-alerting/). Defaults to \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e.\n"},"basicMetricsOnly":{"type":"boolean","description":"Metrics are reduced by default. Set this to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e if you'd like to publish all metrics. We maintain a [full list of metrics](https://github.com/grafana/synthetic-monitoring-agent/tree/main/internal/scraper/testdata) collected for each. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"enabled":{"type":"boolean","description":"Whether to enable the check. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"frequency":{"type":"integer","description":"How often the check runs in milliseconds (the value is not truly a \"frequency\" but a \"period\"). The minimum acceptable value is 1 second (1000 ms), and the maximum is 1 hour (3600000 ms). Defaults to \u003cspan pulumi-lang-nodejs=\"`60000`\" pulumi-lang-dotnet=\"`60000`\" pulumi-lang-go=\"`60000`\" pulumi-lang-python=\"`60000`\" pulumi-lang-yaml=\"`60000`\" pulumi-lang-java=\"`60000`\"\u003e`60000`\u003c/span\u003e.\n"},"job":{"type":"string","description":"Name used for job label.\n"},"labels":{"type":"object","additionalProperties":{"type":"string"},"description":"Custom labels to be included with collected metrics and logs. The maximum number of labels that can be specified per check is 5. These are applied, along with the probe-specific labels, to the outgoing metrics. The names and values of the labels cannot be empty, and the maximum length is 32 bytes.\n"},"probes":{"type":"array","items":{"type":"integer"},"description":"List of probe location IDs where this target will be checked from.\n"},"settings":{"$ref":"#/types/grafana:syntheticMonitoring/CheckSettings:CheckSettings","description":"Check settings. Should contain exactly one nested block.\n"},"target":{"type":"string","description":"Hostname to ping.\n"},"tenantId":{"type":"integer","description":"The tenant ID of the check.\n"},"timeout":{"type":"integer","description":"Specifies the maximum running time for the check in milliseconds. The minimum acceptable value is 1 second (1000 ms), and the maximum 180 seconds (180000 ms). Defaults to \u003cspan pulumi-lang-nodejs=\"`3000`\" pulumi-lang-dotnet=\"`3000`\" pulumi-lang-go=\"`3000`\" pulumi-lang-python=\"`3000`\" pulumi-lang-yaml=\"`3000`\" pulumi-lang-java=\"`3000`\"\u003e`3000`\u003c/span\u003e.\n"}},"type":"object"}},"grafana:syntheticMonitoring/checkAlerts:CheckAlerts":{"description":"Manages alerts for a check in Grafana Synthetic Monitoring.\n\n* [Official documentation](https://grafana.com/docs/grafana-cloud/testing/synthetic-monitoring/configure-alerts/configure-per-check-alerts/)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst main = new grafana.syntheticmonitoring.Check(\"main\", {\n    job: \"Check Alert Test\",\n    target: \"https://grafana.com\",\n    enabled: true,\n    probes: [1],\n    labels: {},\n    settings: {\n        http: {\n            ipVersion: \"V4\",\n            method: \"GET\",\n        },\n    },\n});\nconst mainCheckAlerts = new grafana.syntheticmonitoring.CheckAlerts(\"main\", {\n    checkId: main.id,\n    alerts: [\n        {\n            name: \"ProbeFailedExecutionsTooHigh\",\n            threshold: 1,\n            period: \"15m\",\n            runbookUrl: \"\",\n        },\n        {\n            name: \"TLSTargetCertificateCloseToExpiring\",\n            threshold: 14,\n            period: \"\",\n            runbookUrl: \"\",\n        },\n        {\n            name: \"HTTPRequestDurationTooHighAvg\",\n            threshold: 5000,\n            period: \"10m\",\n            runbookUrl: \"https://wiki.company.com/runbooks/http-duration\",\n        },\n    ],\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\nmain = grafana.syntheticmonitoring.Check(\"main\",\n    job=\"Check Alert Test\",\n    target=\"https://grafana.com\",\n    enabled=True,\n    probes=[1],\n    labels={},\n    settings={\n        \"http\": {\n            \"ip_version\": \"V4\",\n            \"method\": \"GET\",\n        },\n    })\nmain_check_alerts = grafana.syntheticmonitoring.CheckAlerts(\"main\",\n    check_id=main.id,\n    alerts=[\n        {\n            \"name\": \"ProbeFailedExecutionsTooHigh\",\n            \"threshold\": 1,\n            \"period\": \"15m\",\n            \"runbook_url\": \"\",\n        },\n        {\n            \"name\": \"TLSTargetCertificateCloseToExpiring\",\n            \"threshold\": 14,\n            \"period\": \"\",\n            \"runbook_url\": \"\",\n        },\n        {\n            \"name\": \"HTTPRequestDurationTooHighAvg\",\n            \"threshold\": 5000,\n            \"period\": \"10m\",\n            \"runbook_url\": \"https://wiki.company.com/runbooks/http-duration\",\n        },\n    ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var main = new Grafana.SyntheticMonitoring.Check(\"main\", new()\n    {\n        Job = \"Check Alert Test\",\n        Target = \"https://grafana.com\",\n        Enabled = true,\n        Probes = new[]\n        {\n            1,\n        },\n        Labels = null,\n        Settings = new Grafana.SyntheticMonitoring.Inputs.CheckSettingsArgs\n        {\n            Http = new Grafana.SyntheticMonitoring.Inputs.CheckSettingsHttpArgs\n            {\n                IpVersion = \"V4\",\n                Method = \"GET\",\n            },\n        },\n    });\n\n    var mainCheckAlerts = new Grafana.SyntheticMonitoring.CheckAlerts(\"main\", new()\n    {\n        CheckId = main.Id,\n        Alerts = new[]\n        {\n            new Grafana.SyntheticMonitoring.Inputs.CheckAlertsAlertArgs\n            {\n                Name = \"ProbeFailedExecutionsTooHigh\",\n                Threshold = 1,\n                Period = \"15m\",\n                RunbookUrl = \"\",\n            },\n            new Grafana.SyntheticMonitoring.Inputs.CheckAlertsAlertArgs\n            {\n                Name = \"TLSTargetCertificateCloseToExpiring\",\n                Threshold = 14,\n                Period = \"\",\n                RunbookUrl = \"\",\n            },\n            new Grafana.SyntheticMonitoring.Inputs.CheckAlertsAlertArgs\n            {\n                Name = \"HTTPRequestDurationTooHighAvg\",\n                Threshold = 5000,\n                Period = \"10m\",\n                RunbookUrl = \"https://wiki.company.com/runbooks/http-duration\",\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/syntheticmonitoring\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmain, err := syntheticmonitoring.NewCheck(ctx, \"main\", \u0026syntheticmonitoring.CheckArgs{\n\t\t\tJob:     pulumi.String(\"Check Alert Test\"),\n\t\t\tTarget:  pulumi.String(\"https://grafana.com\"),\n\t\t\tEnabled: pulumi.Bool(true),\n\t\t\tProbes: pulumi.IntArray{\n\t\t\t\tpulumi.Int(1),\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{},\n\t\t\tSettings: \u0026syntheticmonitoring.CheckSettingsArgs{\n\t\t\t\tHttp: \u0026syntheticmonitoring.CheckSettingsHttpArgs{\n\t\t\t\t\tIpVersion: pulumi.String(\"V4\"),\n\t\t\t\t\tMethod:    pulumi.String(\"GET\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = syntheticmonitoring.NewCheckAlerts(ctx, \"main\", \u0026syntheticmonitoring.CheckAlertsArgs{\n\t\t\tCheckId: main.ID(),\n\t\t\tAlerts: syntheticmonitoring.CheckAlertsAlertArray{\n\t\t\t\t\u0026syntheticmonitoring.CheckAlertsAlertArgs{\n\t\t\t\t\tName:       pulumi.String(\"ProbeFailedExecutionsTooHigh\"),\n\t\t\t\t\tThreshold:  pulumi.Float64(1),\n\t\t\t\t\tPeriod:     pulumi.String(\"15m\"),\n\t\t\t\t\tRunbookUrl: pulumi.String(\"\"),\n\t\t\t\t},\n\t\t\t\t\u0026syntheticmonitoring.CheckAlertsAlertArgs{\n\t\t\t\t\tName:       pulumi.String(\"TLSTargetCertificateCloseToExpiring\"),\n\t\t\t\t\tThreshold:  pulumi.Float64(14),\n\t\t\t\t\tPeriod:     pulumi.String(\"\"),\n\t\t\t\t\tRunbookUrl: pulumi.String(\"\"),\n\t\t\t\t},\n\t\t\t\t\u0026syntheticmonitoring.CheckAlertsAlertArgs{\n\t\t\t\t\tName:       pulumi.String(\"HTTPRequestDurationTooHighAvg\"),\n\t\t\t\t\tThreshold:  pulumi.Float64(5000),\n\t\t\t\t\tPeriod:     pulumi.String(\"10m\"),\n\t\t\t\t\tRunbookUrl: pulumi.String(\"https://wiki.company.com/runbooks/http-duration\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.syntheticMonitoring.Check;\nimport com.pulumi.grafana.syntheticMonitoring.CheckArgs;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.CheckSettingsArgs;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.CheckSettingsHttpArgs;\nimport com.pulumi.grafana.syntheticMonitoring.CheckAlerts;\nimport com.pulumi.grafana.syntheticMonitoring.CheckAlertsArgs;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.CheckAlertsAlertArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var main = new Check(\"main\", CheckArgs.builder()\n            .job(\"Check Alert Test\")\n            .target(\"https://grafana.com\")\n            .enabled(true)\n            .probes(1)\n            .labels(Map.ofEntries(\n            ))\n            .settings(CheckSettingsArgs.builder()\n                .http(CheckSettingsHttpArgs.builder()\n                    .ipVersion(\"V4\")\n                    .method(\"GET\")\n                    .build())\n                .build())\n            .build());\n\n        var mainCheckAlerts = new CheckAlerts(\"mainCheckAlerts\", CheckAlertsArgs.builder()\n            .checkId(main.id())\n            .alerts(            \n                CheckAlertsAlertArgs.builder()\n                    .name(\"ProbeFailedExecutionsTooHigh\")\n                    .threshold(1.0)\n                    .period(\"15m\")\n                    .runbookUrl(\"\")\n                    .build(),\n                CheckAlertsAlertArgs.builder()\n                    .name(\"TLSTargetCertificateCloseToExpiring\")\n                    .threshold(14.0)\n                    .period(\"\")\n                    .runbookUrl(\"\")\n                    .build(),\n                CheckAlertsAlertArgs.builder()\n                    .name(\"HTTPRequestDurationTooHighAvg\")\n                    .threshold(5000.0)\n                    .period(\"10m\")\n                    .runbookUrl(\"https://wiki.company.com/runbooks/http-duration\")\n                    .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  main:\n    type: grafana:syntheticMonitoring:Check\n    properties:\n      job: Check Alert Test\n      target: https://grafana.com\n      enabled: true\n      probes:\n        - 1\n      labels: {}\n      settings:\n        http:\n          ipVersion: V4\n          method: GET\n  mainCheckAlerts:\n    type: grafana:syntheticMonitoring:CheckAlerts\n    name: main\n    properties:\n      checkId: ${main.id}\n      alerts:\n        - name: ProbeFailedExecutionsTooHigh\n          threshold: 1\n          period: 15m\n          runbookUrl: \"\"\n        - name: TLSTargetCertificateCloseToExpiring\n          threshold: 14\n          period: \"\"\n          runbookUrl: \"\"\n        - name: HTTPRequestDurationTooHighAvg\n          threshold: 5000\n          period: 10m\n          runbookUrl: https://wiki.company.com/runbooks/http-duration\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:syntheticMonitoring/checkAlerts:CheckAlerts name \"{{ check_id }}\"\n```\n\n","properties":{"alerts":{"type":"array","items":{"$ref":"#/types/grafana:syntheticMonitoring/CheckAlertsAlert:CheckAlertsAlert"},"description":"List of alerts for the check.\n"},"checkId":{"type":"integer","description":"The ID of the check to manage alerts for.\n"}},"required":["alerts","checkId"],"inputProperties":{"alerts":{"type":"array","items":{"$ref":"#/types/grafana:syntheticMonitoring/CheckAlertsAlert:CheckAlertsAlert"},"description":"List of alerts for the check.\n"},"checkId":{"type":"integer","description":"The ID of the check to manage alerts for.\n","willReplaceOnChanges":true}},"requiredInputs":["alerts","checkId"],"stateInputs":{"description":"Input properties used for looking up and filtering CheckAlerts resources.\n","properties":{"alerts":{"type":"array","items":{"$ref":"#/types/grafana:syntheticMonitoring/CheckAlertsAlert:CheckAlertsAlert"},"description":"List of alerts for the check.\n"},"checkId":{"type":"integer","description":"The ID of the check to manage alerts for.\n","willReplaceOnChanges":true}},"type":"object"}},"grafana:syntheticMonitoring/installation:Installation":{"description":"Sets up Synthetic Monitoring on a Grafana cloud stack and generates a token. \nOnce a Grafana Cloud stack is created, a user can either use this resource or go into the UI to install synthetic monitoring.\nThis resource cannot be imported but it can be used on an existing Synthetic Monitoring installation without issues.\n\n**Note that this resource must be used on a provider configured with Grafana Cloud credentials.**\n\n* [Official documentation](https://grafana.com/docs/grafana-cloud/testing/synthetic-monitoring/set-up/)\n* [API documentation](https://github.com/grafana/synthetic-monitoring-api-go-client/blob/main/docs/API.md#apiv1registerinstall)\n\nRequired access policy scopes:\n\n* stacks:read\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst config = new pulumi.Config();\n// Cloud Access Policy token for Grafana Cloud with the following scopes: accesspolicies:read|write|delete, stacks:read|write|delete\nconst cloudAccessPolicyToken = config.requireObject\u003cany\u003e(\"cloudAccessPolicyToken\");\nconst stackSlug = config.requireObject\u003cany\u003e(\"stackSlug\");\nconst cloudRegion = config.get(\"cloudRegion\") || \"prod-us-east-0\";\nconst smStack = new grafana.cloud.Stack(\"sm_stack\", {\n    name: stackSlug,\n    slug: stackSlug,\n    regionSlug: cloudRegion,\n});\n// Step 2: Install Synthetic Monitoring on the stack\nconst smMetricsPublish = new grafana.cloud.AccessPolicy(\"sm_metrics_publish\", {\n    region: cloudRegion,\n    name: \"metric-publisher-for-sm\",\n    scopes: [\n        \"metrics:write\",\n        \"stacks:read\",\n        \"logs:write\",\n        \"traces:write\",\n    ],\n    realms: [{\n        type: \"stack\",\n        identifier: smStack.id,\n    }],\n});\nconst smMetricsPublishAccessPolicyToken = new grafana.cloud.AccessPolicyToken(\"sm_metrics_publish\", {\n    region: cloudRegion,\n    accessPolicyId: smMetricsPublish.policyId,\n    name: \"metric-publisher-for-sm\",\n});\nconst smStackInstallation = new grafana.syntheticmonitoring.Installation(\"sm_stack\", {\n    stackId: smStack.id,\n    metricsPublisherKey: smMetricsPublishAccessPolicyToken.token,\n});\nconst main = grafana.syntheticMonitoring.getProbes({});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\nconfig = pulumi.Config()\n# Cloud Access Policy token for Grafana Cloud with the following scopes: accesspolicies:read|write|delete, stacks:read|write|delete\ncloud_access_policy_token = config.require_object(\"cloudAccessPolicyToken\")\nstack_slug = config.require_object(\"stackSlug\")\ncloud_region = config.get(\"cloudRegion\")\nif cloud_region is None:\n    cloud_region = \"prod-us-east-0\"\nsm_stack = grafana.cloud.Stack(\"sm_stack\",\n    name=stack_slug,\n    slug=stack_slug,\n    region_slug=cloud_region)\n# Step 2: Install Synthetic Monitoring on the stack\nsm_metrics_publish = grafana.cloud.AccessPolicy(\"sm_metrics_publish\",\n    region=cloud_region,\n    name=\"metric-publisher-for-sm\",\n    scopes=[\n        \"metrics:write\",\n        \"stacks:read\",\n        \"logs:write\",\n        \"traces:write\",\n    ],\n    realms=[{\n        \"type\": \"stack\",\n        \"identifier\": sm_stack.id,\n    }])\nsm_metrics_publish_access_policy_token = grafana.cloud.AccessPolicyToken(\"sm_metrics_publish\",\n    region=cloud_region,\n    access_policy_id=sm_metrics_publish.policy_id,\n    name=\"metric-publisher-for-sm\")\nsm_stack_installation = grafana.syntheticmonitoring.Installation(\"sm_stack\",\n    stack_id=sm_stack.id,\n    metrics_publisher_key=sm_metrics_publish_access_policy_token.token)\nmain = grafana.syntheticMonitoring.get_probes()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var config = new Config();\n    // Cloud Access Policy token for Grafana Cloud with the following scopes: accesspolicies:read|write|delete, stacks:read|write|delete\n    var cloudAccessPolicyToken = config.RequireObject\u003cdynamic\u003e(\"cloudAccessPolicyToken\");\n    var stackSlug = config.RequireObject\u003cdynamic\u003e(\"stackSlug\");\n    var cloudRegion = config.Get(\"cloudRegion\") ?? \"prod-us-east-0\";\n    var smStack = new Grafana.Cloud.Stack(\"sm_stack\", new()\n    {\n        Name = stackSlug,\n        Slug = stackSlug,\n        RegionSlug = cloudRegion,\n    });\n\n    // Step 2: Install Synthetic Monitoring on the stack\n    var smMetricsPublish = new Grafana.Cloud.AccessPolicy(\"sm_metrics_publish\", new()\n    {\n        Region = cloudRegion,\n        Name = \"metric-publisher-for-sm\",\n        Scopes = new[]\n        {\n            \"metrics:write\",\n            \"stacks:read\",\n            \"logs:write\",\n            \"traces:write\",\n        },\n        Realms = new[]\n        {\n            new Grafana.Cloud.Inputs.AccessPolicyRealmArgs\n            {\n                Type = \"stack\",\n                Identifier = smStack.Id,\n            },\n        },\n    });\n\n    var smMetricsPublishAccessPolicyToken = new Grafana.Cloud.AccessPolicyToken(\"sm_metrics_publish\", new()\n    {\n        Region = cloudRegion,\n        AccessPolicyId = smMetricsPublish.PolicyId,\n        Name = \"metric-publisher-for-sm\",\n    });\n\n    var smStackInstallation = new Grafana.SyntheticMonitoring.Installation(\"sm_stack\", new()\n    {\n        StackId = smStack.Id,\n        MetricsPublisherKey = smMetricsPublishAccessPolicyToken.Token,\n    });\n\n    var main = Grafana.SyntheticMonitoring.GetProbes.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi/config\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/cloud\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/syntheticmonitoring\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcfg := config.New(ctx, \"\")\n\t\t// Cloud Access Policy token for Grafana Cloud with the following scopes: accesspolicies:read|write|delete, stacks:read|write|delete\n\t\tcloudAccessPolicyToken := cfg.RequireObject(\"cloudAccessPolicyToken\")\n\t\tstackSlug := cfg.RequireObject(\"stackSlug\")\n\t\tcloudRegion := \"prod-us-east-0\"\n\t\tif param := cfg.Get(\"cloudRegion\"); param != \"\" {\n\t\t\tcloudRegion = param\n\t\t}\n\t\tsmStack, err := cloud.NewStack(ctx, \"sm_stack\", \u0026cloud.StackArgs{\n\t\t\tName:       pulumi.Any(stackSlug),\n\t\t\tSlug:       pulumi.Any(stackSlug),\n\t\t\tRegionSlug: pulumi.String(cloudRegion),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Step 2: Install Synthetic Monitoring on the stack\n\t\tsmMetricsPublish, err := cloud.NewAccessPolicy(ctx, \"sm_metrics_publish\", \u0026cloud.AccessPolicyArgs{\n\t\t\tRegion: pulumi.String(cloudRegion),\n\t\t\tName:   pulumi.String(\"metric-publisher-for-sm\"),\n\t\t\tScopes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"metrics:write\"),\n\t\t\t\tpulumi.String(\"stacks:read\"),\n\t\t\t\tpulumi.String(\"logs:write\"),\n\t\t\t\tpulumi.String(\"traces:write\"),\n\t\t\t},\n\t\t\tRealms: cloud.AccessPolicyRealmArray{\n\t\t\t\t\u0026cloud.AccessPolicyRealmArgs{\n\t\t\t\t\tType:       pulumi.String(\"stack\"),\n\t\t\t\t\tIdentifier: smStack.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsmMetricsPublishAccessPolicyToken, err := cloud.NewAccessPolicyToken(ctx, \"sm_metrics_publish\", \u0026cloud.AccessPolicyTokenArgs{\n\t\t\tRegion:         pulumi.String(cloudRegion),\n\t\t\tAccessPolicyId: smMetricsPublish.PolicyId,\n\t\t\tName:           pulumi.String(\"metric-publisher-for-sm\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = syntheticmonitoring.NewInstallation(ctx, \"sm_stack\", \u0026syntheticmonitoring.InstallationArgs{\n\t\t\tStackId:             smStack.ID(),\n\t\t\tMetricsPublisherKey: smMetricsPublishAccessPolicyToken.Token,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = syntheticmonitoring.GetProbes(ctx, \u0026syntheticmonitoring.GetProbesArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.cloud.Stack;\nimport com.pulumi.grafana.cloud.StackArgs;\nimport com.pulumi.grafana.cloud.AccessPolicy;\nimport com.pulumi.grafana.cloud.AccessPolicyArgs;\nimport com.pulumi.grafana.cloud.inputs.AccessPolicyRealmArgs;\nimport com.pulumi.grafana.cloud.AccessPolicyToken;\nimport com.pulumi.grafana.cloud.AccessPolicyTokenArgs;\nimport com.pulumi.grafana.syntheticMonitoring.Installation;\nimport com.pulumi.grafana.syntheticMonitoring.InstallationArgs;\nimport com.pulumi.grafana.syntheticMonitoring.SyntheticMonitoringFunctions;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.GetProbesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var config = ctx.config();\n        final var cloudAccessPolicyToken = config.get(\"cloudAccessPolicyToken\");\n        final var stackSlug = config.get(\"stackSlug\");\n        final var cloudRegion = config.get(\"cloudRegion\").orElse(\"prod-us-east-0\");\n        var smStack = new Stack(\"smStack\", StackArgs.builder()\n            .name(stackSlug)\n            .slug(stackSlug)\n            .regionSlug(cloudRegion)\n            .build());\n\n        // Step 2: Install Synthetic Monitoring on the stack\n        var smMetricsPublish = new AccessPolicy(\"smMetricsPublish\", AccessPolicyArgs.builder()\n            .region(cloudRegion)\n            .name(\"metric-publisher-for-sm\")\n            .scopes(            \n                \"metrics:write\",\n                \"stacks:read\",\n                \"logs:write\",\n                \"traces:write\")\n            .realms(AccessPolicyRealmArgs.builder()\n                .type(\"stack\")\n                .identifier(smStack.id())\n                .build())\n            .build());\n\n        var smMetricsPublishAccessPolicyToken = new AccessPolicyToken(\"smMetricsPublishAccessPolicyToken\", AccessPolicyTokenArgs.builder()\n            .region(cloudRegion)\n            .accessPolicyId(smMetricsPublish.policyId())\n            .name(\"metric-publisher-for-sm\")\n            .build());\n\n        var smStackInstallation = new Installation(\"smStackInstallation\", InstallationArgs.builder()\n            .stackId(smStack.id())\n            .metricsPublisherKey(smMetricsPublishAccessPolicyToken.token())\n            .build());\n\n        final var main = SyntheticMonitoringFunctions.getProbes(GetProbesArgs.builder()\n            .build());\n\n    }\n}\n```\n```yaml\nconfiguration:\n  cloudAccessPolicyToken:\n    type: dynamic\n  stackSlug:\n    type: dynamic\n  cloudRegion:\n    type: string\n    default: prod-us-east-0\nresources:\n  smStack:\n    type: grafana:cloud:Stack\n    name: sm_stack\n    properties:\n      name: ${stackSlug}\n      slug: ${stackSlug}\n      regionSlug: ${cloudRegion}\n  # Step 2: Install Synthetic Monitoring on the stack\n  smMetricsPublish:\n    type: grafana:cloud:AccessPolicy\n    name: sm_metrics_publish\n    properties:\n      region: ${cloudRegion}\n      name: metric-publisher-for-sm\n      scopes:\n        - metrics:write\n        - stacks:read\n        - logs:write\n        - traces:write\n      realms:\n        - type: stack\n          identifier: ${smStack.id}\n  smMetricsPublishAccessPolicyToken:\n    type: grafana:cloud:AccessPolicyToken\n    name: sm_metrics_publish\n    properties:\n      region: ${cloudRegion}\n      accessPolicyId: ${smMetricsPublish.policyId}\n      name: metric-publisher-for-sm\n  smStackInstallation:\n    type: grafana:syntheticMonitoring:Installation\n    name: sm_stack\n    properties:\n      stackId: ${smStack.id}\n      metricsPublisherKey: ${smMetricsPublishAccessPolicyToken.token}\nvariables:\n  main:\n    fn::invoke:\n      function: grafana:syntheticMonitoring:getProbes\n      arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"metricsPublisherKey":{"type":"string","description":"The [Grafana Cloud access policy](https://grafana.com/docs/grafana-cloud/security-and-account-management/authentication-and-permissions/access-policies/) with the following scopes: `stacks:read`, `metrics:write`, `logs:write`, `traces:write`. This is used to publish metrics and logs to Grafana Cloud stack.\n","secret":true},"smAccessToken":{"type":"string","description":"Generated token to access the SM API.\n"},"stackId":{"type":"string","description":"The ID or slug of the stack to install SM on.\n"},"stackSmApiUrl":{"type":"string","description":"The URL of the SM API to install SM on. This depends on the stack region, find the list of API URLs here: https://grafana.com/docs/grafana-cloud/testing/synthetic-monitoring/set-up/set-up-private-probes/#probe-api-server-url. A static mapping exists in the provider but it may not contain all the regions. If it does contain the stack's region, this field is computed automatically and readable.\n"}},"required":["metricsPublisherKey","smAccessToken","stackId","stackSmApiUrl"],"inputProperties":{"metricsPublisherKey":{"type":"string","description":"The [Grafana Cloud access policy](https://grafana.com/docs/grafana-cloud/security-and-account-management/authentication-and-permissions/access-policies/) with the following scopes: `stacks:read`, `metrics:write`, `logs:write`, `traces:write`. This is used to publish metrics and logs to Grafana Cloud stack.\n","secret":true,"willReplaceOnChanges":true},"stackId":{"type":"string","description":"The ID or slug of the stack to install SM on.\n","willReplaceOnChanges":true},"stackSmApiUrl":{"type":"string","description":"The URL of the SM API to install SM on. This depends on the stack region, find the list of API URLs here: https://grafana.com/docs/grafana-cloud/testing/synthetic-monitoring/set-up/set-up-private-probes/#probe-api-server-url. A static mapping exists in the provider but it may not contain all the regions. If it does contain the stack's region, this field is computed automatically and readable.\n","willReplaceOnChanges":true}},"requiredInputs":["metricsPublisherKey","stackId"],"stateInputs":{"description":"Input properties used for looking up and filtering Installation resources.\n","properties":{"metricsPublisherKey":{"type":"string","description":"The [Grafana Cloud access policy](https://grafana.com/docs/grafana-cloud/security-and-account-management/authentication-and-permissions/access-policies/) with the following scopes: `stacks:read`, `metrics:write`, `logs:write`, `traces:write`. This is used to publish metrics and logs to Grafana Cloud stack.\n","secret":true,"willReplaceOnChanges":true},"smAccessToken":{"type":"string","description":"Generated token to access the SM API.\n"},"stackId":{"type":"string","description":"The ID or slug of the stack to install SM on.\n","willReplaceOnChanges":true},"stackSmApiUrl":{"type":"string","description":"The URL of the SM API to install SM on. This depends on the stack region, find the list of API URLs here: https://grafana.com/docs/grafana-cloud/testing/synthetic-monitoring/set-up/set-up-private-probes/#probe-api-server-url. A static mapping exists in the provider but it may not contain all the regions. If it does contain the stack's region, this field is computed automatically and readable.\n","willReplaceOnChanges":true}},"type":"object"}},"grafana:syntheticMonitoring/probe:Probe":{"description":"Besides the public probes run by Grafana Labs, you can also install your\nown private probes. These are only accessible to you and only write data to\nyour Grafana Cloud account. Private probes are instances of the open source\nGrafana Synthetic Monitoring Agent.\n\n* [Official documentation](https://grafana.com/docs/grafana-cloud/testing/synthetic-monitoring/set-up/set-up-private-probes/)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst main = new grafana.syntheticmonitoring.Probe(\"main\", {\n    name: \"Mount Everest\",\n    latitude: 27.98606,\n    longitude: 86.92262,\n    region: \"APAC\",\n    labels: {\n        type: \"mountain\",\n    },\n});\n```\n```python\nimport pulumi\nimport pulumiverse_grafana as grafana\n\nmain = grafana.syntheticmonitoring.Probe(\"main\",\n    name=\"Mount Everest\",\n    latitude=27.98606,\n    longitude=86.92262,\n    region=\"APAC\",\n    labels={\n        \"type\": \"mountain\",\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var main = new Grafana.SyntheticMonitoring.Probe(\"main\", new()\n    {\n        Name = \"Mount Everest\",\n        Latitude = 27.98606,\n        Longitude = 86.92262,\n        Region = \"APAC\",\n        Labels = \n        {\n            { \"type\", \"mountain\" },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/syntheticmonitoring\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := syntheticmonitoring.NewProbe(ctx, \"main\", \u0026syntheticmonitoring.ProbeArgs{\n\t\t\tName:      pulumi.String(\"Mount Everest\"),\n\t\t\tLatitude:  pulumi.Float64(27.98606),\n\t\t\tLongitude: pulumi.Float64(86.92262),\n\t\t\tRegion:    pulumi.String(\"APAC\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"type\": pulumi.String(\"mountain\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.syntheticMonitoring.Probe;\nimport com.pulumi.grafana.syntheticMonitoring.ProbeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var main = new Probe(\"main\", ProbeArgs.builder()\n            .name(\"Mount Everest\")\n            .latitude(27.98606)\n            .longitude(86.92262)\n            .region(\"APAC\")\n            .labels(Map.of(\"type\", \"mountain\"))\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  main:\n    type: grafana:syntheticMonitoring:Probe\n    properties:\n      name: Mount Everest\n      latitude: 27.98606\n      longitude: 86.92262\n      region: APAC\n      labels:\n        type: mountain\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import grafana:syntheticMonitoring/probe:Probe name \"{{ id }}\"\n```\n\n```sh\n$ pulumi import grafana:syntheticMonitoring/probe:Probe name \"{{ id }}:{{ authToken }}\"\n```\n\n","properties":{"authToken":{"type":"string","description":"The probe authentication token. Your probe must use this to authenticate with Grafana Cloud.\n","secret":true},"disableBrowserChecks":{"type":"boolean","description":"Disables browser checks for this probe. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"disableScriptedChecks":{"type":"boolean","description":"Disables scripted checks for this probe. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"labels":{"type":"object","additionalProperties":{"type":"string"},"description":"Custom labels to be included with collected metrics and logs.\n"},"latitude":{"type":"number","description":"Latitude coordinates.\n"},"longitude":{"type":"number","description":"Longitude coordinates.\n"},"name":{"type":"string","description":"Name of the probe.\n"},"public":{"type":"boolean","description":"Public probes are run by Grafana Labs and can be used by all users. Only Grafana Labs managed public probes will be set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"region":{"type":"string","description":"Region of the probe.\n"},"tenantId":{"type":"integer","description":"The tenant ID of the probe.\n"}},"required":["authToken","latitude","longitude","name","region","tenantId"],"inputProperties":{"disableBrowserChecks":{"type":"boolean","description":"Disables browser checks for this probe. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"disableScriptedChecks":{"type":"boolean","description":"Disables scripted checks for this probe. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"labels":{"type":"object","additionalProperties":{"type":"string"},"description":"Custom labels to be included with collected metrics and logs.\n"},"latitude":{"type":"number","description":"Latitude coordinates.\n"},"longitude":{"type":"number","description":"Longitude coordinates.\n"},"name":{"type":"string","description":"Name of the probe.\n"},"public":{"type":"boolean","description":"Public probes are run by Grafana Labs and can be used by all users. Only Grafana Labs managed public probes will be set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"region":{"type":"string","description":"Region of the probe.\n"}},"requiredInputs":["latitude","longitude","region"],"stateInputs":{"description":"Input properties used for looking up and filtering Probe resources.\n","properties":{"authToken":{"type":"string","description":"The probe authentication token. Your probe must use this to authenticate with Grafana Cloud.\n","secret":true},"disableBrowserChecks":{"type":"boolean","description":"Disables browser checks for this probe. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"disableScriptedChecks":{"type":"boolean","description":"Disables scripted checks for this probe. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"labels":{"type":"object","additionalProperties":{"type":"string"},"description":"Custom labels to be included with collected metrics and logs.\n"},"latitude":{"type":"number","description":"Latitude coordinates.\n"},"longitude":{"type":"number","description":"Longitude coordinates.\n"},"name":{"type":"string","description":"Name of the probe.\n"},"public":{"type":"boolean","description":"Public probes are run by Grafana Labs and can be used by all users. Only Grafana Labs managed public probes will be set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"region":{"type":"string","description":"Region of the probe.\n"},"tenantId":{"type":"integer","description":"The tenant ID of the probe.\n"}},"type":"object"}}},"functions":{"grafana:cloud/getAccessPolicies:getAccessPolicies":{"description":"Fetches access policies from Grafana Cloud.\n\n* [Official documentation](https://grafana.com/docs/grafana-cloud/security-and-account-management/authentication-and-permissions/access-policies/)\n* [API documentation](https://grafana.com/docs/grafana-cloud/developer-resources/api-reference/cloud-api/#list-access-policies)\n\nRequired access policy scopes:\n\n* accesspolicies:read\n","inputs":{"description":"A collection of arguments for invoking getAccessPolicies.\n","properties":{"nameFilter":{"type":"string"},"regionFilter":{"type":"string","description":"If set, only access policies in the specified region will be returned. Otherwise, fetches from all available regions (more resource intensive).\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getAccessPolicies.\n","properties":{"accessPolicies":{"items":{"$ref":"#/types/grafana:cloud/getAccessPoliciesAccessPolicy:getAccessPoliciesAccessPolicy"},"type":"array"},"id":{"description":"The ID of this datasource. This is an internal identifier used by the provider to track this datasource.\n","type":"string"},"nameFilter":{"type":"string"},"regionFilter":{"description":"If set, only access policies in the specified region will be returned. Otherwise, fetches from all available regions (more resource intensive).\n","type":"string"}},"required":["accessPolicies","id"],"type":"object"}},"grafana:cloud/getIps:getIps":{"description":"Data source for retrieving sets of cloud IPs.\n\n* [Official documentation](https://grafana.com/docs/grafana-cloud/reference/allow-list/)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst test = grafana.cloud.getIps({});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\n\ntest = grafana.cloud.get_ips()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var test = Grafana.Cloud.GetIps.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/cloud\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloud.GetIps(ctx, map[string]interface{}{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.cloud.CloudFunctions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var test = CloudFunctions.getIps(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference);\n\n    }\n}\n```\n```yaml\nvariables:\n  test:\n    fn::invoke:\n      function: grafana:cloud:getIps\n      arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","outputs":{"description":"A collection of values returned by getIps.\n","properties":{"hostedAlerts":{"description":"Set of IP addresses that are used for hosted alerts.\n","items":{"type":"string"},"type":"array"},"hostedGrafanas":{"description":"Set of IP addresses that are used for hosted Grafana.\n","items":{"type":"string"},"type":"array"},"hostedLogs":{"description":"Set of IP addresses that are used for hosted logs.\n","items":{"type":"string"},"type":"array"},"hostedMetrics":{"description":"Set of IP addresses that are used for hosted metrics.\n","items":{"type":"string"},"type":"array"},"hostedOtlps":{"description":"Set of IP addresses that are used for the OTLP Gateway.\n","items":{"type":"string"},"type":"array"},"hostedProfiles":{"description":"Set of IP addresses that are used for hosted profiles.\n","items":{"type":"string"},"type":"array"},"hostedTraces":{"description":"Set of IP addresses that are used for hosted traces.\n","items":{"type":"string"},"type":"array"},"id":{"description":"The ID of this datasource. This is an internal identifier used by the provider to track this datasource.\n","type":"string"}},"required":["hostedAlerts","hostedGrafanas","hostedLogs","hostedMetrics","hostedOtlps","hostedProfiles","hostedTraces","id"],"type":"object"}},"grafana:cloud/getOrganization:getOrganization":{"description":"Fetches a Grafana Cloud organization.\n\n* [Official documentation](https://grafana.com/docs/grafana-cloud/)\n* [API documentation](https://grafana.com/docs/grafana-cloud/developer-resources/api-reference/cloud-api/#organizations)\n\nRequired access policy scopes:\n\n* orgs:read\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst test = grafana.cloud.getOrganization({\n    slug: \"my-org\",\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\n\ntest = grafana.cloud.get_organization(slug=\"my-org\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var test = Grafana.Cloud.GetOrganization.Invoke(new()\n    {\n        Slug = \"my-org\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/cloud\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloud.GetOrganization(ctx, \u0026cloud.GetOrganizationArgs{\n\t\t\tSlug: pulumi.StringRef(\"my-org\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.cloud.CloudFunctions;\nimport com.pulumi.grafana.cloud.inputs.GetOrganizationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var test = CloudFunctions.getOrganization(GetOrganizationArgs.builder()\n            .slug(\"my-org\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  test:\n    fn::invoke:\n      function: grafana:cloud:getOrganization\n      arguments:\n        slug: my-org\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getOrganization.\n","properties":{"id":{"type":"string","description":"The organization ID.\n"},"slug":{"type":"string","description":"The organization slug.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getOrganization.\n","properties":{"createdAt":{"description":"The date and time the organization was created.\n","type":"string"},"id":{"description":"The organization ID.\n","type":"string"},"name":{"description":"The organization name.\n","type":"string"},"slug":{"description":"The organization slug.\n","type":"string"},"updatedAt":{"description":"The date and time the organization was last updated.\n","type":"string"},"url":{"description":"The organization URL.\n","type":"string"}},"required":["createdAt","id","name","slug","updatedAt","url"],"type":"object"}},"grafana:cloud/getPrivateDataSourceConnectNetworks:getPrivateDataSourceConnectNetworks":{"description":"Fetches Private Data source Connect networks from Grafana Cloud.\n\n* [Official documentation](https://grafana.com/docs/grafana-cloud/security-and-account-management/authentication-and-permissions/access-policies/)\n* [API documentation](https://grafana.com/docs/grafana-cloud/developer-resources/api-reference/cloud-api/#list-access-policies)\n\nRequired access policy scopes:\n\n* accesspolicies:read\n","inputs":{"description":"A collection of arguments for invoking getPrivateDataSourceConnectNetworks.\n","properties":{"nameFilter":{"type":"string"},"regionFilter":{"type":"string"}},"type":"object"},"outputs":{"description":"A collection of values returned by getPrivateDataSourceConnectNetworks.\n","properties":{"id":{"description":"The ID of this datasource. This is an internal identifier used by the provider to track this datasource.\n","type":"string"},"nameFilter":{"type":"string"},"privateDataSourceConnectNetworks":{"items":{"$ref":"#/types/grafana:cloud/getPrivateDataSourceConnectNetworksPrivateDataSourceConnectNetwork:getPrivateDataSourceConnectNetworksPrivateDataSourceConnectNetwork"},"type":"array"},"regionFilter":{"type":"string"}},"required":["id","privateDataSourceConnectNetworks"],"type":"object"}},"grafana:cloud/getStack:getStack":{"description":"Data source for Grafana Stack\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst testStack = new grafana.cloud.Stack(\"test\", {\n    name: \"gcloudstacktest\",\n    slug: \"gcloudstacktest\",\n    regionSlug: \"eu\",\n    description: \"Test Grafana Cloud Stack\",\n});\nconst test = grafana.cloud.getStackOutput({\n    slug: testStack.slug,\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\ntest_stack = grafana.cloud.Stack(\"test\",\n    name=\"gcloudstacktest\",\n    slug=\"gcloudstacktest\",\n    region_slug=\"eu\",\n    description=\"Test Grafana Cloud Stack\")\ntest = grafana.cloud.get_stack_output(slug=test_stack.slug)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var testStack = new Grafana.Cloud.Stack(\"test\", new()\n    {\n        Name = \"gcloudstacktest\",\n        Slug = \"gcloudstacktest\",\n        RegionSlug = \"eu\",\n        Description = \"Test Grafana Cloud Stack\",\n    });\n\n    var test = Grafana.Cloud.GetStack.Invoke(new()\n    {\n        Slug = testStack.Slug,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/cloud\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttestStack, err := cloud.NewStack(ctx, \"test\", \u0026cloud.StackArgs{\n\t\t\tName:        pulumi.String(\"gcloudstacktest\"),\n\t\t\tSlug:        pulumi.String(\"gcloudstacktest\"),\n\t\t\tRegionSlug:  pulumi.String(\"eu\"),\n\t\t\tDescription: pulumi.String(\"Test Grafana Cloud Stack\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_ = cloud.LookupStackOutput(ctx, cloud.GetStackOutputArgs{\n\t\t\tSlug: testStack.Slug,\n\t\t}, nil)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.cloud.Stack;\nimport com.pulumi.grafana.cloud.StackArgs;\nimport com.pulumi.grafana.cloud.CloudFunctions;\nimport com.pulumi.grafana.cloud.inputs.GetStackArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var testStack = new Stack(\"testStack\", StackArgs.builder()\n            .name(\"gcloudstacktest\")\n            .slug(\"gcloudstacktest\")\n            .regionSlug(\"eu\")\n            .description(\"Test Grafana Cloud Stack\")\n            .build());\n\n        final var test = CloudFunctions.getStack(GetStackArgs.builder()\n            .slug(testStack.slug())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  testStack:\n    type: grafana:cloud:Stack\n    name: test\n    properties:\n      name: gcloudstacktest\n      slug: gcloudstacktest\n      regionSlug: eu\n      description: Test Grafana Cloud Stack\nvariables:\n  test:\n    fn::invoke:\n      function: grafana:cloud:getStack\n      arguments:\n        slug: ${testStack.slug}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getStack.\n","properties":{"slug":{"type":"string","description":"Subdomain that the Grafana instance will be available at (i.e. setting slug to “\\n\\n” will make the instance\navailable at “https://\\n\\n.grafana.net\".\n"}},"type":"object","required":["slug"]},"outputs":{"description":"A collection of values returned by getStack.\n","properties":{"alertmanagerIpAllowListCname":{"description":"Comma-separated list of CNAMEs that can be whitelisted to access the Alertmanager instances (Optional)\n","type":"string"},"alertmanagerName":{"description":"Name of the Alertmanager instance configured for this stack.\n","type":"string"},"alertmanagerStatus":{"description":"Status of the Alertmanager instance configured for this stack.\n","type":"string"},"alertmanagerUrl":{"description":"Base URL of the Alertmanager instance configured for this stack.\n","type":"string"},"alertmanagerUserId":{"description":"User ID of the Alertmanager instance configured for this stack.\n","type":"integer"},"clusterName":{"description":"Name of the cluster where this stack resides.\n","type":"string"},"clusterSlug":{"description":"Slug of the cluster where this stack resides.\n","type":"string"},"deleteProtection":{"description":"Whether to enable delete protection for the stack, preventing accidental deletion.\n","type":"boolean"},"description":{"description":"Description of stack.\n","type":"string"},"fleetManagementName":{"description":"Name of the Fleet Management instance configured for this stack.\n","type":"string"},"fleetManagementPrivateConnectivityInfoPrivateDns":{"description":"Private DNS for Fleet Management when using AWS PrivateLink (only for AWS stacks)\n","type":"string"},"fleetManagementPrivateConnectivityInfoServiceName":{"description":"Service Name for Fleet Management when using AWS PrivateLink (only for AWS stacks)\n","type":"string"},"fleetManagementStatus":{"description":"Status of the Fleet Management instance configured for this stack.\n","type":"string"},"fleetManagementUrl":{"description":"Base URL of the Fleet Management instance configured for this stack.\n","type":"string"},"fleetManagementUserId":{"description":"User ID of the Fleet Management instance configured for this stack.\n","type":"integer"},"grafanasIpAllowListCname":{"description":"Comma-separated list of CNAMEs that can be whitelisted to access the grafana instance (Optional)\n","type":"string"},"graphiteIpAllowListCname":{"description":"Comma-separated list of CNAMEs that can be whitelisted to access the Graphite instance (Optional)\n","type":"string"},"graphiteName":{"type":"string"},"graphitePrivateConnectivityInfoPrivateDns":{"description":"Private DNS for Graphite when using AWS PrivateLink (only for AWS stacks)\n","type":"string"},"graphitePrivateConnectivityInfoServiceName":{"description":"Service Name for Graphite when using AWS PrivateLink (only for AWS stacks)\n","type":"string"},"graphiteStatus":{"type":"string"},"graphiteUrl":{"type":"string"},"graphiteUserId":{"type":"integer"},"id":{"description":"The stack id assigned to this stack by Grafana.\n","type":"string"},"influxUrl":{"description":"Base URL of the InfluxDB instance configured for this stack. The username is the same as the metrics' (\u003cspan pulumi-lang-nodejs=\"`prometheusUserId`\" pulumi-lang-dotnet=\"`PrometheusUserId`\" pulumi-lang-go=\"`prometheusUserId`\" pulumi-lang-python=\"`prometheus_user_id`\" pulumi-lang-yaml=\"`prometheusUserId`\" pulumi-lang-java=\"`prometheusUserId`\"\u003e`prometheus_user_id`\u003c/span\u003e attribute of this resource). See https://grafana.com/docs/grafana-cloud/send-data/metrics/metrics-influxdb/push-from-telegraf/ for docs on how to use this.\n","type":"string"},"labels":{"additionalProperties":{"type":"string"},"description":"A map of labels to assign to the stack. Label keys and values must match the following regexp: \"^[a-zA-Z0-9/\\-._]+$\" and stacks cannot have more than 10 labels.\n","type":"object"},"logsIpAllowListCname":{"description":"Comma-separated list of CNAMEs that can be whitelisted to access the Logs instance (Optional)\n","type":"string"},"logsName":{"type":"string"},"logsPrivateConnectivityInfoPrivateDns":{"description":"Private DNS for Logs when using AWS PrivateLink (only for AWS stacks)\n","type":"string"},"logsPrivateConnectivityInfoServiceName":{"description":"Service Name for Logs when using AWS PrivateLink (only for AWS stacks)\n","type":"string"},"logsStatus":{"type":"string"},"logsUrl":{"type":"string"},"logsUserId":{"type":"integer"},"name":{"description":"Name of stack. Conventionally matches the url of the instance (e.g. `\u003cstack_slug\u003e.grafana.net`).\n","type":"string"},"oncallApiUrl":{"description":"Base URL of the OnCall API instance configured for this stack.\n","type":"string"},"orgId":{"description":"Organization id to assign to this stack.\n","type":"integer"},"orgName":{"description":"Organization name to assign to this stack.\n","type":"string"},"orgSlug":{"description":"Organization slug to assign to this stack.\n","type":"string"},"otlpPrivateConnectivityInfoPrivateDns":{"description":"Private DNS for OTLP when using AWS PrivateLink (only for AWS stacks)\n","type":"string"},"otlpPrivateConnectivityInfoServiceName":{"description":"Service Name for OTLP when using AWS PrivateLink (only for AWS stacks)\n","type":"string"},"otlpUrl":{"description":"Base URL of the OTLP instance configured for this stack. The username is the stack's ID (\u003cspan pulumi-lang-nodejs=\"`id`\" pulumi-lang-dotnet=\"`Id`\" pulumi-lang-go=\"`id`\" pulumi-lang-python=\"`id`\" pulumi-lang-yaml=\"`id`\" pulumi-lang-java=\"`id`\"\u003e`id`\u003c/span\u003e attribute of this resource). See https://grafana.com/docs/grafana-cloud/send-data/otlp/send-data-otlp/ for docs on how to use this.\n","type":"string"},"pdcApiPrivateConnectivityInfoPrivateDns":{"description":"Private DNS for PDC's API when using AWS PrivateLink (only for AWS stacks)\n","type":"string"},"pdcApiPrivateConnectivityInfoServiceName":{"description":"Service Name for PDC's API when using AWS PrivateLink (only for AWS stacks)\n","type":"string"},"pdcGatewayPrivateConnectivityInfoPrivateDns":{"description":"Private DNS for PDC's Gateway when using AWS PrivateLink (only for AWS stacks)\n","type":"string"},"pdcGatewayPrivateConnectivityInfoServiceName":{"description":"Service Name for PDC's Gateway when using AWS PrivateLink (only for AWS stacks)\n","type":"string"},"profilesIpAllowListCname":{"description":"Comma-separated list of CNAMEs that can be whitelisted to access the Profiles instance (Optional)\n","type":"string"},"profilesName":{"type":"string"},"profilesPrivateConnectivityInfoPrivateDns":{"description":"Private DNS for Profiles when using AWS PrivateLink (only for AWS stacks)\n","type":"string"},"profilesPrivateConnectivityInfoServiceName":{"description":"Service Name for Profiles when using AWS PrivateLink (only for AWS stacks)\n","type":"string"},"profilesStatus":{"type":"string"},"profilesUrl":{"type":"string"},"profilesUserId":{"type":"integer"},"prometheusIpAllowListCname":{"description":"Comma-separated list of CNAMEs that can be whitelisted to access the Prometheus instance (Optional)\n","type":"string"},"prometheusName":{"description":"Prometheus name for this instance.\n","type":"string"},"prometheusPrivateConnectivityInfoPrivateDns":{"description":"Private DNS for Prometheus when using AWS PrivateLink (only for AWS stacks)\n","type":"string"},"prometheusPrivateConnectivityInfoServiceName":{"description":"Service Name for Prometheus when using AWS PrivateLink (only for AWS stacks)\n","type":"string"},"prometheusRemoteEndpoint":{"description":"Use this URL to query hosted metrics data e.g. Prometheus data source in Grafana\n","type":"string"},"prometheusRemoteWriteEndpoint":{"description":"Use this URL to send prometheus metrics to Grafana cloud\n","type":"string"},"prometheusStatus":{"description":"Prometheus status for this instance.\n","type":"string"},"prometheusUrl":{"description":"Prometheus url for this instance.\n","type":"string"},"prometheusUserId":{"description":"Prometheus user ID. Used for e.g. remote_write.\n","type":"integer"},"regionSlug":{"description":"The region this stack is deployed to.\n","type":"string"},"slug":{"description":"Subdomain that the Grafana instance will be available at (i.e. setting slug to “\\n\\n” will make the instance\navailable at “https://\\n\\n.grafana.net\".\n","type":"string"},"status":{"description":"Status of the stack.\n","type":"string"},"tracesIpAllowListCname":{"description":"Comma-separated list of CNAMEs that can be whitelisted to access the Traces instance (Optional)\n","type":"string"},"tracesName":{"type":"string"},"tracesPrivateConnectivityInfoPrivateDns":{"description":"Private DNS for Traces when using AWS PrivateLink (only for AWS stacks)\n","type":"string"},"tracesPrivateConnectivityInfoServiceName":{"description":"Service Name for Traces when using AWS PrivateLink (only for AWS stacks)\n","type":"string"},"tracesStatus":{"type":"string"},"tracesUrl":{"description":"Base URL of the Traces instance configured for this stack. To use this in the Tempo data source in Grafana, append `/tempo` to the URL.\n","type":"string"},"tracesUserId":{"type":"integer"},"url":{"description":"Custom URL for the Grafana instance. Must have a CNAME setup to point to `.grafana.net` before creating the stack\n","type":"string"}},"required":["alertmanagerIpAllowListCname","alertmanagerName","alertmanagerStatus","alertmanagerUrl","alertmanagerUserId","clusterName","clusterSlug","deleteProtection","description","fleetManagementName","fleetManagementPrivateConnectivityInfoPrivateDns","fleetManagementPrivateConnectivityInfoServiceName","fleetManagementStatus","fleetManagementUrl","fleetManagementUserId","grafanasIpAllowListCname","graphiteIpAllowListCname","graphiteName","graphitePrivateConnectivityInfoPrivateDns","graphitePrivateConnectivityInfoServiceName","graphiteStatus","graphiteUrl","graphiteUserId","id","influxUrl","labels","logsIpAllowListCname","logsName","logsPrivateConnectivityInfoPrivateDns","logsPrivateConnectivityInfoServiceName","logsStatus","logsUrl","logsUserId","name","oncallApiUrl","orgId","orgName","orgSlug","otlpPrivateConnectivityInfoPrivateDns","otlpPrivateConnectivityInfoServiceName","otlpUrl","pdcApiPrivateConnectivityInfoPrivateDns","pdcApiPrivateConnectivityInfoServiceName","pdcGatewayPrivateConnectivityInfoPrivateDns","pdcGatewayPrivateConnectivityInfoServiceName","profilesIpAllowListCname","profilesName","profilesPrivateConnectivityInfoPrivateDns","profilesPrivateConnectivityInfoServiceName","profilesStatus","profilesUrl","profilesUserId","prometheusIpAllowListCname","prometheusName","prometheusPrivateConnectivityInfoPrivateDns","prometheusPrivateConnectivityInfoServiceName","prometheusRemoteEndpoint","prometheusRemoteWriteEndpoint","prometheusStatus","prometheusUrl","prometheusUserId","regionSlug","slug","status","tracesIpAllowListCname","tracesName","tracesPrivateConnectivityInfoPrivateDns","tracesPrivateConnectivityInfoServiceName","tracesStatus","tracesUrl","tracesUserId","url"],"type":"object"}},"grafana:cloudProvider/getAwsAccount:getAwsAccount":{"description":"## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst test = grafana.cloud.getStack({\n    slug: \"gcloudstacktest\",\n});\nconst testAwsAccount = new grafana.cloudprovider.AwsAccount(\"test\", {\n    stackId: test.then(test =\u003e test.id),\n    roleArn: testAwsIamRole.arn,\n    regions: [\n        \"us-east-2\",\n        \"eu-west-3\",\n    ],\n});\nconst testGetAwsAccount = pulumi.all([test, testAwsAccount.resourceId]).apply(([test, resourceId]) =\u003e grafana.cloudProvider.getAwsAccountOutput({\n    stackId: test.id,\n    resourceId: resourceId,\n}));\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\ntest = grafana.cloud.get_stack(slug=\"gcloudstacktest\")\ntest_aws_account = grafana.cloudprovider.AwsAccount(\"test\",\n    stack_id=test.id,\n    role_arn=test_aws_iam_role[\"arn\"],\n    regions=[\n        \"us-east-2\",\n        \"eu-west-3\",\n    ])\ntest_get_aws_account = test_aws_account.resource_id.apply(lambda resource_id: grafana.cloudProvider.get_aws_account(stack_id=test.id,\n    resource_id=resource_id))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var test = Grafana.Cloud.GetStack.Invoke(new()\n    {\n        Slug = \"gcloudstacktest\",\n    });\n\n    var testAwsAccount = new Grafana.CloudProvider.AwsAccount(\"test\", new()\n    {\n        StackId = test.Apply(getStackResult =\u003e getStackResult.Id),\n        RoleArn = testAwsIamRole.Arn,\n        Regions = new[]\n        {\n            \"us-east-2\",\n            \"eu-west-3\",\n        },\n    });\n\n    var testGetAwsAccount = Grafana.CloudProvider.GetAwsAccount.Invoke(new()\n    {\n        StackId = test.Apply(getStackResult =\u003e getStackResult.Id),\n        ResourceId = testAwsAccount.ResourceId,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/cloud\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/cloudprovider\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := cloud.LookupStack(ctx, \u0026cloud.LookupStackArgs{\n\t\t\tSlug: \"gcloudstacktest\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestAwsAccount, err := cloudprovider.NewAwsAccount(ctx, \"test\", \u0026cloudprovider.AwsAccountArgs{\n\t\t\tStackId: pulumi.String(test.Id),\n\t\t\tRoleArn: pulumi.Any(testAwsIamRole.Arn),\n\t\t\tRegions: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"us-east-2\"),\n\t\t\t\tpulumi.String(\"eu-west-3\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_ = testAwsAccount.ResourceId.ApplyT(func(resourceId string) (cloudprovider.GetAwsAccountResult, error) {\n\t\t\treturn cloudprovider.GetAwsAccountResult(cloudprovider.GetAwsAccount(ctx, \u0026cloudprovider.GetAwsAccountArgs{\n\t\t\t\tStackId:    test.Id,\n\t\t\t\tResourceId: resourceId,\n\t\t\t}, nil)), nil\n\t\t}).(cloudprovider.GetAwsAccountResultOutput)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.cloud.CloudFunctions;\nimport com.pulumi.grafana.cloud.inputs.GetStackArgs;\nimport com.pulumi.grafana.cloudProvider.AwsAccount;\nimport com.pulumi.grafana.cloudProvider.AwsAccountArgs;\nimport com.pulumi.grafana.cloudProvider.CloudProviderFunctions;\nimport com.pulumi.grafana.cloudProvider.inputs.GetAwsAccountArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var test = CloudFunctions.getStack(GetStackArgs.builder()\n            .slug(\"gcloudstacktest\")\n            .build());\n\n        var testAwsAccount = new AwsAccount(\"testAwsAccount\", AwsAccountArgs.builder()\n            .stackId(test.id())\n            .roleArn(testAwsIamRole.arn())\n            .regions(            \n                \"us-east-2\",\n                \"eu-west-3\")\n            .build());\n\n        final var testGetAwsAccount = testAwsAccount.resourceId().applyValue(_resourceId -\u003e CloudProviderFunctions.getAwsAccount(GetAwsAccountArgs.builder()\n            .stackId(test.id())\n            .resourceId(_resourceId)\n            .build()));\n\n    }\n}\n```\n```yaml\nresources:\n  testAwsAccount:\n    type: grafana:cloudProvider:AwsAccount\n    name: test\n    properties:\n      stackId: ${test.id}\n      roleArn: ${testAwsIamRole.arn}\n      regions:\n        - us-east-2\n        - eu-west-3\nvariables:\n  test:\n    fn::invoke:\n      function: grafana:cloud:getStack\n      arguments:\n        slug: gcloudstacktest\n  testGetAwsAccount:\n    fn::invoke:\n      function: grafana:cloudProvider:getAwsAccount\n      arguments:\n        stackId: ${test.id}\n        resourceId: ${testAwsAccount.resourceId}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getAwsAccount.\n","properties":{"resourceId":{"type":"string","description":"The ID given by the Grafana Cloud Provider API to this AWS Account resource.\n"},"stackId":{"type":"string"}},"type":"object","required":["resourceId","stackId"]},"outputs":{"description":"A collection of values returned by getAwsAccount.\n","properties":{"id":{"type":"string"},"name":{"description":"An optional human-readable name for this AWS Account resource.\n","type":"string"},"regions":{"description":"A set of regions that this AWS Account resource applies to.\n","items":{"type":"string"},"type":"array"},"resourceId":{"description":"The ID given by the Grafana Cloud Provider API to this AWS Account resource.\n","type":"string"},"roleArn":{"description":"An IAM Role ARN string to represent with this AWS Account resource.\n","type":"string"},"stackId":{"type":"string"}},"required":["id","name","regions","resourceId","roleArn","stackId"],"type":"object"}},"grafana:cloudProvider/getAwsCloudwatchScrapeJob:getAwsCloudwatchScrapeJob":{"description":"## Example Usage\n\n","inputs":{"description":"A collection of arguments for invoking getAwsCloudwatchScrapeJob.\n","properties":{"customNamespaces":{"type":"array","items":{"$ref":"#/types/grafana:cloudProvider/getAwsCloudwatchScrapeJobCustomNamespace:getAwsCloudwatchScrapeJobCustomNamespace"},"description":"Zero or more configuration blocks to configure custom namespaces for the AWS CloudWatch Scrape Job to scrape. Each block must have a distinct \u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e attribute. When accessing this as an attribute reference, it is a list of objects.\n"},"name":{"type":"string"},"services":{"type":"array","items":{"$ref":"#/types/grafana:cloudProvider/getAwsCloudwatchScrapeJobService:getAwsCloudwatchScrapeJobService"},"description":"One or more configuration blocks to dictate what this AWS CloudWatch Scrape Job should scrape. Each block must have a distinct \u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e attribute. When accessing this as an attribute reference, it is a list of objects.\n"},"stackId":{"type":"string"}},"type":"object","required":["name","stackId"]},"outputs":{"description":"A collection of values returned by getAwsCloudwatchScrapeJob.\n","properties":{"awsAccountResourceId":{"description":"The ID assigned by the Grafana Cloud Provider API to an AWS Account resource that should be associated with this AWS CloudWatch Scrape Job. This can be provided by the \u003cspan pulumi-lang-nodejs=\"`resourceId`\" pulumi-lang-dotnet=\"`ResourceId`\" pulumi-lang-go=\"`resourceId`\" pulumi-lang-python=\"`resource_id`\" pulumi-lang-yaml=\"`resourceId`\" pulumi-lang-java=\"`resourceId`\"\u003e`resource_id`\u003c/span\u003e attribute of the \u003cspan pulumi-lang-nodejs=\"`grafana.cloudProvider.AwsAccount`\" pulumi-lang-dotnet=\"`grafana.cloudProvider.AwsAccount`\" pulumi-lang-go=\"`cloudProvider.AwsAccount`\" pulumi-lang-python=\"`cloudProvider.AwsAccount`\" pulumi-lang-yaml=\"`grafana.cloudProvider.AwsAccount`\" pulumi-lang-java=\"`grafana.cloudProvider.AwsAccount`\"\u003e`grafana.cloudProvider.AwsAccount`\u003c/span\u003e resource.\n","type":"string"},"customNamespaces":{"description":"Zero or more configuration blocks to configure custom namespaces for the AWS CloudWatch Scrape Job to scrape. Each block must have a distinct \u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e attribute. When accessing this as an attribute reference, it is a list of objects.\n","items":{"$ref":"#/types/grafana:cloudProvider/getAwsCloudwatchScrapeJobCustomNamespace:getAwsCloudwatchScrapeJobCustomNamespace"},"type":"array"},"disabledReason":{"description":"When the AWS CloudWatch Scrape Job is disabled, this will show the reason that it is in that state.\n","type":"string"},"enabled":{"description":"Whether the AWS CloudWatch Scrape Job is enabled or not.\n","type":"boolean"},"exportTags":{"description":"When enabled, AWS resource tags are exported as Prometheus labels to metrics formatted as `aws_\u003cservice_name\u003e_info`.\n","type":"boolean"},"id":{"type":"string"},"name":{"type":"string"},"regions":{"description":"The set of AWS region names that this AWS CloudWatch Scrape Job is configured to scrape.\n","items":{"type":"string"},"type":"array"},"regionsSubsetOverrideUsed":{"description":"When true, the \u003cspan pulumi-lang-nodejs=\"`regions`\" pulumi-lang-dotnet=\"`Regions`\" pulumi-lang-go=\"`regions`\" pulumi-lang-python=\"`regions`\" pulumi-lang-yaml=\"`regions`\" pulumi-lang-java=\"`regions`\"\u003e`regions`\u003c/span\u003e attribute will be the set of regions configured in the override. When false, the \u003cspan pulumi-lang-nodejs=\"`regions`\" pulumi-lang-dotnet=\"`Regions`\" pulumi-lang-go=\"`regions`\" pulumi-lang-python=\"`regions`\" pulumi-lang-yaml=\"`regions`\" pulumi-lang-java=\"`regions`\"\u003e`regions`\u003c/span\u003e attribute will be the set of regions belonging to the AWS Account resource that is associated with this AWS CloudWatch Scrape Job.\n","type":"boolean"},"roleArn":{"description":"The AWS ARN of the IAM role associated with the AWS Account resource that is being used by this AWS CloudWatch Scrape Job.\n","type":"string"},"services":{"description":"One or more configuration blocks to dictate what this AWS CloudWatch Scrape Job should scrape. Each block must have a distinct \u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e attribute. When accessing this as an attribute reference, it is a list of objects.\n","items":{"$ref":"#/types/grafana:cloudProvider/getAwsCloudwatchScrapeJobService:getAwsCloudwatchScrapeJobService"},"type":"array"},"stackId":{"type":"string"},"staticLabels":{"additionalProperties":{"type":"string"},"description":"A set of static labels to add to all metrics exported by this scrape job.\n","type":"object"}},"required":["awsAccountResourceId","disabledReason","enabled","exportTags","id","name","regions","regionsSubsetOverrideUsed","roleArn","stackId","staticLabels"],"type":"object"}},"grafana:cloudProvider/getAwsCloudwatchScrapeJobs:getAwsCloudwatchScrapeJobs":{"description":"## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst test = grafana.cloud.getStack({\n    slug: \"gcloudstacktest\",\n});\nconst testGetAwsCloudwatchScrapeJobs = test.then(test =\u003e grafana.cloudProvider.getAwsCloudwatchScrapeJobs({\n    stackId: test.id,\n}));\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\n\ntest = grafana.cloud.get_stack(slug=\"gcloudstacktest\")\ntest_get_aws_cloudwatch_scrape_jobs = grafana.cloudProvider.get_aws_cloudwatch_scrape_jobs(stack_id=test.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var test = Grafana.Cloud.GetStack.Invoke(new()\n    {\n        Slug = \"gcloudstacktest\",\n    });\n\n    var testGetAwsCloudwatchScrapeJobs = Grafana.CloudProvider.GetAwsCloudwatchScrapeJobs.Invoke(new()\n    {\n        StackId = test.Apply(getStackResult =\u003e getStackResult.Id),\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/cloud\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/cloudprovider\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := cloud.LookupStack(ctx, \u0026cloud.LookupStackArgs{\n\t\t\tSlug: \"gcloudstacktest\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudprovider.GetAwsCloudwatchScrapeJobs(ctx, \u0026cloudprovider.GetAwsCloudwatchScrapeJobsArgs{\n\t\t\tStackId: test.Id,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.cloud.CloudFunctions;\nimport com.pulumi.grafana.cloud.inputs.GetStackArgs;\nimport com.pulumi.grafana.cloudProvider.CloudProviderFunctions;\nimport com.pulumi.grafana.cloudProvider.inputs.GetAwsCloudwatchScrapeJobsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var test = CloudFunctions.getStack(GetStackArgs.builder()\n            .slug(\"gcloudstacktest\")\n            .build());\n\n        final var testGetAwsCloudwatchScrapeJobs = CloudProviderFunctions.getAwsCloudwatchScrapeJobs(GetAwsCloudwatchScrapeJobsArgs.builder()\n            .stackId(test.id())\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  test:\n    fn::invoke:\n      function: grafana:cloud:getStack\n      arguments:\n        slug: gcloudstacktest\n  testGetAwsCloudwatchScrapeJobs:\n    fn::invoke:\n      function: grafana:cloudProvider:getAwsCloudwatchScrapeJobs\n      arguments:\n        stackId: ${test.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getAwsCloudwatchScrapeJobs.\n","properties":{"scrapeJobs":{"type":"array","items":{"$ref":"#/types/grafana:cloudProvider/getAwsCloudwatchScrapeJobsScrapeJob:getAwsCloudwatchScrapeJobsScrapeJob"},"description":"A list of AWS CloudWatch Scrape Job objects associated with the given StackID.\n"},"stackId":{"type":"string"}},"type":"object","required":["stackId"]},"outputs":{"description":"A collection of values returned by getAwsCloudwatchScrapeJobs.\n","properties":{"id":{"type":"string"},"scrapeJobs":{"description":"A list of AWS CloudWatch Scrape Job objects associated with the given StackID.\n","items":{"$ref":"#/types/grafana:cloudProvider/getAwsCloudwatchScrapeJobsScrapeJob:getAwsCloudwatchScrapeJobsScrapeJob"},"type":"array"},"stackId":{"type":"string"}},"required":["id","stackId"],"type":"object"}},"grafana:cloudProvider/getAzureCredential:getAzureCredential":{"description":"## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst testAzureCredential = new grafana.cloudprovider.AzureCredential(\"test\", {\n    stackId: \"1\",\n    name: \"test-name\",\n    clientId: \"my-client-id\",\n    clientSecret: \"my-client-secret\",\n    tenantId: \"my-tenant-id\",\n    resourceTagsToAddToMetrics: [\n        \"tag1\",\n        \"tag2\",\n    ],\n    resourceDiscoveryTagFilters: [\n        {\n            key: \"key-1\",\n            value: \"value-1\",\n        },\n        {\n            key: \"key-2\",\n            value: \"value-2\",\n        },\n    ],\n    autoDiscoveryConfigurations: [{\n        subscriptionId: \"my-subscription_id\",\n        resourceTypeConfigurations: [\n            {\n                resourceTypeName: \"Microsoft.App/containerApps\",\n                metricConfiguration: [{\n                    name: \"TotalCoresQuotaUsed\",\n                }],\n            },\n            {\n                resourceTypeName: \"Microsoft.Storage/storageAccounts/tableServices\",\n                metricConfiguration: [{\n                    name: \"Availability\",\n                    dimensions: [\n                        \"GeoType\",\n                        \"ApiName\",\n                    ],\n                    aggregations: [\"Average\"],\n                }],\n            },\n        ],\n    }],\n});\nconst test = grafana.cloudProvider.getAzureCredentialOutput({\n    stackId: testAzureCredential.stackId,\n    resourceId: testAzureCredential.resourceId,\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\ntest_azure_credential = grafana.cloudprovider.AzureCredential(\"test\",\n    stack_id=\"1\",\n    name=\"test-name\",\n    client_id=\"my-client-id\",\n    client_secret=\"my-client-secret\",\n    tenant_id=\"my-tenant-id\",\n    resource_tags_to_add_to_metrics=[\n        \"tag1\",\n        \"tag2\",\n    ],\n    resource_discovery_tag_filters=[\n        {\n            \"key\": \"key-1\",\n            \"value\": \"value-1\",\n        },\n        {\n            \"key\": \"key-2\",\n            \"value\": \"value-2\",\n        },\n    ],\n    auto_discovery_configurations=[{\n        \"subscription_id\": \"my-subscription_id\",\n        \"resource_type_configurations\": [\n            {\n                \"resource_type_name\": \"Microsoft.App/containerApps\",\n                \"metric_configuration\": [{\n                    \"name\": \"TotalCoresQuotaUsed\",\n                }],\n            },\n            {\n                \"resource_type_name\": \"Microsoft.Storage/storageAccounts/tableServices\",\n                \"metric_configuration\": [{\n                    \"name\": \"Availability\",\n                    \"dimensions\": [\n                        \"GeoType\",\n                        \"ApiName\",\n                    ],\n                    \"aggregations\": [\"Average\"],\n                }],\n            },\n        ],\n    }])\ntest = grafana.cloudProvider.get_azure_credential_output(stack_id=test_azure_credential.stack_id,\n    resource_id=test_azure_credential.resource_id)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var testAzureCredential = new Grafana.CloudProvider.AzureCredential(\"test\", new()\n    {\n        StackId = \"1\",\n        Name = \"test-name\",\n        ClientId = \"my-client-id\",\n        ClientSecret = \"my-client-secret\",\n        TenantId = \"my-tenant-id\",\n        ResourceTagsToAddToMetrics = new[]\n        {\n            \"tag1\",\n            \"tag2\",\n        },\n        ResourceDiscoveryTagFilters = new[]\n        {\n            new Grafana.CloudProvider.Inputs.AzureCredentialResourceDiscoveryTagFilterArgs\n            {\n                Key = \"key-1\",\n                Value = \"value-1\",\n            },\n            new Grafana.CloudProvider.Inputs.AzureCredentialResourceDiscoveryTagFilterArgs\n            {\n                Key = \"key-2\",\n                Value = \"value-2\",\n            },\n        },\n        AutoDiscoveryConfigurations = new[]\n        {\n            new Grafana.CloudProvider.Inputs.AzureCredentialAutoDiscoveryConfigurationArgs\n            {\n                SubscriptionId = \"my-subscription_id\",\n                ResourceTypeConfigurations = new[]\n                {\n                    new Grafana.CloudProvider.Inputs.AzureCredentialAutoDiscoveryConfigurationResourceTypeConfigurationArgs\n                    {\n                        ResourceTypeName = \"Microsoft.App/containerApps\",\n                        MetricConfiguration = new[]\n                        {\n                            \n                            {\n                                { \"name\", \"TotalCoresQuotaUsed\" },\n                            },\n                        },\n                    },\n                    new Grafana.CloudProvider.Inputs.AzureCredentialAutoDiscoveryConfigurationResourceTypeConfigurationArgs\n                    {\n                        ResourceTypeName = \"Microsoft.Storage/storageAccounts/tableServices\",\n                        MetricConfiguration = new[]\n                        {\n                            \n                            {\n                                { \"name\", \"Availability\" },\n                                { \"dimensions\", new[]\n                                {\n                                    \"GeoType\",\n                                    \"ApiName\",\n                                } },\n                                { \"aggregations\", new[]\n                                {\n                                    \"Average\",\n                                } },\n                            },\n                        },\n                    },\n                },\n            },\n        },\n    });\n\n    var test = Grafana.CloudProvider.GetAzureCredential.Invoke(new()\n    {\n        StackId = testAzureCredential.StackId,\n        ResourceId = testAzureCredential.ResourceId,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/cloudprovider\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttestAzureCredential, err := cloudprovider.NewAzureCredential(ctx, \"test\", \u0026cloudprovider.AzureCredentialArgs{\n\t\t\tStackId:      pulumi.String(\"1\"),\n\t\t\tName:         pulumi.String(\"test-name\"),\n\t\t\tClientId:     pulumi.String(\"my-client-id\"),\n\t\t\tClientSecret: pulumi.String(\"my-client-secret\"),\n\t\t\tTenantId:     pulumi.String(\"my-tenant-id\"),\n\t\t\tResourceTagsToAddToMetrics: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"tag1\"),\n\t\t\t\tpulumi.String(\"tag2\"),\n\t\t\t},\n\t\t\tResourceDiscoveryTagFilters: cloudprovider.AzureCredentialResourceDiscoveryTagFilterArray{\n\t\t\t\t\u0026cloudprovider.AzureCredentialResourceDiscoveryTagFilterArgs{\n\t\t\t\t\tKey:   pulumi.String(\"key-1\"),\n\t\t\t\t\tValue: pulumi.String(\"value-1\"),\n\t\t\t\t},\n\t\t\t\t\u0026cloudprovider.AzureCredentialResourceDiscoveryTagFilterArgs{\n\t\t\t\t\tKey:   pulumi.String(\"key-2\"),\n\t\t\t\t\tValue: pulumi.String(\"value-2\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tAutoDiscoveryConfigurations: cloudprovider.AzureCredentialAutoDiscoveryConfigurationArray{\n\t\t\t\t\u0026cloudprovider.AzureCredentialAutoDiscoveryConfigurationArgs{\n\t\t\t\t\tSubscriptionId: pulumi.String(\"my-subscription_id\"),\n\t\t\t\t\tResourceTypeConfigurations: cloudprovider.AzureCredentialAutoDiscoveryConfigurationResourceTypeConfigurationArray{\n\t\t\t\t\t\t\u0026cloudprovider.AzureCredentialAutoDiscoveryConfigurationResourceTypeConfigurationArgs{\n\t\t\t\t\t\t\tResourceTypeName: pulumi.String(\"Microsoft.App/containerApps\"),\n\t\t\t\t\t\t\tMetricConfiguration: []map[string]interface{}{\n\t\t\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\t\t\"name\": \"TotalCoresQuotaUsed\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026cloudprovider.AzureCredentialAutoDiscoveryConfigurationResourceTypeConfigurationArgs{\n\t\t\t\t\t\t\tResourceTypeName: pulumi.String(\"Microsoft.Storage/storageAccounts/tableServices\"),\n\t\t\t\t\t\t\tMetricConfiguration: []map[string]interface{}{\n\t\t\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\t\t\"name\": \"Availability\",\n\t\t\t\t\t\t\t\t\t\"dimensions\": []string{\n\t\t\t\t\t\t\t\t\t\t\"GeoType\",\n\t\t\t\t\t\t\t\t\t\t\"ApiName\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"aggregations\": []string{\n\t\t\t\t\t\t\t\t\t\t\"Average\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_ = cloudprovider.GetAzureCredentialOutput(ctx, cloudprovider.GetAzureCredentialOutputArgs{\n\t\t\tStackId:    testAzureCredential.StackId,\n\t\t\tResourceId: testAzureCredential.ResourceId,\n\t\t}, nil)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.cloudProvider.AzureCredential;\nimport com.pulumi.grafana.cloudProvider.AzureCredentialArgs;\nimport com.pulumi.grafana.cloudProvider.inputs.AzureCredentialResourceDiscoveryTagFilterArgs;\nimport com.pulumi.grafana.cloudProvider.inputs.AzureCredentialAutoDiscoveryConfigurationArgs;\nimport com.pulumi.grafana.cloudProvider.CloudProviderFunctions;\nimport com.pulumi.grafana.cloudProvider.inputs.GetAzureCredentialArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var testAzureCredential = new AzureCredential(\"testAzureCredential\", AzureCredentialArgs.builder()\n            .stackId(\"1\")\n            .name(\"test-name\")\n            .clientId(\"my-client-id\")\n            .clientSecret(\"my-client-secret\")\n            .tenantId(\"my-tenant-id\")\n            .resourceTagsToAddToMetrics(            \n                \"tag1\",\n                \"tag2\")\n            .resourceDiscoveryTagFilters(            \n                AzureCredentialResourceDiscoveryTagFilterArgs.builder()\n                    .key(\"key-1\")\n                    .value(\"value-1\")\n                    .build(),\n                AzureCredentialResourceDiscoveryTagFilterArgs.builder()\n                    .key(\"key-2\")\n                    .value(\"value-2\")\n                    .build())\n            .autoDiscoveryConfigurations(AzureCredentialAutoDiscoveryConfigurationArgs.builder()\n                .subscriptionId(\"my-subscription_id\")\n                .resourceTypeConfigurations(                \n                    AzureCredentialAutoDiscoveryConfigurationResourceTypeConfigurationArgs.builder()\n                        .resourceTypeName(\"Microsoft.App/containerApps\")\n                        .metricConfiguration(List.of(Map.of(\"name\", \"TotalCoresQuotaUsed\")))\n                        .build(),\n                    AzureCredentialAutoDiscoveryConfigurationResourceTypeConfigurationArgs.builder()\n                        .resourceTypeName(\"Microsoft.Storage/storageAccounts/tableServices\")\n                        .metricConfiguration(List.of(Map.ofEntries(\n                            Map.entry(\"name\", \"Availability\"),\n                            Map.entry(\"dimensions\", List.of(                            \n                                \"GeoType\",\n                                \"ApiName\")),\n                            Map.entry(\"aggregations\", List.of(\"Average\"))\n                        )))\n                        .build())\n                .build())\n            .build());\n\n        final var test = CloudProviderFunctions.getAzureCredential(GetAzureCredentialArgs.builder()\n            .stackId(testAzureCredential.stackId())\n            .resourceId(testAzureCredential.resourceId())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  testAzureCredential:\n    type: grafana:cloudProvider:AzureCredential\n    name: test\n    properties:\n      stackId: '1'\n      name: test-name\n      clientId: my-client-id\n      clientSecret: my-client-secret\n      tenantId: my-tenant-id\n      resourceTagsToAddToMetrics:\n        - tag1\n        - tag2\n      resourceDiscoveryTagFilters:\n        - key: key-1\n          value: value-1\n        - key: key-2\n          value: value-2\n      autoDiscoveryConfigurations:\n        - subscriptionId: my-subscription_id\n          resourceTypeConfigurations:\n            - resourceTypeName: Microsoft.App/containerApps\n              metricConfiguration:\n                - name: TotalCoresQuotaUsed\n            - resourceTypeName: Microsoft.Storage/storageAccounts/tableServices\n              metricConfiguration:\n                - name: Availability\n                  dimensions:\n                    - GeoType\n                    - ApiName\n                  aggregations:\n                    - Average\nvariables:\n  test:\n    fn::invoke:\n      function: grafana:cloudProvider:getAzureCredential\n      arguments:\n        stackId: ${testAzureCredential.stackId}\n        resourceId: ${testAzureCredential.resourceId}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getAzureCredential.\n","properties":{"autoDiscoveryConfigurations":{"type":"array","items":{"$ref":"#/types/grafana:cloudProvider/getAzureCredentialAutoDiscoveryConfiguration:getAzureCredentialAutoDiscoveryConfiguration"},"description":"The list of auto discovery configurations.\n"},"resourceDiscoveryTagFilters":{"type":"array","items":{"$ref":"#/types/grafana:cloudProvider/getAzureCredentialResourceDiscoveryTagFilter:getAzureCredentialResourceDiscoveryTagFilter"},"description":"The list of tag filters to apply to resources.\n"},"resourceId":{"type":"string","description":"The ID given by the Grafana Cloud Provider API to this Azure Credential resource.\n"},"stackId":{"type":"string"}},"type":"object","required":["resourceId","stackId"]},"outputs":{"description":"A collection of values returned by getAzureCredential.\n","properties":{"autoDiscoveryConfigurations":{"description":"The list of auto discovery configurations.\n","items":{"$ref":"#/types/grafana:cloudProvider/getAzureCredentialAutoDiscoveryConfiguration:getAzureCredentialAutoDiscoveryConfiguration"},"type":"array"},"clientId":{"description":"The client ID of the Azure Credential.\n","type":"string"},"clientSecret":{"description":"The client secret of the Azure Credential.\n","secret":true,"type":"string"},"id":{"type":"string"},"name":{"description":"The name of the Azure Credential.\n","type":"string"},"resourceDiscoveryTagFilters":{"description":"The list of tag filters to apply to resources.\n","items":{"$ref":"#/types/grafana:cloudProvider/getAzureCredentialResourceDiscoveryTagFilter:getAzureCredentialResourceDiscoveryTagFilter"},"type":"array"},"resourceId":{"description":"The ID given by the Grafana Cloud Provider API to this Azure Credential resource.\n","type":"string"},"resourceTagsToAddToMetrics":{"description":"The list of resource tags to add to metrics.\n","items":{"type":"string"},"type":"array"},"stackId":{"type":"string"},"tenantId":{"description":"The tenant ID of the Azure Credential.\n","type":"string"}},"required":["clientId","clientSecret","id","name","resourceId","resourceTagsToAddToMetrics","stackId","tenantId"],"type":"object"}},"grafana:connections/getMetricsEndpointScrapeJob:getMetricsEndpointScrapeJob":{"description":"## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst dsTest = grafana.connections.getMetricsEndpointScrapeJob({\n    stackId: \"1\",\n    name: \"my-scrape-job\",\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\n\nds_test = grafana.connections.get_metrics_endpoint_scrape_job(stack_id=\"1\",\n    name=\"my-scrape-job\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var dsTest = Grafana.Connections.GetMetricsEndpointScrapeJob.Invoke(new()\n    {\n        StackId = \"1\",\n        Name = \"my-scrape-job\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/connections\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := connections.LookupMetricsEndpointScrapeJob(ctx, \u0026connections.LookupMetricsEndpointScrapeJobArgs{\n\t\t\tStackId: \"1\",\n\t\t\tName:    \"my-scrape-job\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.connections.ConnectionsFunctions;\nimport com.pulumi.grafana.connections.inputs.GetMetricsEndpointScrapeJobArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var dsTest = ConnectionsFunctions.getMetricsEndpointScrapeJob(GetMetricsEndpointScrapeJobArgs.builder()\n            .stackId(\"1\")\n            .name(\"my-scrape-job\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  dsTest:\n    fn::invoke:\n      function: grafana:connections:getMetricsEndpointScrapeJob\n      arguments:\n        stackId: '1'\n        name: my-scrape-job\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getMetricsEndpointScrapeJob.\n","properties":{"name":{"type":"string"},"stackId":{"type":"string"}},"type":"object","required":["name","stackId"]},"outputs":{"description":"A collection of values returned by getMetricsEndpointScrapeJob.\n","properties":{"authenticationBasicPassword":{"description":"Password for basic authentication.\n","secret":true,"type":"string"},"authenticationBasicUsername":{"description":"Username for basic authentication.\n","type":"string"},"authenticationBearerToken":{"description":"Token for authentication bearer.\n","secret":true,"type":"string"},"authenticationMethod":{"description":"Method to pass authentication credentials: basic or bearer.\n","type":"string"},"enabled":{"description":"Whether the metrics endpoint scrape job is enabled or not.\n","type":"boolean"},"id":{"type":"string"},"name":{"type":"string"},"scrapeIntervalSeconds":{"description":"Frequency for scraping the metrics endpoint: 30, 60, or 120 seconds.\n","type":"integer"},"stackId":{"type":"string"},"url":{"description":"The url to scrape metrics.\n","type":"string"}},"required":["authenticationBasicPassword","authenticationBasicUsername","authenticationBearerToken","authenticationMethod","enabled","id","name","scrapeIntervalSeconds","stackId","url"],"type":"object"}},"grafana:enterprise/getRole:getRole":{"description":"**Note:** This resource is available only with Grafana Enterprise 8.+.\n\n* [Official documentation](https://grafana.com/docs/grafana/latest/administration/roles-and-permissions/access-control/)\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/access_control/)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst test = new grafana.enterprise.Role(\"test\", {\n    name: \"test-role\",\n    description: \"test-role description\",\n    uid: \"test-ds-role-uid\",\n    version: 1,\n    global: true,\n    hidden: false,\n    permissions: [\n        {\n            action: \"org.users:add\",\n            scope: \"users:*\",\n        },\n        {\n            action: \"org.users:write\",\n            scope: \"users:*\",\n        },\n        {\n            action: \"org.users:read\",\n            scope: \"users:*\",\n        },\n    ],\n});\nconst fromName = grafana.enterprise.getRoleOutput({\n    name: test.name,\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\ntest = grafana.enterprise.Role(\"test\",\n    name=\"test-role\",\n    description=\"test-role description\",\n    uid=\"test-ds-role-uid\",\n    version=1,\n    global_=True,\n    hidden=False,\n    permissions=[\n        {\n            \"action\": \"org.users:add\",\n            \"scope\": \"users:*\",\n        },\n        {\n            \"action\": \"org.users:write\",\n            \"scope\": \"users:*\",\n        },\n        {\n            \"action\": \"org.users:read\",\n            \"scope\": \"users:*\",\n        },\n    ])\nfrom_name = grafana.enterprise.get_role_output(name=test.name)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var test = new Grafana.Enterprise.Role(\"test\", new()\n    {\n        Name = \"test-role\",\n        Description = \"test-role description\",\n        Uid = \"test-ds-role-uid\",\n        Version = 1,\n        Global = true,\n        Hidden = false,\n        Permissions = new[]\n        {\n            new Grafana.Enterprise.Inputs.RolePermissionArgs\n            {\n                Action = \"org.users:add\",\n                Scope = \"users:*\",\n            },\n            new Grafana.Enterprise.Inputs.RolePermissionArgs\n            {\n                Action = \"org.users:write\",\n                Scope = \"users:*\",\n            },\n            new Grafana.Enterprise.Inputs.RolePermissionArgs\n            {\n                Action = \"org.users:read\",\n                Scope = \"users:*\",\n            },\n        },\n    });\n\n    var fromName = Grafana.Enterprise.GetRole.Invoke(new()\n    {\n        Name = test.Name,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/enterprise\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := enterprise.NewRole(ctx, \"test\", \u0026enterprise.RoleArgs{\n\t\t\tName:        pulumi.String(\"test-role\"),\n\t\t\tDescription: pulumi.String(\"test-role description\"),\n\t\t\tUid:         pulumi.String(\"test-ds-role-uid\"),\n\t\t\tVersion:     pulumi.Int(1),\n\t\t\tGlobal:      pulumi.Bool(true),\n\t\t\tHidden:      pulumi.Bool(false),\n\t\t\tPermissions: enterprise.RolePermissionArray{\n\t\t\t\t\u0026enterprise.RolePermissionArgs{\n\t\t\t\t\tAction: pulumi.String(\"org.users:add\"),\n\t\t\t\t\tScope:  pulumi.String(\"users:*\"),\n\t\t\t\t},\n\t\t\t\t\u0026enterprise.RolePermissionArgs{\n\t\t\t\t\tAction: pulumi.String(\"org.users:write\"),\n\t\t\t\t\tScope:  pulumi.String(\"users:*\"),\n\t\t\t\t},\n\t\t\t\t\u0026enterprise.RolePermissionArgs{\n\t\t\t\t\tAction: pulumi.String(\"org.users:read\"),\n\t\t\t\t\tScope:  pulumi.String(\"users:*\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_ = enterprise.LookupRoleOutput(ctx, enterprise.GetRoleOutputArgs{\n\t\t\tName: test.Name,\n\t\t}, nil)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.enterprise.Role;\nimport com.pulumi.grafana.enterprise.RoleArgs;\nimport com.pulumi.grafana.enterprise.inputs.RolePermissionArgs;\nimport com.pulumi.grafana.enterprise.EnterpriseFunctions;\nimport com.pulumi.grafana.enterprise.inputs.GetRoleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var test = new Role(\"test\", RoleArgs.builder()\n            .name(\"test-role\")\n            .description(\"test-role description\")\n            .uid(\"test-ds-role-uid\")\n            .version(1)\n            .global(true)\n            .hidden(false)\n            .permissions(            \n                RolePermissionArgs.builder()\n                    .action(\"org.users:add\")\n                    .scope(\"users:*\")\n                    .build(),\n                RolePermissionArgs.builder()\n                    .action(\"org.users:write\")\n                    .scope(\"users:*\")\n                    .build(),\n                RolePermissionArgs.builder()\n                    .action(\"org.users:read\")\n                    .scope(\"users:*\")\n                    .build())\n            .build());\n\n        final var fromName = EnterpriseFunctions.getRole(GetRoleArgs.builder()\n            .name(test.name())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  test:\n    type: grafana:enterprise:Role\n    properties:\n      name: test-role\n      description: test-role description\n      uid: test-ds-role-uid\n      version: 1\n      global: true\n      hidden: false\n      permissions:\n        - action: org.users:add\n          scope: users:*\n        - action: org.users:write\n          scope: users:*\n        - action: org.users:read\n          scope: users:*\nvariables:\n  fromName:\n    fn::invoke:\n      function: grafana:enterprise:getRole\n      arguments:\n        name: ${test.name}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getRole.\n","properties":{"name":{"type":"string","description":"Name of the role\n"}},"type":"object","required":["name"]},"outputs":{"description":"A collection of values returned by getRole.\n","properties":{"description":{"description":"Description of the role.\n","type":"string"},"displayName":{"description":"Display name of the role. Available with Grafana 8.5+.\n","type":"string"},"global":{"description":"Boolean to state whether the role is available across all organizations or not.\n","type":"boolean"},"group":{"description":"Group of the role. Available with Grafana 8.5+.\n","type":"string"},"hidden":{"description":"Boolean to state whether the role should be visible in the Grafana UI or not. Available with Grafana 8.5+.\n","type":"boolean"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"name":{"description":"Name of the role\n","type":"string"},"orgId":{"description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","type":"string"},"permissions":{"description":"Specific set of actions granted by the role.\n","items":{"$ref":"#/types/grafana:enterprise/getRolePermission:getRolePermission"},"type":"array"},"uid":{"description":"Unique identifier of the role. Used for assignments.\n","type":"string"},"version":{"description":"Version of the role. A role is updated only on version increase. This field or \u003cspan pulumi-lang-nodejs=\"`autoIncrementVersion`\" pulumi-lang-dotnet=\"`AutoIncrementVersion`\" pulumi-lang-go=\"`autoIncrementVersion`\" pulumi-lang-python=\"`auto_increment_version`\" pulumi-lang-yaml=\"`autoIncrementVersion`\" pulumi-lang-java=\"`autoIncrementVersion`\"\u003e`auto_increment_version`\u003c/span\u003e should be set.\n","type":"integer"}},"required":["description","displayName","global","group","hidden","name","orgId","permissions","uid","version","id"],"type":"object"}},"grafana:fleetManagement/getCollector:getCollector":{"description":"Represents a Grafana Fleet Management collector.\n\n* [Official documentation](https://grafana.com/docs/grafana-cloud/send-data/fleet-management/)\n* [API documentation](https://grafana.com/docs/grafana-cloud/send-data/fleet-management/api-reference/collector-api/)\n* Step-by-step guide\n\nRequired access policy scopes:\n\n* fleet-management:read\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst test = grafana.fleetManagement.getCollector({\n    id: \"my_collector\",\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\n\ntest = grafana.fleetManagement.get_collector(id=\"my_collector\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var test = Grafana.FleetManagement.GetCollector.Invoke(new()\n    {\n        Id = \"my_collector\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/fleetmanagement\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fleetmanagement.GetCollector(ctx, \u0026fleetmanagement.GetCollectorArgs{\n\t\t\tId: \"my_collector\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.fleetManagement.FleetManagementFunctions;\nimport com.pulumi.grafana.fleetManagement.inputs.GetCollectorArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var test = FleetManagementFunctions.getCollector(GetCollectorArgs.builder()\n            .id(\"my_collector\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  test:\n    fn::invoke:\n      function: grafana:fleetManagement:getCollector\n      arguments:\n        id: my_collector\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getCollector.\n","properties":{"id":{"type":"string","description":"ID of the collector\n"}},"type":"object","required":["id"]},"outputs":{"description":"A collection of values returned by getCollector.\n","properties":{"collectorType":{"description":"Type of the collector (ALLOY or OTEL)\n","type":"string"},"enabled":{"description":"Whether remote configuration for the collector is enabled or not. If the collector is disabled, it will receive empty configurations from the Fleet Management service\n","type":"boolean"},"id":{"description":"ID of the collector\n","type":"string"},"localAttributes":{"additionalProperties":{"type":"string"},"description":"Local attributes for the collector\n","type":"object"},"remoteAttributes":{"additionalProperties":{"type":"string"},"description":"Remote attributes for the collector\n","type":"object"}},"required":["collectorType","enabled","id","localAttributes","remoteAttributes"],"type":"object"}},"grafana:fleetManagement/getCollectors:getCollectors":{"description":"Represents a list of Grafana Fleet Management collectors.\n\n* [Official documentation](https://grafana.com/docs/grafana-cloud/send-data/fleet-management/)\n* [API documentation](https://grafana.com/docs/grafana-cloud/send-data/fleet-management/api-reference/collector-api/)\n* Step-by-step guide\n\nRequired access policy scopes:\n\n* fleet-management:read\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst test = grafana.fleetManagement.getCollectors({});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\n\ntest = grafana.fleetManagement.get_collectors()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var test = Grafana.FleetManagement.GetCollectors.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/fleetmanagement\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := fleetmanagement.GetCollectors(ctx, map[string]interface{}{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.fleetManagement.FleetManagementFunctions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var test = FleetManagementFunctions.getCollectors(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference);\n\n    }\n}\n```\n```yaml\nvariables:\n  test:\n    fn::invoke:\n      function: grafana:fleetManagement:getCollectors\n      arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","outputs":{"description":"A collection of values returned by getCollectors.\n","properties":{"collectors":{"description":"List of collectors\n","items":{"$ref":"#/types/grafana:fleetManagement/getCollectorsCollector:getCollectorsCollector"},"type":"array"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"}},"required":["collectors","id"],"type":"object"}},"grafana:frontendObservability/getApp:getApp":{"description":"## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```yaml\nvariables:\n  teststack:\n    fn::invoke:\n      function: grafana:cloud:getStack\n      arguments:\n        name: gcloudstacktest\n  test-app:\n    fn::invoke:\n      function: grafana:frontendObservability:getApp\n      arguments:\n        stackId: ${teststack.id}\n        name: test-app\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getApp.\n","properties":{"name":{"type":"string"},"stackId":{"type":"integer"}},"type":"object","required":["name","stackId"]},"outputs":{"description":"A collection of values returned by getApp.\n","properties":{"allowedOrigins":{"description":"A list of allowed origins for CORS.\n","items":{"type":"string"},"type":"array"},"collectorEndpoint":{"description":"The collector URL Grafana Cloud Frontend Observability. Use this endpoint to send your Telemetry.\n","type":"string"},"extraLogAttributes":{"additionalProperties":{"type":"string"},"description":"The extra attributes to append in each signal.\n","type":"object"},"id":{"type":"integer"},"name":{"type":"string"},"settings":{"additionalProperties":{"type":"string"},"description":"The settings of the Frontend Observability App.\n","type":"object"},"stackId":{"type":"integer"}},"required":["allowedOrigins","collectorEndpoint","extraLogAttributes","id","name","settings","stackId"],"type":"object"}},"grafana:k6/getLoadTest:getLoadTest":{"description":"Retrieves a k6 load test.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst loadTestProject = new grafana.k6.Project(\"load_test_project\", {name: \"Terraform Load Test Project\"});\nconst testLoadTest = new grafana.k6.LoadTest(\"test_load_test\", {\n    projectId: loadTestProject.id,\n    name: \"Terraform Test Load Test\",\n    script: `export default function() {\n  console.log('Hello from k6!');\n}\n`,\n});\nconst fromId = grafana.k6.getLoadTestOutput({\n    id: testLoadTest.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\nload_test_project = grafana.k6.Project(\"load_test_project\", name=\"Terraform Load Test Project\")\ntest_load_test = grafana.k6.LoadTest(\"test_load_test\",\n    project_id=load_test_project.id,\n    name=\"Terraform Test Load Test\",\n    script=\"\"\"export default function() {\n  console.log('Hello from k6!');\n}\n\"\"\")\nfrom_id = grafana.k6.get_load_test_output(id=test_load_test.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var loadTestProject = new Grafana.K6.Project(\"load_test_project\", new()\n    {\n        Name = \"Terraform Load Test Project\",\n    });\n\n    var testLoadTest = new Grafana.K6.LoadTest(\"test_load_test\", new()\n    {\n        ProjectId = loadTestProject.Id,\n        Name = \"Terraform Test Load Test\",\n        Script = @\"export default function() {\n  console.log('Hello from k6!');\n}\n\",\n    });\n\n    var fromId = Grafana.K6.GetLoadTest.Invoke(new()\n    {\n        Id = testLoadTest.Id,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/k6\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tloadTestProject, err := k6.NewProject(ctx, \"load_test_project\", \u0026k6.ProjectArgs{\n\t\t\tName: pulumi.String(\"Terraform Load Test Project\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestLoadTest, err := k6.NewLoadTest(ctx, \"test_load_test\", \u0026k6.LoadTestArgs{\n\t\t\tProjectId: loadTestProject.ID(),\n\t\t\tName:      pulumi.String(\"Terraform Test Load Test\"),\n\t\t\tScript:    pulumi.String(\"export default function() {\\n  console.log('Hello from k6!');\\n}\\n\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_ = k6.LookupLoadTestOutput(ctx, k6.GetLoadTestOutputArgs{\n\t\t\tId: testLoadTest.ID(),\n\t\t}, nil)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.k6.Project;\nimport com.pulumi.grafana.k6.ProjectArgs;\nimport com.pulumi.grafana.k6.LoadTest;\nimport com.pulumi.grafana.k6.LoadTestArgs;\nimport com.pulumi.grafana.k6.K6Functions;\nimport com.pulumi.grafana.k6.inputs.GetLoadTestArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var loadTestProject = new Project(\"loadTestProject\", ProjectArgs.builder()\n            .name(\"Terraform Load Test Project\")\n            .build());\n\n        var testLoadTest = new LoadTest(\"testLoadTest\", LoadTestArgs.builder()\n            .projectId(loadTestProject.id())\n            .name(\"Terraform Test Load Test\")\n            .script(\"\"\"\nexport default function() {\n  console.log('Hello from k6!');\n}\n            \"\"\")\n            .build());\n\n        final var fromId = K6Functions.getLoadTest(GetLoadTestArgs.builder()\n            .id(testLoadTest.id())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  loadTestProject:\n    type: grafana:k6:Project\n    name: load_test_project\n    properties:\n      name: Terraform Load Test Project\n  testLoadTest:\n    type: grafana:k6:LoadTest\n    name: test_load_test\n    properties:\n      projectId: ${loadTestProject.id}\n      name: Terraform Test Load Test\n      script: |\n        export default function() {\n          console.log('Hello from k6!');\n        }\nvariables:\n  fromId:\n    fn::invoke:\n      function: grafana:k6:getLoadTest\n      arguments:\n        id: ${testLoadTest.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getLoadTest.\n","properties":{"id":{"type":"string","description":"Numeric identifier of the load test.\n"}},"type":"object","required":["id"]},"outputs":{"description":"A collection of values returned by getLoadTest.\n","properties":{"baselineTestRunId":{"description":"Identifier of a baseline test run used for results comparison.\n","type":"string"},"created":{"description":"The date when the load test was created.\n","type":"string"},"id":{"description":"Numeric identifier of the load test.\n","type":"string"},"name":{"description":"Human-friendly identifier of the load test.\n","type":"string"},"projectId":{"description":"The identifier of the project this load test belongs to.\n","type":"string"},"script":{"description":"The k6 test script content.\n","type":"string"},"updated":{"description":"The date when the load test was last updated.\n","type":"string"}},"required":["baselineTestRunId","created","id","name","projectId","script","updated"],"type":"object"}},"grafana:k6/getLoadTests:getLoadTests":{"description":"Retrieves all k6 load tests that belong to a project.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst loadTestProject = new grafana.k6.Project(\"load_test_project\", {name: \"Terraform Load Test Project\"});\nconst testLoadTest = new grafana.k6.LoadTest(\"test_load_test\", {\n    projectId: loadTestProject.id,\n    name: \"Terraform Test Load Test\",\n    script: `export default function() {\n  console.log('Hello from k6!');\n}\n`,\n}, {\n    dependsOn: [loadTestProject],\n});\nconst testLoadTest2 = new grafana.k6.LoadTest(\"test_load_test_2\", {\n    projectId: loadTestProject.id,\n    name: \"Terraform Test Load Test (2)\",\n    script: `export default function() {\n  console.log('Hello from k6!');\n}\n`,\n}, {\n    dependsOn: [testLoadTest],\n});\nconst fromProjectId = grafana.k6.getLoadTestsOutput({\n    projectId: loadTestProject.id,\n});\nconst filterByName = grafana.k6.getLoadTestsOutput({\n    name: \"Terraform Test Load Test (2)\",\n    projectId: loadTestProject.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\nload_test_project = grafana.k6.Project(\"load_test_project\", name=\"Terraform Load Test Project\")\ntest_load_test = grafana.k6.LoadTest(\"test_load_test\",\n    project_id=load_test_project.id,\n    name=\"Terraform Test Load Test\",\n    script=\"\"\"export default function() {\n  console.log('Hello from k6!');\n}\n\"\"\",\n    opts = pulumi.ResourceOptions(depends_on=[load_test_project]))\ntest_load_test2 = grafana.k6.LoadTest(\"test_load_test_2\",\n    project_id=load_test_project.id,\n    name=\"Terraform Test Load Test (2)\",\n    script=\"\"\"export default function() {\n  console.log('Hello from k6!');\n}\n\"\"\",\n    opts = pulumi.ResourceOptions(depends_on=[test_load_test]))\nfrom_project_id = grafana.k6.get_load_tests_output(project_id=load_test_project.id)\nfilter_by_name = grafana.k6.get_load_tests_output(name=\"Terraform Test Load Test (2)\",\n    project_id=load_test_project.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var loadTestProject = new Grafana.K6.Project(\"load_test_project\", new()\n    {\n        Name = \"Terraform Load Test Project\",\n    });\n\n    var testLoadTest = new Grafana.K6.LoadTest(\"test_load_test\", new()\n    {\n        ProjectId = loadTestProject.Id,\n        Name = \"Terraform Test Load Test\",\n        Script = @\"export default function() {\n  console.log('Hello from k6!');\n}\n\",\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            loadTestProject,\n        },\n    });\n\n    var testLoadTest2 = new Grafana.K6.LoadTest(\"test_load_test_2\", new()\n    {\n        ProjectId = loadTestProject.Id,\n        Name = \"Terraform Test Load Test (2)\",\n        Script = @\"export default function() {\n  console.log('Hello from k6!');\n}\n\",\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            testLoadTest,\n        },\n    });\n\n    var fromProjectId = Grafana.K6.GetLoadTests.Invoke(new()\n    {\n        ProjectId = loadTestProject.Id,\n    });\n\n    var filterByName = Grafana.K6.GetLoadTests.Invoke(new()\n    {\n        Name = \"Terraform Test Load Test (2)\",\n        ProjectId = loadTestProject.Id,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/k6\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tloadTestProject, err := k6.NewProject(ctx, \"load_test_project\", \u0026k6.ProjectArgs{\n\t\t\tName: pulumi.String(\"Terraform Load Test Project\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestLoadTest, err := k6.NewLoadTest(ctx, \"test_load_test\", \u0026k6.LoadTestArgs{\n\t\t\tProjectId: loadTestProject.ID(),\n\t\t\tName:      pulumi.String(\"Terraform Test Load Test\"),\n\t\t\tScript:    pulumi.String(\"export default function() {\\n  console.log('Hello from k6!');\\n}\\n\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tloadTestProject,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = k6.NewLoadTest(ctx, \"test_load_test_2\", \u0026k6.LoadTestArgs{\n\t\t\tProjectId: loadTestProject.ID(),\n\t\t\tName:      pulumi.String(\"Terraform Test Load Test (2)\"),\n\t\t\tScript:    pulumi.String(\"export default function() {\\n  console.log('Hello from k6!');\\n}\\n\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\ttestLoadTest,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_ = k6.GetLoadTestsOutput(ctx, k6.GetLoadTestsOutputArgs{\n\t\t\tProjectId: loadTestProject.ID(),\n\t\t}, nil)\n\t\t_ = k6.GetLoadTestsOutput(ctx, k6.GetLoadTestsOutputArgs{\n\t\t\tName:      pulumi.String(\"Terraform Test Load Test (2)\"),\n\t\t\tProjectId: loadTestProject.ID(),\n\t\t}, nil)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.k6.Project;\nimport com.pulumi.grafana.k6.ProjectArgs;\nimport com.pulumi.grafana.k6.LoadTest;\nimport com.pulumi.grafana.k6.LoadTestArgs;\nimport com.pulumi.grafana.k6.K6Functions;\nimport com.pulumi.grafana.k6.inputs.GetLoadTestsArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var loadTestProject = new Project(\"loadTestProject\", ProjectArgs.builder()\n            .name(\"Terraform Load Test Project\")\n            .build());\n\n        var testLoadTest = new LoadTest(\"testLoadTest\", LoadTestArgs.builder()\n            .projectId(loadTestProject.id())\n            .name(\"Terraform Test Load Test\")\n            .script(\"\"\"\nexport default function() {\n  console.log('Hello from k6!');\n}\n            \"\"\")\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(loadTestProject)\n                .build());\n\n        var testLoadTest2 = new LoadTest(\"testLoadTest2\", LoadTestArgs.builder()\n            .projectId(loadTestProject.id())\n            .name(\"Terraform Test Load Test (2)\")\n            .script(\"\"\"\nexport default function() {\n  console.log('Hello from k6!');\n}\n            \"\"\")\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(testLoadTest)\n                .build());\n\n        final var fromProjectId = K6Functions.getLoadTests(GetLoadTestsArgs.builder()\n            .projectId(loadTestProject.id())\n            .build());\n\n        final var filterByName = K6Functions.getLoadTests(GetLoadTestsArgs.builder()\n            .name(\"Terraform Test Load Test (2)\")\n            .projectId(loadTestProject.id())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  loadTestProject:\n    type: grafana:k6:Project\n    name: load_test_project\n    properties:\n      name: Terraform Load Test Project\n  testLoadTest:\n    type: grafana:k6:LoadTest\n    name: test_load_test\n    properties:\n      projectId: ${loadTestProject.id}\n      name: Terraform Test Load Test\n      script: |\n        export default function() {\n          console.log('Hello from k6!');\n        }\n    options:\n      dependsOn:\n        - ${loadTestProject}\n  testLoadTest2:\n    type: grafana:k6:LoadTest\n    name: test_load_test_2\n    properties:\n      projectId: ${loadTestProject.id}\n      name: Terraform Test Load Test (2)\n      script: |\n        export default function() {\n          console.log('Hello from k6!');\n        }\n    options:\n      dependsOn:\n        - ${testLoadTest}\nvariables:\n  fromProjectId:\n    fn::invoke:\n      function: grafana:k6:getLoadTests\n      arguments:\n        projectId: ${loadTestProject.id}\n  filterByName:\n    fn::invoke:\n      function: grafana:k6:getLoadTests\n      arguments:\n        name: Terraform Test Load Test (2)\n        projectId: ${loadTestProject.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getLoadTests.\n","properties":{"name":{"type":"string","description":"Human-friendly identifier of the load test.\n"},"projectId":{"type":"string","description":"The identifier of the project the load tests belong to.\n"}},"type":"object","required":["projectId"]},"outputs":{"description":"A collection of values returned by getLoadTests.\n","properties":{"id":{"description":"The identifier of the project the load tests belong to. This is set to the same as the project_id.\n","type":"string"},"loadTests":{"items":{"$ref":"#/types/grafana:k6/getLoadTestsLoadTest:getLoadTestsLoadTest"},"type":"array"},"name":{"description":"Human-friendly identifier of the load test.\n","type":"string"},"projectId":{"description":"The identifier of the project the load tests belong to.\n","type":"string"}},"required":["id","loadTests","projectId"],"type":"object"}},"grafana:k6/getProject:getProject":{"description":"Retrieves a k6 project.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst test = new grafana.k6.Project(\"test\", {name: \"Terraform Test Project\"});\nconst fromId = grafana.k6.getProjectOutput({\n    id: test.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\ntest = grafana.k6.Project(\"test\", name=\"Terraform Test Project\")\nfrom_id = grafana.k6.get_project_output(id=test.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var test = new Grafana.K6.Project(\"test\", new()\n    {\n        Name = \"Terraform Test Project\",\n    });\n\n    var fromId = Grafana.K6.GetProject.Invoke(new()\n    {\n        Id = test.Id,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/k6\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := k6.NewProject(ctx, \"test\", \u0026k6.ProjectArgs{\n\t\t\tName: pulumi.String(\"Terraform Test Project\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_ = k6.LookupProjectOutput(ctx, k6.GetProjectOutputArgs{\n\t\t\tId: test.ID(),\n\t\t}, nil)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.k6.Project;\nimport com.pulumi.grafana.k6.ProjectArgs;\nimport com.pulumi.grafana.k6.K6Functions;\nimport com.pulumi.grafana.k6.inputs.GetProjectArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var test = new Project(\"test\", ProjectArgs.builder()\n            .name(\"Terraform Test Project\")\n            .build());\n\n        final var fromId = K6Functions.getProject(GetProjectArgs.builder()\n            .id(test.id())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  test:\n    type: grafana:k6:Project\n    properties:\n      name: Terraform Test Project\nvariables:\n  fromId:\n    fn::invoke:\n      function: grafana:k6:getProject\n      arguments:\n        id: ${test.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getProject.\n","properties":{"id":{"type":"string","description":"Numeric identifier of the project.\n"}},"type":"object","required":["id"]},"outputs":{"description":"A collection of values returned by getProject.\n","properties":{"created":{"description":"The date when the project was created.\n","type":"string"},"grafanaFolderUid":{"description":"The Grafana folder uid.\n","type":"string"},"id":{"description":"Numeric identifier of the project.\n","type":"string"},"isDefault":{"description":"Whether this project is the default for running tests when no explicit project identifier is provided.\n","type":"boolean"},"name":{"description":"Human-friendly identifier of the project.\n","type":"string"},"updated":{"description":"The date when the project was last updated.\n","type":"string"}},"required":["created","grafanaFolderUid","id","isDefault","name","updated"],"type":"object"}},"grafana:k6/getProjectAllowedLoadZones:getProjectAllowedLoadZones":{"description":"Retrieves allowed private load zones for a k6 project.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst testProjectAllowedLoadZones = new grafana.k6.Project(\"test_project_allowed_load_zones\", {name: \"Terraform Project Test Allowed Load Zones\"});\nconst fromProjectId = grafana.k6.getProjectAllowedLoadZonesOutput({\n    projectId: testProjectAllowedLoadZones.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\ntest_project_allowed_load_zones = grafana.k6.Project(\"test_project_allowed_load_zones\", name=\"Terraform Project Test Allowed Load Zones\")\nfrom_project_id = grafana.k6.get_project_allowed_load_zones_output(project_id=test_project_allowed_load_zones.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var testProjectAllowedLoadZones = new Grafana.K6.Project(\"test_project_allowed_load_zones\", new()\n    {\n        Name = \"Terraform Project Test Allowed Load Zones\",\n    });\n\n    var fromProjectId = Grafana.K6.GetProjectAllowedLoadZones.Invoke(new()\n    {\n        ProjectId = testProjectAllowedLoadZones.Id,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/k6\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttestProjectAllowedLoadZones, err := k6.NewProject(ctx, \"test_project_allowed_load_zones\", \u0026k6.ProjectArgs{\n\t\t\tName: pulumi.String(\"Terraform Project Test Allowed Load Zones\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_ = k6.LookupProjectAllowedLoadZonesOutput(ctx, k6.GetProjectAllowedLoadZonesOutputArgs{\n\t\t\tProjectId: testProjectAllowedLoadZones.ID(),\n\t\t}, nil)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.k6.Project;\nimport com.pulumi.grafana.k6.ProjectArgs;\nimport com.pulumi.grafana.k6.K6Functions;\nimport com.pulumi.grafana.k6.inputs.GetProjectAllowedLoadZonesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var testProjectAllowedLoadZones = new Project(\"testProjectAllowedLoadZones\", ProjectArgs.builder()\n            .name(\"Terraform Project Test Allowed Load Zones\")\n            .build());\n\n        final var fromProjectId = K6Functions.getProjectAllowedLoadZones(GetProjectAllowedLoadZonesArgs.builder()\n            .projectId(testProjectAllowedLoadZones.id())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  testProjectAllowedLoadZones:\n    type: grafana:k6:Project\n    name: test_project_allowed_load_zones\n    properties:\n      name: Terraform Project Test Allowed Load Zones\nvariables:\n  fromProjectId:\n    fn::invoke:\n      function: grafana:k6:getProjectAllowedLoadZones\n      arguments:\n        projectId: ${testProjectAllowedLoadZones.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getProjectAllowedLoadZones.\n","properties":{"projectId":{"type":"string","description":"The identifier of the project to retrieve private allowed load zones for.\n"}},"type":"object","required":["projectId"]},"outputs":{"description":"A collection of values returned by getProjectAllowedLoadZones.\n","properties":{"allowedLoadZones":{"description":"List of allowed private k6 load zone IDs for this project.\n","items":{"type":"string"},"type":"array"},"id":{"description":"The identifier of the project. This is set to the same as the project_id.\n","type":"string"},"projectId":{"description":"The identifier of the project to retrieve private allowed load zones for.\n","type":"string"}},"required":["allowedLoadZones","id","projectId"],"type":"object"}},"grafana:k6/getProjectLimits:getProjectLimits":{"description":"Retrieves a k6 project limits.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst testProjectLimits = new grafana.k6.Project(\"test_project_limits\", {name: \"Terraform Project Test Limits\"});\nconst testLimits = new grafana.k6.ProjectLimits(\"test_limits\", {\n    projectId: testProjectLimits.id,\n    vuhMaxPerMonth: 10000,\n    vuMaxPerTest: 10000,\n    vuBrowserMaxPerTest: 1000,\n    durationMaxPerTest: 3600,\n});\nconst fromProjectId = grafana.k6.getProjectLimitsOutput({\n    projectId: testProjectLimits.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\ntest_project_limits = grafana.k6.Project(\"test_project_limits\", name=\"Terraform Project Test Limits\")\ntest_limits = grafana.k6.ProjectLimits(\"test_limits\",\n    project_id=test_project_limits.id,\n    vuh_max_per_month=10000,\n    vu_max_per_test=10000,\n    vu_browser_max_per_test=1000,\n    duration_max_per_test=3600)\nfrom_project_id = grafana.k6.get_project_limits_output(project_id=test_project_limits.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var testProjectLimits = new Grafana.K6.Project(\"test_project_limits\", new()\n    {\n        Name = \"Terraform Project Test Limits\",\n    });\n\n    var testLimits = new Grafana.K6.ProjectLimits(\"test_limits\", new()\n    {\n        ProjectId = testProjectLimits.Id,\n        VuhMaxPerMonth = 10000,\n        VuMaxPerTest = 10000,\n        VuBrowserMaxPerTest = 1000,\n        DurationMaxPerTest = 3600,\n    });\n\n    var fromProjectId = Grafana.K6.GetProjectLimits.Invoke(new()\n    {\n        ProjectId = testProjectLimits.Id,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/k6\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttestProjectLimits, err := k6.NewProject(ctx, \"test_project_limits\", \u0026k6.ProjectArgs{\n\t\t\tName: pulumi.String(\"Terraform Project Test Limits\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = k6.NewProjectLimits(ctx, \"test_limits\", \u0026k6.ProjectLimitsArgs{\n\t\t\tProjectId:           testProjectLimits.ID(),\n\t\t\tVuhMaxPerMonth:      pulumi.Int(10000),\n\t\t\tVuMaxPerTest:        pulumi.Int(10000),\n\t\t\tVuBrowserMaxPerTest: pulumi.Int(1000),\n\t\t\tDurationMaxPerTest:  pulumi.Int(3600),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_ = k6.LookupProjectLimitsOutput(ctx, k6.GetProjectLimitsOutputArgs{\n\t\t\tProjectId: testProjectLimits.ID(),\n\t\t}, nil)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.k6.Project;\nimport com.pulumi.grafana.k6.ProjectArgs;\nimport com.pulumi.grafana.k6.ProjectLimits;\nimport com.pulumi.grafana.k6.ProjectLimitsArgs;\nimport com.pulumi.grafana.k6.K6Functions;\nimport com.pulumi.grafana.k6.inputs.GetProjectLimitsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var testProjectLimits = new Project(\"testProjectLimits\", ProjectArgs.builder()\n            .name(\"Terraform Project Test Limits\")\n            .build());\n\n        var testLimits = new ProjectLimits(\"testLimits\", ProjectLimitsArgs.builder()\n            .projectId(testProjectLimits.id())\n            .vuhMaxPerMonth(10000)\n            .vuMaxPerTest(10000)\n            .vuBrowserMaxPerTest(1000)\n            .durationMaxPerTest(3600)\n            .build());\n\n        final var fromProjectId = K6Functions.getProjectLimits(GetProjectLimitsArgs.builder()\n            .projectId(testProjectLimits.id())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  testProjectLimits:\n    type: grafana:k6:Project\n    name: test_project_limits\n    properties:\n      name: Terraform Project Test Limits\n  testLimits:\n    type: grafana:k6:ProjectLimits\n    name: test_limits\n    properties:\n      projectId: ${testProjectLimits.id}\n      vuhMaxPerMonth: 10000\n      vuMaxPerTest: 10000\n      vuBrowserMaxPerTest: 1000\n      durationMaxPerTest: 3600\nvariables:\n  fromProjectId:\n    fn::invoke:\n      function: grafana:k6:getProjectLimits\n      arguments:\n        projectId: ${testProjectLimits.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getProjectLimits.\n","properties":{"projectId":{"type":"string","description":"The identifier of the project to get limits for.\n"}},"type":"object","required":["projectId"]},"outputs":{"description":"A collection of values returned by getProjectLimits.\n","properties":{"durationMaxPerTest":{"description":"Maximum duration of a test in seconds.\n","type":"integer"},"id":{"description":"The identifier of the project limits. This is set to the same as the project_id.\n","type":"string"},"projectId":{"description":"The identifier of the project to get limits for.\n","type":"string"},"vuBrowserMaxPerTest":{"description":"Maximum number of concurrent browser virtual users (VUs) used in one test.\n","type":"integer"},"vuMaxPerTest":{"description":"Maximum number of concurrent virtual users (VUs) used in one test.\n","type":"integer"},"vuhMaxPerMonth":{"description":"Maximum amount of virtual user hours (VU/h) used per one calendar month.\n","type":"integer"}},"required":["durationMaxPerTest","id","projectId","vuBrowserMaxPerTest","vuMaxPerTest","vuhMaxPerMonth"],"type":"object"}},"grafana:k6/getProjects:getProjects":{"description":"Retrieves all k6 projects with the given name.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst project = new grafana.k6.Project(\"project\", {name: \"Terraform Test Project\"});\nconst fromName = grafana.k6.getProjects({\n    name: \"Terraform Test Project\",\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\nproject = grafana.k6.Project(\"project\", name=\"Terraform Test Project\")\nfrom_name = grafana.k6.get_projects(name=\"Terraform Test Project\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var project = new Grafana.K6.Project(\"project\", new()\n    {\n        Name = \"Terraform Test Project\",\n    });\n\n    var fromName = Grafana.K6.GetProjects.Invoke(new()\n    {\n        Name = \"Terraform Test Project\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/k6\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := k6.NewProject(ctx, \"project\", \u0026k6.ProjectArgs{\n\t\t\tName: pulumi.String(\"Terraform Test Project\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = k6.GetProjects(ctx, \u0026k6.GetProjectsArgs{\n\t\t\tName: pulumi.StringRef(\"Terraform Test Project\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.k6.Project;\nimport com.pulumi.grafana.k6.ProjectArgs;\nimport com.pulumi.grafana.k6.K6Functions;\nimport com.pulumi.grafana.k6.inputs.GetProjectsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var project = new Project(\"project\", ProjectArgs.builder()\n            .name(\"Terraform Test Project\")\n            .build());\n\n        final var fromName = K6Functions.getProjects(GetProjectsArgs.builder()\n            .name(\"Terraform Test Project\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  project:\n    type: grafana:k6:Project\n    properties:\n      name: Terraform Test Project\nvariables:\n  fromName:\n    fn::invoke:\n      function: grafana:k6:getProjects\n      arguments:\n        name: Terraform Test Project\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getProjects.\n","properties":{"name":{"type":"string","description":"Human-friendly identifier of the project.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getProjects.\n","properties":{"id":{"description":"Human-friendly identifier of the project. This is set to the same as name.\n","type":"string"},"name":{"description":"Human-friendly identifier of the project.\n","type":"string"},"projects":{"items":{"$ref":"#/types/grafana:k6/getProjectsProject:getProjectsProject"},"type":"array"}},"required":["id","projects"],"type":"object"}},"grafana:k6/getSchedule:getSchedule":{"description":"Retrieves a k6 schedule.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst scheduleProject = new grafana.k6.Project(\"schedule_project\", {name: \"Terraform Schedule Test Project\"});\nconst scheduleLoadTest = new grafana.k6.LoadTest(\"schedule_load_test\", {\n    projectId: scheduleProject.id,\n    name: \"Terraform Test Load Test for Schedule\",\n    script: `export default function() {\n  console.log('Hello from k6 schedule test!');\n}\n`,\n}, {\n    dependsOn: [scheduleProject],\n});\nconst testSchedule = new grafana.k6.Schedule(\"test_schedule\", {\n    loadTestId: scheduleLoadTest.id,\n    starts: \"2024-12-25T10:00:00Z\",\n    recurrenceRule: {\n        frequency: \"MONTHLY\",\n        interval: 12,\n        count: 100,\n    },\n}, {\n    dependsOn: [scheduleLoadTest],\n});\nconst fromLoadTest = grafana.k6.getScheduleOutput({\n    loadTestId: scheduleLoadTest.id,\n});\nexport const completeScheduleInfo = {\n    id: fromLoadTest.apply(fromLoadTest =\u003e fromLoadTest.id),\n    loadTestId: fromLoadTest.apply(fromLoadTest =\u003e fromLoadTest.loadTestId),\n    starts: fromLoadTest.apply(fromLoadTest =\u003e fromLoadTest.starts),\n    deactivated: fromLoadTest.apply(fromLoadTest =\u003e fromLoadTest.deactivated),\n    nextRun: fromLoadTest.apply(fromLoadTest =\u003e fromLoadTest.nextRun),\n    createdBy: fromLoadTest.apply(fromLoadTest =\u003e fromLoadTest.createdBy),\n    recurrenceRule: fromLoadTest.apply(fromLoadTest =\u003e fromLoadTest.recurrenceRule),\n    cron: fromLoadTest.apply(fromLoadTest =\u003e fromLoadTest.cron),\n};\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\nschedule_project = grafana.k6.Project(\"schedule_project\", name=\"Terraform Schedule Test Project\")\nschedule_load_test = grafana.k6.LoadTest(\"schedule_load_test\",\n    project_id=schedule_project.id,\n    name=\"Terraform Test Load Test for Schedule\",\n    script=\"\"\"export default function() {\n  console.log('Hello from k6 schedule test!');\n}\n\"\"\",\n    opts = pulumi.ResourceOptions(depends_on=[schedule_project]))\ntest_schedule = grafana.k6.Schedule(\"test_schedule\",\n    load_test_id=schedule_load_test.id,\n    starts=\"2024-12-25T10:00:00Z\",\n    recurrence_rule={\n        \"frequency\": \"MONTHLY\",\n        \"interval\": 12,\n        \"count\": 100,\n    },\n    opts = pulumi.ResourceOptions(depends_on=[schedule_load_test]))\nfrom_load_test = grafana.k6.get_schedule_output(load_test_id=schedule_load_test.id)\npulumi.export(\"completeScheduleInfo\", {\n    \"id\": from_load_test.id,\n    \"loadTestId\": from_load_test.load_test_id,\n    \"starts\": from_load_test.starts,\n    \"deactivated\": from_load_test.deactivated,\n    \"nextRun\": from_load_test.next_run,\n    \"createdBy\": from_load_test.created_by,\n    \"recurrenceRule\": from_load_test.recurrence_rule,\n    \"cron\": from_load_test.cron,\n})\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var scheduleProject = new Grafana.K6.Project(\"schedule_project\", new()\n    {\n        Name = \"Terraform Schedule Test Project\",\n    });\n\n    var scheduleLoadTest = new Grafana.K6.LoadTest(\"schedule_load_test\", new()\n    {\n        ProjectId = scheduleProject.Id,\n        Name = \"Terraform Test Load Test for Schedule\",\n        Script = @\"export default function() {\n  console.log('Hello from k6 schedule test!');\n}\n\",\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            scheduleProject,\n        },\n    });\n\n    var testSchedule = new Grafana.K6.Schedule(\"test_schedule\", new()\n    {\n        LoadTestId = scheduleLoadTest.Id,\n        Starts = \"2024-12-25T10:00:00Z\",\n        RecurrenceRule = new Grafana.K6.Inputs.ScheduleRecurrenceRuleArgs\n        {\n            Frequency = \"MONTHLY\",\n            Interval = 12,\n            Count = 100,\n        },\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            scheduleLoadTest,\n        },\n    });\n\n    var fromLoadTest = Grafana.K6.GetSchedule.Invoke(new()\n    {\n        LoadTestId = scheduleLoadTest.Id,\n    });\n\n    return new Dictionary\u003cstring, object?\u003e\n    {\n        [\"completeScheduleInfo\"] = \n        {\n            { \"id\", fromLoadTest.Apply(getScheduleResult =\u003e getScheduleResult.Id) },\n            { \"loadTestId\", fromLoadTest.Apply(getScheduleResult =\u003e getScheduleResult.LoadTestId) },\n            { \"starts\", fromLoadTest.Apply(getScheduleResult =\u003e getScheduleResult.Starts) },\n            { \"deactivated\", fromLoadTest.Apply(getScheduleResult =\u003e getScheduleResult.Deactivated) },\n            { \"nextRun\", fromLoadTest.Apply(getScheduleResult =\u003e getScheduleResult.NextRun) },\n            { \"createdBy\", fromLoadTest.Apply(getScheduleResult =\u003e getScheduleResult.CreatedBy) },\n            { \"recurrenceRule\", fromLoadTest.Apply(getScheduleResult =\u003e getScheduleResult.RecurrenceRule) },\n            { \"cron\", fromLoadTest.Apply(getScheduleResult =\u003e getScheduleResult.Cron) },\n        },\n    };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/k6\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tscheduleProject, err := k6.NewProject(ctx, \"schedule_project\", \u0026k6.ProjectArgs{\n\t\t\tName: pulumi.String(\"Terraform Schedule Test Project\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tscheduleLoadTest, err := k6.NewLoadTest(ctx, \"schedule_load_test\", \u0026k6.LoadTestArgs{\n\t\t\tProjectId: scheduleProject.ID(),\n\t\t\tName:      pulumi.String(\"Terraform Test Load Test for Schedule\"),\n\t\t\tScript:    pulumi.String(\"export default function() {\\n  console.log('Hello from k6 schedule test!');\\n}\\n\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tscheduleProject,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = k6.NewSchedule(ctx, \"test_schedule\", \u0026k6.ScheduleArgs{\n\t\t\tLoadTestId: scheduleLoadTest.ID(),\n\t\t\tStarts:     pulumi.String(\"2024-12-25T10:00:00Z\"),\n\t\t\tRecurrenceRule: \u0026k6.ScheduleRecurrenceRuleArgs{\n\t\t\t\tFrequency: pulumi.String(\"MONTHLY\"),\n\t\t\t\tInterval:  pulumi.Int(12),\n\t\t\t\tCount:     pulumi.Int(100),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tscheduleLoadTest,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfromLoadTest := k6.LookupScheduleOutput(ctx, k6.GetScheduleOutputArgs{\n\t\t\tLoadTestId: scheduleLoadTest.ID(),\n\t\t}, nil)\n\t\tctx.Export(\"completeScheduleInfo\", pulumi.Map{\n\t\t\t\"id\": fromLoadTest.ApplyT(func(fromLoadTest k6.GetScheduleResult) (*string, error) {\n\t\t\t\treturn \u0026fromLoadTest.Id, nil\n\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\t\"loadTestId\": fromLoadTest.ApplyT(func(fromLoadTest k6.GetScheduleResult) (*string, error) {\n\t\t\t\treturn \u0026fromLoadTest.LoadTestId, nil\n\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\t\"starts\": fromLoadTest.ApplyT(func(fromLoadTest k6.GetScheduleResult) (*string, error) {\n\t\t\t\treturn \u0026fromLoadTest.Starts, nil\n\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\t\"deactivated\": fromLoadTest.ApplyT(func(fromLoadTest k6.GetScheduleResult) (*bool, error) {\n\t\t\t\treturn \u0026fromLoadTest.Deactivated, nil\n\t\t\t}).(pulumi.BoolPtrOutput),\n\t\t\t\"nextRun\": fromLoadTest.ApplyT(func(fromLoadTest k6.GetScheduleResult) (*string, error) {\n\t\t\t\treturn \u0026fromLoadTest.NextRun, nil\n\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\t\"createdBy\": fromLoadTest.ApplyT(func(fromLoadTest k6.GetScheduleResult) (*string, error) {\n\t\t\t\treturn \u0026fromLoadTest.CreatedBy, nil\n\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\t\"recurrenceRule\": fromLoadTest.ApplyT(func(fromLoadTest k6.GetScheduleResult) (k6.GetScheduleRecurrenceRule, error) {\n\t\t\t\treturn fromLoadTest.RecurrenceRule, nil\n\t\t\t}).(k6.GetScheduleRecurrenceRuleOutput),\n\t\t\t\"cron\": fromLoadTest.ApplyT(func(fromLoadTest k6.GetScheduleResult) (k6.GetScheduleCron, error) {\n\t\t\t\treturn fromLoadTest.Cron, nil\n\t\t\t}).(k6.GetScheduleCronOutput),\n\t\t})\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.k6.Project;\nimport com.pulumi.grafana.k6.ProjectArgs;\nimport com.pulumi.grafana.k6.LoadTest;\nimport com.pulumi.grafana.k6.LoadTestArgs;\nimport com.pulumi.grafana.k6.Schedule;\nimport com.pulumi.grafana.k6.ScheduleArgs;\nimport com.pulumi.grafana.k6.inputs.ScheduleRecurrenceRuleArgs;\nimport com.pulumi.grafana.k6.K6Functions;\nimport com.pulumi.grafana.k6.inputs.GetScheduleArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var scheduleProject = new Project(\"scheduleProject\", ProjectArgs.builder()\n            .name(\"Terraform Schedule Test Project\")\n            .build());\n\n        var scheduleLoadTest = new LoadTest(\"scheduleLoadTest\", LoadTestArgs.builder()\n            .projectId(scheduleProject.id())\n            .name(\"Terraform Test Load Test for Schedule\")\n            .script(\"\"\"\nexport default function() {\n  console.log('Hello from k6 schedule test!');\n}\n            \"\"\")\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(scheduleProject)\n                .build());\n\n        var testSchedule = new Schedule(\"testSchedule\", ScheduleArgs.builder()\n            .loadTestId(scheduleLoadTest.id())\n            .starts(\"2024-12-25T10:00:00Z\")\n            .recurrenceRule(ScheduleRecurrenceRuleArgs.builder()\n                .frequency(\"MONTHLY\")\n                .interval(12)\n                .count(100)\n                .build())\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(scheduleLoadTest)\n                .build());\n\n        final var fromLoadTest = K6Functions.getSchedule(GetScheduleArgs.builder()\n            .loadTestId(scheduleLoadTest.id())\n            .build());\n\n        ctx.export(\"completeScheduleInfo\", Map.ofEntries(\n            Map.entry(\"id\", fromLoadTest.applyValue(_fromLoadTest -\u003e _fromLoadTest.id())),\n            Map.entry(\"loadTestId\", fromLoadTest.applyValue(_fromLoadTest -\u003e _fromLoadTest.loadTestId())),\n            Map.entry(\"starts\", fromLoadTest.applyValue(_fromLoadTest -\u003e _fromLoadTest.starts())),\n            Map.entry(\"deactivated\", fromLoadTest.applyValue(_fromLoadTest -\u003e _fromLoadTest.deactivated())),\n            Map.entry(\"nextRun\", fromLoadTest.applyValue(_fromLoadTest -\u003e _fromLoadTest.nextRun())),\n            Map.entry(\"createdBy\", fromLoadTest.applyValue(_fromLoadTest -\u003e _fromLoadTest.createdBy())),\n            Map.entry(\"recurrenceRule\", fromLoadTest.applyValue(_fromLoadTest -\u003e _fromLoadTest.recurrenceRule())),\n            Map.entry(\"cron\", fromLoadTest.applyValue(_fromLoadTest -\u003e _fromLoadTest.cron()))\n        ));\n    }\n}\n```\n```yaml\nresources:\n  scheduleProject:\n    type: grafana:k6:Project\n    name: schedule_project\n    properties:\n      name: Terraform Schedule Test Project\n  scheduleLoadTest:\n    type: grafana:k6:LoadTest\n    name: schedule_load_test\n    properties:\n      projectId: ${scheduleProject.id}\n      name: Terraform Test Load Test for Schedule\n      script: |\n        export default function() {\n          console.log('Hello from k6 schedule test!');\n        }\n    options:\n      dependsOn:\n        - ${scheduleProject}\n  testSchedule:\n    type: grafana:k6:Schedule\n    name: test_schedule\n    properties:\n      loadTestId: ${scheduleLoadTest.id}\n      starts: 2024-12-25T10:00:00Z\n      recurrenceRule:\n        frequency: MONTHLY\n        interval: 12\n        count: 100\n    options:\n      dependsOn:\n        - ${scheduleLoadTest}\nvariables:\n  fromLoadTest:\n    fn::invoke:\n      function: grafana:k6:getSchedule\n      arguments:\n        loadTestId: ${scheduleLoadTest.id}\noutputs:\n  completeScheduleInfo:\n    id: ${fromLoadTest.id}\n    loadTestId: ${fromLoadTest.loadTestId}\n    starts: ${fromLoadTest.starts}\n    deactivated: ${fromLoadTest.deactivated}\n    nextRun: ${fromLoadTest.nextRun}\n    createdBy: ${fromLoadTest.createdBy}\n    recurrenceRule: ${fromLoadTest.recurrenceRule}\n    cron: ${fromLoadTest.cron}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getSchedule.\n","properties":{"cron":{"$ref":"#/types/grafana:k6/getScheduleCron:getScheduleCron","description":"The cron schedule to trigger the test periodically. If null, the test will run only once on the 'starts' date.\n"},"loadTestId":{"type":"string","description":"The identifier of the load test to retrieve the schedule for.\n"},"recurrenceRule":{"$ref":"#/types/grafana:k6/getScheduleRecurrenceRule:getScheduleRecurrenceRule","description":"The schedule recurrence settings. If null, the test will run only once on the starts date.\n"}},"type":"object","required":["loadTestId"]},"outputs":{"description":"A collection of values returned by getSchedule.\n","properties":{"createdBy":{"description":"The email of the user who created the schedule.\n","type":"string"},"cron":{"$ref":"#/types/grafana:k6/getScheduleCron:getScheduleCron","description":"The cron schedule to trigger the test periodically. If null, the test will run only once on the 'starts' date.\n"},"deactivated":{"description":"Whether the schedule is deactivated.\n","type":"boolean"},"id":{"description":"Numeric identifier of the schedule.\n","type":"string"},"loadTestId":{"description":"The identifier of the load test to retrieve the schedule for.\n","type":"string"},"nextRun":{"description":"The next scheduled execution time.\n","type":"string"},"recurrenceRule":{"$ref":"#/types/grafana:k6/getScheduleRecurrenceRule:getScheduleRecurrenceRule","description":"The schedule recurrence settings. If null, the test will run only once on the starts date.\n"},"starts":{"description":"The start time for the schedule (RFC3339 format).\n","type":"string"}},"required":["createdBy","deactivated","id","loadTestId","nextRun","starts"],"type":"object"}},"grafana:k6/getSchedules:getSchedules":{"description":"Retrieves all k6 schedules.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst schedulesProject = new grafana.k6.Project(\"schedules_project\", {name: \"Terraform Schedules Test Project\"});\nconst schedulesLoadTest = new grafana.k6.LoadTest(\"schedules_load_test\", {\n    projectId: schedulesProject.id,\n    name: \"Terraform Test Load Test for Schedules\",\n    script: `export default function() {\n  console.log('Hello from k6 schedules test!');\n}\n`,\n}, {\n    dependsOn: [schedulesProject],\n});\nconst schedulesLoadTest2 = new grafana.k6.LoadTest(\"schedules_load_test_2\", {\n    projectId: schedulesProject.id,\n    name: \"Terraform Test Load Test for Schedules (2)\",\n    script: `export default function() {\n  console.log('Hello from k6 schedules test!');\n}\n`,\n}, {\n    dependsOn: [schedulesProject],\n});\nconst schedulesLoadTest3 = new grafana.k6.LoadTest(\"schedules_load_test_3\", {\n    projectId: schedulesProject.id,\n    name: \"Terraform Test Load Test for Schedules (3)\",\n    script: `export default function() {\n  console.log('Hello from k6 schedules test!');\n}\n`,\n}, {\n    dependsOn: [schedulesProject],\n});\nconst testSchedule1 = new grafana.k6.Schedule(\"test_schedule_1\", {\n    loadTestId: schedulesLoadTest.id,\n    starts: \"2029-12-25T10:00:00Z\",\n    recurrenceRule: {\n        frequency: \"MONTHLY\",\n        interval: 15,\n        count: 100,\n    },\n}, {\n    dependsOn: [schedulesLoadTest],\n});\nconst testSchedule2 = new grafana.k6.Schedule(\"test_schedule_2\", {\n    loadTestId: schedulesLoadTest2.id,\n    starts: \"2023-12-26T14:00:00Z\",\n    recurrenceRule: {\n        frequency: \"WEEKLY\",\n        interval: 2,\n        until: \"2047-01-31T23:59:59Z\",\n    },\n}, {\n    dependsOn: [schedulesLoadTest2],\n});\nconst testSchedule3 = new grafana.k6.Schedule(\"test_schedule_3\", {\n    loadTestId: schedulesLoadTest3.id,\n    starts: \"2023-12-26T14:00:00Z\",\n    cron: {\n        schedule: \"0 10 1 12 6\",\n        timezone: \"UTC\",\n    },\n}, {\n    dependsOn: [schedulesLoadTest3],\n});\nconst fromLoadTestId = grafana.k6.getSchedules({});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\nschedules_project = grafana.k6.Project(\"schedules_project\", name=\"Terraform Schedules Test Project\")\nschedules_load_test = grafana.k6.LoadTest(\"schedules_load_test\",\n    project_id=schedules_project.id,\n    name=\"Terraform Test Load Test for Schedules\",\n    script=\"\"\"export default function() {\n  console.log('Hello from k6 schedules test!');\n}\n\"\"\",\n    opts = pulumi.ResourceOptions(depends_on=[schedules_project]))\nschedules_load_test2 = grafana.k6.LoadTest(\"schedules_load_test_2\",\n    project_id=schedules_project.id,\n    name=\"Terraform Test Load Test for Schedules (2)\",\n    script=\"\"\"export default function() {\n  console.log('Hello from k6 schedules test!');\n}\n\"\"\",\n    opts = pulumi.ResourceOptions(depends_on=[schedules_project]))\nschedules_load_test3 = grafana.k6.LoadTest(\"schedules_load_test_3\",\n    project_id=schedules_project.id,\n    name=\"Terraform Test Load Test for Schedules (3)\",\n    script=\"\"\"export default function() {\n  console.log('Hello from k6 schedules test!');\n}\n\"\"\",\n    opts = pulumi.ResourceOptions(depends_on=[schedules_project]))\ntest_schedule1 = grafana.k6.Schedule(\"test_schedule_1\",\n    load_test_id=schedules_load_test.id,\n    starts=\"2029-12-25T10:00:00Z\",\n    recurrence_rule={\n        \"frequency\": \"MONTHLY\",\n        \"interval\": 15,\n        \"count\": 100,\n    },\n    opts = pulumi.ResourceOptions(depends_on=[schedules_load_test]))\ntest_schedule2 = grafana.k6.Schedule(\"test_schedule_2\",\n    load_test_id=schedules_load_test2.id,\n    starts=\"2023-12-26T14:00:00Z\",\n    recurrence_rule={\n        \"frequency\": \"WEEKLY\",\n        \"interval\": 2,\n        \"until\": \"2047-01-31T23:59:59Z\",\n    },\n    opts = pulumi.ResourceOptions(depends_on=[schedules_load_test2]))\ntest_schedule3 = grafana.k6.Schedule(\"test_schedule_3\",\n    load_test_id=schedules_load_test3.id,\n    starts=\"2023-12-26T14:00:00Z\",\n    cron={\n        \"schedule\": \"0 10 1 12 6\",\n        \"timezone\": \"UTC\",\n    },\n    opts = pulumi.ResourceOptions(depends_on=[schedules_load_test3]))\nfrom_load_test_id = grafana.k6.get_schedules()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var schedulesProject = new Grafana.K6.Project(\"schedules_project\", new()\n    {\n        Name = \"Terraform Schedules Test Project\",\n    });\n\n    var schedulesLoadTest = new Grafana.K6.LoadTest(\"schedules_load_test\", new()\n    {\n        ProjectId = schedulesProject.Id,\n        Name = \"Terraform Test Load Test for Schedules\",\n        Script = @\"export default function() {\n  console.log('Hello from k6 schedules test!');\n}\n\",\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            schedulesProject,\n        },\n    });\n\n    var schedulesLoadTest2 = new Grafana.K6.LoadTest(\"schedules_load_test_2\", new()\n    {\n        ProjectId = schedulesProject.Id,\n        Name = \"Terraform Test Load Test for Schedules (2)\",\n        Script = @\"export default function() {\n  console.log('Hello from k6 schedules test!');\n}\n\",\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            schedulesProject,\n        },\n    });\n\n    var schedulesLoadTest3 = new Grafana.K6.LoadTest(\"schedules_load_test_3\", new()\n    {\n        ProjectId = schedulesProject.Id,\n        Name = \"Terraform Test Load Test for Schedules (3)\",\n        Script = @\"export default function() {\n  console.log('Hello from k6 schedules test!');\n}\n\",\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            schedulesProject,\n        },\n    });\n\n    var testSchedule1 = new Grafana.K6.Schedule(\"test_schedule_1\", new()\n    {\n        LoadTestId = schedulesLoadTest.Id,\n        Starts = \"2029-12-25T10:00:00Z\",\n        RecurrenceRule = new Grafana.K6.Inputs.ScheduleRecurrenceRuleArgs\n        {\n            Frequency = \"MONTHLY\",\n            Interval = 15,\n            Count = 100,\n        },\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            schedulesLoadTest,\n        },\n    });\n\n    var testSchedule2 = new Grafana.K6.Schedule(\"test_schedule_2\", new()\n    {\n        LoadTestId = schedulesLoadTest2.Id,\n        Starts = \"2023-12-26T14:00:00Z\",\n        RecurrenceRule = new Grafana.K6.Inputs.ScheduleRecurrenceRuleArgs\n        {\n            Frequency = \"WEEKLY\",\n            Interval = 2,\n            Until = \"2047-01-31T23:59:59Z\",\n        },\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            schedulesLoadTest2,\n        },\n    });\n\n    var testSchedule3 = new Grafana.K6.Schedule(\"test_schedule_3\", new()\n    {\n        LoadTestId = schedulesLoadTest3.Id,\n        Starts = \"2023-12-26T14:00:00Z\",\n        Cron = new Grafana.K6.Inputs.ScheduleCronArgs\n        {\n            Schedule = \"0 10 1 12 6\",\n            Timezone = \"UTC\",\n        },\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            schedulesLoadTest3,\n        },\n    });\n\n    var fromLoadTestId = Grafana.K6.GetSchedules.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/k6\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tschedulesProject, err := k6.NewProject(ctx, \"schedules_project\", \u0026k6.ProjectArgs{\n\t\t\tName: pulumi.String(\"Terraform Schedules Test Project\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tschedulesLoadTest, err := k6.NewLoadTest(ctx, \"schedules_load_test\", \u0026k6.LoadTestArgs{\n\t\t\tProjectId: schedulesProject.ID(),\n\t\t\tName:      pulumi.String(\"Terraform Test Load Test for Schedules\"),\n\t\t\tScript:    pulumi.String(\"export default function() {\\n  console.log('Hello from k6 schedules test!');\\n}\\n\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tschedulesProject,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tschedulesLoadTest2, err := k6.NewLoadTest(ctx, \"schedules_load_test_2\", \u0026k6.LoadTestArgs{\n\t\t\tProjectId: schedulesProject.ID(),\n\t\t\tName:      pulumi.String(\"Terraform Test Load Test for Schedules (2)\"),\n\t\t\tScript:    pulumi.String(\"export default function() {\\n  console.log('Hello from k6 schedules test!');\\n}\\n\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tschedulesProject,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tschedulesLoadTest3, err := k6.NewLoadTest(ctx, \"schedules_load_test_3\", \u0026k6.LoadTestArgs{\n\t\t\tProjectId: schedulesProject.ID(),\n\t\t\tName:      pulumi.String(\"Terraform Test Load Test for Schedules (3)\"),\n\t\t\tScript:    pulumi.String(\"export default function() {\\n  console.log('Hello from k6 schedules test!');\\n}\\n\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tschedulesProject,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = k6.NewSchedule(ctx, \"test_schedule_1\", \u0026k6.ScheduleArgs{\n\t\t\tLoadTestId: schedulesLoadTest.ID(),\n\t\t\tStarts:     pulumi.String(\"2029-12-25T10:00:00Z\"),\n\t\t\tRecurrenceRule: \u0026k6.ScheduleRecurrenceRuleArgs{\n\t\t\t\tFrequency: pulumi.String(\"MONTHLY\"),\n\t\t\t\tInterval:  pulumi.Int(15),\n\t\t\t\tCount:     pulumi.Int(100),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tschedulesLoadTest,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = k6.NewSchedule(ctx, \"test_schedule_2\", \u0026k6.ScheduleArgs{\n\t\t\tLoadTestId: schedulesLoadTest2.ID(),\n\t\t\tStarts:     pulumi.String(\"2023-12-26T14:00:00Z\"),\n\t\t\tRecurrenceRule: \u0026k6.ScheduleRecurrenceRuleArgs{\n\t\t\t\tFrequency: pulumi.String(\"WEEKLY\"),\n\t\t\t\tInterval:  pulumi.Int(2),\n\t\t\t\tUntil:     pulumi.String(\"2047-01-31T23:59:59Z\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tschedulesLoadTest2,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = k6.NewSchedule(ctx, \"test_schedule_3\", \u0026k6.ScheduleArgs{\n\t\t\tLoadTestId: schedulesLoadTest3.ID(),\n\t\t\tStarts:     pulumi.String(\"2023-12-26T14:00:00Z\"),\n\t\t\tCron: \u0026k6.ScheduleCronArgs{\n\t\t\t\tSchedule: pulumi.String(\"0 10 1 12 6\"),\n\t\t\t\tTimezone: pulumi.String(\"UTC\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tschedulesLoadTest3,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = k6.GetSchedules(ctx, map[string]interface{}{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.k6.Project;\nimport com.pulumi.grafana.k6.ProjectArgs;\nimport com.pulumi.grafana.k6.LoadTest;\nimport com.pulumi.grafana.k6.LoadTestArgs;\nimport com.pulumi.grafana.k6.Schedule;\nimport com.pulumi.grafana.k6.ScheduleArgs;\nimport com.pulumi.grafana.k6.inputs.ScheduleRecurrenceRuleArgs;\nimport com.pulumi.grafana.k6.inputs.ScheduleCronArgs;\nimport com.pulumi.grafana.k6.K6Functions;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var schedulesProject = new Project(\"schedulesProject\", ProjectArgs.builder()\n            .name(\"Terraform Schedules Test Project\")\n            .build());\n\n        var schedulesLoadTest = new LoadTest(\"schedulesLoadTest\", LoadTestArgs.builder()\n            .projectId(schedulesProject.id())\n            .name(\"Terraform Test Load Test for Schedules\")\n            .script(\"\"\"\nexport default function() {\n  console.log('Hello from k6 schedules test!');\n}\n            \"\"\")\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(schedulesProject)\n                .build());\n\n        var schedulesLoadTest2 = new LoadTest(\"schedulesLoadTest2\", LoadTestArgs.builder()\n            .projectId(schedulesProject.id())\n            .name(\"Terraform Test Load Test for Schedules (2)\")\n            .script(\"\"\"\nexport default function() {\n  console.log('Hello from k6 schedules test!');\n}\n            \"\"\")\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(schedulesProject)\n                .build());\n\n        var schedulesLoadTest3 = new LoadTest(\"schedulesLoadTest3\", LoadTestArgs.builder()\n            .projectId(schedulesProject.id())\n            .name(\"Terraform Test Load Test for Schedules (3)\")\n            .script(\"\"\"\nexport default function() {\n  console.log('Hello from k6 schedules test!');\n}\n            \"\"\")\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(schedulesProject)\n                .build());\n\n        var testSchedule1 = new Schedule(\"testSchedule1\", ScheduleArgs.builder()\n            .loadTestId(schedulesLoadTest.id())\n            .starts(\"2029-12-25T10:00:00Z\")\n            .recurrenceRule(ScheduleRecurrenceRuleArgs.builder()\n                .frequency(\"MONTHLY\")\n                .interval(15)\n                .count(100)\n                .build())\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(schedulesLoadTest)\n                .build());\n\n        var testSchedule2 = new Schedule(\"testSchedule2\", ScheduleArgs.builder()\n            .loadTestId(schedulesLoadTest2.id())\n            .starts(\"2023-12-26T14:00:00Z\")\n            .recurrenceRule(ScheduleRecurrenceRuleArgs.builder()\n                .frequency(\"WEEKLY\")\n                .interval(2)\n                .until(\"2047-01-31T23:59:59Z\")\n                .build())\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(schedulesLoadTest2)\n                .build());\n\n        var testSchedule3 = new Schedule(\"testSchedule3\", ScheduleArgs.builder()\n            .loadTestId(schedulesLoadTest3.id())\n            .starts(\"2023-12-26T14:00:00Z\")\n            .cron(ScheduleCronArgs.builder()\n                .schedule(\"0 10 1 12 6\")\n                .timezone(\"UTC\")\n                .build())\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(schedulesLoadTest3)\n                .build());\n\n        final var fromLoadTestId = K6Functions.getSchedules(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference);\n\n    }\n}\n```\n```yaml\nresources:\n  schedulesProject:\n    type: grafana:k6:Project\n    name: schedules_project\n    properties:\n      name: Terraform Schedules Test Project\n  schedulesLoadTest:\n    type: grafana:k6:LoadTest\n    name: schedules_load_test\n    properties:\n      projectId: ${schedulesProject.id}\n      name: Terraform Test Load Test for Schedules\n      script: |\n        export default function() {\n          console.log('Hello from k6 schedules test!');\n        }\n    options:\n      dependsOn:\n        - ${schedulesProject}\n  schedulesLoadTest2:\n    type: grafana:k6:LoadTest\n    name: schedules_load_test_2\n    properties:\n      projectId: ${schedulesProject.id}\n      name: Terraform Test Load Test for Schedules (2)\n      script: |\n        export default function() {\n          console.log('Hello from k6 schedules test!');\n        }\n    options:\n      dependsOn:\n        - ${schedulesProject}\n  schedulesLoadTest3:\n    type: grafana:k6:LoadTest\n    name: schedules_load_test_3\n    properties:\n      projectId: ${schedulesProject.id}\n      name: Terraform Test Load Test for Schedules (3)\n      script: |\n        export default function() {\n          console.log('Hello from k6 schedules test!');\n        }\n    options:\n      dependsOn:\n        - ${schedulesProject}\n  testSchedule1:\n    type: grafana:k6:Schedule\n    name: test_schedule_1\n    properties:\n      loadTestId: ${schedulesLoadTest.id}\n      starts: 2029-12-25T10:00:00Z\n      recurrenceRule:\n        frequency: MONTHLY\n        interval: 15\n        count: 100\n    options:\n      dependsOn:\n        - ${schedulesLoadTest}\n  testSchedule2:\n    type: grafana:k6:Schedule\n    name: test_schedule_2\n    properties:\n      loadTestId: ${schedulesLoadTest2.id}\n      starts: 2023-12-26T14:00:00Z\n      recurrenceRule:\n        frequency: WEEKLY\n        interval: 2\n        until: 2047-01-31T23:59:59Z\n    options:\n      dependsOn:\n        - ${schedulesLoadTest2}\n  testSchedule3:\n    type: grafana:k6:Schedule\n    name: test_schedule_3\n    properties:\n      loadTestId: ${schedulesLoadTest3.id}\n      starts: 2023-12-26T14:00:00Z\n      cron:\n        schedule: 0 10 1 12 6\n        timezone: UTC\n    options:\n      dependsOn:\n        - ${schedulesLoadTest3}\nvariables:\n  fromLoadTestId:\n    fn::invoke:\n      function: grafana:k6:getSchedules\n      arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","outputs":{"description":"A collection of values returned by getSchedules.\n","properties":{"id":{"description":"The identifier for this data source.\n","type":"string"},"schedules":{"description":"List of k6 schedules.\n","items":{"$ref":"#/types/grafana:k6/getSchedulesSchedule:getSchedulesSchedule"},"type":"array"}},"required":["id","schedules"],"type":"object"}},"grafana:onCall/getEscalationChain:getEscalationChain":{"description":"* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/escalation_chains/)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst _default = grafana.onCall.getEscalationChain({\n    name: \"default\",\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\n\ndefault = grafana.onCall.get_escalation_chain(name=\"default\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var @default = Grafana.OnCall.GetEscalationChain.Invoke(new()\n    {\n        Name = \"default\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oncall\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := oncall.GetEscalationChain(ctx, \u0026oncall.GetEscalationChainArgs{\n\t\t\tName: \"default\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.onCall.OnCallFunctions;\nimport com.pulumi.grafana.onCall.inputs.GetEscalationChainArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var default = OnCallFunctions.getEscalationChain(GetEscalationChainArgs.builder()\n            .name(\"default\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  default:\n    fn::invoke:\n      function: grafana:onCall:getEscalationChain\n      arguments:\n        name: default\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getEscalationChain.\n","properties":{"name":{"type":"string","description":"The escalation chain name.\n"}},"type":"object","required":["name"]},"outputs":{"description":"A collection of values returned by getEscalationChain.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"name":{"description":"The escalation chain name.\n","type":"string"}},"required":["name","id"],"type":"object"}},"grafana:onCall/getIntegration:getIntegration":{"description":"* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/integrations/)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst exampleIntegration = grafana.onCall.getIntegration({\n    id: \"CEXAMPLEID123\",\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\n\nexample_integration = grafana.onCall.get_integration(id=\"CEXAMPLEID123\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var exampleIntegration = Grafana.OnCall.GetIntegration.Invoke(new()\n    {\n        Id = \"CEXAMPLEID123\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oncall\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := oncall.GetIntegration(ctx, \u0026oncall.GetIntegrationArgs{\n\t\t\tId: \"CEXAMPLEID123\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.onCall.OnCallFunctions;\nimport com.pulumi.grafana.onCall.inputs.GetIntegrationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var exampleIntegration = OnCallFunctions.getIntegration(GetIntegrationArgs.builder()\n            .id(\"CEXAMPLEID123\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  exampleIntegration:\n    fn::invoke:\n      function: grafana:onCall:getIntegration\n      arguments:\n        id: CEXAMPLEID123\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getIntegration.\n","properties":{"id":{"type":"string","description":"The integration ID.\n"}},"type":"object","required":["id"]},"outputs":{"description":"A collection of values returned by getIntegration.\n","properties":{"id":{"description":"The integration ID.\n","type":"string"},"inboundEmail":{"description":"The inbound email for the integration. Only available for integration type \u003cspan pulumi-lang-nodejs=\"`inboundEmail`\" pulumi-lang-dotnet=\"`InboundEmail`\" pulumi-lang-go=\"`inboundEmail`\" pulumi-lang-python=\"`inbound_email`\" pulumi-lang-yaml=\"`inboundEmail`\" pulumi-lang-java=\"`inboundEmail`\"\u003e`inbound_email`\u003c/span\u003e.\n","type":"string"},"link":{"description":"The link for the integration.\n","type":"string"},"name":{"description":"The integration name.\n","type":"string"}},"required":["id","inboundEmail","link","name"],"type":"object"}},"grafana:onCall/getLabel:getLabel":{"description":"* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/users/)\n","inputs":{"description":"A collection of arguments for invoking getLabel.\n","properties":{"key":{"type":"string","description":"The key for the label.\n"},"value":{"type":"string","description":"The value of the label.\n"}},"type":"object","required":["key","value"]},"outputs":{"description":"A collection of values returned by getLabel.\n","properties":{"id":{"description":"The ID of the label.\n","type":"string"},"key":{"description":"The key for the label.\n","type":"string"},"value":{"description":"The value of the label.\n","type":"string"}},"required":["id","key","value"],"type":"object"}},"grafana:onCall/getOutgoingWebhook:getOutgoingWebhook":{"description":"* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/outgoing_webhooks/)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst exampleOutgoingWebhook = grafana.onCall.getOutgoingWebhook({\n    name: \"example_outgoing_webhook\",\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\n\nexample_outgoing_webhook = grafana.onCall.get_outgoing_webhook(name=\"example_outgoing_webhook\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var exampleOutgoingWebhook = Grafana.OnCall.GetOutgoingWebhook.Invoke(new()\n    {\n        Name = \"example_outgoing_webhook\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oncall\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := oncall.GetOutgoingWebhook(ctx, \u0026oncall.GetOutgoingWebhookArgs{\n\t\t\tName: \"example_outgoing_webhook\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.onCall.OnCallFunctions;\nimport com.pulumi.grafana.onCall.inputs.GetOutgoingWebhookArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var exampleOutgoingWebhook = OnCallFunctions.getOutgoingWebhook(GetOutgoingWebhookArgs.builder()\n            .name(\"example_outgoing_webhook\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  exampleOutgoingWebhook:\n    fn::invoke:\n      function: grafana:onCall:getOutgoingWebhook\n      arguments:\n        name: example_outgoing_webhook\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getOutgoingWebhook.\n","properties":{"name":{"type":"string","description":"The outgoing webhook name.\n"}},"type":"object","required":["name"]},"outputs":{"description":"A collection of values returned by getOutgoingWebhook.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"name":{"description":"The outgoing webhook name.\n","type":"string"}},"required":["name","id"],"type":"object"}},"grafana:onCall/getSchedule:getSchedule":{"description":"* [Official documentation](https://grafana.com/docs/oncall/latest/manage/on-call-schedules/)\n* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/schedules/)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst schedule = grafana.onCall.getSchedule({\n    name: \"example_schedule\",\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\n\nschedule = grafana.onCall.get_schedule(name=\"example_schedule\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var schedule = Grafana.OnCall.GetSchedule.Invoke(new()\n    {\n        Name = \"example_schedule\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oncall\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := oncall.GetSchedule(ctx, \u0026oncall.GetScheduleArgs{\n\t\t\tName: \"example_schedule\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.onCall.OnCallFunctions;\nimport com.pulumi.grafana.onCall.inputs.GetScheduleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var schedule = OnCallFunctions.getSchedule(GetScheduleArgs.builder()\n            .name(\"example_schedule\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  schedule:\n    fn::invoke:\n      function: grafana:onCall:getSchedule\n      arguments:\n        name: example_schedule\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getSchedule.\n","properties":{"name":{"type":"string","description":"The schedule name.\n"}},"type":"object","required":["name"]},"outputs":{"description":"A collection of values returned by getSchedule.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"name":{"description":"The schedule name.\n","type":"string"},"type":{"description":"The schedule type.\n","type":"string"}},"required":["name","type","id"],"type":"object"}},"grafana:onCall/getSlackChannel:getSlackChannel":{"description":"* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/slack_channels/)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst exampleSlackChannel = grafana.onCall.getSlackChannel({\n    name: \"example_slack_channel\",\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\n\nexample_slack_channel = grafana.onCall.get_slack_channel(name=\"example_slack_channel\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var exampleSlackChannel = Grafana.OnCall.GetSlackChannel.Invoke(new()\n    {\n        Name = \"example_slack_channel\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oncall\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := oncall.GetSlackChannel(ctx, \u0026oncall.GetSlackChannelArgs{\n\t\t\tName: \"example_slack_channel\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.onCall.OnCallFunctions;\nimport com.pulumi.grafana.onCall.inputs.GetSlackChannelArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var exampleSlackChannel = OnCallFunctions.getSlackChannel(GetSlackChannelArgs.builder()\n            .name(\"example_slack_channel\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  exampleSlackChannel:\n    fn::invoke:\n      function: grafana:onCall:getSlackChannel\n      arguments:\n        name: example_slack_channel\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getSlackChannel.\n","properties":{"name":{"type":"string","description":"The Slack channel name.\n"}},"type":"object","required":["name"]},"outputs":{"description":"A collection of values returned by getSlackChannel.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"name":{"description":"The Slack channel name.\n","type":"string"},"slackId":{"description":"The Slack ID of the channel.\n","type":"string"}},"required":["name","slackId","id"],"type":"object"}},"grafana:onCall/getTeam:getTeam":{"description":"## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst myTeam = grafana.oss.getTeam({\n    name: \"my team\",\n});\nconst myTeamGetTeam = myTeam.then(myTeam =\u003e grafana.onCall.getTeam({\n    name: myTeam.name,\n}));\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\n\nmy_team = grafana.oss.get_team(name=\"my team\")\nmy_team_get_team = grafana.onCall.get_team(name=my_team.name)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var myTeam = Grafana.Oss.GetTeam.Invoke(new()\n    {\n        Name = \"my team\",\n    });\n\n    var myTeamGetTeam = Grafana.OnCall.GetTeam.Invoke(new()\n    {\n        Name = myTeam.Apply(getTeamResult =\u003e getTeamResult.Name),\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oncall\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmyTeam, err := oss.LookupTeam(ctx, \u0026oss.LookupTeamArgs{\n\t\t\tName: \"my team\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oncall.GetTeam(ctx, \u0026oncall.GetTeamArgs{\n\t\t\tName: myTeam.Name,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.OssFunctions;\nimport com.pulumi.grafana.onCall.OnCallFunctions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var myTeam = OssFunctions.getTeam(GetTeamArgs.builder()\n            .name(\"my team\")\n            .build());\n\n        final var myTeamGetTeam = OnCallFunctions.getTeam(GetTeamArgs.builder()\n            .name(myTeam.name())\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  myTeam:\n    fn::invoke:\n      function: grafana:oss:getTeam\n      arguments:\n        name: my team\n  myTeamGetTeam:\n    fn::invoke:\n      function: grafana:onCall:getTeam\n      arguments:\n        name: ${myTeam.name}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getTeam.\n","properties":{"name":{"type":"string","description":"The team name.\n"}},"type":"object","required":["name"]},"outputs":{"description":"A collection of values returned by getTeam.\n","properties":{"avatarUrl":{"type":"string"},"email":{"type":"string"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"name":{"description":"The team name.\n","type":"string"}},"required":["avatarUrl","email","name","id"],"type":"object"}},"grafana:onCall/getUser:getUser":{"description":"* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/users/)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst alex = grafana.onCall.getUser({\n    username: \"alex\",\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\n\nalex = grafana.onCall.get_user(username=\"alex\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var alex = Grafana.OnCall.GetUser.Invoke(new()\n    {\n        Username = \"alex\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oncall\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := oncall.GetUser(ctx, \u0026oncall.GetUserArgs{\n\t\t\tUsername: \"alex\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.onCall.OnCallFunctions;\nimport com.pulumi.grafana.onCall.inputs.GetUserArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var alex = OnCallFunctions.getUser(GetUserArgs.builder()\n            .username(\"alex\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  alex:\n    fn::invoke:\n      function: grafana:onCall:getUser\n      arguments:\n        username: alex\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getUser.\n","properties":{"username":{"type":"string","description":"The username of the user.\n"}},"type":"object","required":["username"]},"outputs":{"description":"A collection of values returned by getUser.\n","properties":{"email":{"description":"The email of the user.\n","type":"string"},"id":{"description":"The ID of the user.\n","type":"string"},"role":{"description":"The role of the user.\n","type":"string"},"username":{"description":"The username of the user.\n","type":"string"}},"required":["email","id","role","username"],"type":"object"}},"grafana:onCall/getUserGroup:getUserGroup":{"description":"* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/user_groups/)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst exampleUserGroup = grafana.onCall.getUserGroup({\n    slackHandle: \"example_slack_handle\",\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\n\nexample_user_group = grafana.onCall.get_user_group(slack_handle=\"example_slack_handle\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var exampleUserGroup = Grafana.OnCall.GetUserGroup.Invoke(new()\n    {\n        SlackHandle = \"example_slack_handle\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oncall\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := oncall.GetUserGroup(ctx, \u0026oncall.GetUserGroupArgs{\n\t\t\tSlackHandle: \"example_slack_handle\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.onCall.OnCallFunctions;\nimport com.pulumi.grafana.onCall.inputs.GetUserGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var exampleUserGroup = OnCallFunctions.getUserGroup(GetUserGroupArgs.builder()\n            .slackHandle(\"example_slack_handle\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  exampleUserGroup:\n    fn::invoke:\n      function: grafana:onCall:getUserGroup\n      arguments:\n        slackHandle: example_slack_handle\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getUserGroup.\n","properties":{"slackHandle":{"type":"string"}},"type":"object","required":["slackHandle"]},"outputs":{"description":"A collection of values returned by getUserGroup.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"slackHandle":{"type":"string"},"slackId":{"type":"string"}},"required":["slackHandle","slackId","id"],"type":"object"}},"grafana:onCall/getUsers:getUsers":{"description":"* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/users/)\n","outputs":{"description":"A collection of values returned by getUsers.\n","properties":{"id":{"description":"The ID of this resource.\n","type":"string"},"users":{"items":{"$ref":"#/types/grafana:onCall/getUsersUser:getUsersUser"},"type":"array"}},"required":["id","users"],"type":"object"}},"grafana:oss/getDashboard:getDashboard":{"description":"* [Official documentation](https://grafana.com/docs/grafana/latest/dashboards/)\n* [Folder/Dashboard Search HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/folder_dashboard_search/)\n* [Dashboard HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/dashboard/)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst test = new grafana.oss.Dashboard(\"test\", {configJson: JSON.stringify({\n    id: 12345,\n    uid: \"test-ds-dashboard-uid\",\n    title: \"Production Overview\",\n    tags: [\"templated\"],\n    timezone: \"browser\",\n    schemaVersion: 16,\n    version: 0,\n    refresh: \"25s\",\n})});\nconst fromUid = grafana.oss.getDashboard({\n    uid: \"test-ds-dashboard-uid\",\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\ntest = grafana.oss.Dashboard(\"test\", config_json=json.dumps({\n    \"id\": 12345,\n    \"uid\": \"test-ds-dashboard-uid\",\n    \"title\": \"Production Overview\",\n    \"tags\": [\"templated\"],\n    \"timezone\": \"browser\",\n    \"schemaVersion\": 16,\n    \"version\": 0,\n    \"refresh\": \"25s\",\n}))\nfrom_uid = grafana.oss.get_dashboard(uid=\"test-ds-dashboard-uid\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var test = new Grafana.Oss.Dashboard(\"test\", new()\n    {\n        ConfigJson = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n        {\n            [\"id\"] = 12345,\n            [\"uid\"] = \"test-ds-dashboard-uid\",\n            [\"title\"] = \"Production Overview\",\n            [\"tags\"] = new[]\n            {\n                \"templated\",\n            },\n            [\"timezone\"] = \"browser\",\n            [\"schemaVersion\"] = 16,\n            [\"version\"] = 0,\n            [\"refresh\"] = \"25s\",\n        }),\n    });\n\n    var fromUid = Grafana.Oss.GetDashboard.Invoke(new()\n    {\n        Uid = \"test-ds-dashboard-uid\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"id\":    12345,\n\t\t\t\"uid\":   \"test-ds-dashboard-uid\",\n\t\t\t\"title\": \"Production Overview\",\n\t\t\t\"tags\": []string{\n\t\t\t\t\"templated\",\n\t\t\t},\n\t\t\t\"timezone\":      \"browser\",\n\t\t\t\"schemaVersion\": 16,\n\t\t\t\"version\":       0,\n\t\t\t\"refresh\":       \"25s\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\t_, err = oss.NewDashboard(ctx, \"test\", \u0026oss.DashboardArgs{\n\t\t\tConfigJson: pulumi.String(json0),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oss.LookupDashboard(ctx, \u0026oss.LookupDashboardArgs{\n\t\t\tUid: pulumi.StringRef(\"test-ds-dashboard-uid\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.Dashboard;\nimport com.pulumi.grafana.oss.DashboardArgs;\nimport com.pulumi.grafana.oss.OssFunctions;\nimport com.pulumi.grafana.oss.inputs.GetDashboardArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var test = new Dashboard(\"test\", DashboardArgs.builder()\n            .configJson(serializeJson(\n                jsonObject(\n                    jsonProperty(\"id\", 12345),\n                    jsonProperty(\"uid\", \"test-ds-dashboard-uid\"),\n                    jsonProperty(\"title\", \"Production Overview\"),\n                    jsonProperty(\"tags\", jsonArray(\"templated\")),\n                    jsonProperty(\"timezone\", \"browser\"),\n                    jsonProperty(\"schemaVersion\", 16),\n                    jsonProperty(\"version\", 0),\n                    jsonProperty(\"refresh\", \"25s\")\n                )))\n            .build());\n\n        final var fromUid = OssFunctions.getDashboard(GetDashboardArgs.builder()\n            .uid(\"test-ds-dashboard-uid\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  test:\n    type: grafana:oss:Dashboard\n    properties:\n      configJson:\n        fn::toJSON:\n          id: 12345\n          uid: test-ds-dashboard-uid\n          title: Production Overview\n          tags:\n            - templated\n          timezone: browser\n          schemaVersion: 16\n          version: 0\n          refresh: 25s\nvariables:\n  fromUid:\n    fn::invoke:\n      function: grafana:oss:getDashboard\n      arguments:\n        uid: test-ds-dashboard-uid\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getDashboard.\n","properties":{"dashboardId":{"type":"integer","description":"The numerical ID of the Grafana dashboard. Specify either this or \u003cspan pulumi-lang-nodejs=\"`uid`\" pulumi-lang-dotnet=\"`Uid`\" pulumi-lang-go=\"`uid`\" pulumi-lang-python=\"`uid`\" pulumi-lang-yaml=\"`uid`\" pulumi-lang-java=\"`uid`\"\u003e`uid`\u003c/span\u003e. Defaults to `-1`.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"uid":{"type":"string","description":"The uid of the Grafana dashboard. Specify either this or \u003cspan pulumi-lang-nodejs=\"`dashboardId`\" pulumi-lang-dotnet=\"`DashboardId`\" pulumi-lang-go=\"`dashboardId`\" pulumi-lang-python=\"`dashboard_id`\" pulumi-lang-yaml=\"`dashboardId`\" pulumi-lang-java=\"`dashboardId`\"\u003e`dashboard_id`\u003c/span\u003e. Defaults to ``.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getDashboard.\n","properties":{"configJson":{"description":"The complete dashboard model JSON.\n","type":"string"},"dashboardId":{"description":"The numerical ID of the Grafana dashboard. Specify either this or \u003cspan pulumi-lang-nodejs=\"`uid`\" pulumi-lang-dotnet=\"`Uid`\" pulumi-lang-go=\"`uid`\" pulumi-lang-python=\"`uid`\" pulumi-lang-yaml=\"`uid`\" pulumi-lang-java=\"`uid`\"\u003e`uid`\u003c/span\u003e. Defaults to `-1`.\n","type":"integer"},"folderUid":{"description":"The UID of the folder where the Grafana dashboard is found.\n","type":"string"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"isStarred":{"description":"Whether or not the Grafana dashboard is starred. Starred Dashboards will show up on your own Home Dashboard by default, and are a convenient way to mark Dashboards that you’re interested in.\n","type":"boolean"},"orgId":{"description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","type":"string"},"slug":{"description":"URL slug of the dashboard (deprecated).\n","type":"string"},"title":{"description":"The title of the Grafana dashboard.\n","type":"string"},"uid":{"description":"The uid of the Grafana dashboard. Specify either this or \u003cspan pulumi-lang-nodejs=\"`dashboardId`\" pulumi-lang-dotnet=\"`DashboardId`\" pulumi-lang-go=\"`dashboardId`\" pulumi-lang-python=\"`dashboard_id`\" pulumi-lang-yaml=\"`dashboardId`\" pulumi-lang-java=\"`dashboardId`\"\u003e`dashboard_id`\u003c/span\u003e. Defaults to ``.\n","type":"string"},"url":{"description":"The full URL of the dashboard.\n","type":"string"},"version":{"description":"The numerical version of the Grafana dashboard.\n","type":"integer"}},"required":["configJson","folderUid","isStarred","slug","title","url","version","id"],"type":"object"}},"grafana:oss/getDashboards:getDashboards":{"description":"Datasource for retrieving all dashboards. Specify list of folder IDs to search in for dashboards.\n\n* [Official documentation](https://grafana.com/docs/grafana/latest/dashboards/)\n* [Folder/Dashboard Search HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/folder_dashboard_search/)\n* [Dashboard HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/dashboard/)\n\n","inputs":{"description":"A collection of arguments for invoking getDashboards.\n","properties":{"folderUids":{"type":"array","items":{"type":"string"},"description":"UIDs of Grafana folders containing dashboards. Specify to filter for dashboards by folder (eg. `[\"General\"]` for General folder), or leave blank to get all dashboards in all folders.\n"},"limit":{"type":"integer","description":"Maximum number of dashboard search results to return. Defaults to \u003cspan pulumi-lang-nodejs=\"`5000`\" pulumi-lang-dotnet=\"`5000`\" pulumi-lang-go=\"`5000`\" pulumi-lang-python=\"`5000`\" pulumi-lang-yaml=\"`5000`\" pulumi-lang-java=\"`5000`\"\u003e`5000`\u003c/span\u003e.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"tags":{"type":"array","items":{"type":"string"},"description":"List of string Grafana dashboard tags to search for, eg. `[\"prod\"]`. Used only as search input, i.e., attribute value will remain unchanged.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getDashboards.\n","properties":{"dashboards":{"items":{"$ref":"#/types/grafana:oss/getDashboardsDashboard:getDashboardsDashboard"},"type":"array"},"folderUids":{"description":"UIDs of Grafana folders containing dashboards. Specify to filter for dashboards by folder (eg. `[\"General\"]` for General folder), or leave blank to get all dashboards in all folders.\n","items":{"type":"string"},"type":"array"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"limit":{"description":"Maximum number of dashboard search results to return. Defaults to \u003cspan pulumi-lang-nodejs=\"`5000`\" pulumi-lang-dotnet=\"`5000`\" pulumi-lang-go=\"`5000`\" pulumi-lang-python=\"`5000`\" pulumi-lang-yaml=\"`5000`\" pulumi-lang-java=\"`5000`\"\u003e`5000`\u003c/span\u003e.\n","type":"integer"},"orgId":{"description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","type":"string"},"tags":{"description":"List of string Grafana dashboard tags to search for, eg. `[\"prod\"]`. Used only as search input, i.e., attribute value will remain unchanged.\n","items":{"type":"string"},"type":"array"}},"required":["dashboards","id"],"type":"object"}},"grafana:oss/getDataSource:getDataSource":{"description":"Get details about a Grafana Datasource querying by either name, uid or ID\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst prometheus = new grafana.oss.DataSource(\"prometheus\", {\n    type: \"prometheus\",\n    name: \"prometheus-ds-test\",\n    uid: \"prometheus-ds-test-uid\",\n    url: \"https://my-instance.com\",\n    basicAuthEnabled: true,\n    basicAuthUsername: \"username\",\n    jsonDataEncoded: JSON.stringify({\n        httpMethod: \"POST\",\n        prometheusType: \"Mimir\",\n        prometheusVersion: \"2.4.0\",\n    }),\n    secureJsonDataEncoded: JSON.stringify({\n        basicAuthPassword: \"password\",\n    }),\n});\nconst fromName = grafana.oss.getDataSourceOutput({\n    name: prometheus.name,\n});\nconst fromUid = grafana.oss.getDataSourceOutput({\n    uid: prometheus.uid,\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\nprometheus = grafana.oss.DataSource(\"prometheus\",\n    type=\"prometheus\",\n    name=\"prometheus-ds-test\",\n    uid=\"prometheus-ds-test-uid\",\n    url=\"https://my-instance.com\",\n    basic_auth_enabled=True,\n    basic_auth_username=\"username\",\n    json_data_encoded=json.dumps({\n        \"httpMethod\": \"POST\",\n        \"prometheusType\": \"Mimir\",\n        \"prometheusVersion\": \"2.4.0\",\n    }),\n    secure_json_data_encoded=json.dumps({\n        \"basicAuthPassword\": \"password\",\n    }))\nfrom_name = grafana.oss.get_data_source_output(name=prometheus.name)\nfrom_uid = grafana.oss.get_data_source_output(uid=prometheus.uid)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var prometheus = new Grafana.Oss.DataSource(\"prometheus\", new()\n    {\n        Type = \"prometheus\",\n        Name = \"prometheus-ds-test\",\n        Uid = \"prometheus-ds-test-uid\",\n        Url = \"https://my-instance.com\",\n        BasicAuthEnabled = true,\n        BasicAuthUsername = \"username\",\n        JsonDataEncoded = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n        {\n            [\"httpMethod\"] = \"POST\",\n            [\"prometheusType\"] = \"Mimir\",\n            [\"prometheusVersion\"] = \"2.4.0\",\n        }),\n        SecureJsonDataEncoded = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n        {\n            [\"basicAuthPassword\"] = \"password\",\n        }),\n    });\n\n    var fromName = Grafana.Oss.GetDataSource.Invoke(new()\n    {\n        Name = prometheus.Name,\n    });\n\n    var fromUid = Grafana.Oss.GetDataSource.Invoke(new()\n    {\n        Uid = prometheus.Uid,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"httpMethod\":        \"POST\",\n\t\t\t\"prometheusType\":    \"Mimir\",\n\t\t\t\"prometheusVersion\": \"2.4.0\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\ttmpJSON1, err := json.Marshal(map[string]interface{}{\n\t\t\t\"basicAuthPassword\": \"password\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson1 := string(tmpJSON1)\n\t\tprometheus, err := oss.NewDataSource(ctx, \"prometheus\", \u0026oss.DataSourceArgs{\n\t\t\tType:                  pulumi.String(\"prometheus\"),\n\t\t\tName:                  pulumi.String(\"prometheus-ds-test\"),\n\t\t\tUid:                   pulumi.String(\"prometheus-ds-test-uid\"),\n\t\t\tUrl:                   pulumi.String(\"https://my-instance.com\"),\n\t\t\tBasicAuthEnabled:      pulumi.Bool(true),\n\t\t\tBasicAuthUsername:     pulumi.String(\"username\"),\n\t\t\tJsonDataEncoded:       pulumi.String(json0),\n\t\t\tSecureJsonDataEncoded: pulumi.String(json1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_ = oss.LookupDataSourceOutput(ctx, oss.GetDataSourceOutputArgs{\n\t\t\tName: prometheus.Name,\n\t\t}, nil)\n\t\t_ = oss.LookupDataSourceOutput(ctx, oss.GetDataSourceOutputArgs{\n\t\t\tUid: prometheus.Uid,\n\t\t}, nil)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.DataSource;\nimport com.pulumi.grafana.oss.DataSourceArgs;\nimport com.pulumi.grafana.oss.OssFunctions;\nimport com.pulumi.grafana.oss.inputs.GetDataSourceArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var prometheus = new DataSource(\"prometheus\", DataSourceArgs.builder()\n            .type(\"prometheus\")\n            .name(\"prometheus-ds-test\")\n            .uid(\"prometheus-ds-test-uid\")\n            .url(\"https://my-instance.com\")\n            .basicAuthEnabled(true)\n            .basicAuthUsername(\"username\")\n            .jsonDataEncoded(serializeJson(\n                jsonObject(\n                    jsonProperty(\"httpMethod\", \"POST\"),\n                    jsonProperty(\"prometheusType\", \"Mimir\"),\n                    jsonProperty(\"prometheusVersion\", \"2.4.0\")\n                )))\n            .secureJsonDataEncoded(serializeJson(\n                jsonObject(\n                    jsonProperty(\"basicAuthPassword\", \"password\")\n                )))\n            .build());\n\n        final var fromName = OssFunctions.getDataSource(GetDataSourceArgs.builder()\n            .name(prometheus.name())\n            .build());\n\n        final var fromUid = OssFunctions.getDataSource(GetDataSourceArgs.builder()\n            .uid(prometheus.uid())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  prometheus:\n    type: grafana:oss:DataSource\n    properties:\n      type: prometheus\n      name: prometheus-ds-test\n      uid: prometheus-ds-test-uid\n      url: https://my-instance.com\n      basicAuthEnabled: true\n      basicAuthUsername: username\n      jsonDataEncoded:\n        fn::toJSON:\n          httpMethod: POST\n          prometheusType: Mimir\n          prometheusVersion: 2.4.0\n      secureJsonDataEncoded:\n        fn::toJSON:\n          basicAuthPassword: password\nvariables:\n  fromName:\n    fn::invoke:\n      function: grafana:oss:getDataSource\n      arguments:\n        name: ${prometheus.name}\n  fromUid:\n    fn::invoke:\n      function: grafana:oss:getDataSource\n      arguments:\n        uid: ${prometheus.uid}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getDataSource.\n","properties":{"name":{"type":"string"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"uid":{"type":"string"}},"type":"object"},"outputs":{"description":"A collection of values returned by getDataSource.\n","properties":{"accessMode":{"description":"The method by which Grafana will access the data source: \u003cspan pulumi-lang-nodejs=\"`proxy`\" pulumi-lang-dotnet=\"`Proxy`\" pulumi-lang-go=\"`proxy`\" pulumi-lang-python=\"`proxy`\" pulumi-lang-yaml=\"`proxy`\" pulumi-lang-java=\"`proxy`\"\u003e`proxy`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`direct`\" pulumi-lang-dotnet=\"`Direct`\" pulumi-lang-go=\"`direct`\" pulumi-lang-python=\"`direct`\" pulumi-lang-yaml=\"`direct`\" pulumi-lang-java=\"`direct`\"\u003e`direct`\u003c/span\u003e.\n","type":"string"},"basicAuthEnabled":{"description":"Whether to enable basic auth for the data source.\n","type":"boolean"},"basicAuthUsername":{"description":"Basic auth username.\n","type":"string"},"databaseName":{"description":"(Required by some data source types) The name of the database to use on the selected data source server.\n","type":"string"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"isDefault":{"description":"Whether to set the data source as default. This should only be \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e to a single data source.\n","type":"boolean"},"jsonDataEncoded":{"description":"Serialized JSON string containing the json data. This attribute can be used to pass configuration options to the data source. To figure out what options a datasource has available, see its docs or inspect the network data when saving it from the Grafana UI. Note that keys in this map are usually camelCased.\n","type":"string"},"name":{"type":"string"},"orgId":{"description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","type":"string"},"privateDataSourceConnectNetworkId":{"description":"(Can only be used with data sources in Grafana Cloud) The ID of the Private Data source Connect network to use with this data source.\n","type":"string"},"type":{"description":"The data source type. Must be one of the supported data source keywords.\n","type":"string"},"uid":{"type":"string"},"url":{"description":"The URL for the data source. The type of URL required varies depending on the chosen data source type.\n","type":"string"},"username":{"description":"(Required by some data source types) The username to use to authenticate to the data source.\n","type":"string"}},"required":["accessMode","basicAuthEnabled","basicAuthUsername","databaseName","isDefault","jsonDataEncoded","name","privateDataSourceConnectNetworkId","type","uid","url","username","id"],"type":"object"}},"grafana:oss/getFolder:getFolder":{"description":"* [Official documentation](https://grafana.com/docs/grafana/latest/dashboards/manage-dashboards/)\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/folder/)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst test = new grafana.oss.Folder(\"test\", {\n    title: \"test-folder\",\n    uid: \"test-ds-folder-uid\",\n});\nconst fromTitle = grafana.oss.getFolderOutput({\n    title: test.title,\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\ntest = grafana.oss.Folder(\"test\",\n    title=\"test-folder\",\n    uid=\"test-ds-folder-uid\")\nfrom_title = grafana.oss.get_folder_output(title=test.title)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var test = new Grafana.Oss.Folder(\"test\", new()\n    {\n        Title = \"test-folder\",\n        Uid = \"test-ds-folder-uid\",\n    });\n\n    var fromTitle = Grafana.Oss.GetFolder.Invoke(new()\n    {\n        Title = test.Title,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := oss.NewFolder(ctx, \"test\", \u0026oss.FolderArgs{\n\t\t\tTitle: pulumi.String(\"test-folder\"),\n\t\t\tUid:   pulumi.String(\"test-ds-folder-uid\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_ = oss.LookupFolderOutput(ctx, oss.GetFolderOutputArgs{\n\t\t\tTitle: test.Title,\n\t\t}, nil)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.Folder;\nimport com.pulumi.grafana.oss.FolderArgs;\nimport com.pulumi.grafana.oss.OssFunctions;\nimport com.pulumi.grafana.oss.inputs.GetFolderArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var test = new Folder(\"test\", FolderArgs.builder()\n            .title(\"test-folder\")\n            .uid(\"test-ds-folder-uid\")\n            .build());\n\n        final var fromTitle = OssFunctions.getFolder(GetFolderArgs.builder()\n            .title(test.title())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  test:\n    type: grafana:oss:Folder\n    properties:\n      title: test-folder\n      uid: test-ds-folder-uid\nvariables:\n  fromTitle:\n    fn::invoke:\n      function: grafana:oss:getFolder\n      arguments:\n        title: ${test.title}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getFolder.\n","properties":{"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"title":{"type":"string","description":"The title of the folder. If not set, only the uid is used to find the folder.\n"},"uid":{"type":"string","description":"The uid of the folder. If not set, only the title of the folder is used to find the folder.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getFolder.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"orgId":{"description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","type":"string"},"parentFolderUid":{"description":"The uid of the parent folder. If set, the folder will be nested. If not set, the folder will be created in the root folder. Note: This requires the nestedFolders feature flag to be enabled on your Grafana instance.\n","type":"string"},"title":{"description":"The title of the folder. If not set, only the uid is used to find the folder.\n","type":"string"},"uid":{"description":"The uid of the folder. If not set, only the title of the folder is used to find the folder.\n","type":"string"},"url":{"description":"The full URL of the folder.\n","type":"string"}},"required":["parentFolderUid","uid","url","id"],"type":"object"}},"grafana:oss/getFolders:getFolders":{"description":"* [Official documentation](https://grafana.com/docs/grafana/latest/dashboards/manage-dashboards/)\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/folder/)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst testA = new grafana.oss.Folder(\"test_a\", {\n    title: \"test-folder-a\",\n    uid: \"test-ds-folder-uid-a\",\n});\nconst testB = new grafana.oss.Folder(\"test_b\", {\n    title: \"test-folder-b\",\n    uid: \"test-ds-folder-uid-b\",\n});\nconst test = grafana.oss.getFolders({});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\ntest_a = grafana.oss.Folder(\"test_a\",\n    title=\"test-folder-a\",\n    uid=\"test-ds-folder-uid-a\")\ntest_b = grafana.oss.Folder(\"test_b\",\n    title=\"test-folder-b\",\n    uid=\"test-ds-folder-uid-b\")\ntest = grafana.oss.get_folders()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var testA = new Grafana.Oss.Folder(\"test_a\", new()\n    {\n        Title = \"test-folder-a\",\n        Uid = \"test-ds-folder-uid-a\",\n    });\n\n    var testB = new Grafana.Oss.Folder(\"test_b\", new()\n    {\n        Title = \"test-folder-b\",\n        Uid = \"test-ds-folder-uid-b\",\n    });\n\n    var test = Grafana.Oss.GetFolders.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := oss.NewFolder(ctx, \"test_a\", \u0026oss.FolderArgs{\n\t\t\tTitle: pulumi.String(\"test-folder-a\"),\n\t\t\tUid:   pulumi.String(\"test-ds-folder-uid-a\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oss.NewFolder(ctx, \"test_b\", \u0026oss.FolderArgs{\n\t\t\tTitle: pulumi.String(\"test-folder-b\"),\n\t\t\tUid:   pulumi.String(\"test-ds-folder-uid-b\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oss.GetFolders(ctx, \u0026oss.GetFoldersArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.Folder;\nimport com.pulumi.grafana.oss.FolderArgs;\nimport com.pulumi.grafana.oss.OssFunctions;\nimport com.pulumi.grafana.oss.inputs.GetFoldersArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var testA = new Folder(\"testA\", FolderArgs.builder()\n            .title(\"test-folder-a\")\n            .uid(\"test-ds-folder-uid-a\")\n            .build());\n\n        var testB = new Folder(\"testB\", FolderArgs.builder()\n            .title(\"test-folder-b\")\n            .uid(\"test-ds-folder-uid-b\")\n            .build());\n\n        final var test = OssFunctions.getFolders(GetFoldersArgs.builder()\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  testA:\n    type: grafana:oss:Folder\n    name: test_a\n    properties:\n      title: test-folder-a\n      uid: test-ds-folder-uid-a\n  testB:\n    type: grafana:oss:Folder\n    name: test_b\n    properties:\n      title: test-folder-b\n      uid: test-ds-folder-uid-b\nvariables:\n  test:\n    fn::invoke:\n      function: grafana:oss:getFolders\n      arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getFolders.\n","properties":{"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true}},"type":"object"},"outputs":{"description":"A collection of values returned by getFolders.\n","properties":{"folders":{"description":"The Grafana instance's folders.\n","items":{"$ref":"#/types/grafana:oss/getFoldersFolder:getFoldersFolder"},"type":"array"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"orgId":{"description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","type":"string"}},"required":["folders","id"],"type":"object"}},"grafana:oss/getLibraryPanel:getLibraryPanel":{"description":"Data source for retrieving a single library panel by name or uid.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\nimport * as std from \"@pulumi/std\";\n\n// create a minimal library panel inside the General folder\nconst test = new grafana.oss.LibraryPanel(\"test\", {\n    name: \"test name\",\n    modelJson: JSON.stringify({\n        title: \"test name\",\n        type: \"text\",\n        version: 0,\n    }),\n});\nconst fromName = grafana.oss.getLibraryPanelOutput({\n    name: test.name,\n});\nconst fromUid = grafana.oss.getLibraryPanelOutput({\n    uid: test.uid,\n});\n// create library panels to be added to a dashboard\nconst dashboard = new grafana.oss.LibraryPanel(\"dashboard\", {\n    name: \"panel\",\n    modelJson: JSON.stringify({\n        gridPos: {\n            x: 0,\n            y: 0,\n            h: 10,\n            w: 10,\n        },\n        title: \"panel\",\n        type: \"text\",\n        version: 0,\n    }),\n});\n// create a dashboard using the library panel\n// `merge()` will add `libraryPanel` attribute to each library panel JSON\n// Grafana will then connect any library panels found in dashboard JSON\nconst withLibraryPanel = new grafana.oss.Dashboard(\"with_library_panel\", {configJson: JSON.stringify({\n    id: 12345,\n    panels: [std.index.merge({\n        input: [\n            std.index.jsondecode({\n                input: dashboard.modelJson,\n            }).result,\n            {\n                libraryPanel: {\n                    name: dashboard.name,\n                    uid: dashboard.uid,\n                },\n            },\n        ],\n    }).result],\n    title: \"Production Overview\",\n    tags: [\"templated\"],\n    timezone: \"browser\",\n    schemaVersion: 16,\n    version: 0,\n    refresh: \"25s\",\n})});\n// dashboard_ids list attribute should contain dashboard id 12345\nconst connectedToDashboard = grafana.oss.getLibraryPanelOutput({\n    uid: dashboard.uid,\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumi_grafana as grafana\nimport pulumi_std as std\nimport pulumiverse_grafana as grafana\n\n# create a minimal library panel inside the General folder\ntest = grafana.oss.LibraryPanel(\"test\",\n    name=\"test name\",\n    model_json=json.dumps({\n        \"title\": \"test name\",\n        \"type\": \"text\",\n        \"version\": 0,\n    }))\nfrom_name = grafana.oss.get_library_panel_output(name=test.name)\nfrom_uid = grafana.oss.get_library_panel_output(uid=test.uid)\n# create library panels to be added to a dashboard\ndashboard = grafana.oss.LibraryPanel(\"dashboard\",\n    name=\"panel\",\n    model_json=json.dumps({\n        \"gridPos\": {\n            \"x\": 0,\n            \"y\": 0,\n            \"h\": 10,\n            \"w\": 10,\n        },\n        \"title\": \"panel\",\n        \"type\": \"text\",\n        \"version\": 0,\n    }))\n# create a dashboard using the library panel\n# `merge()` will add `libraryPanel` attribute to each library panel JSON\n# Grafana will then connect any library panels found in dashboard JSON\nwith_library_panel = grafana.oss.Dashboard(\"with_library_panel\", config_json=json.dumps({\n    \"id\": 12345,\n    \"panels\": [std.index.merge(input=[\n        std.index.jsondecode(input=dashboard.model_json)[\"result\"],\n        {\n            \"libraryPanel\": {\n                \"name\": dashboard.name,\n                \"uid\": dashboard.uid,\n            },\n        },\n    ])[\"result\"]],\n    \"title\": \"Production Overview\",\n    \"tags\": [\"templated\"],\n    \"timezone\": \"browser\",\n    \"schemaVersion\": 16,\n    \"version\": 0,\n    \"refresh\": \"25s\",\n}))\n# dashboard_ids list attribute should contain dashboard id 12345\nconnected_to_dashboard = grafana.oss.get_library_panel_output(uid=dashboard.uid)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\nusing Std = Pulumi.Std;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    // create a minimal library panel inside the General folder\n    var test = new Grafana.Oss.LibraryPanel(\"test\", new()\n    {\n        Name = \"test name\",\n        ModelJson = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n        {\n            [\"title\"] = \"test name\",\n            [\"type\"] = \"text\",\n            [\"version\"] = 0,\n        }),\n    });\n\n    var fromName = Grafana.Oss.GetLibraryPanel.Invoke(new()\n    {\n        Name = test.Name,\n    });\n\n    var fromUid = Grafana.Oss.GetLibraryPanel.Invoke(new()\n    {\n        Uid = test.Uid,\n    });\n\n    // create library panels to be added to a dashboard\n    var dashboard = new Grafana.Oss.LibraryPanel(\"dashboard\", new()\n    {\n        Name = \"panel\",\n        ModelJson = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n        {\n            [\"gridPos\"] = new Dictionary\u003cstring, object?\u003e\n            {\n                [\"x\"] = 0,\n                [\"y\"] = 0,\n                [\"h\"] = 10,\n                [\"w\"] = 10,\n            },\n            [\"title\"] = \"panel\",\n            [\"type\"] = \"text\",\n            [\"version\"] = 0,\n        }),\n    });\n\n    // create a dashboard using the library panel\n    // `merge()` will add `libraryPanel` attribute to each library panel JSON\n    // Grafana will then connect any library panels found in dashboard JSON\n    var withLibraryPanel = new Grafana.Oss.Dashboard(\"with_library_panel\", new()\n    {\n        ConfigJson = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n        {\n            [\"id\"] = 12345,\n            [\"panels\"] = new[]\n            {\n                Std.Index.Merge.Invoke(new()\n                {\n                    Input = new[]\n                    {\n                        Std.Index.Jsondecode.Invoke(new()\n                        {\n                            Input = dashboard.ModelJson,\n                        }).Result,\n                        \n                        {\n                            { \"libraryPanel\", \n                            {\n                                { \"name\", dashboard.Name },\n                                { \"uid\", dashboard.Uid },\n                            } },\n                        },\n                    },\n                }).Result,\n            },\n            [\"title\"] = \"Production Overview\",\n            [\"tags\"] = new[]\n            {\n                \"templated\",\n            },\n            [\"timezone\"] = \"browser\",\n            [\"schemaVersion\"] = 16,\n            [\"version\"] = 0,\n            [\"refresh\"] = \"25s\",\n        }),\n    });\n\n    // dashboard_ids list attribute should contain dashboard id 12345\n    var connectedToDashboard = Grafana.Oss.GetLibraryPanel.Invoke(new()\n    {\n        Uid = dashboard.Uid,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/pulumi/pulumi-std/sdk/go/std\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"title\":   \"test name\",\n\t\t\t\"type\":    \"text\",\n\t\t\t\"version\": 0,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\t// create a minimal library panel inside the General folder\n\t\ttest, err := oss.NewLibraryPanel(ctx, \"test\", \u0026oss.LibraryPanelArgs{\n\t\t\tName:      pulumi.String(\"test name\"),\n\t\t\tModelJson: pulumi.String(json0),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_ = oss.LookupLibraryPanelOutput(ctx, oss.GetLibraryPanelOutputArgs{\n\t\t\tName: test.Name,\n\t\t}, nil)\n\t\t_ = oss.LookupLibraryPanelOutput(ctx, oss.GetLibraryPanelOutputArgs{\n\t\t\tUid: test.Uid,\n\t\t}, nil)\n\t\ttmpJSON1, err := json.Marshal(map[string]interface{}{\n\t\t\t\"gridPos\": map[string]interface{}{\n\t\t\t\t\"x\": 0,\n\t\t\t\t\"y\": 0,\n\t\t\t\t\"h\": 10,\n\t\t\t\t\"w\": 10,\n\t\t\t},\n\t\t\t\"title\":   \"panel\",\n\t\t\t\"type\":    \"text\",\n\t\t\t\"version\": 0,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson1 := string(tmpJSON1)\n\t\t// create library panels to be added to a dashboard\n\t\tdashboard, err := oss.NewLibraryPanel(ctx, \"dashboard\", \u0026oss.LibraryPanelArgs{\n\t\t\tName:      pulumi.String(\"panel\"),\n\t\t\tModelJson: pulumi.String(json1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttmpJSON2, err := json.Marshal(map[string]interface{}{\n\t\t\t\"id\": 12345,\n\t\t\t\"panels\": []interface{}{\n\t\t\t\tstd.Merge(ctx, map[string]interface{}{\n\t\t\t\t\t\"input\": []interface{}{\n\t\t\t\t\t\tstd.Jsondecode(ctx, map[string]interface{}{\n\t\t\t\t\t\t\t\"input\": dashboard.ModelJson,\n\t\t\t\t\t\t}, nil).Result,\n\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\"libraryPanel\": map[string]interface{}{\n\t\t\t\t\t\t\t\t\"name\": dashboard.Name,\n\t\t\t\t\t\t\t\t\"uid\":  dashboard.Uid,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}, nil).Result,\n\t\t\t},\n\t\t\t\"title\": \"Production Overview\",\n\t\t\t\"tags\": []string{\n\t\t\t\t\"templated\",\n\t\t\t},\n\t\t\t\"timezone\":      \"browser\",\n\t\t\t\"schemaVersion\": 16,\n\t\t\t\"version\":       0,\n\t\t\t\"refresh\":       \"25s\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson2 := string(tmpJSON2)\n\t\t// create a dashboard using the library panel\n\t\t// `merge()` will add `libraryPanel` attribute to each library panel JSON\n\t\t// Grafana will then connect any library panels found in dashboard JSON\n\t\t_, err = oss.NewDashboard(ctx, \"with_library_panel\", \u0026oss.DashboardArgs{\n\t\t\tConfigJson: pulumi.String(json2),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// dashboard_ids list attribute should contain dashboard id 12345\n\t\t_ = oss.LookupLibraryPanelOutput(ctx, oss.GetLibraryPanelOutputArgs{\n\t\t\tUid: dashboard.Uid,\n\t\t}, nil)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.LibraryPanel;\nimport com.pulumi.grafana.oss.LibraryPanelArgs;\nimport com.pulumi.grafana.oss.OssFunctions;\nimport com.pulumi.grafana.oss.inputs.GetLibraryPanelArgs;\nimport com.pulumi.grafana.oss.Dashboard;\nimport com.pulumi.grafana.oss.DashboardArgs;\nimport com.pulumi.std.StdFunctions;\nimport static com.pulumi.codegen.internal.Serialization.*;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        // create a minimal library panel inside the General folder\n        var test = new LibraryPanel(\"test\", LibraryPanelArgs.builder()\n            .name(\"test name\")\n            .modelJson(serializeJson(\n                jsonObject(\n                    jsonProperty(\"title\", \"test name\"),\n                    jsonProperty(\"type\", \"text\"),\n                    jsonProperty(\"version\", 0)\n                )))\n            .build());\n\n        final var fromName = OssFunctions.getLibraryPanel(GetLibraryPanelArgs.builder()\n            .name(test.name())\n            .build());\n\n        final var fromUid = OssFunctions.getLibraryPanel(GetLibraryPanelArgs.builder()\n            .uid(test.uid())\n            .build());\n\n        // create library panels to be added to a dashboard\n        var dashboard = new LibraryPanel(\"dashboard\", LibraryPanelArgs.builder()\n            .name(\"panel\")\n            .modelJson(serializeJson(\n                jsonObject(\n                    jsonProperty(\"gridPos\", jsonObject(\n                        jsonProperty(\"x\", 0),\n                        jsonProperty(\"y\", 0),\n                        jsonProperty(\"h\", 10),\n                        jsonProperty(\"w\", 10)\n                    )),\n                    jsonProperty(\"title\", \"panel\"),\n                    jsonProperty(\"type\", \"text\"),\n                    jsonProperty(\"version\", 0)\n                )))\n            .build());\n\n        // create a dashboard using the library panel\n        // `merge()` will add `libraryPanel` attribute to each library panel JSON\n        // Grafana will then connect any library panels found in dashboard JSON\n        var withLibraryPanel = new Dashboard(\"withLibraryPanel\", DashboardArgs.builder()\n            .configJson(serializeJson(\n                jsonObject(\n                    jsonProperty(\"id\", 12345),\n                    jsonProperty(\"panels\", jsonArray(StdFunctions.merge(Map.of(\"input\",                     \n                        StdFunctions.jsondecode(Map.of(\"input\", dashboard.modelJson())).result(),\n                        Map.of(\"libraryPanel\", Map.ofEntries(\n                            Map.entry(\"name\", dashboard.name()),\n                            Map.entry(\"uid\", dashboard.uid())\n                        )))).result())),\n                    jsonProperty(\"title\", \"Production Overview\"),\n                    jsonProperty(\"tags\", jsonArray(\"templated\")),\n                    jsonProperty(\"timezone\", \"browser\"),\n                    jsonProperty(\"schemaVersion\", 16),\n                    jsonProperty(\"version\", 0),\n                    jsonProperty(\"refresh\", \"25s\")\n                )))\n            .build());\n\n        // dashboard_ids list attribute should contain dashboard id 12345\n        final var connectedToDashboard = OssFunctions.getLibraryPanel(GetLibraryPanelArgs.builder()\n            .uid(dashboard.uid())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  # create a minimal library panel inside the General folder\n  test:\n    type: grafana:oss:LibraryPanel\n    properties:\n      name: test name\n      modelJson:\n        fn::toJSON:\n          title: test name\n          type: text\n          version: 0\n  # create library panels to be added to a dashboard\n  dashboard:\n    type: grafana:oss:LibraryPanel\n    properties:\n      name: panel\n      modelJson:\n        fn::toJSON:\n          gridPos:\n            x: 0\n            y: 0\n            h: 10\n            w: 10\n          title: panel\n          type: text\n          version: 0\n  # create a dashboard using the library panel\n  # // `merge()` will add `libraryPanel` attribute to each library panel JSON\n  # // Grafana will then connect any library panels found in dashboard JSON\n  withLibraryPanel:\n    type: grafana:oss:Dashboard\n    name: with_library_panel\n    properties:\n      configJson:\n        fn::toJSON:\n          id: 12345\n          panels:\n            - fn::invoke:\n                function: std:merge\n                arguments:\n                  input:\n                    - fn::invoke:\n                        function: std:jsondecode\n                        arguments:\n                          input: ${dashboard.modelJson}\n                        return: result\n                    - libraryPanel:\n                        name: ${dashboard.name}\n                        uid: ${dashboard.uid}\n                return: result\n          title: Production Overview\n          tags:\n            - templated\n          timezone: browser\n          schemaVersion: 16\n          version: 0\n          refresh: 25s\nvariables:\n  fromName:\n    fn::invoke:\n      function: grafana:oss:getLibraryPanel\n      arguments:\n        name: ${test.name}\n  fromUid:\n    fn::invoke:\n      function: grafana:oss:getLibraryPanel\n      arguments:\n        uid: ${test.uid}\n  # dashboard_ids list attribute should contain dashboard id 12345\n  connectedToDashboard:\n    fn::invoke:\n      function: grafana:oss:getLibraryPanel\n      arguments:\n        uid: ${dashboard.uid}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getLibraryPanel.\n","properties":{"name":{"type":"string","description":"Name of the library panel.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true},"uid":{"type":"string","description":"The unique identifier (UID) of the library panel.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getLibraryPanel.\n","properties":{"created":{"description":"Timestamp when the library panel was created.\n","type":"string"},"dashboardIds":{"description":"Numerical IDs of Grafana dashboards containing the library panel.\n","items":{"type":"integer"},"type":"array"},"description":{"description":"Description of the library panel.\n","type":"string"},"folderName":{"description":"Name of the folder containing the library panel.\n","type":"string"},"folderUid":{"description":"Unique ID (UID) of the folder containing the library panel.\n","type":"string"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"modelJson":{"description":"The JSON model for the library panel.\n","type":"string"},"name":{"description":"Name of the library panel.\n","type":"string"},"orgId":{"description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","type":"string"},"panelId":{"description":"The numeric ID of the library panel computed by Grafana.\n","type":"integer"},"type":{"description":"Type of the library panel (eg. text).\n","type":"string"},"uid":{"description":"The unique identifier (UID) of the library panel.\n","type":"string"},"updated":{"description":"Timestamp when the library panel was last modified.\n","type":"string"},"version":{"description":"Version of the library panel.\n","type":"integer"}},"required":["created","dashboardIds","description","folderName","folderUid","modelJson","panelId","type","updated","version","id"],"type":"object"}},"grafana:oss/getLibraryPanels:getLibraryPanels":{"description":"## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst test = new grafana.oss.LibraryPanel(\"test\", {\n    name: \"panelname\",\n    modelJson: JSON.stringify({\n        title: \"test name\",\n        type: \"text\",\n        version: 0,\n        description: \"test description\",\n    }),\n});\nconst testFolder = new grafana.oss.Folder(\"test\", {\n    title: \"Panel Folder\",\n    uid: \"panelname-folder\",\n});\nconst folder = new grafana.oss.LibraryPanel(\"folder\", {\n    name: \"panelname In Folder\",\n    folderUid: testFolder.uid,\n    modelJson: JSON.stringify({\n        gridPos: {\n            x: 0,\n            y: 0,\n            h: 10,\n            w: 10,\n        },\n        title: \"panel\",\n        type: \"text\",\n        version: 0,\n    }),\n});\nconst all = grafana.oss.getLibraryPanels({});\n```\n```python\nimport pulumi\nimport json\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\ntest = grafana.oss.LibraryPanel(\"test\",\n    name=\"panelname\",\n    model_json=json.dumps({\n        \"title\": \"test name\",\n        \"type\": \"text\",\n        \"version\": 0,\n        \"description\": \"test description\",\n    }))\ntest_folder = grafana.oss.Folder(\"test\",\n    title=\"Panel Folder\",\n    uid=\"panelname-folder\")\nfolder = grafana.oss.LibraryPanel(\"folder\",\n    name=\"panelname In Folder\",\n    folder_uid=test_folder.uid,\n    model_json=json.dumps({\n        \"gridPos\": {\n            \"x\": 0,\n            \"y\": 0,\n            \"h\": 10,\n            \"w\": 10,\n        },\n        \"title\": \"panel\",\n        \"type\": \"text\",\n        \"version\": 0,\n    }))\nall = grafana.oss.get_library_panels()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var test = new Grafana.Oss.LibraryPanel(\"test\", new()\n    {\n        Name = \"panelname\",\n        ModelJson = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n        {\n            [\"title\"] = \"test name\",\n            [\"type\"] = \"text\",\n            [\"version\"] = 0,\n            [\"description\"] = \"test description\",\n        }),\n    });\n\n    var testFolder = new Grafana.Oss.Folder(\"test\", new()\n    {\n        Title = \"Panel Folder\",\n        Uid = \"panelname-folder\",\n    });\n\n    var folder = new Grafana.Oss.LibraryPanel(\"folder\", new()\n    {\n        Name = \"panelname In Folder\",\n        FolderUid = testFolder.Uid,\n        ModelJson = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n        {\n            [\"gridPos\"] = new Dictionary\u003cstring, object?\u003e\n            {\n                [\"x\"] = 0,\n                [\"y\"] = 0,\n                [\"h\"] = 10,\n                [\"w\"] = 10,\n            },\n            [\"title\"] = \"panel\",\n            [\"type\"] = \"text\",\n            [\"version\"] = 0,\n        }),\n    });\n\n    var all = Grafana.Oss.GetLibraryPanels.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"title\":       \"test name\",\n\t\t\t\"type\":        \"text\",\n\t\t\t\"version\":     0,\n\t\t\t\"description\": \"test description\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\t_, err = oss.NewLibraryPanel(ctx, \"test\", \u0026oss.LibraryPanelArgs{\n\t\t\tName:      pulumi.String(\"panelname\"),\n\t\t\tModelJson: pulumi.String(json0),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestFolder, err := oss.NewFolder(ctx, \"test\", \u0026oss.FolderArgs{\n\t\t\tTitle: pulumi.String(\"Panel Folder\"),\n\t\t\tUid:   pulumi.String(\"panelname-folder\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttmpJSON1, err := json.Marshal(map[string]interface{}{\n\t\t\t\"gridPos\": map[string]interface{}{\n\t\t\t\t\"x\": 0,\n\t\t\t\t\"y\": 0,\n\t\t\t\t\"h\": 10,\n\t\t\t\t\"w\": 10,\n\t\t\t},\n\t\t\t\"title\":   \"panel\",\n\t\t\t\"type\":    \"text\",\n\t\t\t\"version\": 0,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson1 := string(tmpJSON1)\n\t\t_, err = oss.NewLibraryPanel(ctx, \"folder\", \u0026oss.LibraryPanelArgs{\n\t\t\tName:      pulumi.String(\"panelname In Folder\"),\n\t\t\tFolderUid: testFolder.Uid,\n\t\t\tModelJson: pulumi.String(json1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oss.GetLibraryPanels(ctx, \u0026oss.GetLibraryPanelsArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.LibraryPanel;\nimport com.pulumi.grafana.oss.LibraryPanelArgs;\nimport com.pulumi.grafana.oss.Folder;\nimport com.pulumi.grafana.oss.FolderArgs;\nimport com.pulumi.grafana.oss.OssFunctions;\nimport com.pulumi.grafana.oss.inputs.GetLibraryPanelsArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var test = new LibraryPanel(\"test\", LibraryPanelArgs.builder()\n            .name(\"panelname\")\n            .modelJson(serializeJson(\n                jsonObject(\n                    jsonProperty(\"title\", \"test name\"),\n                    jsonProperty(\"type\", \"text\"),\n                    jsonProperty(\"version\", 0),\n                    jsonProperty(\"description\", \"test description\")\n                )))\n            .build());\n\n        var testFolder = new Folder(\"testFolder\", FolderArgs.builder()\n            .title(\"Panel Folder\")\n            .uid(\"panelname-folder\")\n            .build());\n\n        var folder = new LibraryPanel(\"folder\", LibraryPanelArgs.builder()\n            .name(\"panelname In Folder\")\n            .folderUid(testFolder.uid())\n            .modelJson(serializeJson(\n                jsonObject(\n                    jsonProperty(\"gridPos\", jsonObject(\n                        jsonProperty(\"x\", 0),\n                        jsonProperty(\"y\", 0),\n                        jsonProperty(\"h\", 10),\n                        jsonProperty(\"w\", 10)\n                    )),\n                    jsonProperty(\"title\", \"panel\"),\n                    jsonProperty(\"type\", \"text\"),\n                    jsonProperty(\"version\", 0)\n                )))\n            .build());\n\n        final var all = OssFunctions.getLibraryPanels(GetLibraryPanelsArgs.builder()\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  test:\n    type: grafana:oss:LibraryPanel\n    properties:\n      name: panelname\n      modelJson:\n        fn::toJSON:\n          title: test name\n          type: text\n          version: 0\n          description: test description\n  testFolder:\n    type: grafana:oss:Folder\n    name: test\n    properties:\n      title: Panel Folder\n      uid: panelname-folder\n  folder:\n    type: grafana:oss:LibraryPanel\n    properties:\n      name: panelname In Folder\n      folderUid: ${testFolder.uid}\n      modelJson:\n        fn::toJSON:\n          gridPos:\n            x: 0\n            y: 0\n            h: 10\n            w: 10\n          title: panel\n          type: text\n          version: 0\nvariables:\n  all:\n    fn::invoke:\n      function: grafana:oss:getLibraryPanels\n      arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getLibraryPanels.\n","properties":{"orgId":{"type":"string","description":"The Organization ID. If not set, the default organization is used for basic authentication, or the one that owns your service account for token authentication.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getLibraryPanels.\n","properties":{"id":{"description":"The ID of this resource.\n","type":"string"},"orgId":{"description":"The Organization ID. If not set, the default organization is used for basic authentication, or the one that owns your service account for token authentication.\n","type":"string"},"panels":{"items":{"$ref":"#/types/grafana:oss/getLibraryPanelsPanel:getLibraryPanelsPanel"},"type":"array"}},"required":["id","orgId","panels"],"type":"object"}},"grafana:oss/getOrganization:getOrganization":{"description":"* [Official documentation](https://grafana.com/docs/grafana/latest/administration/organization-management/)\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/org/)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst test = new grafana.oss.Organization(\"test\", {\n    name: \"test-org\",\n    adminUser: \"admin\",\n    createUsers: true,\n    viewers: [\n        \"viewer-01@example.com\",\n        \"viewer-02@example.com\",\n    ],\n});\nconst fromName = grafana.oss.getOrganizationOutput({\n    name: test.name,\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\ntest = grafana.oss.Organization(\"test\",\n    name=\"test-org\",\n    admin_user=\"admin\",\n    create_users=True,\n    viewers=[\n        \"viewer-01@example.com\",\n        \"viewer-02@example.com\",\n    ])\nfrom_name = grafana.oss.get_organization_output(name=test.name)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var test = new Grafana.Oss.Organization(\"test\", new()\n    {\n        Name = \"test-org\",\n        AdminUser = \"admin\",\n        CreateUsers = true,\n        Viewers = new[]\n        {\n            \"viewer-01@example.com\",\n            \"viewer-02@example.com\",\n        },\n    });\n\n    var fromName = Grafana.Oss.GetOrganization.Invoke(new()\n    {\n        Name = test.Name,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := oss.NewOrganization(ctx, \"test\", \u0026oss.OrganizationArgs{\n\t\t\tName:        pulumi.String(\"test-org\"),\n\t\t\tAdminUser:   pulumi.String(\"admin\"),\n\t\t\tCreateUsers: pulumi.Bool(true),\n\t\t\tViewers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"viewer-01@example.com\"),\n\t\t\t\tpulumi.String(\"viewer-02@example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_ = oss.LookupOrganizationOutput(ctx, oss.GetOrganizationOutputArgs{\n\t\t\tName: test.Name,\n\t\t}, nil)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.Organization;\nimport com.pulumi.grafana.oss.OrganizationArgs;\nimport com.pulumi.grafana.oss.OssFunctions;\nimport com.pulumi.grafana.oss.inputs.GetOrganizationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var test = new Organization(\"test\", OrganizationArgs.builder()\n            .name(\"test-org\")\n            .adminUser(\"admin\")\n            .createUsers(true)\n            .viewers(            \n                \"viewer-01@example.com\",\n                \"viewer-02@example.com\")\n            .build());\n\n        final var fromName = OssFunctions.getOrganization(GetOrganizationArgs.builder()\n            .name(test.name())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  test:\n    type: grafana:oss:Organization\n    properties:\n      name: test-org\n      adminUser: admin\n      createUsers: true\n      viewers:\n        - viewer-01@example.com\n        - viewer-02@example.com\nvariables:\n  fromName:\n    fn::invoke:\n      function: grafana:oss:getOrganization\n      arguments:\n        name: ${test.name}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getOrganization.\n","properties":{"name":{"type":"string","description":"The name of the Organization.\n"}},"type":"object","required":["name"]},"outputs":{"description":"A collection of values returned by getOrganization.\n","properties":{"admins":{"description":"A list of email addresses corresponding to users given admin access to the organization.\n","items":{"type":"string"},"type":"array"},"editors":{"description":"A list of email addresses corresponding to users given editor access to the organization.\n","items":{"type":"string"},"type":"array"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"name":{"description":"The name of the Organization.\n","type":"string"},"viewers":{"description":"A list of email addresses corresponding to users given viewer access to the organization.\n","items":{"type":"string"},"type":"array"}},"required":["admins","editors","name","viewers","id"],"type":"object"}},"grafana:oss/getOrganizationPreferences:getOrganizationPreferences":{"description":"* [Official documentation](https://grafana.com/docs/grafana/latest/administration/organization-management/)\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/preferences/#get-current-org-prefs)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst test = grafana.oss.getOrganizationPreferences({});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\n\ntest = grafana.oss.get_organization_preferences()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var test = Grafana.Oss.GetOrganizationPreferences.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := oss.LookupOrganizationPreferences(ctx, \u0026oss.LookupOrganizationPreferencesArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.OssFunctions;\nimport com.pulumi.grafana.oss.inputs.GetOrganizationPreferencesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var test = OssFunctions.getOrganizationPreferences(GetOrganizationPreferencesArgs.builder()\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  test:\n    fn::invoke:\n      function: grafana:oss:getOrganizationPreferences\n      arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getOrganizationPreferences.\n","properties":{"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true}},"type":"object"},"outputs":{"description":"A collection of values returned by getOrganizationPreferences.\n","properties":{"homeDashboardUid":{"description":"The Organization home dashboard UID. This is only available in Grafana 9.0+.\n","type":"string"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"orgId":{"description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","type":"string"},"theme":{"description":"The Organization theme. Any string value is supported, including custom themes. Common values are \u003cspan pulumi-lang-nodejs=\"`light`\" pulumi-lang-dotnet=\"`Light`\" pulumi-lang-go=\"`light`\" pulumi-lang-python=\"`light`\" pulumi-lang-yaml=\"`light`\" pulumi-lang-java=\"`light`\"\u003e`light`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`dark`\" pulumi-lang-dotnet=\"`Dark`\" pulumi-lang-go=\"`dark`\" pulumi-lang-python=\"`dark`\" pulumi-lang-yaml=\"`dark`\" pulumi-lang-java=\"`dark`\"\u003e`dark`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`system`\" pulumi-lang-dotnet=\"`System`\" pulumi-lang-go=\"`system`\" pulumi-lang-python=\"`system`\" pulumi-lang-yaml=\"`system`\" pulumi-lang-java=\"`system`\"\u003e`system`\u003c/span\u003e, or an empty string for the default.\n","type":"string"},"timezone":{"description":"The Organization timezone. Any string value is supported, including IANA timezone names. Common values are \u003cspan pulumi-lang-nodejs=\"`utc`\" pulumi-lang-dotnet=\"`Utc`\" pulumi-lang-go=\"`utc`\" pulumi-lang-python=\"`utc`\" pulumi-lang-yaml=\"`utc`\" pulumi-lang-java=\"`utc`\"\u003e`utc`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`browser`\" pulumi-lang-dotnet=\"`Browser`\" pulumi-lang-go=\"`browser`\" pulumi-lang-python=\"`browser`\" pulumi-lang-yaml=\"`browser`\" pulumi-lang-java=\"`browser`\"\u003e`browser`\u003c/span\u003e, or an empty string for the default.\n","type":"string"},"weekStart":{"description":"The Organization week start day. Available values are \u003cspan pulumi-lang-nodejs=\"`sunday`\" pulumi-lang-dotnet=\"`Sunday`\" pulumi-lang-go=\"`sunday`\" pulumi-lang-python=\"`sunday`\" pulumi-lang-yaml=\"`sunday`\" pulumi-lang-java=\"`sunday`\"\u003e`sunday`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`monday`\" pulumi-lang-dotnet=\"`Monday`\" pulumi-lang-go=\"`monday`\" pulumi-lang-python=\"`monday`\" pulumi-lang-yaml=\"`monday`\" pulumi-lang-java=\"`monday`\"\u003e`monday`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`saturday`\" pulumi-lang-dotnet=\"`Saturday`\" pulumi-lang-go=\"`saturday`\" pulumi-lang-python=\"`saturday`\" pulumi-lang-yaml=\"`saturday`\" pulumi-lang-java=\"`saturday`\"\u003e`saturday`\u003c/span\u003e, or an empty string for the default.\n","type":"string"}},"required":["homeDashboardUid","theme","timezone","weekStart","id"],"type":"object"}},"grafana:oss/getOrganizationUser:getOrganizationUser":{"description":"* [Official documentation](https://grafana.com/docs/grafana/latest/administration/user-management/server-user-management/)\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/org/#get-all-users-within-the-current-organization-lookup)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst test = new grafana.oss.User(\"test\", {\n    email: \"test.datasource@example.com\",\n    name: \"Testing Datasource\",\n    login: \"test-datasource\",\n    password: \"my-password\",\n});\nconst fromEmail = grafana.oss.getOrganizationUserOutput({\n    email: test.email,\n});\nconst fromLogin = test.login.apply(login =\u003e grafana.oss.getOrganizationUserOutput({\n    login: login,\n}));\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\ntest = grafana.oss.User(\"test\",\n    email=\"test.datasource@example.com\",\n    name=\"Testing Datasource\",\n    login=\"test-datasource\",\n    password=\"my-password\")\nfrom_email = grafana.oss.get_organization_user_output(email=test.email)\nfrom_login = test.login.apply(lambda login: grafana.oss.get_organization_user_output(login=login))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var test = new Grafana.Oss.User(\"test\", new()\n    {\n        Email = \"test.datasource@example.com\",\n        Name = \"Testing Datasource\",\n        Login = \"test-datasource\",\n        Password = \"my-password\",\n    });\n\n    var fromEmail = Grafana.Oss.GetOrganizationUser.Invoke(new()\n    {\n        Email = test.Email,\n    });\n\n    var fromLogin = Grafana.Oss.GetOrganizationUser.Invoke(new()\n    {\n        Login = test.Login,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := oss.NewUser(ctx, \"test\", \u0026oss.UserArgs{\n\t\t\tEmail:    pulumi.String(\"test.datasource@example.com\"),\n\t\t\tName:     pulumi.String(\"Testing Datasource\"),\n\t\t\tLogin:    pulumi.String(\"test-datasource\"),\n\t\t\tPassword: pulumi.String(\"my-password\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_ = oss.GetOrganizationUserOutput(ctx, oss.GetOrganizationUserOutputArgs{\n\t\t\tEmail: test.Email,\n\t\t}, nil)\n\t\t_ = test.Login.ApplyT(func(login *string) (oss.GetOrganizationUserResult, error) {\n\t\t\treturn oss.GetOrganizationUserResult(interface{}(oss.GetOrganizationUser(ctx, \u0026oss.GetOrganizationUserArgs{\n\t\t\t\tLogin: pulumi.StringRef(pulumi.StringRef(login)),\n\t\t\t}, nil))), nil\n\t\t}).(oss.GetOrganizationUserResultOutput)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.User;\nimport com.pulumi.grafana.oss.UserArgs;\nimport com.pulumi.grafana.oss.OssFunctions;\nimport com.pulumi.grafana.oss.inputs.GetOrganizationUserArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var test = new User(\"test\", UserArgs.builder()\n            .email(\"test.datasource@example.com\")\n            .name(\"Testing Datasource\")\n            .login(\"test-datasource\")\n            .password(\"my-password\")\n            .build());\n\n        final var fromEmail = OssFunctions.getOrganizationUser(GetOrganizationUserArgs.builder()\n            .email(test.email())\n            .build());\n\n        final var fromLogin = test.login().applyValue(_login -\u003e OssFunctions.getOrganizationUser(GetOrganizationUserArgs.builder()\n            .login(_login)\n            .build()));\n\n    }\n}\n```\n```yaml\nresources:\n  test:\n    type: grafana:oss:User\n    properties:\n      email: test.datasource@example.com\n      name: Testing Datasource\n      login: test-datasource\n      password: my-password\nvariables:\n  fromEmail:\n    fn::invoke:\n      function: grafana:oss:getOrganizationUser\n      arguments:\n        email: ${test.email}\n  fromLogin:\n    fn::invoke:\n      function: grafana:oss:getOrganizationUser\n      arguments:\n        login: ${test.login}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getOrganizationUser.\n","properties":{"email":{"type":"string","description":"The email address of the Grafana user. Defaults to ``.\n"},"login":{"type":"string","description":"The username of the Grafana user. Defaults to ``.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true}},"type":"object"},"outputs":{"description":"A collection of values returned by getOrganizationUser.\n","properties":{"email":{"description":"The email address of the Grafana user. Defaults to ``.\n","type":"string"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"login":{"description":"The username of the Grafana user. Defaults to ``.\n","type":"string"},"orgId":{"description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","type":"string"},"userId":{"description":"The numerical ID of the Grafana user.\n","type":"integer"}},"required":["userId","id"],"type":"object"}},"grafana:oss/getServiceAccount:getServiceAccount":{"description":"* [Official documentation](https://grafana.com/docs/grafana/latest/administration/service-accounts/)\n\t\t* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/serviceaccount/#service-account-api)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst adminServiceAccount = new grafana.oss.ServiceAccount(\"admin\", {\n    name: \"admin sa\",\n    role: \"Admin\",\n    isDisabled: false,\n});\nconst admin = grafana.oss.getServiceAccountOutput({\n    name: adminServiceAccount.name,\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\nadmin_service_account = grafana.oss.ServiceAccount(\"admin\",\n    name=\"admin sa\",\n    role=\"Admin\",\n    is_disabled=False)\nadmin = grafana.oss.get_service_account_output(name=admin_service_account.name)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var adminServiceAccount = new Grafana.Oss.ServiceAccount(\"admin\", new()\n    {\n        Name = \"admin sa\",\n        Role = \"Admin\",\n        IsDisabled = false,\n    });\n\n    var admin = Grafana.Oss.GetServiceAccount.Invoke(new()\n    {\n        Name = adminServiceAccount.Name,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tadminServiceAccount, err := oss.NewServiceAccount(ctx, \"admin\", \u0026oss.ServiceAccountArgs{\n\t\t\tName:       pulumi.String(\"admin sa\"),\n\t\t\tRole:       pulumi.String(\"Admin\"),\n\t\t\tIsDisabled: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_ = oss.LookupServiceAccountOutput(ctx, oss.GetServiceAccountOutputArgs{\n\t\t\tName: adminServiceAccount.Name,\n\t\t}, nil)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.ServiceAccount;\nimport com.pulumi.grafana.oss.ServiceAccountArgs;\nimport com.pulumi.grafana.oss.OssFunctions;\nimport com.pulumi.grafana.oss.inputs.GetServiceAccountArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var adminServiceAccount = new ServiceAccount(\"adminServiceAccount\", ServiceAccountArgs.builder()\n            .name(\"admin sa\")\n            .role(\"Admin\")\n            .isDisabled(false)\n            .build());\n\n        final var admin = OssFunctions.getServiceAccount(GetServiceAccountArgs.builder()\n            .name(adminServiceAccount.name())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  adminServiceAccount:\n    type: grafana:oss:ServiceAccount\n    name: admin\n    properties:\n      name: admin sa\n      role: Admin\n      isDisabled: false\nvariables:\n  admin:\n    fn::invoke:\n      function: grafana:oss:getServiceAccount\n      arguments:\n        name: ${adminServiceAccount.name}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getServiceAccount.\n","properties":{"name":{"type":"string","description":"The name of the Service Account.\n"},"orgId":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","willReplaceOnChanges":true}},"type":"object","required":["name"]},"outputs":{"description":"A collection of values returned by getServiceAccount.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"isDisabled":{"description":"The disabled status for the service account.\n","type":"boolean"},"name":{"description":"The name of the Service Account.\n","type":"string"},"orgId":{"description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.\n","type":"string"},"role":{"description":"The basic role of the service account in the organization.\n","type":"string"}},"required":["isDisabled","name","role","id"],"type":"object"}},"grafana:oss/getTeam:getTeam":{"description":"* [Official documentation](https://grafana.com/docs/grafana/latest/administration/team-management/)\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/team/)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst test = new grafana.oss.Team(\"test\", {\n    name: \"test-team\",\n    email: \"test-team-email@test.com\",\n    preferences: {\n        theme: \"dark\",\n        timezone: \"utc\",\n    },\n});\nconst fromName = grafana.oss.getTeamOutput({\n    name: test.name,\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\ntest = grafana.oss.Team(\"test\",\n    name=\"test-team\",\n    email=\"test-team-email@test.com\",\n    preferences={\n        \"theme\": \"dark\",\n        \"timezone\": \"utc\",\n    })\nfrom_name = grafana.oss.get_team_output(name=test.name)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var test = new Grafana.Oss.Team(\"test\", new()\n    {\n        Name = \"test-team\",\n        Email = \"test-team-email@test.com\",\n        Preferences = new Grafana.Oss.Inputs.TeamPreferencesArgs\n        {\n            Theme = \"dark\",\n            Timezone = \"utc\",\n        },\n    });\n\n    var fromName = Grafana.Oss.GetTeam.Invoke(new()\n    {\n        Name = test.Name,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := oss.NewTeam(ctx, \"test\", \u0026oss.TeamArgs{\n\t\t\tName:  pulumi.String(\"test-team\"),\n\t\t\tEmail: pulumi.String(\"test-team-email@test.com\"),\n\t\t\tPreferences: \u0026oss.TeamPreferencesArgs{\n\t\t\t\tTheme:    pulumi.String(\"dark\"),\n\t\t\t\tTimezone: pulumi.String(\"utc\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_ = oss.LookupTeamOutput(ctx, oss.GetTeamOutputArgs{\n\t\t\tName: test.Name,\n\t\t}, nil)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.Team;\nimport com.pulumi.grafana.oss.TeamArgs;\nimport com.pulumi.grafana.oss.inputs.TeamPreferencesArgs;\nimport com.pulumi.grafana.oss.OssFunctions;\nimport com.pulumi.grafana.oss.inputs.GetTeamArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var test = new Team(\"test\", TeamArgs.builder()\n            .name(\"test-team\")\n            .email(\"test-team-email@test.com\")\n            .preferences(TeamPreferencesArgs.builder()\n                .theme(\"dark\")\n                .timezone(\"utc\")\n                .build())\n            .build());\n\n        final var fromName = OssFunctions.getTeam(GetTeamArgs.builder()\n            .name(test.name())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  test:\n    type: grafana:oss:Team\n    properties:\n      name: test-team\n      email: test-team-email@test.com\n      preferences:\n        theme: dark\n        timezone: utc\nvariables:\n  fromName:\n    fn::invoke:\n      function: grafana:oss:getTeam\n      arguments:\n        name: ${test.name}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getTeam.\n","properties":{"name":{"type":"string"},"orgId":{"type":"string","willReplaceOnChanges":true},"readTeamSync":{"type":"boolean"}},"type":"object","required":["name"]},"outputs":{"description":"A collection of values returned by getTeam.\n","properties":{"email":{"type":"string"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"members":{"items":{"type":"string"},"type":"array"},"name":{"type":"string"},"orgId":{"type":"string"},"preferences":{"items":{"$ref":"#/types/grafana:oss/getTeamPreference:getTeamPreference"},"type":"array"},"readTeamSync":{"type":"boolean"},"teamId":{"type":"integer"},"teamSyncs":{"items":{"$ref":"#/types/grafana:oss/getTeamTeamSync:getTeamTeamSync"},"type":"array"},"teamUid":{"type":"string"}},"required":["email","members","name","preferences","teamId","teamSyncs","teamUid","id"],"type":"object"}},"grafana:oss/getUser:getUser":{"description":"* [Official documentation](https://grafana.com/docs/grafana/latest/administration/user-management/server-user-management/)\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/user/)\n\nThis data source uses Grafana's admin APIs for reading users which\ndoes not currently work with API Tokens. You must use basic auth.\nThis data source is also not compatible with Grafana Cloud, as it does not allow basic auth.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst test = new grafana.oss.User(\"test\", {\n    email: \"test.datasource@example.com\",\n    name: \"Testing Datasource\",\n    login: \"test-datasource\",\n    password: \"my-password\",\n    isAdmin: true,\n});\nconst fromId = grafana.oss.getUserOutput({\n    userId: test.userId,\n});\nconst fromEmail = grafana.oss.getUserOutput({\n    email: test.email,\n});\nconst fromLogin = test.login.apply(login =\u003e grafana.oss.getUserOutput({\n    login: login,\n}));\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\ntest = grafana.oss.User(\"test\",\n    email=\"test.datasource@example.com\",\n    name=\"Testing Datasource\",\n    login=\"test-datasource\",\n    password=\"my-password\",\n    is_admin=True)\nfrom_id = grafana.oss.get_user_output(user_id=test.user_id)\nfrom_email = grafana.oss.get_user_output(email=test.email)\nfrom_login = test.login.apply(lambda login: grafana.oss.get_user_output(login=login))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var test = new Grafana.Oss.User(\"test\", new()\n    {\n        Email = \"test.datasource@example.com\",\n        Name = \"Testing Datasource\",\n        Login = \"test-datasource\",\n        Password = \"my-password\",\n        IsAdmin = true,\n    });\n\n    var fromId = Grafana.Oss.GetUser.Invoke(new()\n    {\n        UserId = test.UserId,\n    });\n\n    var fromEmail = Grafana.Oss.GetUser.Invoke(new()\n    {\n        Email = test.Email,\n    });\n\n    var fromLogin = Grafana.Oss.GetUser.Invoke(new()\n    {\n        Login = test.Login,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := oss.NewUser(ctx, \"test\", \u0026oss.UserArgs{\n\t\t\tEmail:    pulumi.String(\"test.datasource@example.com\"),\n\t\t\tName:     pulumi.String(\"Testing Datasource\"),\n\t\t\tLogin:    pulumi.String(\"test-datasource\"),\n\t\t\tPassword: pulumi.String(\"my-password\"),\n\t\t\tIsAdmin:  pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_ = oss.LookupUserOutput(ctx, oss.GetUserOutputArgs{\n\t\t\tUserId: test.UserId,\n\t\t}, nil)\n\t\t_ = oss.LookupUserOutput(ctx, oss.GetUserOutputArgs{\n\t\t\tEmail: test.Email,\n\t\t}, nil)\n\t\t_ = test.Login.ApplyT(func(login *string) (oss.GetUserResult, error) {\n\t\t\treturn oss.GetUserResult(interface{}(oss.LookupUser(ctx, \u0026oss.LookupUserArgs{\n\t\t\t\tLogin: pulumi.StringRef(pulumi.StringRef(login)),\n\t\t\t}, nil))), nil\n\t\t}).(oss.GetUserResultOutput)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.User;\nimport com.pulumi.grafana.oss.UserArgs;\nimport com.pulumi.grafana.oss.OssFunctions;\nimport com.pulumi.grafana.oss.inputs.GetUserArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var test = new User(\"test\", UserArgs.builder()\n            .email(\"test.datasource@example.com\")\n            .name(\"Testing Datasource\")\n            .login(\"test-datasource\")\n            .password(\"my-password\")\n            .isAdmin(true)\n            .build());\n\n        final var fromId = OssFunctions.getUser(GetUserArgs.builder()\n            .userId(test.userId())\n            .build());\n\n        final var fromEmail = OssFunctions.getUser(GetUserArgs.builder()\n            .email(test.email())\n            .build());\n\n        final var fromLogin = test.login().applyValue(_login -\u003e OssFunctions.getUser(GetUserArgs.builder()\n            .login(_login)\n            .build()));\n\n    }\n}\n```\n```yaml\nresources:\n  test:\n    type: grafana:oss:User\n    properties:\n      email: test.datasource@example.com\n      name: Testing Datasource\n      login: test-datasource\n      password: my-password\n      isAdmin: true\nvariables:\n  fromId:\n    fn::invoke:\n      function: grafana:oss:getUser\n      arguments:\n        userId: ${test.userId}\n  fromEmail:\n    fn::invoke:\n      function: grafana:oss:getUser\n      arguments:\n        email: ${test.email}\n  fromLogin:\n    fn::invoke:\n      function: grafana:oss:getUser\n      arguments:\n        login: ${test.login}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getUser.\n","properties":{"email":{"type":"string","description":"The email address of the Grafana user. Defaults to ``.\n"},"login":{"type":"string","description":"The username for the Grafana user. Defaults to ``.\n"},"userId":{"type":"integer","description":"The numerical ID of the Grafana user. Defaults to `-1`.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getUser.\n","properties":{"email":{"description":"The email address of the Grafana user. Defaults to ``.\n","type":"string"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"isAdmin":{"description":"Whether the user is an admin.\n","type":"boolean"},"login":{"description":"The username for the Grafana user. Defaults to ``.\n","type":"string"},"name":{"description":"The display name for the Grafana user.\n","type":"string"},"userId":{"description":"The numerical ID of the Grafana user. Defaults to `-1`.\n","type":"integer"}},"required":["isAdmin","name","id"],"type":"object"}},"grafana:oss/getUsers:getUsers":{"description":"* [Official documentation](https://grafana.com/docs/grafana/latest/administration/user-management/server-user-management/)\n* [HTTP API](https://grafana.com/docs/grafana/latest/developers/http_api/user/)\n\t\t\nThis data source uses Grafana's admin APIs for reading users which\ndoes not currently work with API Tokens. You must use basic auth.\nThis data source is also not compatible with Grafana Cloud, as it does not allow basic auth.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst testAllUsers = new grafana.oss.User(\"test_all_users\", {\n    email: \"all_users@example.com\",\n    name: \"Testing grafana_users\",\n    login: \"test-grafana-users\",\n    password: \"my-password\",\n});\nconst allUsers = grafana.oss.getUsers({});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\ntest_all_users = grafana.oss.User(\"test_all_users\",\n    email=\"all_users@example.com\",\n    name=\"Testing grafana_users\",\n    login=\"test-grafana-users\",\n    password=\"my-password\")\nall_users = grafana.oss.get_users()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var testAllUsers = new Grafana.Oss.User(\"test_all_users\", new()\n    {\n        Email = \"all_users@example.com\",\n        Name = \"Testing grafana_users\",\n        Login = \"test-grafana-users\",\n        Password = \"my-password\",\n    });\n\n    var allUsers = Grafana.Oss.GetUsers.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/oss\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := oss.NewUser(ctx, \"test_all_users\", \u0026oss.UserArgs{\n\t\t\tEmail:    pulumi.String(\"all_users@example.com\"),\n\t\t\tName:     pulumi.String(\"Testing grafana_users\"),\n\t\t\tLogin:    pulumi.String(\"test-grafana-users\"),\n\t\t\tPassword: pulumi.String(\"my-password\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oss.GetUsers(ctx, map[string]interface{}{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.oss.User;\nimport com.pulumi.grafana.oss.UserArgs;\nimport com.pulumi.grafana.oss.OssFunctions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var testAllUsers = new User(\"testAllUsers\", UserArgs.builder()\n            .email(\"all_users@example.com\")\n            .name(\"Testing grafana_users\")\n            .login(\"test-grafana-users\")\n            .password(\"my-password\")\n            .build());\n\n        final var allUsers = OssFunctions.getUsers(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference);\n\n    }\n}\n```\n```yaml\nresources:\n  testAllUsers:\n    type: grafana:oss:User\n    name: test_all_users\n    properties:\n      email: all_users@example.com\n      name: Testing grafana_users\n      login: test-grafana-users\n      password: my-password\nvariables:\n  allUsers:\n    fn::invoke:\n      function: grafana:oss:getUsers\n      arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","outputs":{"description":"A collection of values returned by getUsers.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"users":{"description":"The Grafana instance's users.\n","items":{"$ref":"#/types/grafana:oss/getUsersUser:getUsersUser"},"type":"array"}},"required":["users","id"],"type":"object"}},"grafana:slo/getSlos:getSlos":{"description":"Datasource for retrieving all SLOs.\n\t\t\n* [Official documentation](https://grafana.com/docs/grafana-cloud/alerting-and-irm/slo/)\n* [API documentation](https://grafana.com/docs/grafana-cloud/alerting-and-irm/slo/api/)\n* [Additional Information On Alerting Rule Annotations and Labels](https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/#templating/)\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst test = new grafana.slo.SLO(\"test\", {\n    name: \"Terraform Testing\",\n    description: \"Terraform Description\",\n    queries: [{\n        freeform: {\n            query: \"sum(rate(apiserver_request_total{code!=\\\"500\\\"}[$__rate_interval])) / sum(rate(apiserver_request_total[$__rate_interval]))\",\n        },\n        type: \"freeform\",\n    }],\n    objectives: [{\n        value: 0.995,\n        window: \"30d\",\n    }],\n    destinationDatasource: {\n        uid: \"grafanacloud-prom\",\n    },\n    labels: [{\n        key: \"custom\",\n        value: \"value\",\n    }],\n    alerting: {\n        fastburn: {\n            annotations: [{\n                key: \"name\",\n                value: \"Critical - SLO Burn Rate Alert\",\n            }],\n            labels: [{\n                key: \"type\",\n                value: \"slo\",\n            }],\n        },\n        slowburn: {\n            annotations: [{\n                key: \"name\",\n                value: \"Warning - SLO Burn Rate Alert\",\n            }],\n            labels: [{\n                key: \"type\",\n                value: \"slo\",\n            }],\n        },\n    },\n});\nconst slos = grafana.slo.getSlos({});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\nimport pulumiverse_grafana as grafana\n\ntest = grafana.slo.SLO(\"test\",\n    name=\"Terraform Testing\",\n    description=\"Terraform Description\",\n    queries=[{\n        \"freeform\": {\n            \"query\": \"sum(rate(apiserver_request_total{code!=\\\"500\\\"}[$__rate_interval])) / sum(rate(apiserver_request_total[$__rate_interval]))\",\n        },\n        \"type\": \"freeform\",\n    }],\n    objectives=[{\n        \"value\": 0.995,\n        \"window\": \"30d\",\n    }],\n    destination_datasource={\n        \"uid\": \"grafanacloud-prom\",\n    },\n    labels=[{\n        \"key\": \"custom\",\n        \"value\": \"value\",\n    }],\n    alerting={\n        \"fastburn\": {\n            \"annotations\": [{\n                \"key\": \"name\",\n                \"value\": \"Critical - SLO Burn Rate Alert\",\n            }],\n            \"labels\": [{\n                \"key\": \"type\",\n                \"value\": \"slo\",\n            }],\n        },\n        \"slowburn\": {\n            \"annotations\": [{\n                \"key\": \"name\",\n                \"value\": \"Warning - SLO Burn Rate Alert\",\n            }],\n            \"labels\": [{\n                \"key\": \"type\",\n                \"value\": \"slo\",\n            }],\n        },\n    })\nslos = grafana.slo.get_slos()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\nusing Grafana = Pulumiverse.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var test = new Grafana.Slo.SLO(\"test\", new()\n    {\n        Name = \"Terraform Testing\",\n        Description = \"Terraform Description\",\n        Queries = new[]\n        {\n            new Grafana.Slo.Inputs.SLOQueryArgs\n            {\n                Freeform = new Grafana.Slo.Inputs.SLOQueryFreeformArgs\n                {\n                    Query = \"sum(rate(apiserver_request_total{code!=\\\"500\\\"}[$__rate_interval])) / sum(rate(apiserver_request_total[$__rate_interval]))\",\n                },\n                Type = \"freeform\",\n            },\n        },\n        Objectives = new[]\n        {\n            new Grafana.Slo.Inputs.SLOObjectiveArgs\n            {\n                Value = 0.995,\n                Window = \"30d\",\n            },\n        },\n        DestinationDatasource = new Grafana.Slo.Inputs.SLODestinationDatasourceArgs\n        {\n            Uid = \"grafanacloud-prom\",\n        },\n        Labels = new[]\n        {\n            new Grafana.Slo.Inputs.SLOLabelArgs\n            {\n                Key = \"custom\",\n                Value = \"value\",\n            },\n        },\n        Alerting = new Grafana.Slo.Inputs.SLOAlertingArgs\n        {\n            Fastburn = new Grafana.Slo.Inputs.SLOAlertingFastburnArgs\n            {\n                Annotations = new[]\n                {\n                    new Grafana.Slo.Inputs.SLOAlertingFastburnAnnotationArgs\n                    {\n                        Key = \"name\",\n                        Value = \"Critical - SLO Burn Rate Alert\",\n                    },\n                },\n                Labels = new[]\n                {\n                    new Grafana.Slo.Inputs.SLOAlertingFastburnLabelArgs\n                    {\n                        Key = \"type\",\n                        Value = \"slo\",\n                    },\n                },\n            },\n            Slowburn = new Grafana.Slo.Inputs.SLOAlertingSlowburnArgs\n            {\n                Annotations = new[]\n                {\n                    new Grafana.Slo.Inputs.SLOAlertingSlowburnAnnotationArgs\n                    {\n                        Key = \"name\",\n                        Value = \"Warning - SLO Burn Rate Alert\",\n                    },\n                },\n                Labels = new[]\n                {\n                    new Grafana.Slo.Inputs.SLOAlertingSlowburnLabelArgs\n                    {\n                        Key = \"type\",\n                        Value = \"slo\",\n                    },\n                },\n            },\n        },\n    });\n\n    var slos = Grafana.Slo.GetSlos.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/slo\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := slo.NewSLO(ctx, \"test\", \u0026slo.SLOArgs{\n\t\t\tName:        pulumi.String(\"Terraform Testing\"),\n\t\t\tDescription: pulumi.String(\"Terraform Description\"),\n\t\t\tQueries: slo.SLOQueryArray{\n\t\t\t\t\u0026slo.SLOQueryArgs{\n\t\t\t\t\tFreeform: \u0026slo.SLOQueryFreeformArgs{\n\t\t\t\t\t\tQuery: pulumi.String(\"sum(rate(apiserver_request_total{code!=\\\"500\\\"}[$__rate_interval])) / sum(rate(apiserver_request_total[$__rate_interval]))\"),\n\t\t\t\t\t},\n\t\t\t\t\tType: pulumi.String(\"freeform\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tObjectives: slo.SLOObjectiveArray{\n\t\t\t\t\u0026slo.SLOObjectiveArgs{\n\t\t\t\t\tValue:  pulumi.Float64(0.995),\n\t\t\t\t\tWindow: pulumi.String(\"30d\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDestinationDatasource: \u0026slo.SLODestinationDatasourceArgs{\n\t\t\t\tUid: pulumi.String(\"grafanacloud-prom\"),\n\t\t\t},\n\t\t\tLabels: slo.SLOLabelArray{\n\t\t\t\t\u0026slo.SLOLabelArgs{\n\t\t\t\t\tKey:   pulumi.String(\"custom\"),\n\t\t\t\t\tValue: pulumi.String(\"value\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tAlerting: \u0026slo.SLOAlertingArgs{\n\t\t\t\tFastburn: \u0026slo.SLOAlertingFastburnArgs{\n\t\t\t\t\tAnnotations: slo.SLOAlertingFastburnAnnotationArray{\n\t\t\t\t\t\t\u0026slo.SLOAlertingFastburnAnnotationArgs{\n\t\t\t\t\t\t\tKey:   pulumi.String(\"name\"),\n\t\t\t\t\t\t\tValue: pulumi.String(\"Critical - SLO Burn Rate Alert\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tLabels: slo.SLOAlertingFastburnLabelArray{\n\t\t\t\t\t\t\u0026slo.SLOAlertingFastburnLabelArgs{\n\t\t\t\t\t\t\tKey:   pulumi.String(\"type\"),\n\t\t\t\t\t\t\tValue: pulumi.String(\"slo\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tSlowburn: \u0026slo.SLOAlertingSlowburnArgs{\n\t\t\t\t\tAnnotations: slo.SLOAlertingSlowburnAnnotationArray{\n\t\t\t\t\t\t\u0026slo.SLOAlertingSlowburnAnnotationArgs{\n\t\t\t\t\t\t\tKey:   pulumi.String(\"name\"),\n\t\t\t\t\t\t\tValue: pulumi.String(\"Warning - SLO Burn Rate Alert\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tLabels: slo.SLOAlertingSlowburnLabelArray{\n\t\t\t\t\t\t\u0026slo.SLOAlertingSlowburnLabelArgs{\n\t\t\t\t\t\t\tKey:   pulumi.String(\"type\"),\n\t\t\t\t\t\t\tValue: pulumi.String(\"slo\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = slo.GetSlos(ctx, map[string]interface{}{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.slo.SLO;\nimport com.pulumi.grafana.slo.SLOArgs;\nimport com.pulumi.grafana.slo.inputs.SLOQueryArgs;\nimport com.pulumi.grafana.slo.inputs.SLOQueryFreeformArgs;\nimport com.pulumi.grafana.slo.inputs.SLOObjectiveArgs;\nimport com.pulumi.grafana.slo.inputs.SLODestinationDatasourceArgs;\nimport com.pulumi.grafana.slo.inputs.SLOLabelArgs;\nimport com.pulumi.grafana.slo.inputs.SLOAlertingArgs;\nimport com.pulumi.grafana.slo.inputs.SLOAlertingFastburnArgs;\nimport com.pulumi.grafana.slo.inputs.SLOAlertingSlowburnArgs;\nimport com.pulumi.grafana.slo.SloFunctions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var test = new SLO(\"test\", SLOArgs.builder()\n            .name(\"Terraform Testing\")\n            .description(\"Terraform Description\")\n            .queries(SLOQueryArgs.builder()\n                .freeform(SLOQueryFreeformArgs.builder()\n                    .query(\"sum(rate(apiserver_request_total{code!=\\\"500\\\"}[$__rate_interval])) / sum(rate(apiserver_request_total[$__rate_interval]))\")\n                    .build())\n                .type(\"freeform\")\n                .build())\n            .objectives(SLOObjectiveArgs.builder()\n                .value(0.995)\n                .window(\"30d\")\n                .build())\n            .destinationDatasource(SLODestinationDatasourceArgs.builder()\n                .uid(\"grafanacloud-prom\")\n                .build())\n            .labels(SLOLabelArgs.builder()\n                .key(\"custom\")\n                .value(\"value\")\n                .build())\n            .alerting(SLOAlertingArgs.builder()\n                .fastburn(SLOAlertingFastburnArgs.builder()\n                    .annotations(SLOAlertingFastburnAnnotationArgs.builder()\n                        .key(\"name\")\n                        .value(\"Critical - SLO Burn Rate Alert\")\n                        .build())\n                    .labels(SLOAlertingFastburnLabelArgs.builder()\n                        .key(\"type\")\n                        .value(\"slo\")\n                        .build())\n                    .build())\n                .slowburn(SLOAlertingSlowburnArgs.builder()\n                    .annotations(SLOAlertingSlowburnAnnotationArgs.builder()\n                        .key(\"name\")\n                        .value(\"Warning - SLO Burn Rate Alert\")\n                        .build())\n                    .labels(SLOAlertingSlowburnLabelArgs.builder()\n                        .key(\"type\")\n                        .value(\"slo\")\n                        .build())\n                    .build())\n                .build())\n            .build());\n\n        final var slos = SloFunctions.getSlos(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference);\n\n    }\n}\n```\n```yaml\nresources:\n  test:\n    type: grafana:slo:SLO\n    properties:\n      name: Terraform Testing\n      description: Terraform Description\n      queries:\n        - freeform:\n            query: sum(rate(apiserver_request_total{code!=\"500\"}[$__rate_interval])) / sum(rate(apiserver_request_total[$__rate_interval]))\n          type: freeform\n      objectives:\n        - value: 0.995\n          window: 30d\n      destinationDatasource:\n        uid: grafanacloud-prom\n      labels:\n        - key: custom\n          value: value\n      alerting:\n        fastburn:\n          annotations:\n            - key: name\n              value: Critical - SLO Burn Rate Alert\n          labels:\n            - key: type\n              value: slo\n        slowburn:\n          annotations:\n            - key: name\n              value: Warning - SLO Burn Rate Alert\n          labels:\n            - key: type\n              value: slo\nvariables:\n  slos:\n    fn::invoke:\n      function: grafana:slo:getSlos\n      arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","outputs":{"description":"A collection of values returned by getSlos.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"slos":{"description":"Returns a list of all SLOs\"\n","items":{"$ref":"#/types/grafana:slo/getSlosSlo:getSlosSlo"},"type":"array"}},"required":["slos","id"],"type":"object"}},"grafana:syntheticMonitoring/getProbe:getProbe":{"description":"Data source for retrieving a single probe by name.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst ohio = grafana.syntheticMonitoring.getProbe({\n    name: \"Ohio\",\n});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\n\nohio = grafana.syntheticMonitoring.get_probe(name=\"Ohio\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var ohio = Grafana.SyntheticMonitoring.GetProbe.Invoke(new()\n    {\n        Name = \"Ohio\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/syntheticmonitoring\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := syntheticmonitoring.GetProbe(ctx, \u0026syntheticmonitoring.GetProbeArgs{\n\t\t\tName: \"Ohio\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.syntheticMonitoring.SyntheticMonitoringFunctions;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.GetProbeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var ohio = SyntheticMonitoringFunctions.getProbe(GetProbeArgs.builder()\n            .name(\"Ohio\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  ohio:\n    fn::invoke:\n      function: grafana:syntheticMonitoring:getProbe\n      arguments:\n        name: Ohio\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getProbe.\n","properties":{"name":{"type":"string","description":"Name of the probe.\n"}},"type":"object","required":["name"]},"outputs":{"description":"A collection of values returned by getProbe.\n","properties":{"disableBrowserChecks":{"description":"Disables browser checks for this probe.\n","type":"boolean"},"disableScriptedChecks":{"description":"Disables scripted checks for this probe.\n","type":"boolean"},"id":{"description":"The ID of the probe.\n","type":"string"},"labels":{"additionalProperties":{"type":"string"},"description":"Custom labels to be included with collected metrics and logs.\n","type":"object"},"latitude":{"description":"Latitude coordinates.\n","type":"number"},"longitude":{"description":"Longitude coordinates.\n","type":"number"},"name":{"description":"Name of the probe.\n","type":"string"},"public":{"description":"Public probes are run by Grafana Labs and can be used by all users. Only Grafana Labs managed public probes will be set to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n","type":"boolean"},"region":{"description":"Region of the probe.\n","type":"string"},"tenantId":{"description":"The tenant ID of the probe.\n","type":"integer"}},"required":["disableBrowserChecks","disableScriptedChecks","id","labels","latitude","longitude","name","public","region","tenantId"],"type":"object"}},"grafana:syntheticMonitoring/getProbes:getProbes":{"description":"Data source for retrieving all probes.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as grafana from \"@pulumiverse/grafana\";\n\nconst main = grafana.syntheticMonitoring.getProbes({});\n```\n```python\nimport pulumi\nimport pulumi_grafana as grafana\n\nmain = grafana.syntheticMonitoring.get_probes()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Grafana = Pulumi.Grafana;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var main = Grafana.SyntheticMonitoring.GetProbes.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-grafana/sdk/v2/go/grafana/syntheticmonitoring\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := syntheticmonitoring.GetProbes(ctx, \u0026syntheticmonitoring.GetProbesArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.grafana.syntheticMonitoring.SyntheticMonitoringFunctions;\nimport com.pulumi.grafana.syntheticMonitoring.inputs.GetProbesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var main = SyntheticMonitoringFunctions.getProbes(GetProbesArgs.builder()\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  main:\n    fn::invoke:\n      function: grafana:syntheticMonitoring:getProbes\n      arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getProbes.\n","properties":{"filterDeprecated":{"type":"boolean","description":"If true, only probes that are not deprecated will be returned. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getProbes.\n","properties":{"filterDeprecated":{"description":"If true, only probes that are not deprecated will be returned. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n","type":"boolean"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"probes":{"additionalProperties":{"type":"integer"},"description":"Map of probes with their names as keys and IDs as values.\n","type":"object"}},"required":["probes","id"],"type":"object"}},"pulumi:providers:grafana/terraformConfig":{"description":"This function returns a Terraform config object with terraform-namecased keys,to be used with the Terraform Module Provider.","inputs":{"properties":{"__self__":{"type":"ref","$ref":"#/provider"}},"type":"pulumi:providers:grafana/terraformConfig","required":["__self__"]},"outputs":{"properties":{"result":{"additionalProperties":{"$ref":"pulumi.json#/Any"},"type":"object"}},"required":["result"],"type":"object"}}}}