Repository: grafana/terraform-provider-grafana

Issue:
SLO: Support custom UUIDs in the Terraform Provider
The SLO API allows a user to specify a custom vanity UUID on POST
Enable this functionality in the Terraform Provider, which would allow users to create SLOs with vanity UUIDs



Discussion:

Solution patch:
diff --git a/docs/resources/asserts_custom_model_rules.md b/docs/resources/asserts_custom_model_rules.md
new file mode 100644
index 00000000..6b66548e
--- /dev/null
+++ b/docs/resources/asserts_custom_model_rules.md
@@ -0,0 +1,108 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "grafana_asserts_custom_model_rules Resource - terraform-provider-grafana"
+subcategory: "Asserts"
+description: |-
+  Manages Asserts Custom Model Rules through the Grafana API.
+---
+
+# grafana_asserts_custom_model_rules (Resource)
+
+Manages Asserts Custom Model Rules through the Grafana API.
+
+## Example Usage
+
+```terraform
+resource "grafana_asserts_custom_model_rules" "test" {
+  name = "test-anything"
+  rules {
+    entity {
+      type = "Service"
+      name = "workload | service | job"
+      scope = {
+        namespace = "namespace"
+        env       = "asserts_env"
+        site      = "asserts_site"
+      }
+      lookup = {
+        workload  = "workload | deployment | statefulset | daemonset | replicaset"
+        service   = "service"
+        job       = "job"
+        proxy_job = "job"
+      }
+      defined_by {
+        query    = "up{job!=''}"
+        disabled = false
+        label_values = {
+          service = "service"
+          job     = "job"
+        }
+        literals = {
+          _source = "up_query"
+        }
+      }
+      defined_by {
+        query    = "up{job='disabled'}"
+        disabled = true
+      }
+    }
+  }
+}
+```
+
+<!-- schema generated by tfplugindocs -->
+## Schema
+
+### Required
+
+- `name` (String) The name of the custom model rules.
+- `rules` (Block List, Min: 1, Max: 1) The rules configuration for the custom model rules. (see [below for nested schema](#nestedblock--rules))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+
+<a id="nestedblock--rules"></a>
+### Nested Schema for `rules`
+
+Required:
+
+- `entity` (Block List, Min: 1) List of entities to define in the custom model rules. (see [below for nested schema](#nestedblock--rules--entity))
+
+<a id="nestedblock--rules--entity"></a>
+### Nested Schema for `rules.entity`
+
+Required:
+
+- `defined_by` (Block List, Min: 1) List of queries that define this entity. (see [below for nested schema](#nestedblock--rules--entity--defined_by))
+- `name` (String) The name of the entity.
+- `type` (String) The type of the entity (e.g., Service, Pod, Namespace).
+
+Optional:
+
+- `disabled` (Boolean) Whether this entity is disabled.
+- `enriched_by` (List of String) List of enrichment sources for the entity.
+- `lookup` (Map of String) Lookup mappings for the entity.
+- `scope` (Map of String) Scope labels for the entity.
+
+<a id="nestedblock--rules--entity--defined_by"></a>
+### Nested Schema for `rules.entity.defined_by`
+
+Required:
+
+- `query` (String) The Prometheus query that defines this entity.
+
+Optional:
+
+- `disabled` (Boolean) Whether this rule is disabled. When true, only the 'query' field is used to match an existing rule to disable; other fields are ignored.
+- `label_values` (Map of String) Label value mappings for the query.
+- `literals` (Map of String) Literal value mappings for the query.
+- `metric_value` (String) Metric value for the query.
+
+## Import
+
+Import is supported using the following syntax:
+
+```shell
+terraform import grafana_asserts_custom_model_rules.name "{{ name }}"
+```
diff --git a/docs/resources/asserts_log_config.md b/docs/resources/asserts_log_config.md
new file mode 100644
index 00000000..6ac013c4
--- /dev/null
+++ b/docs/resources/asserts_log_config.md
@@ -0,0 +1,158 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "grafana_asserts_log_config Resource - terraform-provider-grafana"
+subcategory: "Asserts"
+description: |-
+  Manages Asserts Log Configuration through Grafana API.
+---
+
+# grafana_asserts_log_config (Resource)
+
+Manages Asserts Log Configuration through Grafana API.
+
+## Example Usage
+
+```terraform
+resource "grafana_asserts_log_config" "production" {
+  name            = "production"
+  priority        = 1000
+  default_config  = false
+  data_source_uid = "grafanacloud-logs"
+  error_label     = "error"
+
+  match {
+    property = "asserts_entity_type"
+    op       = "EQUALS"
+    values   = ["Service"]
+  }
+
+  match {
+    property = "environment"
+    op       = "EQUALS"
+    values   = ["production", "staging"]
+  }
+
+  match {
+    property = "site"
+    op       = "EQUALS"
+    values   = ["us-east-1", "us-west-2"]
+  }
+
+  entity_property_to_log_label_mapping = {
+    "otel_namespace" = "service_namespace"
+    "otel_service"   = "service_name"
+    "environment"    = "env"
+    "site"           = "region"
+  }
+
+  filter_by_span_id  = true
+  filter_by_trace_id = true
+}
+
+resource "grafana_asserts_log_config" "development" {
+  name            = "development"
+  priority        = 2000
+  default_config  = true
+  data_source_uid = "elasticsearch-dev"
+  error_label     = "error"
+
+  match {
+    property = "asserts_entity_type"
+    op       = "EQUALS"
+    values   = ["Service"]
+  }
+
+  match {
+    property = "environment"
+    op       = "EQUALS"
+    values   = ["development", "testing"]
+  }
+
+  match {
+    property = "site"
+    op       = "EQUALS"
+    values   = ["us-east-1"]
+  }
+
+  match {
+    property = "service"
+    op       = "EQUALS"
+    values   = ["api"]
+  }
+
+  entity_property_to_log_label_mapping = {
+    "otel_namespace" = "service_namespace"
+    "otel_service"   = "service_name"
+    "environment"    = "env"
+    "site"           = "region"
+    "service"        = "app"
+  }
+
+  filter_by_span_id  = true
+  filter_by_trace_id = true
+}
+
+resource "grafana_asserts_log_config" "minimal" {
+  name            = "minimal"
+  priority        = 3000
+  default_config  = false
+  data_source_uid = "loki-minimal"
+
+  match {
+    property = "asserts_entity_type"
+    op       = "IS_NOT_NULL"
+    values   = []
+  }
+}
+```
+
+<!-- schema generated by tfplugindocs -->
+## Schema
+
+### Required
+
+- `data_source_uid` (String) DataSource to be queried (e.g., a Loki instance).
+- `default_config` (Boolean) Is it the default config, therefore undeletable?
+- `name` (String) The name of the log configuration.
+- `priority` (Number) Priority of the log configuration. A lower number means a higher priority.
+
+### Optional
+
+- `entity_property_to_log_label_mapping` (Map of String) Mapping of entity properties to log labels.
+- `error_label` (String) Error label to filter logs.
+- `filter_by_span_id` (Boolean) Filter logs by span ID.
+- `filter_by_trace_id` (Boolean) Filter logs by trace ID.
+- `match` (Block List) List of match rules for entity properties. (see [below for nested schema](#nestedblock--match))
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+
+<a id="nestedblock--match"></a>
+### Nested Schema for `match`
+
+Required:
+
+- `op` (String) Operation to use for matching. One of: EQUALS, NOT_EQUALS, CONTAINS, DOES_NOT_CONTAIN, IS_NULL, IS_NOT_NULL.
+- `property` (String) Entity property to match.
+- `values` (List of String) Values to match against.
+
+
+<a id="nestedblock--timeouts"></a>
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
+
+## Import
+
+Import is supported using the following syntax:
+
+```shell
+terraform import grafana_asserts_log_config.name "{{ name }}"
+```
diff --git a/docs/resources/slo.md b/docs/resources/slo.md
index e73fe9de..bdc39447 100644
--- a/docs/resources/slo.md
+++ b/docs/resources/slo.md
@@ -220,6 +220,7 @@ For additional help with SLOs, view our [documentation](https://grafana.com/docs
 - `folder_uid` (String) UID for the SLO folder
 - `label` (Block List) 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_]*$" (see [below for nested schema](#nestedblock--label))
 - `search_expression` (String) 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.
+- `uuid` (String) UUID for the SLO. Custom UUIDs can be set. If not provided, a random UUID will be generated by the API.
 
 ### Read-Only
 
diff --git a/docs/resources/synthetic_monitoring_check_alerts.md b/docs/resources/synthetic_monitoring_check_alerts.md
index d4bff165..63e6fae4 100644
--- a/docs/resources/synthetic_monitoring_check_alerts.md
+++ b/docs/resources/synthetic_monitoring_check_alerts.md
@@ -33,19 +33,22 @@ resource "grafana_synthetic_monitoring_check" "main" {
 resource "grafana_synthetic_monitoring_check_alerts" "main" {
   check_id = grafana_synthetic_monitoring_check.main.id
   alerts = [{
-    name      = "ProbeFailedExecutionsTooHigh"
-    threshold = 1
-    period    = "15m"
+    name        = "ProbeFailedExecutionsTooHigh"
+    threshold   = 1
+    period      = "15m"
+    runbook_url = ""
     },
     {
-      name      = "TLSTargetCertificateCloseToExpiring"
-      threshold = 14
-      period    = ""
+      name        = "TLSTargetCertificateCloseToExpiring"
+      threshold   = 14
+      period      = ""
+      runbook_url = ""
     },
     {
-      name      = "HTTPRequestDurationTooHighAvg"
-      threshold = 5000
-      period    = "10m"
+      name        = "HTTPRequestDurationTooHighAvg"
+      threshold   = 5000
+      period      = "10m"
+      runbook_url = "https://wiki.company.com/runbooks/http-duration"
   }]
 }
 ```
@@ -69,6 +72,7 @@ Required:
 
 - `name` (String)
 - `period` (String)
+- `runbook_url` (String)
 - `threshold` (Number)
 
 ## Import
diff --git a/examples/resources/grafana_asserts_custom_model_rules/import.sh b/examples/resources/grafana_asserts_custom_model_rules/import.sh
new file mode 100644
index 00000000..96a4b4b3
--- /dev/null
+++ b/examples/resources/grafana_asserts_custom_model_rules/import.sh
@@ -0,0 +1 @@
+terraform import grafana_asserts_custom_model_rules.name "{{ name }}"
diff --git a/examples/resources/grafana_asserts_custom_model_rules/resource.tf b/examples/resources/grafana_asserts_custom_model_rules/resource.tf
new file mode 100644
index 00000000..48c7f745
--- /dev/null
+++ b/examples/resources/grafana_asserts_custom_model_rules/resource.tf
@@ -0,0 +1,35 @@
+resource "grafana_asserts_custom_model_rules" "test" {
+  name = "test-anything"
+  rules {
+    entity {
+      type = "Service"
+      name = "workload | service | job"
+      scope = {
+        namespace = "namespace"
+        env       = "asserts_env"
+        site      = "asserts_site"
+      }
+      lookup = {
+        workload  = "workload | deployment | statefulset | daemonset | replicaset"
+        service   = "service"
+        job       = "job"
+        proxy_job = "job"
+      }
+      defined_by {
+        query    = "up{job!=''}"
+        disabled = false
+        label_values = {
+          service = "service"
+          job     = "job"
+        }
+        literals = {
+          _source = "up_query"
+        }
+      }
+      defined_by {
+        query    = "up{job='disabled'}"
+        disabled = true
+      }
+    }
+  }
+}
diff --git a/examples/resources/grafana_asserts_log_config/import.sh b/examples/resources/grafana_asserts_log_config/import.sh
new file mode 100644
index 00000000..d2554d52
--- /dev/null
+++ b/examples/resources/grafana_asserts_log_config/import.sh
@@ -0,0 +1 @@
+terraform import grafana_asserts_log_config.name "{{ name }}"
diff --git a/examples/resources/grafana_asserts_log_config/resource.tf b/examples/resources/grafana_asserts_log_config/resource.tf
new file mode 100644
index 00000000..1477614e
--- /dev/null
+++ b/examples/resources/grafana_asserts_log_config/resource.tf
@@ -0,0 +1,91 @@
+resource "grafana_asserts_log_config" "production" {
+  name            = "production"
+  priority        = 1000
+  default_config  = false
+  data_source_uid = "grafanacloud-logs"
+  error_label     = "error"
+
+  match {
+    property = "asserts_entity_type"
+    op       = "EQUALS"
+    values   = ["Service"]
+  }
+
+  match {
+    property = "environment"
+    op       = "EQUALS"
+    values   = ["production", "staging"]
+  }
+
+  match {
+    property = "site"
+    op       = "EQUALS"
+    values   = ["us-east-1", "us-west-2"]
+  }
+
+  entity_property_to_log_label_mapping = {
+    "otel_namespace" = "service_namespace"
+    "otel_service"   = "service_name"
+    "environment"    = "env"
+    "site"           = "region"
+  }
+
+  filter_by_span_id  = true
+  filter_by_trace_id = true
+}
+
+resource "grafana_asserts_log_config" "development" {
+  name            = "development"
+  priority        = 2000
+  default_config  = true
+  data_source_uid = "elasticsearch-dev"
+  error_label     = "error"
+
+  match {
+    property = "asserts_entity_type"
+    op       = "EQUALS"
+    values   = ["Service"]
+  }
+
+  match {
+    property = "environment"
+    op       = "EQUALS"
+    values   = ["development", "testing"]
+  }
+
+  match {
+    property = "site"
+    op       = "EQUALS"
+    values   = ["us-east-1"]
+  }
+
+  match {
+    property = "service"
+    op       = "EQUALS"
+    values   = ["api"]
+  }
+
+  entity_property_to_log_label_mapping = {
+    "otel_namespace" = "service_namespace"
+    "otel_service"   = "service_name"
+    "environment"    = "env"
+    "site"           = "region"
+    "service"        = "app"
+  }
+
+  filter_by_span_id  = true
+  filter_by_trace_id = true
+}
+
+resource "grafana_asserts_log_config" "minimal" {
+  name            = "minimal"
+  priority        = 3000
+  default_config  = false
+  data_source_uid = "loki-minimal"
+
+  match {
+    property = "asserts_entity_type"
+    op       = "IS_NOT_NULL"
+    values   = []
+  }
+}
diff --git a/examples/resources/grafana_synthetic_monitoring_check_alerts/resource.tf b/examples/resources/grafana_synthetic_monitoring_check_alerts/resource.tf
index be025f25..dfe5744b 100644
--- a/examples/resources/grafana_synthetic_monitoring_check_alerts/resource.tf
+++ b/examples/resources/grafana_synthetic_monitoring_check_alerts/resource.tf
@@ -15,18 +15,21 @@ resource "grafana_synthetic_monitoring_check" "main" {
 resource "grafana_synthetic_monitoring_check_alerts" "main" {
   check_id = grafana_synthetic_monitoring_check.main.id
   alerts = [{
-    name      = "ProbeFailedExecutionsTooHigh"
-    threshold = 1
-    period    = "15m"
+    name        = "ProbeFailedExecutionsTooHigh"
+    threshold   = 1
+    period      = "15m"
+    runbook_url = ""
     },
     {
-      name      = "TLSTargetCertificateCloseToExpiring"
-      threshold = 14
-      period    = ""
+      name        = "TLSTargetCertificateCloseToExpiring"
+      threshold   = 14
+      period      = ""
+      runbook_url = ""
     },
     {
-      name      = "HTTPRequestDurationTooHighAvg"
-      threshold = 5000
-      period    = "10m"
+      name        = "HTTPRequestDurationTooHighAvg"
+      threshold   = 5000
+      period      = "10m"
+      runbook_url = "https://wiki.company.com/runbooks/http-duration"
   }]
 } 
\ No newline at end of file
diff --git a/examples/resources/grafana_synthetic_monitoring_check_alerts/resource_update.tf b/examples/resources/grafana_synthetic_monitoring_check_alerts/resource_update.tf
index 493b2a38..aa7db3b4 100644
--- a/examples/resources/grafana_synthetic_monitoring_check_alerts/resource_update.tf
+++ b/examples/resources/grafana_synthetic_monitoring_check_alerts/resource_update.tf
@@ -15,13 +15,15 @@ resource "grafana_synthetic_monitoring_check" "main" {
 resource "grafana_synthetic_monitoring_check_alerts" "main" {
   check_id = grafana_synthetic_monitoring_check.main.id
   alerts = [{
-    name      = "ProbeFailedExecutionsTooHigh"
-    threshold = 2
-    period    = "10m"
+    name        = "ProbeFailedExecutionsTooHigh"
+    threshold   = 2
+    period      = "10m"
+    runbook_url = ""
     },
     {
-      name      = "TLSTargetCertificateCloseToExpiring"
-      threshold = 7
-      period    = ""
+      name        = "TLSTargetCertificateCloseToExpiring"
+      threshold   = 7
+      period      = ""
+      runbook_url = ""
   }]
 }
\ No newline at end of file
diff --git a/go.mod b/go.mod
index 29c0c6e7..1f8317f4 100644
--- a/go.mod
+++ b/go.mod
@@ -11,11 +11,11 @@ require (
 	github.com/grafana/amixr-api-go-client v0.0.25
 	github.com/grafana/authlib/claims v0.0.0-20250120084028-e3328c576437
 	github.com/grafana/fleet-management-api v1.0.0
-	github.com/grafana/grafana-app-sdk v0.40.3
-	github.com/grafana/grafana-asserts-public-clients/go/gcom v0.0.0-20250811125322-247815da58ca
+	github.com/grafana/grafana-app-sdk v0.45.0
+	github.com/grafana/grafana-asserts-public-clients/go/gcom v0.0.0-20250916172812-b0f2b75c0d34
 	github.com/grafana/grafana-com-public-clients/go/gcom v0.0.0-20250526074454-7ec66e02e4bb
 	github.com/grafana/grafana-openapi-client-go v0.0.0-20250617151817-c0f8cbb88d5c
-	github.com/grafana/grafana/apps/alerting/alertenrichment v0.0.0-20250904171753-3d6d6326866f
+	github.com/grafana/grafana/apps/alerting/alertenrichment v0.0.0-20250925121631-89b988ca553e
 	github.com/grafana/grafana/apps/dashboard v0.0.0-20250424064802-2fbb2d6f5d27
 	github.com/grafana/grafana/apps/playlist v0.0.0-20250424064802-2fbb2d6f5d27
 	github.com/grafana/grafana/pkg/apimachinery v0.0.0-20250901080157-a0280d701b28
@@ -23,8 +23,8 @@ require (
 	github.com/grafana/machine-learning-go-client v0.8.2
 	github.com/grafana/river v0.3.0
 	github.com/grafana/slo-openapi-client/go/slo v0.0.0-20250218172929-ab9cae090da6
-	github.com/grafana/synthetic-monitoring-agent v0.39.2
-	github.com/grafana/synthetic-monitoring-api-go-client v0.15.1
+	github.com/grafana/synthetic-monitoring-agent v0.43.1
+	github.com/grafana/synthetic-monitoring-api-go-client v0.17.1
 	github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320
 	github.com/hashicorp/go-retryablehttp v0.7.7
 	github.com/hashicorp/go-uuid v1.0.3
@@ -42,16 +42,16 @@ require (
 	github.com/hashicorp/terraform-plugin-mux v0.18.0
 	github.com/hashicorp/terraform-plugin-sdk/v2 v2.36.1
 	github.com/prometheus/alertmanager v0.27.0
-	github.com/prometheus/common v0.65.0
-	github.com/stretchr/testify v1.10.0
+	github.com/prometheus/common v0.66.1
+	github.com/stretchr/testify v1.11.1
 	github.com/tmccombs/hcl2json v0.6.8
 	github.com/urfave/cli/v2 v2.27.7
 	github.com/zclconf/go-cty v1.16.4
-	golang.org/x/exp v0.0.0-20250718183923-645b1fa84792
-	golang.org/x/text v0.28.0
+	golang.org/x/exp v0.0.0-20250911091902-df9299821621
+	golang.org/x/text v0.29.0
 	gopkg.in/yaml.v2 v2.4.0
-	k8s.io/apimachinery v0.33.3
-	k8s.io/client-go v0.33.3
+	k8s.io/apimachinery v0.34.1
+	k8s.io/client-go v0.34.1
 )
 
 require (
@@ -70,7 +70,7 @@ require (
 	github.com/beorn7/perks v1.0.1 // indirect
 	github.com/bgentry/speakeasy v0.1.0 // indirect
 	github.com/bmatcuk/doublestar/v4 v4.8.1 // indirect
-	github.com/cenkalti/backoff/v5 v5.0.2 // indirect
+	github.com/cenkalti/backoff/v5 v5.0.3 // indirect
 	github.com/cespare/xxhash/v2 v2.3.0 // indirect
 	github.com/cheekybits/genny v1.0.0 // indirect
 	github.com/chromedp/cdproto v0.0.0-20240810084448-b931b754e476 // indirect
@@ -79,9 +79,9 @@ require (
 	github.com/cpuguy83/go-md2man/v2 v2.0.7 // indirect
 	github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
 	github.com/elazarl/goproxy v1.7.2 // indirect
-	github.com/emicklei/go-restful/v3 v3.12.1 // indirect
-	github.com/fxamacker/cbor/v2 v2.7.0 // indirect
-	github.com/getkin/kin-openapi v0.132.0 // indirect
+	github.com/emicklei/go-restful/v3 v3.12.2 // indirect
+	github.com/fxamacker/cbor/v2 v2.9.0 // indirect
+	github.com/getkin/kin-openapi v0.133.0 // indirect
 	github.com/go-logr/logr v1.4.3 // indirect
 	github.com/go-logr/stdr v1.2.2 // indirect
 	github.com/go-openapi/analysis v0.23.0 // indirect
@@ -96,18 +96,18 @@ require (
 	github.com/gogo/protobuf v1.3.2 // indirect
 	github.com/golang/protobuf v1.5.4 // indirect
 	github.com/google/flatbuffers v25.2.10+incompatible // indirect
-	github.com/google/gnostic-models v0.6.9 // indirect
+	github.com/google/gnostic-models v0.7.0 // indirect
 	github.com/google/go-cmp v0.7.0 // indirect
 	github.com/google/go-querystring v1.1.0 // indirect
 	github.com/google/uuid v1.6.0 // indirect
 	github.com/gorilla/mux v1.8.1 // indirect
-	github.com/grafana/grafana-app-sdk/logging v0.40.2 // indirect
+	github.com/grafana/grafana-app-sdk/logging v0.43.2 // indirect
 	github.com/grafana/grafana-plugin-sdk-go v0.275.0 // indirect
 	github.com/grafana/otel-profiling-go v0.5.1 // indirect
 	github.com/grafana/pyroscope-go/godeltaprof v0.1.8 // indirect
-	github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1 // indirect
-	github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.1 // indirect
-	github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.1 // indirect
+	github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.1.0 // indirect
+	github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.2 // indirect
+	github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 // indirect
 	github.com/hashicorp/cli v1.1.7 // indirect
 	github.com/hashicorp/errwrap v1.1.0 // indirect
 	github.com/hashicorp/go-checkpoint v0.5.0 // indirect
@@ -137,7 +137,7 @@ require (
 	github.com/mitchellh/mapstructure v1.5.0 // indirect
 	github.com/mitchellh/reflectwalk v1.0.2 // indirect
 	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
-	github.com/modern-go/reflect2 v1.0.2 // indirect
+	github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
 	github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect
 	github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
 	github.com/oasdiff/yaml v0.0.0-20250309154309-f31be36b4037 // indirect
@@ -151,7 +151,7 @@ require (
 	github.com/pierrec/lz4/v4 v4.1.22 // indirect
 	github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
 	github.com/posener/complete v1.2.3 // indirect
-	github.com/prometheus/client_golang v1.23.0 // indirect
+	github.com/prometheus/client_golang v1.23.2 // indirect
 	github.com/prometheus/client_model v0.6.2 // indirect
 	github.com/prometheus/procfs v0.16.1 // indirect
 	github.com/rivo/uniseg v0.4.7 // indirect
@@ -167,6 +167,7 @@ require (
 	github.com/vmihailenco/msgpack v4.0.4+incompatible // indirect
 	github.com/vmihailenco/msgpack/v5 v5.4.1 // indirect
 	github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect
+	github.com/woodsbury/decimal128 v1.3.0 // indirect
 	github.com/x448/float16 v0.8.4 // indirect
 	github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect
 	github.com/yuin/goldmark v1.7.7 // indirect
@@ -179,43 +180,45 @@ require (
 	go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.60.0 // indirect
 	go.opentelemetry.io/contrib/propagators/jaeger v1.35.0 // indirect
 	go.opentelemetry.io/contrib/samplers/jaegerremote v0.29.0 // indirect
-	go.opentelemetry.io/otel v1.37.0 // indirect
-	go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0 // indirect
-	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.37.0 // indirect
-	go.opentelemetry.io/otel/metric v1.37.0 // indirect
-	go.opentelemetry.io/otel/sdk v1.37.0 // indirect
-	go.opentelemetry.io/otel/trace v1.37.0 // indirect
-	go.opentelemetry.io/proto/otlp v1.7.0 // indirect
+	go.opentelemetry.io/otel v1.38.0 // indirect
+	go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 // indirect
+	go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0 // indirect
+	go.opentelemetry.io/otel/metric v1.38.0 // indirect
+	go.opentelemetry.io/otel/sdk v1.38.0 // indirect
+	go.opentelemetry.io/otel/trace v1.38.0 // indirect
+	go.opentelemetry.io/proto/otlp v1.7.1 // indirect
 	go.yaml.in/yaml/v2 v2.4.2 // indirect
-	golang.org/x/crypto v0.41.0 // indirect
-	golang.org/x/mod v0.26.0 // indirect
-	golang.org/x/net v0.43.0 // indirect
+	go.yaml.in/yaml/v3 v3.0.4 // indirect
+	golang.org/x/crypto v0.42.0 // indirect
+	golang.org/x/mod v0.28.0 // indirect
+	golang.org/x/net v0.44.0 // indirect
 	golang.org/x/oauth2 v0.30.0 // indirect
-	golang.org/x/sync v0.16.0 // indirect
-	golang.org/x/sys v0.35.0 // indirect
-	golang.org/x/term v0.34.0 // indirect
+	golang.org/x/sync v0.17.0 // indirect
+	golang.org/x/sys v0.36.0 // indirect
+	golang.org/x/telemetry v0.0.0-20250908211612-aef8a434d053 // indirect
+	golang.org/x/term v0.35.0 // indirect
 	golang.org/x/time v0.11.0 // indirect
-	golang.org/x/tools v0.35.0 // indirect
+	golang.org/x/tools v0.37.0 // indirect
 	golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect
 	gomodules.xyz/jsonpatch/v2 v2.5.0 // indirect
 	google.golang.org/appengine v1.6.8 // indirect
-	google.golang.org/genproto/googleapis/api v0.0.0-20250603155806-513f23925822 // indirect
-	google.golang.org/genproto/googleapis/rpc v0.0.0-20250804133106-a7a43d27e69b // indirect
-	google.golang.org/grpc v1.74.2 // indirect
-	google.golang.org/protobuf v1.36.6 // indirect
+	google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5 // indirect
+	google.golang.org/genproto/googleapis/rpc v0.0.0-20250908214217-97024824d090 // indirect
+	google.golang.org/grpc v1.75.1 // indirect
+	google.golang.org/protobuf v1.36.9 // indirect
 	gopkg.in/fsnotify/fsnotify.v1 v1.4.7 // indirect
 	gopkg.in/inf.v0 v0.9.1 // indirect
 	gopkg.in/validator.v2 v2.0.1 // indirect
 	gopkg.in/yaml.v3 v3.0.1 // indirect
-	k8s.io/api v0.33.3 // indirect
-	k8s.io/apiextensions-apiserver v0.33.3 // indirect
+	k8s.io/api v0.34.1 // indirect
+	k8s.io/apiextensions-apiserver v0.34.1 // indirect
 	k8s.io/klog/v2 v2.130.1 // indirect
-	k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff // indirect
-	k8s.io/utils v0.0.0-20241210054802-24370beab758 // indirect
+	k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b // indirect
+	k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 // indirect
 	sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect
 	sigs.k8s.io/randfill v1.0.0 // indirect
-	sigs.k8s.io/structured-merge-diff/v4 v4.7.0 // indirect
-	sigs.k8s.io/yaml v1.5.0 // indirect
+	sigs.k8s.io/structured-merge-diff/v6 v6.3.0 // indirect
+	sigs.k8s.io/yaml v1.6.0 // indirect
 )
 
 // https://github.com/hashicorp/terraform-exec/issues/423
diff --git a/go.sum b/go.sum
index 1e22d6c8..e4f7a77c 100644
--- a/go.sum
+++ b/go.sum
@@ -45,8 +45,8 @@ github.com/bmatcuk/doublestar/v4 v4.8.1 h1:54Bopc5c2cAvhLRAzqOGCYHYyhcDHsFF4wWIR
 github.com/bmatcuk/doublestar/v4 v4.8.1/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc=
 github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA=
 github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8=
-github.com/cenkalti/backoff/v5 v5.0.2 h1:rIfFVxEf1QsI7E1ZHfp/B4DF/6QBAUhmgkxc0H7Zss8=
-github.com/cenkalti/backoff/v5 v5.0.2/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw=
+github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM=
+github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw=
 github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
 github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
 github.com/cheekybits/genny v1.0.0 h1:uGGa4nei+j20rOSeDeP5Of12XVm7TGUd4dJA9RDitfE=
@@ -70,8 +70,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1
 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/elazarl/goproxy v1.7.2 h1:Y2o6urb7Eule09PjlhQRGNsqRfPmYI3KKQLFpCAV3+o=
 github.com/elazarl/goproxy v1.7.2/go.mod h1:82vkLNir0ALaW14Rc399OTTjyNREgmdL2cVoIbS6XaE=
-github.com/emicklei/go-restful/v3 v3.12.1 h1:PJMDIM/ak7btuL8Ex0iYET9hxM3CI2sjZtzpL63nKAU=
-github.com/emicklei/go-restful/v3 v3.12.1/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
+github.com/emicklei/go-restful/v3 v3.12.2 h1:DhwDP0vY3k8ZzE0RunuJy8GhNpPL6zqLkDf9B/a0/xU=
+github.com/emicklei/go-restful/v3 v3.12.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
 github.com/emicklei/proto v1.13.2 h1:z/etSFO3uyXeuEsVPzfl56WNgzcvIr42aQazXaQmFZY=
 github.com/emicklei/proto v1.13.2/go.mod h1:rn1FgRS/FANiZdD2djyH7TMA9jdRDcYQ9IEN9yvjX0A=
 github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=
@@ -87,12 +87,12 @@ github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSw
 github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
 github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
 github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
-github.com/fsnotify/fsnotify v1.8.0 h1:dAwr6QBTBZIkG8roQaJjGof0pp0EeF+tNV7YBP3F/8M=
-github.com/fsnotify/fsnotify v1.8.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
-github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E=
-github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
-github.com/getkin/kin-openapi v0.132.0 h1:3ISeLMsQzcb5v26yeJrBcdTCEQTag36ZjaGk7MIRUwk=
-github.com/getkin/kin-openapi v0.132.0/go.mod h1:3OlG51PCYNsPByuiMB0t4fjnNlIDnaEDsjiKUV8nL58=
+github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
+github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
+github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
+github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=
+github.com/getkin/kin-openapi v0.133.0 h1:pJdmNohVIJ97r4AUFtEXRXwESr8b0bD721u/Tz6k8PQ=
+github.com/getkin/kin-openapi v0.133.0/go.mod h1:boAciF6cXk5FhPqe/NQeBTeenbjqU4LhWBf09ILVvWE=
 github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI=
 github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic=
 github.com/go-git/go-billy/v5 v5.6.0 h1:w2hPNtoehvJIxR00Vb4xX94qHQi/ApZfX+nBE2Cjio8=
@@ -147,12 +147,11 @@ github.com/golang/snappy v1.0.0 h1:Oy607GVXHs7RtbggtPBnr2RmDArIsAefDwvrdWvRhGs=
 github.com/golang/snappy v1.0.0/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
 github.com/google/flatbuffers v25.2.10+incompatible h1:F3vclr7C3HpB1k9mxCGRMXq6FdUalZ6H/pNX4FP1v0Q=
 github.com/google/flatbuffers v25.2.10+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
-github.com/google/gnostic-models v0.6.9 h1:MU/8wDLif2qCXZmzncUQ/BOfxWfthHi63KqpoNbWqVw=
-github.com/google/gnostic-models v0.6.9/go.mod h1:CiWsm0s6BSQd1hRn8/QmxqB6BesYcbSZxsz9b0KuDBw=
+github.com/google/gnostic-models v0.7.0 h1:qwTtogB15McXDaNqTZdzPJRHvaVJlAl+HVQnLmJEJxo=
+github.com/google/gnostic-models v0.7.0/go.mod h1:whL5G0m6dmc5cPxKc5bdKdEN3UjI7OUGxBlw57miDrQ=
 github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
 github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
 github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
 github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
 github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
@@ -174,20 +173,20 @@ github.com/grafana/authlib/claims v0.0.0-20250120084028-e3328c576437 h1:OlwbIVFc
 github.com/grafana/authlib/claims v0.0.0-20250120084028-e3328c576437/go.mod h1:r+F8H6awwjNQt/KPZ2GNwjk8TvsJ7/gxzkXN26GlL/A=
 github.com/grafana/fleet-management-api v1.0.0 h1:twb0kBgeNRcvQi7iDXq7AFhlM2mWcN76kTXleJuPA38=
 github.com/grafana/fleet-management-api v1.0.0/go.mod h1:6iJjhjWhHZ8iwkyuDXFVTuay57JILnE3kaOPk8Nzorw=
-github.com/grafana/grafana-app-sdk v0.40.3 h1:JFo7uAfbAJUfZ9neD7/4sODKm1xgu9zhckclH/N4DYU=
-github.com/grafana/grafana-app-sdk v0.40.3/go.mod h1:j0KzHo3Sa6kd+lnwSScBNoV9Vobkg/YY9HtEjxpyPrk=
-github.com/grafana/grafana-app-sdk/logging v0.40.2 h1:HQ1+y9Od92iMbWWB54QxiYpNtCvYGUVpyxvxZ7ywB1k=
-github.com/grafana/grafana-app-sdk/logging v0.40.2/go.mod h1:otUD9XpJD7A5sCLb8mcs9hIXGdeV6lnhzVwe747g4RU=
-github.com/grafana/grafana-asserts-public-clients/go/gcom v0.0.0-20250811125322-247815da58ca h1:GVzyCTi3rqvjK42b++lFjabG2zsrLvyAbbR43dWP6s0=
-github.com/grafana/grafana-asserts-public-clients/go/gcom v0.0.0-20250811125322-247815da58ca/go.mod h1:EL/5hluCvj6EDjkUfoClLKSKDoCoDowZUety28jhxQI=
+github.com/grafana/grafana-app-sdk v0.45.0 h1:niFqYovxuw9vnUB9qoxEgmupqriG7Gns9ZGwB2uuOyE=
+github.com/grafana/grafana-app-sdk v0.45.0/go.mod h1:1pYGEBrgG8i6pKmmsNXvtAr15jZ4iLtyHU4yj7T6XaI=
+github.com/grafana/grafana-app-sdk/logging v0.43.2 h1:rIWp/KSrFfedrrOl/XlOzL2mA+dhjbXlRq/wu79A54g=
+github.com/grafana/grafana-app-sdk/logging v0.43.2/go.mod h1:Gh/nBWnspK3oDNWtiM5qUF/fardHzOIEez+SPI3JeHA=
+github.com/grafana/grafana-asserts-public-clients/go/gcom v0.0.0-20250916172812-b0f2b75c0d34 h1:HDMrX9/0+imwxhdhV11d0yQ8kM+2SSV4nXykZkCB1AY=
+github.com/grafana/grafana-asserts-public-clients/go/gcom v0.0.0-20250916172812-b0f2b75c0d34/go.mod h1:piOOzeZUPg0tP4sfe1y+MFp5+jGVPri4WOVV4oSJS30=
 github.com/grafana/grafana-com-public-clients/go/gcom v0.0.0-20250526074454-7ec66e02e4bb h1:rmYEnCXHNQbRsuzc5jCX5qkBqFF37c5RCHlyqAAPJZo=
 github.com/grafana/grafana-com-public-clients/go/gcom v0.0.0-20250526074454-7ec66e02e4bb/go.mod h1:sYWkB3NhyirQJfy3wtNQ29UYjoHbRlJlYhqN1jNsC5g=
 github.com/grafana/grafana-openapi-client-go v0.0.0-20250617151817-c0f8cbb88d5c h1:jox7J0BnJmcZJp8lp631u4gjDEoIfpi6O3yrpiXNTtg=
 github.com/grafana/grafana-openapi-client-go v0.0.0-20250617151817-c0f8cbb88d5c/go.mod h1:AOzHLStinAJHJmcih1eEbIRImxpT6enYUsZLnnOvhbo=
 github.com/grafana/grafana-plugin-sdk-go v0.275.0 h1:icGmZG91lVqIo79w/pSki6N44d3IjOjTfsfQPfu4THU=
 github.com/grafana/grafana-plugin-sdk-go v0.275.0/go.mod h1:mO9LJqdXDh5JpO/xIdPAeg5LdThgQ06Y/SLpXDWKw2c=
-github.com/grafana/grafana/apps/alerting/alertenrichment v0.0.0-20250904171753-3d6d6326866f h1:l7fT/ukOqdF0CuF+fov4HJwzDRAugM3ppL5nNIu7HGo=
-github.com/grafana/grafana/apps/alerting/alertenrichment v0.0.0-20250904171753-3d6d6326866f/go.mod h1:hMypu0UKvA1dCbI+Y7cZ1UxX0Ta2zrGvx/0YZQXcz6A=
+github.com/grafana/grafana/apps/alerting/alertenrichment v0.0.0-20250925121631-89b988ca553e h1:0EVTtyz/kpD1FAsPNTcs4X0wTeMnan1wAI6eXxUVeng=
+github.com/grafana/grafana/apps/alerting/alertenrichment v0.0.0-20250925121631-89b988ca553e/go.mod h1:hUYbzTrBgaGZXYnQhB7xCDxJgC7a1rvugPWPMqcGnlw=
 github.com/grafana/grafana/apps/dashboard v0.0.0-20250424064802-2fbb2d6f5d27 h1:UAv+x7lwteJR4pPMpIZ9hzngzAT1oiOQ55pq2GS4YCE=
 github.com/grafana/grafana/apps/dashboard v0.0.0-20250424064802-2fbb2d6f5d27/go.mod h1:yr2/8+SlXzksMuaKM+KgjzS8BSJ5igkR3UmxfqeDM+o=
 github.com/grafana/grafana/apps/playlist v0.0.0-20250424064802-2fbb2d6f5d27 h1:aJACrPQ7VFR8V3i9CD8eM+daFdCawv86n3n5Ur8S6YQ=
@@ -206,16 +205,16 @@ github.com/grafana/river v0.3.0 h1:6TsaR/vkkcppUM9I0muGbPIUedCtpPu6OWreE5+CE6g=
 github.com/grafana/river v0.3.0/go.mod h1:icSidCSHYXJUYy6TjGAi/D+X7FsP7Gc7cxvBUIwYMmY=
 github.com/grafana/slo-openapi-client/go/slo v0.0.0-20250218172929-ab9cae090da6 h1:7jbuz2MCqHlIc+vC3geOEzMZolm30v3K1bFTaTJ4mGI=
 github.com/grafana/slo-openapi-client/go/slo v0.0.0-20250218172929-ab9cae090da6/go.mod h1:a9idYds6valDrBwBdcFTIp+QzlERgf2CFDZgEfmp9pA=
-github.com/grafana/synthetic-monitoring-agent v0.39.2 h1:aiaU4mUzhe1mdORaVfaTKiFTSTlfyT4doBQoovA+I1k=
-github.com/grafana/synthetic-monitoring-agent v0.39.2/go.mod h1:nt+OvMmK7GsM72gMKaVA9uNDwQKxU90WeyxU0gnwrOQ=
-github.com/grafana/synthetic-monitoring-api-go-client v0.15.1 h1:YCQ5dWFeWny24wo6SA/rVrtpF0Y7miGHAnFF15LDWFQ=
-github.com/grafana/synthetic-monitoring-api-go-client v0.15.1/go.mod h1:6PmnrhmVoEsf6s4d20zmsujgpPwprC4Roc7jAK9Thyc=
-github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1 h1:qnpSQwGEnkcRpTqNOIR6bJbR0gAorgP9CSALpRcKoAA=
-github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1/go.mod h1:lXGCsh6c22WGtjr+qGHj1otzZpV/1kwTMAqkwZsnWRU=
-github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.1 h1:KcFzXwzM/kGhIRHvc8jdixfIJjVzuUJdnv+5xsPutog=
-github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.1/go.mod h1:qOchhhIlmRcqk/O9uCo/puJlyo07YINaIqdZfZG3Jkc=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.1 h1:X5VWvz21y3gzm9Nw/kaUeku/1+uBhcekkmy4IkffJww=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.1/go.mod h1:Zanoh4+gvIgluNqcfMVTJueD4wSS5hT7zTt4Mrutd90=
+github.com/grafana/synthetic-monitoring-agent v0.43.1 h1:Qejsuf25yZzdImVLZ6K1f5cbEIYVw0gMU8dob3JTzEc=
+github.com/grafana/synthetic-monitoring-agent v0.43.1/go.mod h1:HO4es33UF/5b3i4JdUhVcvs9abUXESMjFxnWP8y6KG0=
+github.com/grafana/synthetic-monitoring-api-go-client v0.17.1 h1:6ZQoQVD0sASxe5OVEk/T/YEOYOuilSA434bX4n3SJLQ=
+github.com/grafana/synthetic-monitoring-api-go-client v0.17.1/go.mod h1:3XfDhlxYkC/Apaug0e0vd4wHx8JZJ4k+v5ybny8ZGfc=
+github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.1.0 h1:QGLs/O40yoNK9vmy4rhUGBVyMf1lISBGtXRpsu/Qu/o=
+github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.1.0/go.mod h1:hM2alZsMUni80N33RBe6J0e423LB+odMj7d3EMP9l20=
+github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.2 h1:sGm2vDRFUrQJO/Veii4h4zG2vvqG6uWNkBHSTqXOZk0=
+github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.2/go.mod h1:wd1YpapPLivG6nQgbf7ZkG1hhSOXDhhn4MLTknx2aAc=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 h1:8Tjv8EJ+pM1xP8mK6egEbD1OgnVTyacbefKhmbLhIhU=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2/go.mod h1:pkJQ2tZHJ0aFOVEEot6oZmaVEZcRme73eIFmhiVuRWs=
 github.com/hashicorp/cli v1.1.7 h1:/fZJ+hNdwfTSfsxMBa9WWMlfjUZbX8/LnUxgAd7lCVU=
 github.com/hashicorp/cli v1.1.7/go.mod h1:e6Mfpga9OCT1vqzFuoGZiiF/KaG9CbUfO5s3ghU3YgU=
 github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
@@ -346,8 +345,9 @@ github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx
 github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
 github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
 github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
 github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
+github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee h1:W5t00kpgFdJifH4BDsTlE89Zl93FEloxaWZfGcifgq8=
+github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
 github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw=
 github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8=
 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
@@ -389,12 +389,12 @@ github.com/posener/complete v1.2.3 h1:NP0eAhjcjImqslEwo/1hq7gpajME0fTLTezBKDqfXq
 github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s=
 github.com/prometheus/alertmanager v0.27.0 h1:V6nTa2J5V4s8TG4C4HtrBP/WNSebCCTYGGv4qecA/+I=
 github.com/prometheus/alertmanager v0.27.0/go.mod h1:8Ia/R3urPmbzJ8OsdvmZvIprDwvwmYCmUbwBL+jlPOE=
-github.com/prometheus/client_golang v1.23.0 h1:ust4zpdl9r4trLY/gSjlm07PuiBq2ynaXXlptpfy8Uc=
-github.com/prometheus/client_golang v1.23.0/go.mod h1:i/o0R9ByOnHX0McrTMTyhYvKE4haaf2mW08I+jGAjEE=
+github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o=
+github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg=
 github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk=
 github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE=
-github.com/prometheus/common v0.65.0 h1:QDwzd+G1twt//Kwj/Ww6E9FQq1iVMmODnILtW1t2VzE=
-github.com/prometheus/common v0.65.0/go.mod h1:0gZns+BLRQ3V6NdaerOhMbwwRbNh9hkGINtQAsP5GS8=
+github.com/prometheus/common v0.66.1 h1:h5E0h5/Y8niHc5DlaLlWLArTQI7tMrsfQjHV+d9ZoGs=
+github.com/prometheus/common v0.66.1/go.mod h1:gcaUsgf3KfRSwHY4dIMXLPV0K/Wg1oZ8+SbZk/HH/dA=
 github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg=
 github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is=
 github.com/protocolbuffers/txtpbfmt v0.0.0-20241112170944-20d2c9ebc01d h1:HWfigq7lB31IeJL8iy7jkUmU/PG1Sr8jVGhS749dbUA=
@@ -424,8 +424,8 @@ github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIK
 github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
 github.com/spf13/cast v1.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y=
 github.com/spf13/cast v1.7.1/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
-github.com/spf13/pflag v1.0.7 h1:vN6T9TfwStFPFM5XzjsvmzZkLuaLX+HS+0SeFLRgU6M=
-github.com/spf13/pflag v1.0.7/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
+github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk=
+github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
 github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
@@ -439,8 +439,8 @@ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1F
 github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
 github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
 github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
-github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
-github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
+github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
 github.com/tmccombs/hcl2json v0.6.8 h1:9bd7c3jZTj9FsN+lDIzrvLmXqxvCgydb84Uc4DBxOHA=
 github.com/tmccombs/hcl2json v0.6.8/go.mod h1:qjEaQ4hBNPeDWOENB9yg6+BzqvtMA1MMN1+goFFh8Vc=
 github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU=
@@ -464,6 +464,8 @@ github.com/vmihailenco/msgpack/v5 v5.4.1 h1:cQriyiUvjTwOHg8QZaPihLWeRAAVoCpE00IU
 github.com/vmihailenco/msgpack/v5 v5.4.1/go.mod h1:GaZTsDaehaPpQVyxrf5mtQlH+pc21PIudVV/E3rRQok=
 github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g=
 github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds=
+github.com/woodsbury/decimal128 v1.3.0 h1:8pffMNWIlC0O5vbyHWFZAt5yWvWcrHA+3ovIIjVWss0=
+github.com/woodsbury/decimal128 v1.3.0/go.mod h1:C5UTmyTjW3JftjUFzOVhC20BEQa2a4ZKOB5I6Zjb+ds=
 github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
 github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
 github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM=
@@ -495,59 +497,59 @@ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.6
 go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0/go.mod h1:rg+RlpR5dKwaS95IyyZqj5Wd4E13lk/msnTS0Xl9lJM=
 go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.60.0 h1:0tY123n7CdWMem7MOVdKOt0YfshufLCwfE5Bob+hQuM=
 go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.60.0/go.mod h1:CosX/aS4eHnG9D7nESYpV753l4j9q5j3SL/PUYd2lR8=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0 h1:Hf9xI/XLML9ElpiHVDNwvqI0hIFlzV8dgIr35kV1kRU=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0/go.mod h1:NfchwuyNoMcZ5MLHwPrODwUF1HWCXWrL31s8gSAdIKY=
 go.opentelemetry.io/contrib/propagators/jaeger v1.35.0 h1:UIrZgRBHUrYRlJ4V419lVb4rs2ar0wFzKNAebaP05XU=
 go.opentelemetry.io/contrib/propagators/jaeger v1.35.0/go.mod h1:0ciyFyYZxE6JqRAQvIgGRabKWDUmNdW3GAQb6y/RlFU=
 go.opentelemetry.io/contrib/samplers/jaegerremote v0.29.0 h1:VpYbyLrB5BS3blBCJMqHRIrbU4RlPnyFovR3La+1j4Q=
 go.opentelemetry.io/contrib/samplers/jaegerremote v0.29.0/go.mod h1:XAJmM2MWhiIoTO4LCLBVeE8w009TmsYk6hq1UNdXs5A=
 go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znnUvNNEo=
-go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ=
-go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0 h1:Ahq7pZmv87yiyn3jeFz/LekZmPLLdKejuO3NcK9MssM=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0/go.mod h1:MJTqhM0im3mRLw1i8uGHnCvUEeS7VwRyxlLC78PA18M=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.37.0 h1:EtFWSnwW9hGObjkIdmlnWSydO+Qs8OwzfzXLUPg4xOc=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.37.0/go.mod h1:QjUEoiGCPkvFZ/MjK6ZZfNOS6mfVEVKYE99dFhuN2LI=
+go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8=
+go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 h1:GqRJVj7UmLjCVyVJ3ZFLdPRmhDUp2zFmQe3RHIOsw24=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0/go.mod h1:ri3aaHSmCTVYu2AWv44YMauwAQc0aqI9gHKIcSbI1pU=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0 h1:lwI4Dc5leUqENgGuQImwLo4WnuXFPetmPpkLi2IrX54=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0/go.mod h1:Kz/oCE7z5wuyhPxsXDuaPteSWqjSBD5YaSdbxZYGbGk=
 go.opentelemetry.io/otel/metric v1.21.0/go.mod h1:o1p3CA8nNHW8j5yuQLdc1eeqEaPfzug24uvsyIEJRWM=
-go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE=
-go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E=
+go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA=
+go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI=
 go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E=
-go.opentelemetry.io/otel/sdk v1.37.0 h1:ItB0QUqnjesGRvNcmAcU0LyvkVyGJ2xftD29bWdDvKI=
-go.opentelemetry.io/otel/sdk v1.37.0/go.mod h1:VredYzxUvuo2q3WRcDnKDjbdvmO0sCzOvVAiY+yUkAg=
-go.opentelemetry.io/otel/sdk/metric v1.37.0 h1:90lI228XrB9jCMuSdA0673aubgRobVZFhbjxHHspCPc=
-go.opentelemetry.io/otel/sdk/metric v1.37.0/go.mod h1:cNen4ZWfiD37l5NhS+Keb5RXVWZWpRE+9WyVCpbo5ps=
+go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E=
+go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg=
+go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM=
+go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA=
 go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ=
-go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4=
-go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0=
-go.opentelemetry.io/proto/otlp v1.7.0 h1:jX1VolD6nHuFzOYso2E73H85i92Mv8JQYk0K9vz09os=
-go.opentelemetry.io/proto/otlp v1.7.0/go.mod h1:fSKjH6YJ7HDlwzltzyMj036AJ3ejJLCgCSHGj4efDDo=
+go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE=
+go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs=
+go.opentelemetry.io/proto/otlp v1.7.1 h1:gTOMpGDb0WTBOP8JaO72iL3auEZhVmAQg4ipjOVAtj4=
+go.opentelemetry.io/proto/otlp v1.7.1/go.mod h1:b2rVh6rfI/s2pHWNlB7ILJcRALpcNDzKhACevjI+ZnE=
 go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
 go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
 go.yaml.in/yaml/v2 v2.4.2 h1:DzmwEr2rDGHl7lsFgAHxmNz/1NlQ7xLIrlN2h5d1eGI=
 go.yaml.in/yaml/v2 v2.4.2/go.mod h1:081UH+NErpNdqlCXm3TtEran0rJZGxAYx9hb/ELlsPU=
-go.yaml.in/yaml/v3 v3.0.3 h1:bXOww4E/J3f66rav3pX3m8w6jDE4knZjGOw8b5Y6iNE=
-go.yaml.in/yaml/v3 v3.0.3/go.mod h1:tBHosrYAkRZjRAOREWbDnBXUf08JOwYq++0QNwQiWzI=
+go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
+go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4=
-golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
-golang.org/x/exp v0.0.0-20250718183923-645b1fa84792 h1:R9PFI6EUdfVKgwKjZef7QIwGcBKu86OEFpJ9nUEP2l4=
-golang.org/x/exp v0.0.0-20250718183923-645b1fa84792/go.mod h1:A+z0yzpGtvnG90cToK5n2tu8UJVP2XUATh+r+sfOOOc=
+golang.org/x/crypto v0.42.0 h1:chiH31gIWm57EkTXpwnqf8qeuMUi0yekh6mT2AvFlqI=
+golang.org/x/crypto v0.42.0/go.mod h1:4+rDnOTJhQCx2q7/j6rAN5XDw8kPjeaXEUR2eL94ix8=
+golang.org/x/exp v0.0.0-20250911091902-df9299821621 h1:2id6c1/gto0kaHYyrixvknJ8tUK/Qs5IsmBtrc+FtgU=
+golang.org/x/exp v0.0.0-20250911091902-df9299821621/go.mod h1:TwQYMMnGpvZyc+JpB/UAuTNIsVJifOlSkrZkhcvpVUk=
 golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
-golang.org/x/mod v0.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg=
-golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ=
+golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U=
+golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
 golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
 golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
-golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
-golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
+golang.org/x/net v0.44.0 h1:evd8IRDyfNBMBTTY5XRF1vaZlD+EmWx6x8PkhR04H/I=
+golang.org/x/net v0.44.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY=
 golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
 golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -555,8 +557,8 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ
 golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw=
-golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
+golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
+golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191020152052-9984515f0562/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -575,19 +577,21 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
-golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
+golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k=
+golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/telemetry v0.0.0-20250908211612-aef8a434d053 h1:dHQOQddU4YHS5gY33/6klKjq7Gp3WwMyOXGNp5nzRj8=
+golang.org/x/telemetry v0.0.0-20250908211612-aef8a434d053/go.mod h1:+nZKN+XVh4LCiA9DV3ywrzN4gumyCnKjau3NGb9SGoE=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
-golang.org/x/term v0.34.0 h1:O/2T7POpk0ZZ7MAzMeWFSg6S5IpWd/RXDlM9hgM3DR4=
-golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw=
+golang.org/x/term v0.35.0 h1:bZBVKBudEyhRcajGcNc3jIfWPqV4y/Kt2XcoigOWtDQ=
+golang.org/x/term v0.35.0/go.mod h1:TPGtkTLesOwf2DE8CgVYiZinHAOuy5AYUYT1lENIZnA=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
 golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
-golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng=
-golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU=
+golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
+golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
 golang.org/x/time v0.11.0 h1:/bpjEDfN9tkoN/ryeYHnv5hcMlc8ncjMcM4XBk5NWV0=
 golang.org/x/time v0.11.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -595,8 +599,8 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn
 golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
 golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
 golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
-golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0=
-golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw=
+golang.org/x/tools v0.37.0 h1:DVSRzp7FwePZW356yEAChSdNcQo6Nsp+fex1SUW09lE=
+golang.org/x/tools v0.37.0/go.mod h1:MBN5QPQtLMHVdvsbtarmTNukZDdgwdwlO5qGacAzF0w=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -605,21 +609,21 @@ golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da h1:noIWHXmPHxILtqtCOPIhS
 golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90=
 gomodules.xyz/jsonpatch/v2 v2.5.0 h1:JELs8RLM12qJGXU4u/TO3V25KW8GreMKl9pdkk14RM0=
 gomodules.xyz/jsonpatch/v2 v2.5.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY=
-gonum.org/v1/gonum v0.15.1 h1:FNy7N6OUZVUaWG9pTiD+jlhdQ3lMP+/LcTpJ6+a8sQ0=
-gonum.org/v1/gonum v0.15.1/go.mod h1:eZTZuRFrzu5pcyjN5wJhcIhnUdNijYxX1T2IcrOGY0o=
+gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
+gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
 google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
 google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM=
 google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds=
-google.golang.org/genproto/googleapis/api v0.0.0-20250603155806-513f23925822 h1:oWVWY3NzT7KJppx2UKhKmzPq4SRe0LdCijVRwvGeikY=
-google.golang.org/genproto/googleapis/api v0.0.0-20250603155806-513f23925822/go.mod h1:h3c4v36UTKzUiuaOKQ6gr3S+0hovBtUrXzTG/i3+XEc=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250804133106-a7a43d27e69b h1:zPKJod4w6F1+nRGDI9ubnXYhU9NSWoFAijkHkUXeTK8=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250804133106-a7a43d27e69b/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
-google.golang.org/grpc v1.74.2 h1:WoosgB65DlWVC9FqI82dGsZhWFNBSLjQ84bjROOpMu4=
-google.golang.org/grpc v1.74.2/go.mod h1:CtQ+BGjaAIXHs/5YS3i473GqwBBa1zGQNevxdeBEXrM=
+google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5 h1:BIRfGDEjiHRrk0QKZe3Xv2ieMhtgRGeLcZQ0mIVn4EY=
+google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5/go.mod h1:j3QtIyytwqGr1JUDtYXwtMXWPKsEa5LtzIFN1Wn5WvE=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250908214217-97024824d090 h1:/OQuEa4YWtDt7uQWHd3q3sUMb+QOLQUg1xa8CEsRv5w=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250908214217-97024824d090/go.mod h1:GmFNa4BdJZ2a8G+wCe9Bg3wwThLrJun751XstdJt5Og=
+google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI=
+google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
 google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
-google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
+google.golang.org/protobuf v1.36.9 h1:w2gp2mA27hUeUzj9Ex9FBjsBm40zfaDtEWow293U7Iw=
+google.golang.org/protobuf v1.36.9/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
@@ -640,27 +644,25 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-k8s.io/api v0.33.3 h1:SRd5t//hhkI1buzxb288fy2xvjubstenEKL9K51KBI8=
-k8s.io/api v0.33.3/go.mod h1:01Y/iLUjNBM3TAvypct7DIj0M0NIZc+PzAHCIo0CYGE=
-k8s.io/apiextensions-apiserver v0.33.3 h1:qmOcAHN6DjfD0v9kxL5udB27SRP6SG/MTopmge3MwEs=
-k8s.io/apiextensions-apiserver v0.33.3/go.mod h1:oROuctgo27mUsyp9+Obahos6CWcMISSAPzQ77CAQGz8=
-k8s.io/apimachinery v0.33.3 h1:4ZSrmNa0c/ZpZJhAgRdcsFcZOw1PQU1bALVQ0B3I5LA=
-k8s.io/apimachinery v0.33.3/go.mod h1:BHW0YOu7n22fFv/JkYOEfkUYNRN0fj0BlvMFWA7b+SM=
-k8s.io/client-go v0.33.3 h1:M5AfDnKfYmVJif92ngN532gFqakcGi6RvaOF16efrpA=
-k8s.io/client-go v0.33.3/go.mod h1:luqKBQggEf3shbxHY4uVENAxrDISLOarxpTKMiUuujg=
+k8s.io/api v0.34.1 h1:jC+153630BMdlFukegoEL8E/yT7aLyQkIVuwhmwDgJM=
+k8s.io/api v0.34.1/go.mod h1:SB80FxFtXn5/gwzCoN6QCtPD7Vbu5w2n1S0J5gFfTYk=
+k8s.io/apiextensions-apiserver v0.34.1 h1:NNPBva8FNAPt1iSVwIE0FsdrVriRXMsaWFMqJbII2CI=
+k8s.io/apiextensions-apiserver v0.34.1/go.mod h1:hP9Rld3zF5Ay2Of3BeEpLAToP+l4s5UlxiHfqRaRcMc=
+k8s.io/apimachinery v0.34.1 h1:dTlxFls/eikpJxmAC7MVE8oOeP1zryV7iRyIjB0gky4=
+k8s.io/apimachinery v0.34.1/go.mod h1:/GwIlEcWuTX9zKIg2mbw0LRFIsXwrfoVxn+ef0X13lw=
+k8s.io/client-go v0.34.1 h1:ZUPJKgXsnKwVwmKKdPfw4tB58+7/Ik3CrjOEhsiZ7mY=
+k8s.io/client-go v0.34.1/go.mod h1:kA8v0FP+tk6sZA0yKLRG67LWjqufAoSHA2xVGKw9Of8=
 k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
 k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
-k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff h1:/usPimJzUKKu+m+TE36gUyGcf03XZEP0ZIKgKj35LS4=
-k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff/go.mod h1:5jIi+8yX4RIb8wk3XwBo5Pq2ccx4FP10ohkbSKCZoK8=
-k8s.io/utils v0.0.0-20241210054802-24370beab758 h1:sdbE21q2nlQtFh65saZY+rRM6x6aJJI8IUa1AmH/qa0=
-k8s.io/utils v0.0.0-20241210054802-24370beab758/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
+k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b h1:MloQ9/bdJyIu9lb1PzujOPolHyvO06MXG5TUIj2mNAA=
+k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b/go.mod h1:UZ2yyWbFTpuhSbFhv24aGNOdoRdJZgsIObGBUaYVsts=
+k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 h1:hwvWFiBzdWw1FhfY1FooPn3kzWuJ8tmbZBHi4zVsl1Y=
+k8s.io/utils v0.0.0-20250604170112-4c0f3b243397/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
 sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 h1:gBQPwqORJ8d8/YNZWEjoZs7npUVDpVXUUOFfW6CgAqE=
 sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg=
-sigs.k8s.io/randfill v0.0.0-20250304075658-069ef1bbf016/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY=
 sigs.k8s.io/randfill v1.0.0 h1:JfjMILfT8A6RbawdsK2JXGBR5AQVfd+9TbzrlneTyrU=
 sigs.k8s.io/randfill v1.0.0/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY=
-sigs.k8s.io/structured-merge-diff/v4 v4.7.0 h1:qPeWmscJcXP0snki5IYF79Z8xrl8ETFxgMd7wez1XkI=
-sigs.k8s.io/structured-merge-diff/v4 v4.7.0/go.mod h1:dDy58f92j70zLsuZVuUX5Wp9vtxXpaZnkPGWeqDfCps=
-sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
-sigs.k8s.io/yaml v1.5.0 h1:M10b2U7aEUY6hRtU870n2VTPgR5RZiL/I6Lcc2F4NUQ=
-sigs.k8s.io/yaml v1.5.0/go.mod h1:wZs27Rbxoai4C0f8/9urLZtZtF3avA3gKvGyPdDqTO4=
+sigs.k8s.io/structured-merge-diff/v6 v6.3.0 h1:jTijUJbW353oVOd9oTlifJqOGEkUw2jB/fXCbTiQEco=
+sigs.k8s.io/structured-merge-diff/v6 v6.3.0/go.mod h1:M3W8sfWvn2HhQDIbGWj3S099YozAsymCo/wrT5ohRUE=
+sigs.k8s.io/yaml v1.6.0 h1:G8fkbMSAFqgEFgh4b1wmtzDnioxFCUgTZhlbj5P9QYs=
+sigs.k8s.io/yaml v1.6.0/go.mod h1:796bPqUfzR/0jLAl6XjHl3Ck7MiyVv8dbTdyT3/pMf4=
diff --git a/internal/resources/appplatform/alertenrichment_resource.go b/internal/resources/appplatform/alertenrichment_resource.go
index 6e8eeab2..85dcb37d 100644
--- a/internal/resources/appplatform/alertenrichment_resource.go
+++ b/internal/resources/appplatform/alertenrichment_resource.go
@@ -487,7 +487,7 @@ func initStepRegistryWithoutConditional() *stepRegistry {
 			Description: "Use AI assistant to investigate alerts and add insights.",
 			Attributes:  map[string]schema.Attribute{"timeout": schema.StringAttribute{Optional: true, Description: timeoutDescription}},
 		},
-		v1beta1.EnricherTypeLoop,
+		v1beta1.EnricherTypeAssistant,
 		map[string]attr.Type{
 			"timeout": types.StringType,
 		},
@@ -849,8 +849,8 @@ func assistantInvestigationsStepToAPI(ctx context.Context, m assistantInvestigat
 	step := v1beta1.Step{
 		Type: v1beta1.StepTypeEnricher,
 		Enricher: &v1beta1.EnricherConfig{
-			Type: v1beta1.EnricherTypeLoop,
-			Loop: &v1beta1.LoopEnricher{},
+			Type:      v1beta1.EnricherTypeAssistant,
+			Assistant: &v1beta1.AssistantEnricher{},
 		},
 	}
 	if diags := setTimeout(&step, m.Timeout); diags.HasError() {
diff --git a/internal/resources/asserts/catalog-resource.yaml b/internal/resources/asserts/catalog-resource.yaml
index 88b90148..0341e76b 100644
--- a/internal/resources/asserts/catalog-resource.yaml
+++ b/internal/resources/asserts/catalog-resource.yaml
@@ -23,4 +23,30 @@ spec:
   subcomponentOf: component:default/terraform-provider-grafana
   type: terraform-resource
   owner: group:default/asserts
-  lifecycle: production 
+  lifecycle: production
+---
+apiVersion: backstage.io/v1alpha1
+kind: Component
+metadata:
+  name: resource-grafana_asserts_custom_model_rules
+  title: grafana_asserts_custom_model_rules (resource)
+  description: |
+    resource `grafana_asserts_custom_model_rules` in Grafana Labs' Terraform Provider
+spec:
+  subcomponentOf: component:default/terraform-provider-grafana
+  type: terraform-resource
+  owner: group:default/asserts
+  lifecycle: production
+---
+apiVersion: backstage.io/v1alpha1
+kind: Component
+metadata:
+  name: resource-grafana_asserts_log_config
+  title: grafana_asserts_log_config (resource)
+  description: |
+    resource `grafana_asserts_log_config` in Grafana Labs' Terraform Provider
+spec:
+  subcomponentOf: component:default/terraform-provider-grafana
+  type: terraform-resource
+  owner: group:default/asserts
+  lifecycle: production
diff --git a/internal/resources/asserts/common_lister.go b/internal/resources/asserts/common_lister.go
index 055ff2c1..de681d76 100644
--- a/internal/resources/asserts/common_lister.go
+++ b/internal/resources/asserts/common_lister.go
@@ -47,7 +47,7 @@ func listAlertConfigs(ctx context.Context, client *assertsapi.APIClient, stackID
 
 // listDisabledAlertConfigs retrieves the list of all disabled alert configuration names for a specific stack
 func listDisabledAlertConfigs(ctx context.Context, client *assertsapi.APIClient, stackID string) ([]string, error) {
-	request := client.DisabledAlertConfigControllerAPI.GetAllDisabledAlertConfigs(ctx).
+	request := client.AlertConfigurationAPI.GetAllDisabledAlertConfigs(ctx).
 		XScopeOrgID(stackID)
 
 	configs, _, err := request.Execute()
@@ -64,3 +64,37 @@ func listDisabledAlertConfigs(ctx context.Context, client *assertsapi.APIClient,
 	}
 	return names, nil
 }
+
+// listCustomModelRules retrieves the list of all custom model rule names for a specific stack
+func listCustomModelRules(ctx context.Context, client *assertsapi.APIClient, stackID string) ([]string, error) {
+	request := client.CustomModelRulesConfigurationAPI.ListModelRules(ctx).
+		XScopeOrgID(stackID)
+
+	namesDto, _, err := request.Execute()
+	if err != nil {
+		return nil, err
+	}
+
+	// The DTO contains an array of names in RuleNames
+	return namesDto.RuleNames, nil
+}
+
+// listLogConfigs retrieves the list of all log configuration names for a specific stack
+func listLogConfigs(ctx context.Context, client *assertsapi.APIClient, stackID string) ([]string, error) {
+	request := client.LogDrilldownConfigControllerAPI.GetTenantLogConfig(ctx).
+		XScopeOrgID(stackID)
+
+	tenantConfig, _, err := request.Execute()
+	if err != nil {
+		return nil, err
+	}
+
+	var names []string
+	for _, config := range tenantConfig.GetLogDrilldownConfigs() {
+		if config.GetName() != "" {
+			// Resource ID is just the name now (stack ID from provider config)
+			names = append(names, config.GetName())
+		}
+	}
+	return names, nil
+}
diff --git a/internal/resources/asserts/resource_custom_model_rules.go b/internal/resources/asserts/resource_custom_model_rules.go
new file mode 100644
index 00000000..42312f5d
--- /dev/null
+++ b/internal/resources/asserts/resource_custom_model_rules.go
@@ -0,0 +1,478 @@
+package asserts
+
+import (
+	"context"
+	"fmt"
+
+	"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
+	"github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry"
+	"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+
+	assertsapi "github.com/grafana/grafana-asserts-public-clients/go/gcom"
+	"github.com/grafana/terraform-provider-grafana/v4/internal/common"
+)
+
+// convertStringMap converts a map[string]interface{} to map[string]string
+func convertStringMap(input map[string]interface{}) map[string]string {
+	result := make(map[string]string)
+	for k, v := range input {
+		if str, ok := v.(string); ok {
+			result[k] = str
+		}
+	}
+	return result
+}
+
+// convertPropertyRule converts Terraform defined_by data to PropertyRuleDto
+func convertPropertyRule(definedByItem map[string]interface{}) assertsapi.PropertyRuleDto {
+	query := definedByItem["query"].(string)
+	propertyRule := assertsapi.PropertyRuleDto{
+		Query: &query,
+	}
+
+	// Handle optional fields - only set disabled when it's explicitly true
+	if disabled, ok := definedByItem["disabled"].(bool); ok && disabled {
+		propertyRule.Disabled = &disabled
+	}
+
+	// Handle labelValues map
+	if labelValues, ok := definedByItem["label_values"].(map[string]interface{}); ok && len(labelValues) > 0 {
+		labelValuesMap := convertStringMap(labelValues)
+		if len(labelValuesMap) > 0 {
+			propertyRule.LabelValues = labelValuesMap
+		}
+	}
+
+	// Handle literals map
+	if literals, ok := definedByItem["literals"].(map[string]interface{}); ok && len(literals) > 0 {
+		literalsMap := convertStringMap(literals)
+		if len(literalsMap) > 0 {
+			propertyRule.Literals = literalsMap
+		}
+	}
+
+	// Handle metricValue field
+	if metricValue, ok := definedByItem["metric_value"].(string); ok && metricValue != "" {
+		propertyRule.MetricValue = &metricValue
+	}
+
+	return propertyRule
+}
+
+// convertDefinedBy converts Terraform defined_by list to PropertyRuleDto slice
+func convertDefinedBy(definedByList []interface{}) []assertsapi.PropertyRuleDto {
+	var definedBy []assertsapi.PropertyRuleDto
+	for _, definedByData := range definedByList {
+		definedByItem := definedByData.(map[string]interface{})
+		propertyRule := convertPropertyRule(definedByItem)
+		definedBy = append(definedBy, propertyRule)
+	}
+	return definedBy
+}
+
+// convertEnrichedBy converts Terraform enriched_by list to PropertyRuleDto slice
+func convertEnrichedBy(enrichedByList []interface{}) []assertsapi.PropertyRuleDto {
+	var result []assertsapi.PropertyRuleDto
+	for _, item := range enrichedByList {
+		if str, ok := item.(string); ok {
+			result = append(result, assertsapi.PropertyRuleDto{
+				Query: &str,
+			})
+		}
+	}
+	return result
+}
+
+// convertEntityRule converts Terraform entity data to EntityRuleDto
+func convertEntityRule(entity map[string]interface{}) assertsapi.EntityRuleDto {
+	entityType := entity["type"].(string)
+	entityName := entity["name"].(string)
+	definedByList := entity["defined_by"].([]interface{})
+
+	entityRule := assertsapi.EntityRuleDto{
+		Type:      &entityType,
+		Name:      &entityName,
+		DefinedBy: convertDefinedBy(definedByList),
+	}
+
+	// Handle optional entity fields
+	if scope, ok := entity["scope"].(map[string]interface{}); ok && len(scope) > 0 {
+		scopeMap := convertStringMap(scope)
+		if len(scopeMap) > 0 {
+			entityRule.Scope = scopeMap
+		}
+	}
+
+	if lookup, ok := entity["lookup"].(map[string]interface{}); ok && len(lookup) > 0 {
+		lookupMap := convertStringMap(lookup)
+		if len(lookupMap) > 0 {
+			entityRule.Lookup = lookupMap
+		}
+	}
+
+	if enrichedBy, ok := entity["enriched_by"].([]interface{}); ok && len(enrichedBy) > 0 {
+		enrichedByList := convertEnrichedBy(enrichedBy)
+		if len(enrichedByList) > 0 {
+			entityRule.EnrichedBy = enrichedByList
+		}
+	}
+
+	// Handle entity-level disabled field
+	if disabled, ok := entity["disabled"].(bool); ok && disabled {
+		entityRule.Disabled = &disabled
+	}
+
+	return entityRule
+}
+
+// convertTerraformToModelRules converts Terraform structured data to ModelRulesDto
+func convertTerraformToModelRules(d *schema.ResourceData) (*assertsapi.ModelRulesDto, error) {
+	rulesList := d.Get("rules").([]interface{})
+	if len(rulesList) == 0 {
+		return nil, fmt.Errorf("rules block is required")
+	}
+
+	rulesData := rulesList[0].(map[string]interface{})
+	entitiesList := rulesData["entity"].([]interface{})
+
+	var entities []assertsapi.EntityRuleDto
+	for _, entityData := range entitiesList {
+		entity := entityData.(map[string]interface{})
+		entityRule := convertEntityRule(entity)
+		entities = append(entities, entityRule)
+	}
+
+	return &assertsapi.ModelRulesDto{
+		Entities: entities,
+	}, nil
+}
+
+// convertModelRulesToTerraform converts ModelRulesDto to Terraform structured data
+func convertModelRulesToTerraform(rules *assertsapi.ModelRulesDto) ([]interface{}, error) {
+	if rules == nil || rules.Entities == nil {
+		return []interface{}{}, nil
+	}
+
+	var entities []interface{}
+	for _, entity := range rules.Entities {
+		var definedBy []interface{}
+		for _, db := range entity.DefinedBy {
+			query := ""
+			if db.Query != nil {
+				query = *db.Query
+			}
+
+			definedByItem := map[string]interface{}{
+				"query": query,
+			}
+
+			// Add optional fields if they exist
+			if db.Disabled != nil {
+				definedByItem["disabled"] = *db.Disabled
+			}
+
+			if len(db.LabelValues) > 0 {
+				definedByItem["label_values"] = db.LabelValues
+			}
+
+			if len(db.Literals) > 0 {
+				definedByItem["literals"] = db.Literals
+			}
+
+			if db.MetricValue != nil {
+				definedByItem["metric_value"] = *db.MetricValue
+			}
+
+			definedBy = append(definedBy, definedByItem)
+		}
+
+		entityType := ""
+		if entity.Type != nil {
+			entityType = *entity.Type
+		}
+		entityName := ""
+		if entity.Name != nil {
+			entityName = *entity.Name
+		}
+
+		entityMap := map[string]interface{}{
+			"type":       entityType,
+			"name":       entityName,
+			"defined_by": definedBy,
+		}
+
+		// Add optional entity fields if they exist
+		if len(entity.Scope) > 0 {
+			entityMap["scope"] = entity.Scope
+		}
+
+		if len(entity.Lookup) > 0 {
+			entityMap["lookup"] = entity.Lookup
+		}
+
+		if len(entity.EnrichedBy) > 0 {
+			var enrichedByList []string
+			for _, enrichedBy := range entity.EnrichedBy {
+				if enrichedBy.Query != nil {
+					enrichedByList = append(enrichedByList, *enrichedBy.Query)
+				}
+			}
+			if len(enrichedByList) > 0 {
+				entityMap["enriched_by"] = enrichedByList
+			}
+		}
+
+		if entity.Disabled != nil {
+			entityMap["disabled"] = *entity.Disabled
+		}
+
+		entities = append(entities, entityMap)
+	}
+
+	return []interface{}{
+		map[string]interface{}{
+			"entity": entities,
+		},
+	}, nil
+}
+
+func makeResourceCustomModelRules() *common.Resource {
+	sch := &schema.Resource{
+		Description: "Manages Asserts Custom Model Rules through the Grafana API.",
+
+		CreateContext: resourceCustomModelRulesCreate,
+		ReadContext:   resourceCustomModelRulesRead,
+		UpdateContext: resourceCustomModelRulesUpdate,
+		DeleteContext: resourceCustomModelRulesDelete,
+
+		Importer: &schema.ResourceImporter{
+			StateContext: schema.ImportStatePassthroughContext,
+		},
+
+		Schema: map[string]*schema.Schema{
+			"name": {
+				Type:        schema.TypeString,
+				Required:    true,
+				ForceNew:    true,
+				Description: "The name of the custom model rules.",
+			},
+			"rules": {
+				Type:        schema.TypeList,
+				Required:    true,
+				MaxItems:    1,
+				Description: "The rules configuration for the custom model rules.",
+				Elem: &schema.Resource{
+					Schema: map[string]*schema.Schema{
+						"entity": {
+							Type:        schema.TypeList,
+							Required:    true,
+							Description: "List of entities to define in the custom model rules.",
+							Elem: &schema.Resource{
+								Schema: map[string]*schema.Schema{
+									"type": {
+										Type:        schema.TypeString,
+										Required:    true,
+										Description: "The type of the entity (e.g., Service, Pod, Namespace).",
+									},
+									"name": {
+										Type:        schema.TypeString,
+										Required:    true,
+										Description: "The name of the entity.",
+									},
+									"scope": {
+										Type:        schema.TypeMap,
+										Optional:    true,
+										Description: "Scope labels for the entity.",
+										Elem:        &schema.Schema{Type: schema.TypeString},
+									},
+									"lookup": {
+										Type:        schema.TypeMap,
+										Optional:    true,
+										Description: "Lookup mappings for the entity.",
+										Elem:        &schema.Schema{Type: schema.TypeString},
+									},
+									"enriched_by": {
+										Type:        schema.TypeList,
+										Optional:    true,
+										Description: "List of enrichment sources for the entity.",
+										Elem:        &schema.Schema{Type: schema.TypeString},
+									},
+									"disabled": {
+										Type:        schema.TypeBool,
+										Optional:    true,
+										Description: "Whether this entity is disabled.",
+									},
+									"defined_by": {
+										Type:        schema.TypeList,
+										Required:    true,
+										Description: "List of queries that define this entity.",
+										Elem: &schema.Resource{
+											Schema: map[string]*schema.Schema{
+												"query": {
+													Type:        schema.TypeString,
+													Required:    true,
+													Description: "The Prometheus query that defines this entity.",
+												},
+												"disabled": {
+													Type:        schema.TypeBool,
+													Optional:    true,
+													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.",
+												},
+												"label_values": {
+													Type:        schema.TypeMap,
+													Optional:    true,
+													Description: "Label value mappings for the query.",
+													Elem:        &schema.Schema{Type: schema.TypeString},
+												},
+												"literals": {
+													Type:        schema.TypeMap,
+													Optional:    true,
+													Description: "Literal value mappings for the query.",
+													Elem:        &schema.Schema{Type: schema.TypeString},
+												},
+												"metric_value": {
+													Type:        schema.TypeString,
+													Optional:    true,
+													Description: "Metric value for the query.",
+												},
+											},
+										},
+									},
+								},
+							},
+						},
+					},
+				},
+			},
+		},
+	}
+
+	return common.NewLegacySDKResource(
+		common.CategoryAsserts,
+		"grafana_asserts_custom_model_rules",
+		common.NewResourceID(common.StringIDField("name")),
+		sch,
+	).WithLister(assertsListerFunction(listCustomModelRules))
+}
+
+func resourceCustomModelRulesCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
+	client, stackID, diags := validateAssertsClient(meta)
+	if diags.HasError() {
+		return diags
+	}
+
+	name := d.Get("name").(string)
+
+	rules, err := convertTerraformToModelRules(d)
+	if err != nil {
+		return diag.FromErr(fmt.Errorf("failed to convert rules: %w", err))
+	}
+
+	rules.Name = &name
+
+	req := client.CustomModelRulesConfigurationAPI.PutModelRules(ctx).ModelRulesDto(*rules).XScopeOrgID(fmt.Sprintf("%d", stackID))
+	_, err = req.Execute()
+	if err != nil {
+		return diag.FromErr(fmt.Errorf("failed to create custom model rules: %w", err))
+	}
+
+	d.SetId(name)
+
+	return resourceCustomModelRulesRead(ctx, d, meta)
+}
+
+func resourceCustomModelRulesRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
+	client, stackID, diags := validateAssertsClient(meta)
+	if diags.HasError() {
+		return diags
+	}
+	name := d.Id()
+
+	// Retry logic for read operation to handle eventual consistency
+	var rules *assertsapi.ModelRulesDto
+	err := withRetryRead(ctx, func(retryCount, maxRetries int) *retry.RetryError {
+		req := client.CustomModelRulesConfigurationAPI.GetModelRules(ctx, name).XScopeOrgID(fmt.Sprintf("%d", stackID))
+		rulesResult, _, err := req.Execute()
+		if err != nil {
+			// If the error indicates "not found", check if we should retry or give up
+			if _, ok := err.(*assertsapi.GenericOpenAPIError); ok {
+				if retryCount >= maxRetries {
+					return createNonRetryableError("custom model rules", name, retryCount)
+				}
+				return createRetryableError("custom model rules", name, retryCount, maxRetries)
+			}
+
+			// Other API errors
+			return createAPIError("get custom model rules", retryCount, maxRetries, err)
+		}
+
+		rules = rulesResult
+		return nil
+	})
+
+	if err != nil {
+		return diag.FromErr(err)
+	}
+
+	if rules == nil {
+		d.SetId("")
+		return nil
+	}
+
+	if rules.Name != nil {
+		d.Set("name", *rules.Name)
+	}
+
+	// Convert API response to Terraform structured data
+	rulesCopy := *rules
+	rulesCopy.Name = nil // Don't include name in the rules structure
+
+	terraformRules, err := convertModelRulesToTerraform(&rulesCopy)
+	if err != nil {
+		return diag.FromErr(fmt.Errorf("failed to convert rules to Terraform format: %w", err))
+	}
+
+	d.Set("rules", terraformRules)
+
+	return nil
+}
+
+func resourceCustomModelRulesUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
+	client, stackID, diags := validateAssertsClient(meta)
+	if diags.HasError() {
+		return diags
+	}
+
+	name := d.Get("name").(string)
+
+	rules, err := convertTerraformToModelRules(d)
+	if err != nil {
+		return diag.FromErr(fmt.Errorf("failed to convert rules: %w", err))
+	}
+
+	rules.Name = &name
+
+	req := client.CustomModelRulesConfigurationAPI.PutModelRules(ctx).ModelRulesDto(*rules).XScopeOrgID(fmt.Sprintf("%d", stackID))
+	_, err = req.Execute()
+	if err != nil {
+		return diag.FromErr(fmt.Errorf("failed to update custom model rules: %w", err))
+	}
+
+	return resourceCustomModelRulesRead(ctx, d, meta)
+}
+
+func resourceCustomModelRulesDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
+	client, stackID, diags := validateAssertsClient(meta)
+	if diags.HasError() {
+		return diags
+	}
+	name := d.Id()
+
+	req := client.CustomModelRulesConfigurationAPI.DeleteModelRules(ctx, name).XScopeOrgID(fmt.Sprintf("%d", stackID))
+	_, err := req.Execute()
+	if err != nil {
+		return diag.FromErr(fmt.Errorf("failed to delete custom model rules: %w", err))
+	}
+
+	return nil
+}
diff --git a/internal/resources/asserts/resource_disabled_alert_config.go b/internal/resources/asserts/resource_disabled_alert_config.go
index 38b69db0..616bd84c 100644
--- a/internal/resources/asserts/resource_disabled_alert_config.go
+++ b/internal/resources/asserts/resource_disabled_alert_config.go
@@ -74,7 +74,7 @@ func resourceDisabledAlertConfigCreate(ctx context.Context, d *schema.ResourceDa
 	}
 
 	// Call the generated client API
-	request := client.DisabledAlertConfigControllerAPI.PutDisabledAlertConfig(ctx).
+	request := client.AlertConfigurationAPI.PutDisabledAlertConfig(ctx).
 		DisabledAlertConfigDto(disabledAlertConfig).
 		XScopeOrgID(fmt.Sprintf("%d", stackID))
 
@@ -99,7 +99,7 @@ func resourceDisabledAlertConfigRead(ctx context.Context, d *schema.ResourceData
 	var foundConfig *assertsapi.DisabledAlertConfigDto
 	err := withRetryRead(ctx, func(retryCount, maxRetries int) *retry.RetryError {
 		// Get all disabled alert configs using the generated client API
-		request := client.DisabledAlertConfigControllerAPI.GetAllDisabledAlertConfigs(ctx).
+		request := client.AlertConfigurationAPI.GetAllDisabledAlertConfigs(ctx).
 			XScopeOrgID(fmt.Sprintf("%d", stackID))
 
 		configs, _, err := request.Execute()
@@ -173,7 +173,7 @@ func resourceDisabledAlertConfigUpdate(ctx context.Context, d *schema.ResourceDa
 
 	// Update Disabled Alert Configuration using the generated client API
 	// Note: For disabled configs, update is effectively a re-create
-	request := client.DisabledAlertConfigControllerAPI.PutDisabledAlertConfig(ctx).
+	request := client.AlertConfigurationAPI.PutDisabledAlertConfig(ctx).
 		DisabledAlertConfigDto(disabledAlertConfig).
 		XScopeOrgID(fmt.Sprintf("%d", stackID))
 
@@ -193,7 +193,7 @@ func resourceDisabledAlertConfigDelete(ctx context.Context, d *schema.ResourceDa
 	name := d.Id()
 
 	// Delete Disabled Alert Configuration using the generated client API
-	request := client.DisabledAlertConfigControllerAPI.DeleteDisabledAlertConfig(ctx, name).
+	request := client.AlertConfigurationAPI.DeleteDisabledAlertConfig(ctx, name).
 		XScopeOrgID(fmt.Sprintf("%d", stackID))
 
 	_, err := request.Execute()
diff --git a/internal/resources/asserts/resource_log_config.go b/internal/resources/asserts/resource_log_config.go
new file mode 100644
index 00000000..55854f6d
--- /dev/null
+++ b/internal/resources/asserts/resource_log_config.go
@@ -0,0 +1,376 @@
+package asserts
+
+import (
+	"context"
+	"fmt"
+	"time"
+
+	"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
+	"github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry"
+	"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+	"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
+
+	assertsapi "github.com/grafana/grafana-asserts-public-clients/go/gcom"
+	"github.com/grafana/terraform-provider-grafana/v4/internal/common"
+)
+
+func makeResourceLogConfig() *common.Resource {
+	schema := &schema.Resource{
+		Description: "Manages Asserts Log Configuration through Grafana API.",
+
+		CreateContext: resourceLogConfigCreate,
+		ReadContext:   resourceLogConfigRead,
+		UpdateContext: resourceLogConfigUpdate,
+		DeleteContext: resourceLogConfigDelete,
+
+		Timeouts: &schema.ResourceTimeout{
+			Create: schema.DefaultTimeout(5 * time.Minute),
+			Read:   schema.DefaultTimeout(2 * time.Minute),
+			Update: schema.DefaultTimeout(5 * time.Minute),
+			Delete: schema.DefaultTimeout(5 * time.Minute),
+		},
+
+		Importer: &schema.ResourceImporter{
+			StateContext: schema.ImportStatePassthroughContext,
+		},
+
+		Schema: map[string]*schema.Schema{
+			"name": {
+				Type:        schema.TypeString,
+				Required:    true,
+				ForceNew:    true, // Force recreation if name changes
+				Description: "The name of the log configuration.",
+			},
+			"priority": {
+				Type:         schema.TypeInt,
+				Required:     true,
+				Description:  "Priority of the log configuration. A lower number means a higher priority.",
+				ValidateFunc: validation.IntBetween(0, 2147483647),
+			},
+			"match": {
+				Type:        schema.TypeList,
+				Optional:    true,
+				Description: "List of match rules for entity properties.",
+				Elem: &schema.Resource{
+					Schema: map[string]*schema.Schema{
+						"property": {
+							Type:        schema.TypeString,
+							Required:    true,
+							Description: "Entity property to match.",
+						},
+						"op": {
+							Type:        schema.TypeString,
+							Required:    true,
+							Description: "Operation to use for matching. One of: EQUALS, NOT_EQUALS, CONTAINS, DOES_NOT_CONTAIN, IS_NULL, IS_NOT_NULL.",
+							ValidateFunc: validation.StringInSlice([]string{
+								"EQUALS", "NOT_EQUALS", "CONTAINS", "DOES_NOT_CONTAIN", "IS_NULL", "IS_NOT_NULL",
+							}, false),
+						},
+						"values": {
+							Type:        schema.TypeList,
+							Required:    true,
+							Description: "Values to match against.",
+							Elem:        &schema.Schema{Type: schema.TypeString},
+						},
+					},
+				},
+			},
+			"default_config": {
+				Type:        schema.TypeBool,
+				Required:    true,
+				Description: "Is it the default config, therefore undeletable?",
+			},
+			"data_source_uid": {
+				Type:        schema.TypeString,
+				Required:    true,
+				Description: "DataSource to be queried (e.g., a Loki instance).",
+			},
+			"error_label": {
+				Type:        schema.TypeString,
+				Optional:    true,
+				Description: "Error label to filter logs.",
+			},
+			"entity_property_to_log_label_mapping": {
+				Type:        schema.TypeMap,
+				Optional:    true,
+				Description: "Mapping of entity properties to log labels.",
+				Elem:        &schema.Schema{Type: schema.TypeString},
+			},
+			"filter_by_span_id": {
+				Type:        schema.TypeBool,
+				Optional:    true,
+				Description: "Filter logs by span ID.",
+			},
+			"filter_by_trace_id": {
+				Type:        schema.TypeBool,
+				Optional:    true,
+				Description: "Filter logs by trace ID.",
+			},
+		},
+	}
+
+	return common.NewLegacySDKResource(
+		common.CategoryAsserts,
+		"grafana_asserts_log_config",
+		common.NewResourceID(common.StringIDField("name")),
+		schema,
+	).WithLister(assertsListerFunction(listLogConfigs))
+}
+
+// resourceLogConfigCreate - POST endpoint implementation for creating log configs
+func resourceLogConfigCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
+	client, stackID, diags := validateAssertsClient(meta)
+	if diags.HasError() {
+		return diags
+	}
+
+	name := d.Get("name").(string)
+
+	// Build DTO from typed fields
+	config := buildLogDrilldownConfigDto(d)
+	config.SetName(name)
+
+	// Call the generated client API
+	request := client.LogDrilldownConfigControllerAPI.UpsertLogDrilldownConfig(ctx).
+		LogDrilldownConfigDto(*config).
+		XScopeOrgID(fmt.Sprintf("%d", stackID))
+
+	_, err := request.Execute()
+	if err != nil {
+		return diag.FromErr(fmt.Errorf("failed to create log configuration: %w", err))
+	}
+
+	d.SetId(name)
+
+	return resourceLogConfigRead(ctx, d, meta)
+}
+
+// resourceLogConfigRead - GET endpoint implementation
+func resourceLogConfigRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
+	client, stackID, diags := validateAssertsClient(meta)
+	if diags.HasError() {
+		return diags
+	}
+
+	name := d.Id()
+
+	// Retry logic for read operation to handle eventual consistency
+	var tenantConfig *assertsapi.TenantLogConfigResponseDto
+	err := withRetryRead(ctx, func(retryCount, maxRetries int) *retry.RetryError {
+		// Get tenant log config using the generated client API
+		request := client.LogDrilldownConfigControllerAPI.GetTenantLogConfig(ctx).
+			XScopeOrgID(fmt.Sprintf("%d", stackID))
+
+		config, _, err := request.Execute()
+		if err != nil {
+			return createAPIError("get tenant log configuration", retryCount, maxRetries, err)
+		}
+
+		tenantConfig = config
+		return nil
+	})
+
+	if err != nil {
+		return diag.FromErr(err)
+	}
+
+	if tenantConfig == nil {
+		d.SetId("")
+		return nil
+	}
+
+	// Find our specific config
+	var foundConfig *assertsapi.LogDrilldownConfigDto
+	for _, config := range tenantConfig.GetLogDrilldownConfigs() {
+		if config.GetName() == name {
+			foundConfig = &config
+			break
+		}
+	}
+
+	if foundConfig == nil {
+		d.SetId("")
+		return nil
+	}
+
+	// Set the resource data
+	if err := d.Set("name", foundConfig.GetName()); err != nil {
+		return diag.FromErr(err)
+	}
+	// Priority is required, so always set it
+	if err := d.Set("priority", int(foundConfig.GetPriority())); err != nil {
+		return diag.FromErr(err)
+	}
+
+	// Set match rules
+	if foundConfig.HasMatch() {
+		matchRules := make([]map[string]interface{}, 0, len(foundConfig.GetMatch()))
+		for _, match := range foundConfig.GetMatch() {
+			rule := map[string]interface{}{
+				"property": match.GetProperty(),
+				"op":       match.GetOp(),
+				"values":   stringSliceToInterface(match.GetValues()),
+			}
+			matchRules = append(matchRules, rule)
+		}
+		if err := d.Set("match", matchRules); err != nil {
+			return diag.FromErr(err)
+		}
+	}
+
+	if err := d.Set("default_config", foundConfig.GetDefaultConfig()); err != nil {
+		return diag.FromErr(err)
+	}
+	if err := d.Set("data_source_uid", foundConfig.GetDataSourceUid()); err != nil {
+		return diag.FromErr(err)
+	}
+	if foundConfig.HasErrorLabel() {
+		if err := d.Set("error_label", foundConfig.GetErrorLabel()); err != nil {
+			return diag.FromErr(err)
+		}
+	}
+	if foundConfig.HasEntityPropertyToLogLabelMapping() {
+		if err := d.Set("entity_property_to_log_label_mapping", foundConfig.GetEntityPropertyToLogLabelMapping()); err != nil {
+			return diag.FromErr(err)
+		}
+	}
+	if foundConfig.HasFilterBySpanId() {
+		if err := d.Set("filter_by_span_id", foundConfig.GetFilterBySpanId()); err != nil {
+			return diag.FromErr(err)
+		}
+	} else {
+		// Clear the field if not set in the API response
+		if err := d.Set("filter_by_span_id", nil); err != nil {
+			return diag.FromErr(err)
+		}
+	}
+	if foundConfig.HasFilterByTraceId() {
+		if err := d.Set("filter_by_trace_id", foundConfig.GetFilterByTraceId()); err != nil {
+			return diag.FromErr(err)
+		}
+	} else {
+		// Clear the field if not set in the API response
+		if err := d.Set("filter_by_trace_id", nil); err != nil {
+			return diag.FromErr(err)
+		}
+	}
+
+	return nil
+}
+
+// resourceLogConfigUpdate - POST endpoint implementation for updating log configs
+func resourceLogConfigUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
+	client, stackID, diags := validateAssertsClient(meta)
+	if diags.HasError() {
+		return diags
+	}
+
+	name := d.Get("name").(string)
+
+	// Build DTO from typed fields
+	config := buildLogDrilldownConfigDto(d)
+	config.SetName(name)
+
+	// Update Log Configuration using the generated client API
+	request := client.LogDrilldownConfigControllerAPI.UpsertLogDrilldownConfig(ctx).
+		LogDrilldownConfigDto(*config).
+		XScopeOrgID(fmt.Sprintf("%d", stackID))
+
+	_, err := request.Execute()
+	if err != nil {
+		return diag.FromErr(fmt.Errorf("failed to update log configuration: %w", err))
+	}
+
+	return resourceLogConfigRead(ctx, d, meta)
+}
+
+// resourceLogConfigDelete - DELETE endpoint implementation
+func resourceLogConfigDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
+	client, stackID, diags := validateAssertsClient(meta)
+	if diags.HasError() {
+		return diags
+	}
+
+	name := d.Id()
+
+	// Call the generated client API to delete the configuration
+	request := client.LogDrilldownConfigControllerAPI.DeleteConfig(ctx, name).
+		XScopeOrgID(fmt.Sprintf("%d", stackID))
+
+	_, err := request.Execute()
+	if err != nil {
+		return diag.FromErr(fmt.Errorf("failed to delete log configuration: %w", err))
+	}
+
+	d.SetId("")
+	return nil
+}
+
+func stringSliceToInterface(items []string) []interface{} {
+	result := make([]interface{}, 0, len(items))
+	for _, v := range items {
+		result = append(result, v)
+	}
+	return result
+}
+
+func buildLogDrilldownConfigDto(d *schema.ResourceData) *assertsapi.LogDrilldownConfigDto {
+	config := assertsapi.NewLogDrilldownConfigDto()
+
+	// Set required fields - priority is required
+	priority := d.Get("priority").(int)
+	// Safe conversion to int32 - validated by schema IntBetween(0, 2147483647)
+	config.SetPriority(int32(priority)) //nolint:gosec
+
+	// Set match rules
+	if v, ok := d.GetOk("match"); ok {
+		matchList := v.([]interface{})
+		matches := make([]assertsapi.PropertyMatchEntryDto, 0, len(matchList))
+		for _, item := range matchList {
+			matchMap := item.(map[string]interface{})
+			match := assertsapi.NewPropertyMatchEntryDto()
+
+			if prop, ok := matchMap["property"]; ok {
+				match.SetProperty(prop.(string))
+			}
+			if op, ok := matchMap["op"]; ok {
+				match.SetOp(op.(string))
+			}
+			if vals, ok := matchMap["values"]; ok {
+				values := make([]string, 0)
+				for _, v := range vals.([]interface{}) {
+					if s, ok := v.(string); ok {
+						values = append(values, s)
+					}
+				}
+				match.SetValues(values)
+			}
+			matches = append(matches, *match)
+		}
+		config.SetMatch(matches)
+	}
+
+	// Set required fields
+	config.SetDefaultConfig(d.Get("default_config").(bool))
+	config.SetDataSourceUid(d.Get("data_source_uid").(string))
+
+	if v, ok := d.GetOk("error_label"); ok {
+		config.SetErrorLabel(v.(string))
+	}
+	if v, ok := d.GetOk("entity_property_to_log_label_mapping"); ok {
+		mapping := make(map[string]string)
+		for k, val := range v.(map[string]interface{}) {
+			mapping[k] = val.(string)
+		}
+		config.SetEntityPropertyToLogLabelMapping(mapping)
+	}
+	// Set boolean filters - only set if explicitly provided
+	if v, ok := d.GetOk("filter_by_span_id"); ok {
+		config.SetFilterBySpanId(v.(bool))
+	}
+	if v, ok := d.GetOk("filter_by_trace_id"); ok {
+		config.SetFilterByTraceId(v.(bool))
+	}
+
+	return config
+}
diff --git a/internal/resources/asserts/resources.go b/internal/resources/asserts/resources.go
index d1c43128..8bcafe61 100644
--- a/internal/resources/asserts/resources.go
+++ b/internal/resources/asserts/resources.go
@@ -9,4 +9,10 @@ var DataSources = []*common.DataSource{}
 var Resources = []*common.Resource{
 	makeResourceAlertConfig(),
 	makeResourceDisabledAlertConfig(),
+	makeResourceCustomModelRules(),
+	makeResourceLogConfig(),
+}
+
+func GetResources() []*common.Resource {
+	return Resources
 }
diff --git a/internal/resources/slo/resource_slo.go b/internal/resources/slo/resource_slo.go
index abd00064..8fa24f9a 100644
--- a/internal/resources/slo/resource_slo.go
+++ b/internal/resources/slo/resource_slo.go
@@ -59,6 +59,12 @@ Resource manages Grafana SLOs.
 				Optional:    true,
 				Description: `UID for the SLO folder`,
 			},
+			"uuid": {
+				Type:        schema.TypeString,
+				Optional:    true,
+				Computed:    true,
+				Description: `UUID for the SLO. Custom UUIDs can be set. If not provided, a random UUID will be generated by the API.`,
+			},
 			"destination_datasource": {
 				Type:        schema.TypeList,
 				MaxItems:    1,
@@ -330,6 +336,7 @@ func resourceSloCreate(ctx context.Context, d *schema.ResourceData, client *slo.
 		return apiError("Unable to create SLO - API", err)
 	}
 
+	// Note: UUID after a POST is always returned; this can be a vanity UUID or a random UUID
 	d.SetId(response.Uuid)
 
 	return resourceSloRead(ctx, d, client)
@@ -414,8 +421,14 @@ func packSloResource(d *schema.ResourceData) (slo.SloV00Slo, error) {
 		tflabels = packLabels(labels)
 	}
 
+	// Use custom UUID if set, otherwise use an empty string - this will be replaced by the API with a random UUID
+	tfUUID := ""
+	if customUUID, ok := d.GetOk("uuid"); ok && customUUID.(string) != "" {
+		tfUUID = customUUID.(string)
+	}
+
 	req := slo.SloV00Slo{
-		Uuid:                  d.Id(),
+		Uuid:                  tfUUID,
 		Name:                  tfname,
 		Description:           tfdescription,
 		Objectives:            tfobjective,
@@ -672,6 +685,7 @@ func packAlertMetadata(metadata []any) slo.SloV00AlertingMetadata {
 }
 
 func setTerraformState(d *schema.ResourceData, slo slo.SloV00Slo) {
+	d.Set("uuid", slo.Uuid)
 	d.Set("name", slo.Name)
 	d.Set("description", slo.Description)
 
diff --git a/internal/resources/syntheticmonitoring/resource_check_alerts.go b/internal/resources/syntheticmonitoring/resource_check_alerts.go
index f998115c..7e972b2e 100644
--- a/internal/resources/syntheticmonitoring/resource_check_alerts.go
+++ b/internal/resources/syntheticmonitoring/resource_check_alerts.go
@@ -84,6 +84,12 @@ Manages alerts for a check in Grafana Synthetic Monitoring.
 									"", "5m", "10m", "15m", "20m", "30m", "1h",
 								}, false),
 							},
+							"runbook_url": {
+								Description: "URL to runbook documentation for this alert.",
+								Type:        schema.TypeString,
+								Optional:    true,
+								Default:     "",
+							},
 						},
 					},
 				},
@@ -132,6 +138,7 @@ func resourceCheckAlertRead(ctx context.Context, d *schema.ResourceData, c *smap
 		if alert.Period != "" {
 			alertMap["period"] = alert.Period
 		}
+		alertMap["runbook_url"] = alert.RunbookUrl
 		alertsList[i] = alertMap
 	}
 
@@ -185,6 +192,7 @@ func makeCheckAlerts(d *schema.ResourceData) ([]model.CheckAlert, error) {
 		alertData := alertMap.(map[string]any)
 		name := alertData["name"].(string)
 		period, hasPeriod := alertData["period"].(string)
+		runbookURL, hasRunbookURL := alertData["runbook_url"].(string)
 
 		alert := model.CheckAlert{
 			Name:      name,
@@ -195,6 +203,10 @@ func makeCheckAlerts(d *schema.ResourceData) ([]model.CheckAlert, error) {
 			alert.Period = period
 		}
 
+		if hasRunbookURL {
+			alert.RunbookUrl = runbookURL
+		}
+
 		alerts[i] = alert
 	}
 
diff --git a/provider_schema.json b/provider_schema.json
index 7e9aa40b..27c4d244 100644
--- a/provider_schema.json
+++ b/provider_schema.json
@@ -1 +1 @@
-{"format_version":"1.0","provider_schemas":{"registry.terraform.io/grafana/grafana":{"provider":{"version":0,"block":{"attributes":{"auth":{"type":"string","description":"API token, basic auth in the `username:password` format or `anonymous` (string literal). May alternatively be set via the `GRAFANA_AUTH` environment variable.","description_kind":"markdown","optional":true,"sensitive":true},"ca_cert":{"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.","description_kind":"markdown","optional":true},"cloud_access_policy_token":{"type":"string","description":"Access Policy Token for Grafana Cloud. May alternatively be set via the `GRAFANA_CLOUD_ACCESS_POLICY_TOKEN` environment variable.","description_kind":"markdown","optional":true,"sensitive":true},"cloud_api_url":{"type":"string","description":"Grafana Cloud's API URL. May alternatively be set via the `GRAFANA_CLOUD_API_URL` environment variable.","description_kind":"markdown","optional":true},"cloud_provider_access_token":{"type":"string","description":"A Grafana Cloud Provider access token. May alternatively be set via the `GRAFANA_CLOUD_PROVIDER_ACCESS_TOKEN` environment variable.","description_kind":"markdown","optional":true,"sensitive":true},"cloud_provider_url":{"type":"string","description":"A Grafana Cloud Provider backend address. May alternatively be set via the `GRAFANA_CLOUD_PROVIDER_URL` environment variable.","description_kind":"markdown","optional":true},"connections_api_access_token":{"type":"string","description":"A Grafana Connections API access token. May alternatively be set via the `GRAFANA_CONNECTIONS_API_ACCESS_TOKEN` environment variable.","description_kind":"markdown","optional":true,"sensitive":true},"connections_api_url":{"type":"string","description":"A Grafana Connections API address. May alternatively be set via the `GRAFANA_CONNECTIONS_API_URL` environment variable.","description_kind":"markdown","optional":true},"fleet_management_auth":{"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.","description_kind":"markdown","optional":true,"sensitive":true},"fleet_management_url":{"type":"string","description":"A Grafana Fleet Management API address. May alternatively be set via the `GRAFANA_FLEET_MANAGEMENT_URL` environment variable.","description_kind":"markdown","optional":true},"frontend_o11y_api_access_token":{"type":"string","description":"A Grafana Frontend Observability API access token. May alternatively be set via the `GRAFANA_FRONTEND_O11Y_API_ACCESS_TOKEN` environment variable.","description_kind":"markdown","optional":true,"sensitive":true},"http_headers":{"type":["map","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.","description_kind":"markdown","optional":true,"sensitive":true},"insecure_skip_verify":{"type":"bool","description":"Skip TLS certificate verification. May alternatively be set via the `GRAFANA_INSECURE_SKIP_VERIFY` environment variable.","description_kind":"markdown","optional":true},"k6_access_token":{"type":"string","description":"The k6 Cloud API token. May alternatively be set via the `GRAFANA_K6_ACCESS_TOKEN` environment variable.","description_kind":"markdown","optional":true,"sensitive":true},"k6_url":{"type":"string","description":"The k6 Cloud API url. May alternatively be set via the `GRAFANA_K6_URL` environment variable.","description_kind":"markdown","optional":true},"oncall_access_token":{"type":"string","description":"A Grafana OnCall access token. May alternatively be set via the `GRAFANA_ONCALL_ACCESS_TOKEN` environment variable.","description_kind":"markdown","optional":true,"sensitive":true},"oncall_url":{"type":"string","description":"An Grafana OnCall backend address. May alternatively be set via the `GRAFANA_ONCALL_URL` environment variable.","description_kind":"markdown","optional":true},"org_id":{"type":"number","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.","description_kind":"markdown","optional":true},"retries":{"type":"number","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.","description_kind":"markdown","optional":true},"retry_status_codes":{"type":["set","string"],"description":"The status codes to retry on for Grafana API and Grafana Cloud API calls. Use `x` as a digit wildcard. Defaults to 429 and 5xx. May alternatively be set via the `GRAFANA_RETRY_STATUS_CODES` environment variable.","description_kind":"markdown","optional":true},"retry_wait":{"type":"number","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.","description_kind":"markdown","optional":true},"sm_access_token":{"type":"string","description":"A Synthetic Monitoring access token. May alternatively be set via the `GRAFANA_SM_ACCESS_TOKEN` environment variable.","description_kind":"markdown","optional":true,"sensitive":true},"sm_url":{"type":"string","description":"Synthetic monitoring backend address. May alternatively be set via the `GRAFANA_SM_URL` environment variable. The correct value for each service region is cited in the [Synthetic Monitoring documentation](https://grafana.com/docs/grafana-cloud/testing/synthetic-monitoring/set-up/set-up-private-probes/#probe-api-server-url). Note the `sm_url` value is optional, but it must correspond with the value specified as the `region_slug` in the `grafana_cloud_stack` resource. Also note that when a Terraform configuration contains multiple provider instances managing SM resources associated with the same Grafana stack, specifying an explicit `sm_url` set to the same value for each provider ensures all providers interact with the same SM API.","description_kind":"markdown","optional":true},"stack_id":{"type":"number","description":"The Grafana stack ID, if you are using a Grafana Cloud stack. May alternatively be set via the `GRAFANA_STACK_ID` environment variable.","description_kind":"markdown","optional":true},"store_dashboard_sha256":{"type":"bool","description":"Set to true if you want to save only the sha256sum instead of complete dashboard model JSON in the tfstate.","description_kind":"markdown","optional":true},"tls_cert":{"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.","description_kind":"markdown","optional":true},"tls_key":{"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.","description_kind":"markdown","optional":true},"url":{"type":"string","description":"The root URL of a Grafana server. May alternatively be set via the `GRAFANA_URL` environment variable.","description_kind":"markdown","optional":true}},"description_kind":"plain"}},"resource_schemas":{"grafana_annotation":{"version":0,"block":{"attributes":{"dashboard_uid":{"type":"string","description":"The UID of the dashboard on which to create the annotation.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"panel_id":{"type":"number","description":"The ID of the dashboard panel on which to create the annotation.","description_kind":"markdown","optional":true},"tags":{"type":["set","string"],"description":"The tags to associate with the annotation.","description_kind":"markdown","optional":true},"text":{"type":"string","description":"The text to associate with the annotation.","description_kind":"markdown","required":true},"time":{"type":"string","description":"The RFC 3339-formatted time string indicating the annotation's time.","description_kind":"markdown","optional":true,"computed":true},"time_end":{"type":"string","description":"The RFC 3339-formatted time string indicating the annotation's end time.","description_kind":"markdown","optional":true,"computed":true}},"description":"\n* [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","description_kind":"markdown"}},"grafana_apps_alertenrichment_alertenrichment_v1beta1":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The ID of the resource derived from UUID.","description_kind":"plain","computed":true}},"block_types":{"metadata":{"nesting_mode":"single","block":{"attributes":{"folder_uid":{"type":"string","description":"The UID of the folder to save the resource in.","description_kind":"plain","optional":true},"uid":{"type":"string","description":"The unique identifier of the resource.","description_kind":"plain","required":true},"url":{"type":"string","description":"The full URL of the resource.","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"The globally unique identifier of a resource, used by the API for tracking.","description_kind":"plain","computed":true},"version":{"type":"string","description":"The version of the resource.","description_kind":"plain","computed":true}},"description":"The metadata of the resource.","description_kind":"plain"}},"options":{"nesting_mode":"single","block":{"attributes":{"overwrite":{"type":"bool","description":"Set to true if you want to overwrite existing resource with newer version, same resource title in folder or same resource uid.","description_kind":"plain","optional":true}},"description":"Options for applying the resource.","description_kind":"plain"}},"spec":{"nesting_mode":"single","block":{"attributes":{"alert_rule_uids":{"type":["list","string"],"description":"UIDs of alert rules this enrichment applies to. If empty, applies to all alert rules.","description_kind":"plain","optional":true},"annotation_matchers":{"type":["list",["object",{"name":"string","type":"string","value":"string"}]],"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).","description_kind":"plain","optional":true},"description":{"type":"string","description":"Description of the alert enrichment.","description_kind":"plain","optional":true,"computed":true},"label_matchers":{"type":["list",["object",{"name":"string","type":"string","value":"string"}]],"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).","description_kind":"plain","optional":true},"receivers":{"type":["list","string"],"description":"Receiver names to match. If empty, applies to all receivers.","description_kind":"plain","optional":true},"title":{"type":"string","description":"The title of the alert enrichment.","description_kind":"plain","required":true}},"block_types":{"step":{"nesting_mode":"list","block":{"block_types":{"asserts":{"nesting_mode":"single","block":{"attributes":{"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')","description_kind":"plain","optional":true}},"description":"Integrate with Grafana Asserts for enrichment.","description_kind":"plain"}},"assign":{"nesting_mode":"single","block":{"attributes":{"annotations":{"type":["map","string"],"description":"Map of annotation names to values to set on matching alerts.","description_kind":"plain","optional":true},"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')","description_kind":"plain","optional":true}},"description":"Assign annotations to an alert.","description_kind":"plain"}},"assistant_investigations":{"nesting_mode":"single","block":{"attributes":{"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')","description_kind":"plain","optional":true}},"description":"Use AI assistant to investigate alerts and add insights.","description_kind":"plain"}},"data_source":{"nesting_mode":"single","block":{"attributes":{"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')","description_kind":"plain","optional":true}},"block_types":{"logs_query":{"nesting_mode":"single","block":{"attributes":{"data_source_type":{"type":"string","description":"Data source type (e.g., 'loki').","description_kind":"plain","optional":true},"data_source_uid":{"type":"string","description":"UID of the data source to query.","description_kind":"plain","optional":true},"expr":{"type":"string","description":"Log query expression to execute.","description_kind":"plain","optional":true},"max_lines":{"type":"number","description":"Maximum number of log lines to include. Defaults to 3.","description_kind":"plain","optional":true,"computed":true}},"description":"Logs query configuration for querying log data sources.","description_kind":"plain"}},"raw_query":{"nesting_mode":"single","block":{"attributes":{"ref_id":{"type":"string","description":"Reference ID for correlating queries.","description_kind":"plain","optional":true,"computed":true},"request":{"type":"string","description":"Raw request payload for the data source query.","description_kind":"plain","optional":true}},"description":"Raw query configuration for advanced data source queries.","description_kind":"plain"}}},"description":"Query Grafana data sources and add results to alerts.","description_kind":"plain"}},"explain":{"nesting_mode":"single","block":{"attributes":{"annotation":{"type":"string","description":"Annotation name to set the explanation in. Defaults to 'ai_explanation'.","description_kind":"plain","optional":true,"computed":true},"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')","description_kind":"plain","optional":true}},"description":"Generate AI explanation and store in an annotation.","description_kind":"plain"}},"external":{"nesting_mode":"single","block":{"attributes":{"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')","description_kind":"plain","optional":true},"url":{"type":"string","description":"HTTP endpoint URL to call for enrichment","description_kind":"plain","optional":true}},"description":"Call an external HTTP service for enrichment.","description_kind":"plain"}},"sift":{"nesting_mode":"single","block":{"attributes":{"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')","description_kind":"plain","optional":true}},"description":"Analyze alerts for patterns and insights.","description_kind":"plain"}}},"description":"Enrichment step. Can be repeated multiple times to define a sequence of steps. Each step must contain exactly one enrichment block.","description_kind":"plain"}}},"description":"The spec of the resource.","description_kind":"plain"}}},"description":"\nManages Grafana Alert Enrichments.\n","description_kind":"markdown"}},"grafana_apps_dashboard_dashboard_v1beta1":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The ID of the resource derived from UUID.","description_kind":"plain","computed":true}},"block_types":{"metadata":{"nesting_mode":"single","block":{"attributes":{"folder_uid":{"type":"string","description":"The UID of the folder to save the resource in.","description_kind":"plain","optional":true},"uid":{"type":"string","description":"The unique identifier of the resource.","description_kind":"plain","required":true},"url":{"type":"string","description":"The full URL of the resource.","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"The globally unique identifier of a resource, used by the API for tracking.","description_kind":"plain","computed":true},"version":{"type":"string","description":"The version of the resource.","description_kind":"plain","computed":true}},"description":"The metadata of the resource.","description_kind":"plain"}},"options":{"nesting_mode":"single","block":{"attributes":{"overwrite":{"type":"bool","description":"Set to true if you want to overwrite existing resource with newer version, same resource title in folder or same resource uid.","description_kind":"plain","optional":true}},"description":"Options for applying the resource.","description_kind":"plain"}},"spec":{"nesting_mode":"single","block":{"attributes":{"json":{"type":"string","description":"The JSON representation of the dashboard spec.","description_kind":"plain","required":true},"tags":{"type":["list","string"],"description":"The tags of the dashboard. If not set, the tags will be derived from the JSON spec.","description_kind":"plain","optional":true},"title":{"type":"string","description":"The title of the dashboard. If not set, the title will be derived from the JSON spec.","description_kind":"plain","optional":true}},"description":"The spec of the resource.","description_kind":"plain"}}},"description":"\nManages 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\t","description_kind":"markdown"}},"grafana_apps_playlist_playlist_v0alpha1":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The ID of the resource derived from UUID.","description_kind":"plain","computed":true}},"block_types":{"metadata":{"nesting_mode":"single","block":{"attributes":{"folder_uid":{"type":"string","description":"The UID of the folder to save the resource in.","description_kind":"plain","optional":true},"uid":{"type":"string","description":"The unique identifier of the resource.","description_kind":"plain","required":true},"url":{"type":"string","description":"The full URL of the resource.","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"The globally unique identifier of a resource, used by the API for tracking.","description_kind":"plain","computed":true},"version":{"type":"string","description":"The version of the resource.","description_kind":"plain","computed":true}},"description":"The metadata of the resource.","description_kind":"plain"}},"options":{"nesting_mode":"single","block":{"attributes":{"overwrite":{"type":"bool","description":"Set to true if you want to overwrite existing resource with newer version, same resource title in folder or same resource uid.","description_kind":"plain","optional":true}},"description":"Options for applying the resource.","description_kind":"plain"}},"spec":{"nesting_mode":"single","block":{"attributes":{"interval":{"type":"string","description":"The interval of the playlist.","description_kind":"plain","optional":true},"items":{"type":["list",["object",{"type":"string","value":"string"}]],"description":"The items of the playlist.","description_kind":"plain","required":true},"title":{"type":"string","description":"The title of the playlist.","description_kind":"plain","required":true}},"description":"The spec of the resource.","description_kind":"plain"}}},"description":"\nManages 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","description_kind":"markdown"}},"grafana_asserts_notification_alerts_config":{"version":0,"block":{"attributes":{"alert_labels":{"type":["map","string"],"description":"Labels to add to alerts generated by this configuration.","description_kind":"markdown","optional":true},"duration":{"type":"string","description":"Duration for which the condition must be true before firing (e.g., '5m', '30s'). Maps to 'for' in Asserts API.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"match_labels":{"type":["map","string"],"description":"Labels to match for this alert configuration.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"The name of the alert configuration.","description_kind":"markdown","required":true},"silenced":{"type":"bool","description":"Whether this alert configuration is silenced. Defaults to `false`.","description_kind":"markdown","optional":true}},"description":"Manages Asserts Alert Configurations through Grafana API.","description_kind":"markdown"}},"grafana_asserts_suppressed_assertions_config":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"match_labels":{"type":["map","string"],"description":"Labels to match for this disabled alert configuration.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"The name of the disabled alert configuration.","description_kind":"markdown","required":true}},"description":"Manages Asserts Disabled Alert Configurations through Grafana API.","description_kind":"markdown"}},"grafana_cloud_access_policy":{"version":0,"block":{"attributes":{"created_at":{"type":"string","description":"Creation date of the access policy.","description_kind":"markdown","computed":true},"display_name":{"type":"string","description":"Display name of the access policy. Defaults to the name.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Name of the access policy.","description_kind":"markdown","required":true},"policy_id":{"type":"string","description":"ID of the access policy.","description_kind":"markdown","computed":true},"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.","description_kind":"markdown","required":true},"scopes":{"type":["set","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.","description_kind":"markdown","required":true},"updated_at":{"type":"string","description":"Last update date of the access policy.","description_kind":"markdown","computed":true}},"block_types":{"conditions":{"nesting_mode":"set","block":{"attributes":{"allowed_subnets":{"type":["set","string"],"description":"Conditions that apply to the access policy,such as IP Allow lists.","description_kind":"markdown","required":true}},"description":"Conditions for the access policy.","description_kind":"markdown"}},"realm":{"nesting_mode":"set","block":{"attributes":{"identifier":{"type":"string","description":"The identifier of the org or stack. For orgs, this is the slug, for stacks, this is the stack ID.","description_kind":"markdown","required":true},"type":{"type":"string","description":"Whether a policy applies to a Cloud org or a specific stack. Should be one of `org` or `stack`.","description_kind":"markdown","required":true}},"block_types":{"label_policy":{"nesting_mode":"set","block":{"attributes":{"selector":{"type":"string","description":"The label selector to match in metrics or logs query. Should be in PromQL or LogQL format.","description_kind":"markdown","required":true}},"description_kind":"plain"}}},"description_kind":"plain"},"min_items":1}},"description":"\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/#create-an-access-policy)\n\nRequired access policy scopes:\n\n* accesspolicies:read\n* accesspolicies:write\n* accesspolicies:delete\n","description_kind":"markdown"}},"grafana_cloud_access_policy_token":{"version":0,"block":{"attributes":{"access_policy_id":{"type":"string","description":"ID of the access policy for which to create a token.","description_kind":"markdown","required":true},"created_at":{"type":"string","description":"Creation date of the access policy token.","description_kind":"markdown","computed":true},"display_name":{"type":"string","description":"Display name of the access policy token. Defaults to the name.","description_kind":"markdown","optional":true},"expires_at":{"type":"string","description":"Expiration date of the access policy token. Does not expire by default.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Name of the access policy token.","description_kind":"markdown","required":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.","description_kind":"markdown","required":true},"token":{"type":"string","description_kind":"plain","computed":true,"sensitive":true},"updated_at":{"type":"string","description":"Last update date of the access policy token.","description_kind":"markdown","computed":true}},"description":"\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/#create-a-token)\n\nRequired access policy scopes:\n\n* accesspolicies:read\n* accesspolicies:write\n* accesspolicies:delete\n","description_kind":"markdown"}},"grafana_cloud_org_member":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","computed":true},"org":{"type":"string","description":"The slug or ID of the organization.","description_kind":"markdown","required":true},"receive_billing_emails":{"type":"bool","description":"Whether the user should receive billing emails.","description_kind":"markdown","optional":true,"computed":true},"role":{"type":"string","description":"The role to assign to the user in the organization.","description_kind":"markdown","required":true},"user":{"type":"string","description":"Username or ID of the user to add to the org's members.","description_kind":"markdown","required":true}},"description":"Manages the membership of a user in an organization.","description_kind":"markdown"}},"grafana_cloud_plugin_installation":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"slug":{"type":"string","description":"Slug of the plugin to be installed.","description_kind":"markdown","required":true},"stack_slug":{"type":"string","description":"The stack id to which the plugin should be installed.","description_kind":"markdown","required":true},"version":{"type":"string","description":"Version of the plugin to be installed. Defaults to 'latest' and installs the most recent version. Terraform will detect new version as drift for plan/apply. Defaults to `latest`.","description_kind":"markdown","optional":true}},"description":"\nManages 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","description_kind":"markdown"}},"grafana_cloud_private_data_source_connect_network":{"version":0,"block":{"attributes":{"created_at":{"type":"string","description":"Creation date of the private data source connect network.","description_kind":"markdown","computed":true},"display_name":{"type":"string","description":"Display name of the PDC network. Defaults to the name.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"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","description_kind":"markdown","required":true},"pdc_network_id":{"type":"string","description":"ID of the private data source connect network.","description_kind":"markdown","computed":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","description_kind":"markdown","required":true},"stack_identifier":{"type":"string","description":"The identifier of the stack.","description_kind":"markdown","required":true},"updated_at":{"type":"string","description":"Last update date of the private data source connect network.","description_kind":"markdown","computed":true}},"description":"\n* [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","description_kind":"markdown"}},"grafana_cloud_private_data_source_connect_network_token":{"version":0,"block":{"attributes":{"created_at":{"type":"string","description":"Creation date of the private data source network token.","description_kind":"markdown","computed":true},"display_name":{"type":"string","description":"Display name of the private data source network token. Defaults to the name.","description_kind":"markdown","optional":true},"expires_at":{"type":"string","description":"Expiration date of the private data source network token. Does not expire by default.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Name of the private data source network token.","description_kind":"markdown","required":true},"pdc_network_id":{"type":"string","description":"ID of the private data source network for which to create a token.","description_kind":"markdown","required":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.","description_kind":"markdown","required":true},"token":{"type":"string","description_kind":"plain","computed":true,"sensitive":true},"updated_at":{"type":"string","description":"Last update date of the private data source network token.","description_kind":"markdown","computed":true}},"description":"\n* [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","description_kind":"markdown"}},"grafana_cloud_provider_aws_account":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The Terraform Resource ID. This has the format \"{{ stack_id }}:{{ resource_id }}\".","description_kind":"plain","computed":true},"name":{"type":"string","description":"An optional human-readable name for this AWS Account resource.","description_kind":"plain","optional":true,"computed":true},"regions":{"type":["set","string"],"description":"A set of regions that this AWS Account resource applies to.","description_kind":"plain","required":true},"resource_id":{"type":"string","description":"The ID given by the Grafana Cloud Provider API to this AWS Account resource.","description_kind":"plain","computed":true},"role_arn":{"type":"string","description":"An IAM Role ARN string to represent with this AWS Account resource.","description_kind":"plain","required":true},"stack_id":{"type":"string","description":"The StackID of the Grafana Cloud instance. Part of the Terraform Resource ID.","description_kind":"plain","required":true}},"description_kind":"plain"}},"grafana_cloud_provider_aws_cloudwatch_scrape_job":{"version":0,"block":{"attributes":{"aws_account_resource_id":{"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 `resource_id` attribute of the `grafana_cloud_provider_aws_account` resource.","description_kind":"plain","required":true},"disabled_reason":{"type":"string","description":"When the AWS CloudWatch Scrape Job is disabled, this will show the reason that it is in that state.","description_kind":"plain","computed":true},"enabled":{"type":"bool","description":"Whether the AWS CloudWatch Scrape Job is enabled or not. Defaults to `true`.","description_kind":"plain","optional":true,"computed":true},"export_tags":{"type":"bool","description":"When enabled, AWS resource tags are exported as Prometheus labels to metrics formatted as `aws_\u003cservice_name\u003e_info`. Defaults to `true`.","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description":"The Terraform Resource ID. This has the format \"{{ stack_id }}:{{ name }}\".","description_kind":"plain","computed":true},"name":{"type":"string","description":"The name of the AWS CloudWatch Scrape Job. Part of the Terraform Resource ID.","description_kind":"plain","required":true},"regions_subset_override":{"type":["set","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.","description_kind":"plain","optional":true,"computed":true},"stack_id":{"type":"string","description":"The Stack ID of the Grafana Cloud instance. Part of the Terraform Resource ID.","description_kind":"plain","required":true},"static_labels":{"type":["map","string"],"description":"A set of static labels to add to all metrics exported by this scrape job.","description_kind":"plain","optional":true,"computed":true}},"block_types":{"custom_namespace":{"nesting_mode":"list","block":{"attributes":{"name":{"type":"string","description":"The name of the custom namespace to scrape.","description_kind":"plain","required":true},"scrape_interval_seconds":{"type":"number","description":"The interval in seconds to scrape the custom namespace. Defaults to `300`.","description_kind":"plain","optional":true,"computed":true}},"block_types":{"metric":{"nesting_mode":"list","block":{"attributes":{"name":{"type":"string","description":"The name of the metric to scrape.","description_kind":"plain","required":true},"statistics":{"type":["set","string"],"description":"A set of statistics to scrape.","description_kind":"plain","required":true}},"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.","description_kind":"plain"}}},"description":"Zero or more configuration blocks to configure custom namespaces for the AWS CloudWatch Scrape Job to scrape. Each block must have a distinct `name` attribute. When accessing this as an attribute reference, it is a list of objects.","description_kind":"plain"}},"service":{"nesting_mode":"list","block":{"attributes":{"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.","description_kind":"plain","required":true},"scrape_interval_seconds":{"type":"number","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 `300`.","description_kind":"plain","optional":true,"computed":true},"tags_to_add_to_metrics":{"type":["set","string"],"description":"A set of tags to add to all metrics exported by this scrape job, for use in PromQL queries.","description_kind":"plain","optional":true,"computed":true}},"block_types":{"metric":{"nesting_mode":"list","block":{"attributes":{"name":{"type":"string","description":"The name of the metric to scrape.","description_kind":"plain","required":true},"statistics":{"type":["set","string"],"description":"A set of statistics to scrape.","description_kind":"plain","required":true}},"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.","description_kind":"plain"}},"resource_discovery_tag_filter":{"nesting_mode":"list","block":{"attributes":{"key":{"type":"string","description":"The key of the tag filter.","description_kind":"plain","required":true},"value":{"type":"string","description":"The value of the tag filter.","description_kind":"plain","required":true}},"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.","description_kind":"plain"}}},"description":"One or more configuration blocks to configure AWS services for the AWS CloudWatch Scrape Job to scrape. Each block must have a distinct `name` attribute. When accessing this as an attribute reference, it is a list of objects.","description_kind":"plain"}}},"description_kind":"plain"}},"grafana_cloud_provider_aws_resource_metadata_scrape_job":{"version":0,"block":{"attributes":{"aws_account_resource_id":{"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 `resource_id` attribute of the `grafana_cloud_provider_aws_account` resource.","description_kind":"plain","required":true},"disabled_reason":{"type":"string","description":"When the AWS Resource Metadata Scrape Job is disabled, this will show the reason that it is in that state.","description_kind":"plain","computed":true},"enabled":{"type":"bool","description":"Whether the AWS Resource Metadata Scrape Job is enabled or not. Defaults to `true`.","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description":"The Terraform Resource ID. This has the format \"{{ stack_id }}:{{ name }}\".","description_kind":"plain","computed":true},"name":{"type":"string","description":"The name of the AWS Resource Metadata Scrape Job. Part of the Terraform Resource ID.","description_kind":"plain","required":true},"regions_subset_override":{"type":["set","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.","description_kind":"plain","optional":true,"computed":true},"stack_id":{"type":"string","description":"The Stack ID of the Grafana Cloud instance. Part of the Terraform Resource ID.","description_kind":"plain","required":true},"static_labels":{"type":["map","string"],"description":"A set of static labels to add to all metrics exported by this scrape job.","description_kind":"plain","optional":true,"computed":true}},"block_types":{"service":{"nesting_mode":"list","block":{"attributes":{"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.","description_kind":"plain","required":true},"scrape_interval_seconds":{"type":"number","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 `300`.","description_kind":"plain","optional":true,"computed":true}},"block_types":{"resource_discovery_tag_filter":{"nesting_mode":"list","block":{"attributes":{"key":{"type":"string","description":"The key of the tag filter.","description_kind":"plain","required":true},"value":{"type":"string","description":"The value of the tag filter.","description_kind":"plain","required":true}},"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.","description_kind":"plain"}}},"description":"One or more configuration blocks to configure AWS services for the Resource Metadata Scrape Job to scrape. Each block must have a distinct `name` attribute. When accessing this as an attribute reference, it is a list of objects.","description_kind":"plain"}}},"description_kind":"plain"}},"grafana_cloud_provider_azure_credential":{"version":0,"block":{"attributes":{"client_id":{"type":"string","description":"The client ID of the Azure Credential.","description_kind":"plain","required":true},"client_secret":{"type":"string","description":"The client secret of the Azure Credential.","description_kind":"plain","required":true,"sensitive":true},"id":{"type":"string","description":"The Terraform Resource ID. This has the format \"{{ stack_id }}:{{ resource_id }}\".","description_kind":"plain","computed":true},"name":{"type":"string","description":"The name of the Azure Credential.","description_kind":"plain","required":true},"resource_id":{"type":"string","description":"The ID given by the Grafana Cloud Provider API to this Azure Credential resource.","description_kind":"plain","computed":true},"resource_tags_to_add_to_metrics":{"type":["set","string"],"description":"The list of resource tags to add to metrics.","description_kind":"plain","optional":true},"stack_id":{"type":"string","description":"The StackID of the Grafana Cloud instance. Part of the Terraform Resource ID.","description_kind":"plain","required":true},"tenant_id":{"type":"string","description":"The tenant ID of the Azure Credential.","description_kind":"plain","required":true}},"block_types":{"auto_discovery_configuration":{"nesting_mode":"list","block":{"attributes":{"resource_type_configurations":{"type":["list",["object",{"metric_configuration":["list",["object",{"aggregations":["list","string"],"dimensions":["list","string"],"name":"string"}]],"resource_type_name":"string"}]],"description":"The list of resource type configurations.","description_kind":"plain","required":true},"subscription_id":{"type":"string","description":"The subscription ID of the Azure account.","description_kind":"plain","required":true}},"description":"The list of auto discovery configurations.","description_kind":"plain"}},"resource_discovery_tag_filter":{"nesting_mode":"list","block":{"attributes":{"key":{"type":"string","description":"The key of the tag filter.","description_kind":"plain","required":true},"value":{"type":"string","description":"The value of the tag filter.","description_kind":"plain","required":true}},"description":"The list of tag filters to apply to resources.","description_kind":"plain"}}},"description_kind":"plain"}},"grafana_cloud_stack":{"version":0,"block":{"attributes":{"alertmanager_ip_allow_list_cname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the Alertmanager instances (Optional)","description_kind":"markdown","computed":true},"alertmanager_name":{"type":"string","description":"Name of the Alertmanager instance configured for this stack.","description_kind":"markdown","computed":true},"alertmanager_status":{"type":"string","description":"Status of the Alertmanager instance configured for this stack.","description_kind":"markdown","computed":true},"alertmanager_url":{"type":"string","description":"Base URL of the Alertmanager instance configured for this stack.","description_kind":"markdown","computed":true},"alertmanager_user_id":{"type":"number","description":"User ID of the Alertmanager instance configured for this stack.","description_kind":"markdown","computed":true},"cluster_slug":{"type":"string","description":"Slug of the cluster where this stack resides.","description_kind":"markdown","computed":true},"delete_protection":{"type":"bool","description":"Whether to enable delete protection for the stack, preventing accidental deletion. Defaults to `true`.","description_kind":"markdown","optional":true},"description":{"type":"string","description":"Description of stack.","description_kind":"markdown","optional":true},"fleet_management_name":{"type":"string","description":"Name of the Fleet Management instance configured for this stack.","description_kind":"markdown","computed":true},"fleet_management_private_connectivity_info_private_dns":{"type":"string","description":"Private DNS for Fleet Management when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"fleet_management_private_connectivity_info_service_name":{"type":"string","description":"Service Name for Fleet Management when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"fleet_management_status":{"type":"string","description":"Status of the Fleet Management instance configured for this stack.","description_kind":"markdown","computed":true},"fleet_management_url":{"type":"string","description":"Base URL of the Fleet Management instance configured for this stack.","description_kind":"markdown","computed":true},"fleet_management_user_id":{"type":"number","description":"User ID of the Fleet Management instance configured for this stack.","description_kind":"markdown","computed":true},"grafanas_ip_allow_list_cname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the grafana instance (Optional)","description_kind":"markdown","computed":true},"graphite_ip_allow_list_cname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the Graphite instance (Optional)","description_kind":"markdown","computed":true},"graphite_name":{"type":"string","description_kind":"plain","computed":true},"graphite_private_connectivity_info_private_dns":{"type":"string","description":"Private DNS for Graphite when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"graphite_private_connectivity_info_service_name":{"type":"string","description":"Service Name for Graphite when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"graphite_status":{"type":"string","description_kind":"plain","computed":true},"graphite_url":{"type":"string","description_kind":"plain","computed":true},"graphite_user_id":{"type":"number","description_kind":"plain","computed":true},"id":{"type":"string","description":"The stack id assigned to this stack by Grafana.","description_kind":"markdown","computed":true},"influx_url":{"type":"string","description":"Base URL of the InfluxDB instance configured for this stack. The username is the same as the metrics' (`prometheus_user_id` 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.","description_kind":"markdown","computed":true},"labels":{"type":["map","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.","description_kind":"markdown","optional":true},"logs_ip_allow_list_cname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the Logs instance (Optional)","description_kind":"markdown","computed":true},"logs_name":{"type":"string","description_kind":"plain","computed":true},"logs_private_connectivity_info_private_dns":{"type":"string","description":"Private DNS for Logs when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"logs_private_connectivity_info_service_name":{"type":"string","description":"Service Name for Logs when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"logs_status":{"type":"string","description_kind":"plain","computed":true},"logs_url":{"type":"string","description_kind":"plain","computed":true},"logs_user_id":{"type":"number","description_kind":"plain","computed":true},"name":{"type":"string","description":"Name of stack. Conventionally matches the url of the instance (e.g. `\u003cstack_slug\u003e.grafana.net`).","description_kind":"markdown","required":true},"oncall_api_url":{"type":"string","description":"Base URL of the OnCall API instance configured for this stack.","description_kind":"markdown","computed":true},"org_id":{"type":"number","description":"Organization id to assign to this stack.","description_kind":"markdown","computed":true},"org_name":{"type":"string","description":"Organization name to assign to this stack.","description_kind":"markdown","computed":true},"org_slug":{"type":"string","description":"Organization slug to assign to this stack.","description_kind":"markdown","computed":true},"otlp_private_connectivity_info_private_dns":{"type":"string","description":"Private DNS for OTLP when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"otlp_private_connectivity_info_service_name":{"type":"string","description":"Service Name for OTLP when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"otlp_url":{"type":"string","description":"Base URL of the OTLP instance configured for this stack. The username is the stack's ID (`id` attribute of this resource). See https://grafana.com/docs/grafana-cloud/send-data/otlp/send-data-otlp/ for docs on how to use this.","description_kind":"markdown","computed":true},"pdc_api_private_connectivity_info_private_dns":{"type":"string","description":"Private DNS for PDC's API when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"pdc_api_private_connectivity_info_service_name":{"type":"string","description":"Service Name for PDC's API when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"pdc_gateway_private_connectivity_info_private_dns":{"type":"string","description":"Private DNS for PDC's Gateway when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"pdc_gateway_private_connectivity_info_service_name":{"type":"string","description":"Service Name for PDC's Gateway when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"profiles_ip_allow_list_cname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the Profiles instance (Optional)","description_kind":"markdown","computed":true},"profiles_name":{"type":"string","description_kind":"plain","computed":true},"profiles_private_connectivity_info_private_dns":{"type":"string","description":"Private DNS for Profiles when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"profiles_private_connectivity_info_service_name":{"type":"string","description":"Service Name for Profiles when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"profiles_status":{"type":"string","description_kind":"plain","computed":true},"profiles_url":{"type":"string","description_kind":"plain","computed":true},"profiles_user_id":{"type":"number","description_kind":"plain","computed":true},"prometheus_ip_allow_list_cname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the Prometheus instance (Optional)","description_kind":"markdown","computed":true},"prometheus_name":{"type":"string","description":"Prometheus name for this instance.","description_kind":"markdown","computed":true},"prometheus_private_connectivity_info_private_dns":{"type":"string","description":"Private DNS for Prometheus when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"prometheus_private_connectivity_info_service_name":{"type":"string","description":"Service Name for Prometheus when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"prometheus_remote_endpoint":{"type":"string","description":"Use this URL to query hosted metrics data e.g. Prometheus data source in Grafana","description_kind":"markdown","computed":true},"prometheus_remote_write_endpoint":{"type":"string","description":"Use this URL to send prometheus metrics to Grafana cloud","description_kind":"markdown","computed":true},"prometheus_status":{"type":"string","description":"Prometheus status for this instance.","description_kind":"markdown","computed":true},"prometheus_url":{"type":"string","description":"Prometheus url for this instance.","description_kind":"markdown","computed":true},"prometheus_user_id":{"type":"number","description":"Prometheus user ID. Used for e.g. remote_write.","description_kind":"markdown","computed":true},"region_slug":{"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.","description_kind":"markdown","optional":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`.","description_kind":"markdown","required":true},"status":{"type":"string","description":"Status of the stack.","description_kind":"markdown","computed":true},"traces_ip_allow_list_cname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the Traces instance (Optional)","description_kind":"markdown","computed":true},"traces_name":{"type":"string","description_kind":"plain","computed":true},"traces_private_connectivity_info_private_dns":{"type":"string","description":"Private DNS for Traces when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"traces_private_connectivity_info_service_name":{"type":"string","description":"Service Name for Traces when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"traces_status":{"type":"string","description_kind":"plain","computed":true},"traces_url":{"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.","description_kind":"markdown","computed":true},"traces_user_id":{"type":"number","description_kind":"plain","computed":true},"url":{"type":"string","description":"Custom URL for the Grafana instance. Must have a CNAME setup to point to `.grafana.net` before creating the stack","description_kind":"markdown","optional":true,"computed":true},"wait_for_readiness":{"type":"bool","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 `true`.","description_kind":"markdown","optional":true},"wait_for_readiness_timeout":{"type":"string","description":"How long to wait for readiness (if enabled). Defaults to `5m0s`.","description_kind":"markdown","optional":true}},"description":"\n* [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","description_kind":"markdown"}},"grafana_cloud_stack_service_account":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"is_disabled":{"type":"bool","description":"The disabled status for the service account. Defaults to `false`.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"The name of the service account.","description_kind":"markdown","required":true},"role":{"type":"string","description":"The basic role of the service account in the organization.","description_kind":"markdown","required":true},"stack_slug":{"type":"string","description_kind":"plain","required":true}},"description":"\nManages 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","description_kind":"markdown"}},"grafana_cloud_stack_service_account_token":{"version":0,"block":{"attributes":{"expiration":{"type":"string","description_kind":"plain","computed":true},"has_expired":{"type":"bool","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"key":{"type":"string","description_kind":"plain","computed":true,"sensitive":true},"name":{"type":"string","description_kind":"plain","required":true},"seconds_to_live":{"type":"number","description_kind":"plain","optional":true},"service_account_id":{"type":"string","description_kind":"plain","required":true},"stack_slug":{"type":"string","description_kind":"plain","required":true}},"description":"\nManages 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","description_kind":"markdown"}},"grafana_connections_metrics_endpoint_scrape_job":{"version":0,"block":{"attributes":{"authentication_basic_password":{"type":"string","description":"Password for basic authentication, use if scrape job is using basic authentication method","description_kind":"plain","optional":true,"sensitive":true},"authentication_basic_username":{"type":"string","description":"Username for basic authentication, use if scrape job is using basic authentication method","description_kind":"plain","optional":true},"authentication_bearer_token":{"type":"string","description":"Bearer token used for authentication, use if scrape job is using bearer authentication method","description_kind":"plain","optional":true,"sensitive":true},"authentication_method":{"type":"string","description":"Method to pass authentication credentials: basic or bearer.","description_kind":"plain","required":true},"enabled":{"type":"bool","description":"Whether the metrics endpoint scrape job is enabled or not.","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description":"The Terraform Resource ID. This has the format \"{{ stack_id }}:{{ name }}\".","description_kind":"plain","computed":true},"name":{"type":"string","description":"The name of the metrics endpoint scrape job. Part of the Terraform Resource ID.","description_kind":"plain","required":true},"scrape_interval_seconds":{"type":"number","description":"Frequency for scraping the metrics endpoint: 30, 60, or 120 seconds.","description_kind":"plain","optional":true,"computed":true},"stack_id":{"type":"string","description":"The Stack ID of the Grafana Cloud instance. Part of the Terraform Resource ID.","description_kind":"plain","required":true},"url":{"type":"string","description":"The url to scrape metrics from; a valid HTTPs URL is required.","description_kind":"plain","required":true}},"description_kind":"plain"}},"grafana_contact_point":{"version":0,"block":{"attributes":{"disable_provenance":{"type":"bool","description":"Allow modifying the contact point from other sources than Terraform or the Grafana API. Defaults to `false`.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The name of the contact point.","description_kind":"markdown","required":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true}},"block_types":{"alertmanager":{"nesting_mode":"set","block":{"attributes":{"basic_auth_password":{"type":"string","description":"The password component of the basic auth credentials to use.","description_kind":"markdown","optional":true,"sensitive":true},"basic_auth_user":{"type":"string","description":"The username component of the basic auth credentials to use.","description_kind":"markdown","optional":true},"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true},"url":{"type":"string","description":"The URL of the Alertmanager instance.","description_kind":"markdown","required":true}},"description":"A contact point that sends notifications to other Alertmanager instances.","description_kind":"markdown"}},"dingding":{"nesting_mode":"set","block":{"attributes":{"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"message":{"type":"string","description":"The templated content of the message.","description_kind":"markdown","optional":true},"message_type":{"type":"string","description":"The format of message to send - either 'link' or 'actionCard'","description_kind":"markdown","optional":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"title":{"type":"string","description":"The templated title of the message.","description_kind":"markdown","optional":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true},"url":{"type":"string","description":"The DingDing webhook URL.","description_kind":"markdown","required":true,"sensitive":true}},"description":"A contact point that sends notifications to DingDing.","description_kind":"markdown"}},"discord":{"nesting_mode":"set","block":{"attributes":{"avatar_url":{"type":"string","description":"The URL of a custom avatar image to use. Defaults to ``.","description_kind":"markdown","optional":true},"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"message":{"type":"string","description":"The templated content of the message. Defaults to ``.","description_kind":"markdown","optional":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"title":{"type":"string","description":"The templated content of the title.","description_kind":"markdown","optional":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true},"url":{"type":"string","description":"The discord webhook URL.","description_kind":"markdown","required":true,"sensitive":true},"use_discord_username":{"type":"bool","description":"Whether to use the bot account's plain username instead of \"Grafana.\" Defaults to `false`.","description_kind":"markdown","optional":true}},"description":"A contact point that sends notifications as Discord messages","description_kind":"markdown"}},"email":{"nesting_mode":"set","block":{"attributes":{"addresses":{"type":["list","string"],"description":"The addresses to send emails to.","description_kind":"markdown","required":true},"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"message":{"type":"string","description":"The templated content of the email. Defaults to ``.","description_kind":"markdown","optional":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"single_email":{"type":"bool","description":"Whether to send a single email CC'ing all addresses, rather than a separate email to each address. Defaults to `false`.","description_kind":"markdown","optional":true},"subject":{"type":"string","description":"The templated subject line of the email. Defaults to ``.","description_kind":"markdown","optional":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true}},"description":"A contact point that sends notifications to an email address.","description_kind":"markdown"}},"googlechat":{"nesting_mode":"set","block":{"attributes":{"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"message":{"type":"string","description":"The templated content of the message.","description_kind":"markdown","optional":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"title":{"type":"string","description":"The templated content of the title.","description_kind":"markdown","optional":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true},"url":{"type":"string","description":"The Google Chat webhook URL.","description_kind":"markdown","required":true,"sensitive":true}},"description":"A contact point that sends notifications to Google Chat.","description_kind":"markdown"}},"kafka":{"nesting_mode":"set","block":{"attributes":{"api_version":{"type":"string","description":"The API version to use when contacting the Kafka REST Server. Supported: v2 (default) and v3. Defaults to `v2`.","description_kind":"markdown","optional":true},"cluster_id":{"type":"string","description":"The Id of cluster to use when contacting the Kafka REST Server. Required api_version to be 'v3'","description_kind":"markdown","optional":true},"description":{"type":"string","description":"The templated description of the Kafka message.","description_kind":"markdown","optional":true},"details":{"type":"string","description":"The templated details to include with the message.","description_kind":"markdown","optional":true},"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"password":{"type":"string","description":"The password to use when making a call to the Kafka REST Proxy","description_kind":"markdown","optional":true,"sensitive":true},"rest_proxy_url":{"type":"string","description":"The URL of the Kafka REST proxy to send requests to.","description_kind":"markdown","required":true,"sensitive":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"topic":{"type":"string","description":"The name of the Kafka topic to publish to.","description_kind":"markdown","required":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true},"username":{"type":"string","description":"The user name to use when making a call to the Kafka REST Proxy","description_kind":"markdown","optional":true}},"description":"A contact point that publishes notifications to Apache Kafka topics.","description_kind":"markdown"}},"line":{"nesting_mode":"set","block":{"attributes":{"description":{"type":"string","description":"The templated description of the message.","description_kind":"markdown","optional":true},"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"title":{"type":"string","description":"The templated title of the message.","description_kind":"markdown","optional":true},"token":{"type":"string","description":"The bearer token used to authorize the client.","description_kind":"markdown","required":true,"sensitive":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true}},"description":"A contact point that sends notifications to LINE.me.","description_kind":"markdown"}},"oncall":{"nesting_mode":"set","block":{"attributes":{"authorization_credentials":{"type":"string","description":"Allows a custom authorization scheme - attaches an auth header with this value. Do not use in conjunction with basic auth parameters.","description_kind":"markdown","optional":true,"sensitive":true},"authorization_scheme":{"type":"string","description":"Allows a custom authorization scheme - attaches an auth header with this name. Do not use in conjunction with basic auth parameters.","description_kind":"markdown","optional":true},"basic_auth_password":{"type":"string","description":"The username to use in basic auth headers attached to the request. If omitted, basic auth will not be used.","description_kind":"markdown","optional":true,"sensitive":true},"basic_auth_user":{"type":"string","description":"The username to use in basic auth headers attached to the request. If omitted, basic auth will not be used.","description_kind":"markdown","optional":true},"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"http_method":{"type":"string","description":"The HTTP method to use in the request. Defaults to `POST`.","description_kind":"markdown","optional":true},"max_alerts":{"type":"number","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.","description_kind":"markdown","optional":true},"message":{"type":"string","description":"Custom message. You can use template variables.","description_kind":"markdown","optional":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"title":{"type":"string","description":"Templated title of the message.","description_kind":"markdown","optional":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true},"url":{"type":"string","description":"The URL to send webhook requests to.","description_kind":"markdown","required":true}},"description":"A contact point that sends notifications to Grafana On-Call.","description_kind":"markdown"}},"opsgenie":{"nesting_mode":"set","block":{"attributes":{"api_key":{"type":"string","description":"The OpsGenie API key to use.","description_kind":"markdown","required":true,"sensitive":true},"auto_close":{"type":"bool","description":"Whether to auto-close alerts in OpsGenie when they resolve in the Alertmanager.","description_kind":"markdown","optional":true},"description":{"type":"string","description":"A templated high-level description to use for the alert.","description_kind":"markdown","optional":true},"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"message":{"type":"string","description":"The templated content of the message.","description_kind":"markdown","optional":true},"override_priority":{"type":"bool","description":"Whether to allow the alert priority to be configured via the value of the `og_priority` annotation on the alert.","description_kind":"markdown","optional":true},"send_tags_as":{"type":"string","description":"Whether to send annotations to OpsGenie as Tags, Details, or both. Supported values are `tags`, `details`, `both`, or empty to use the default behavior of Tags.","description_kind":"markdown","optional":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true},"url":{"type":"string","description":"Allows customization of the OpsGenie API URL.","description_kind":"markdown","optional":true}},"block_types":{"responders":{"nesting_mode":"list","block":{"attributes":{"id":{"type":"string","description":"ID of the responder. Must be specified if name and username are empty.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"Name of the responder. Must be specified if username and id are empty.","description_kind":"markdown","optional":true},"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.","description_kind":"markdown","required":true},"username":{"type":"string","description":"User name of the responder. Must be specified if name and id are empty.","description_kind":"markdown","optional":true}},"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+.","description_kind":"markdown"}}},"description":"A contact point that sends notifications to OpsGenie.","description_kind":"markdown"}},"pagerduty":{"nesting_mode":"set","block":{"attributes":{"class":{"type":"string","description":"The class or type of event, for example `ping failure`.","description_kind":"markdown","optional":true},"client":{"type":"string","description":"The name of the monitoring client that is triggering this event.","description_kind":"markdown","optional":true},"client_url":{"type":"string","description":"The URL of the monitoring client that is triggering this event.","description_kind":"markdown","optional":true},"component":{"type":"string","description":"The component being affected by the event.","description_kind":"markdown","optional":true},"details":{"type":["map","string"],"description":"A set of arbitrary key/value pairs that provide further detail about the incident.","description_kind":"markdown","optional":true},"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"group":{"type":"string","description":"The group to which the provided component belongs to.","description_kind":"markdown","optional":true},"integration_key":{"type":"string","description":"The PagerDuty API key.","description_kind":"markdown","required":true,"sensitive":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"severity":{"type":"string","description":"The PagerDuty event severity level. Default is `critical`.","description_kind":"markdown","optional":true},"source":{"type":"string","description":"The unique location of the affected system.","description_kind":"markdown","optional":true},"summary":{"type":"string","description":"The templated summary message of the event.","description_kind":"markdown","optional":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true},"url":{"type":"string","description":"The URL to send API requests to","description_kind":"markdown","optional":true}},"description":"A contact point that sends notifications to PagerDuty.","description_kind":"markdown"}},"pushover":{"nesting_mode":"set","block":{"attributes":{"api_token":{"type":"string","description":"The Pushover API token.","description_kind":"markdown","required":true,"sensitive":true},"device":{"type":"string","description":"Comma-separated list of devices to which the event is associated.","description_kind":"markdown","optional":true},"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"expire":{"type":"number","description":"How many seconds for which the notification will continue to be retried by Pushover.","description_kind":"markdown","optional":true},"message":{"type":"string","description":"The templated notification message content.","description_kind":"markdown","optional":true},"ok_priority":{"type":"number","description":"The priority level of the resolved event.","description_kind":"markdown","optional":true},"ok_sound":{"type":"string","description":"The sound associated with the resolved notification.","description_kind":"markdown","optional":true},"priority":{"type":"number","description":"The priority level of the event.","description_kind":"markdown","optional":true},"retry":{"type":"number","description":"How often, in seconds, the Pushover servers will send the same notification to the user.","description_kind":"markdown","optional":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"sound":{"type":"string","description":"The sound associated with the notification.","description_kind":"markdown","optional":true},"title":{"type":"string","description":"The templated title of the message.","description_kind":"markdown","optional":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true},"upload_image":{"type":"bool","description":"Whether to send images in the notification or not. Default is true. Requires Grafana to be configured to send images in notifications.","description_kind":"markdown","optional":true},"user_key":{"type":"string","description":"The Pushover user key.","description_kind":"markdown","required":true,"sensitive":true}},"description":"A contact point that sends notifications to Pushover.","description_kind":"markdown"}},"sensugo":{"nesting_mode":"set","block":{"attributes":{"api_key":{"type":"string","description":"The SensuGo API key.","description_kind":"markdown","required":true,"sensitive":true},"check":{"type":"string","description":"The SensuGo check to which the event should be routed.","description_kind":"markdown","optional":true},"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"entity":{"type":"string","description":"The entity being monitored.","description_kind":"markdown","optional":true},"handler":{"type":"string","description":"A custom handler to execute in addition to the check.","description_kind":"markdown","optional":true},"message":{"type":"string","description":"Templated message content describing the alert.","description_kind":"markdown","optional":true},"namespace":{"type":"string","description":"The namespace in which the check resides.","description_kind":"markdown","optional":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true},"url":{"type":"string","description":"The SensuGo URL to send requests to.","description_kind":"markdown","required":true}},"description":"A contact point that sends notifications to SensuGo.","description_kind":"markdown"}},"slack":{"nesting_mode":"set","block":{"attributes":{"color":{"type":"string","description":"Templated color of the slack message.","description_kind":"markdown","optional":true},"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"endpoint_url":{"type":"string","description":"Use this to override the Slack API endpoint URL to send requests to.","description_kind":"markdown","optional":true},"icon_emoji":{"type":"string","description":"The name of a Slack workspace emoji to use as the bot icon.","description_kind":"markdown","optional":true},"icon_url":{"type":"string","description":"A URL of an image to use as the bot icon.","description_kind":"markdown","optional":true},"mention_channel":{"type":"string","description":"Describes how to ping the slack channel that messages are being sent to. Options are `here` for an @here ping, `channel` for @channel, or empty for no ping.","description_kind":"markdown","optional":true},"mention_groups":{"type":"string","description":"Comma-separated list of groups to mention in the message.","description_kind":"markdown","optional":true},"mention_users":{"type":"string","description":"Comma-separated list of users to mention in the message.","description_kind":"markdown","optional":true},"recipient":{"type":"string","description":"Channel, private group, or IM channel (can be an encoded ID or a name) to send messages to.","description_kind":"markdown","optional":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"text":{"type":"string","description":"Templated content of the message.","description_kind":"markdown","optional":true},"title":{"type":"string","description":"Templated title of the message.","description_kind":"markdown","optional":true},"token":{"type":"string","description":"A Slack API token,for sending messages directly without the webhook method.","description_kind":"markdown","optional":true,"sensitive":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true},"url":{"type":"string","description":"A Slack webhook URL,for sending messages via the webhook method.","description_kind":"markdown","optional":true,"sensitive":true},"username":{"type":"string","description":"Username for the bot to use.","description_kind":"markdown","optional":true}},"description":"A contact point that sends notifications to Slack.","description_kind":"markdown"}},"sns":{"nesting_mode":"set","block":{"attributes":{"access_key":{"type":"string","description":"AWS access key ID used to authenticate with Amazon SNS.","description_kind":"markdown","optional":true,"sensitive":true},"assume_role_arn":{"type":"string","description":"The Amazon Resource Name (ARN) of the role to assume to send notifications to Amazon SNS.","description_kind":"markdown","optional":true},"auth_provider":{"type":"string","description":"The authentication provider to use. Valid values are `default`, `arn` and `keys`. Default is `default`. Defaults to `default`.","description_kind":"markdown","optional":true},"body":{"type":"string","description_kind":"plain","optional":true},"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"external_id":{"type":"string","description":"The external ID to use when assuming the role.","description_kind":"markdown","optional":true},"message_format":{"type":"string","description":"The format of the message to send. Valid values are `text`, `body` and `json`. Default is `text`. Defaults to `text`.","description_kind":"markdown","optional":true},"secret_key":{"type":"string","description":"AWS secret access key used to authenticate with Amazon SNS.","description_kind":"markdown","optional":true,"sensitive":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"subject":{"type":"string","description_kind":"plain","optional":true},"topic":{"type":"string","description":"The Amazon SNS topic to send notifications to.","description_kind":"markdown","required":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true}},"description":"A contact point that sends notifications to Amazon SNS. Requires Amazon Managed Grafana.","description_kind":"markdown"}},"teams":{"nesting_mode":"set","block":{"attributes":{"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"message":{"type":"string","description":"The templated message content to send.","description_kind":"markdown","optional":true},"section_title":{"type":"string","description":"The templated subtitle for each message section.","description_kind":"markdown","optional":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"title":{"type":"string","description":"The templated title of the message.","description_kind":"markdown","optional":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true},"url":{"type":"string","description":"A Teams webhook URL.","description_kind":"markdown","required":true,"sensitive":true}},"description":"A contact point that sends notifications to Microsoft Teams.","description_kind":"markdown"}},"telegram":{"nesting_mode":"set","block":{"attributes":{"chat_id":{"type":"string","description":"The chat ID to send messages to.","description_kind":"markdown","required":true},"disable_notifications":{"type":"bool","description":"When set users will receive a notification with no sound.","description_kind":"markdown","optional":true},"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"disable_web_page_preview":{"type":"bool","description":"When set it disables link previews for links in the message.","description_kind":"markdown","optional":true},"message":{"type":"string","description":"The templated content of the message.","description_kind":"markdown","optional":true},"message_thread_id":{"type":"string","description":"The ID of the message thread to send the message to.","description_kind":"markdown","optional":true},"parse_mode":{"type":"string","description":"Mode for parsing entities in the message text. Supported: None, Markdown, MarkdownV2, and HTML. HTML is the default.","description_kind":"markdown","optional":true},"protect_content":{"type":"bool","description":"When set it protects the contents of the message from forwarding and saving.","description_kind":"markdown","optional":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"token":{"type":"string","description":"The Telegram bot token.","description_kind":"markdown","required":true,"sensitive":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true}},"description":"A contact point that sends notifications to Telegram.","description_kind":"markdown"}},"threema":{"nesting_mode":"set","block":{"attributes":{"api_secret":{"type":"string","description":"The Threema API key.","description_kind":"markdown","required":true,"sensitive":true},"description":{"type":"string","description":"The templated description of the message.","description_kind":"markdown","optional":true},"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"gateway_id":{"type":"string","description":"The Threema gateway ID.","description_kind":"markdown","required":true},"recipient_id":{"type":"string","description":"The ID of the recipient of the message.","description_kind":"markdown","required":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"title":{"type":"string","description":"The templated title of the message.","description_kind":"markdown","optional":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true}},"description":"A contact point that sends notifications to Threema.","description_kind":"markdown"}},"victorops":{"nesting_mode":"set","block":{"attributes":{"description":{"type":"string","description":"Templated description of the message.","description_kind":"markdown","optional":true},"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"message_type":{"type":"string","description":"The VictorOps alert state - typically either `CRITICAL` or `RECOVERY`.","description_kind":"markdown","optional":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"title":{"type":"string","description":"Templated title to display.","description_kind":"markdown","optional":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true},"url":{"type":"string","description":"The VictorOps webhook URL.","description_kind":"markdown","required":true,"sensitive":true}},"description":"A contact point that sends notifications to VictorOps (now known as Splunk OnCall).","description_kind":"markdown"}},"webex":{"nesting_mode":"set","block":{"attributes":{"api_url":{"type":"string","description":"The URL to send webhook requests to.","description_kind":"markdown","optional":true},"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"message":{"type":"string","description":"The templated title of the message to send.","description_kind":"markdown","optional":true},"room_id":{"type":"string","description":"ID of the Webex Teams room where to send the messages.","description_kind":"markdown","required":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"token":{"type":"string","description":"The bearer token used to authorize the client.","description_kind":"markdown","required":true,"sensitive":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true}},"description":"A contact point that sends notifications to Cisco Webex.","description_kind":"markdown"}},"webhook":{"nesting_mode":"set","block":{"attributes":{"authorization_credentials":{"type":"string","description":"Allows a custom authorization scheme - attaches an auth header with this value. Do not use in conjunction with basic auth parameters.","description_kind":"markdown","optional":true,"sensitive":true},"authorization_scheme":{"type":"string","description":"Allows a custom authorization scheme - attaches an auth header with this name. Do not use in conjunction with basic auth parameters.","description_kind":"markdown","optional":true},"basic_auth_password":{"type":"string","description":"The username to use in basic auth headers attached to the request. If omitted, basic auth will not be used.","description_kind":"markdown","optional":true,"sensitive":true},"basic_auth_user":{"type":"string","description":"The username to use in basic auth headers attached to the request. If omitted, basic auth will not be used.","description_kind":"markdown","optional":true},"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"headers":{"type":["map","string"],"description":"Custom headers to attach to the request.","description_kind":"markdown","optional":true},"http_method":{"type":"string","description":"The HTTP method to use in the request. Defaults to `POST`.","description_kind":"markdown","optional":true},"max_alerts":{"type":"number","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.","description_kind":"markdown","optional":true},"message":{"type":"string","description":"Custom message. You can use template variables.","description_kind":"markdown","optional":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"title":{"type":"string","description":"Templated title of the message.","description_kind":"markdown","optional":true},"tls_config":{"type":["map","string"],"description":"Allows configuring TLS for the webhook notifier.","description_kind":"markdown","optional":true,"sensitive":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true},"url":{"type":"string","description":"The URL to send webhook requests to.","description_kind":"markdown","required":true}},"block_types":{"hmac_config":{"nesting_mode":"set","block":{"attributes":{"header":{"type":"string","description":"The header in which the HMAC signature will be included. Defaults to `X-Grafana-Alerting-Signature`.","description_kind":"markdown","optional":true},"secret":{"type":"string","description":"The secret key used to generate the HMAC signature.","description_kind":"markdown","required":true,"sensitive":true},"timestamp_header":{"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.","description_kind":"markdown","optional":true}},"description":"HMAC signature configuration options.","description_kind":"markdown"},"max_items":1},"http_config":{"nesting_mode":"set","block":{"block_types":{"oauth2":{"nesting_mode":"set","block":{"attributes":{"client_id":{"type":"string","description":"Client ID to use when authenticating.","description_kind":"markdown","required":true},"client_secret":{"type":"string","description":"Client secret to use when authenticating.","description_kind":"markdown","required":true,"sensitive":true},"endpoint_params":{"type":["map","string"],"description":"Optional parameters to append to the access token request.","description_kind":"markdown","optional":true},"scopes":{"type":["list","string"],"description":"Optional scopes to request when obtaining an access token.","description_kind":"markdown","optional":true},"token_url":{"type":"string","description":"URL for the access token endpoint.","description_kind":"markdown","required":true}},"block_types":{"proxy_config":{"nesting_mode":"set","block":{"attributes":{"no_proxy":{"type":"string","description":"Comma-separated list of addresses that should not use a proxy.","description_kind":"markdown","optional":true},"proxy_connect_header":{"type":["map","string"],"description":"Optional headers to send to proxies during CONNECT requests.","description_kind":"markdown","optional":true},"proxy_from_environment":{"type":"bool","description":"Use environment HTTP_PROXY, HTTPS_PROXY and NO_PROXY to determine proxies. Defaults to `false`.","description_kind":"markdown","optional":true},"proxy_url":{"type":"string","description":"HTTP proxy server to use to connect to the targets.","description_kind":"markdown","optional":true}},"description":"Optional proxy configuration for OAuth2 requests.","description_kind":"markdown"},"max_items":1},"tls_config":{"nesting_mode":"set","block":{"attributes":{"ca_certificate":{"type":"string","description":"Certificate in PEM format to use when verifying the server's certificate chain.","description_kind":"markdown","optional":true,"sensitive":true},"client_certificate":{"type":"string","description":"Client certificate in PEM format to use when connecting to the server.","description_kind":"markdown","optional":true,"sensitive":true},"client_key":{"type":"string","description":"Client key in PEM format to use when connecting to the server.","description_kind":"markdown","optional":true,"sensitive":true},"insecure_skip_verify":{"type":"bool","description":"Do not verify the server's certificate chain and host name. Defaults to `false`.","description_kind":"markdown","optional":true}},"description":"Optional TLS configuration options for OAuth2 requests.","description_kind":"markdown"},"max_items":1}},"description":"OAuth2 configuration options.","description_kind":"markdown"},"max_items":1}},"description":"Common HTTP client options.","description_kind":"markdown"},"max_items":1},"payload":{"nesting_mode":"set","block":{"attributes":{"template":{"type":"string","description":"Custom payload template.","description_kind":"markdown","required":true},"vars":{"type":["map","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`.","description_kind":"markdown","optional":true}},"description":"Optionally provide a templated payload. Overrides 'Message' and 'Title' field.","description_kind":"markdown"},"max_items":1}},"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","description_kind":"markdown"}},"wecom":{"nesting_mode":"set","block":{"attributes":{"agent_id":{"type":"string","description":"Agent ID added to the request payload when using APIAPP.","description_kind":"markdown","optional":true},"corp_id":{"type":"string","description":"Corp ID used to get token when using APIAPP.","description_kind":"markdown","optional":true},"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"message":{"type":"string","description":"The templated content of the message to send.","description_kind":"markdown","optional":true},"msg_type":{"type":"string","description":"The type of them message. Supported: markdown, text. Default: text.","description_kind":"markdown","optional":true},"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.","description_kind":"markdown","optional":true,"sensitive":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"title":{"type":"string","description":"The templated title of the message to send.","description_kind":"markdown","optional":true},"to_user":{"type":"string","description":"The ID of user that should receive the message. Multiple entries should be separated by '|'. Default: @all.","description_kind":"markdown","optional":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true},"url":{"type":"string","description":"The WeCom webhook URL. Required if using GroupRobot.","description_kind":"markdown","optional":true,"sensitive":true}},"description":"A contact point that sends notifications to WeCom.","description_kind":"markdown"}}},"description":"\nManages Grafana Alerting contact points.\n\n* [Official documentation](https://grafana.com/docs/grafana/latest/alerting/set-up/provision-alerting-resources/terraform-provisioning/)\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","description_kind":"markdown"}},"grafana_dashboard":{"version":1,"block":{"attributes":{"config_json":{"type":"string","description":"The complete dashboard model JSON.","description_kind":"markdown","required":true},"dashboard_id":{"type":"number","description":"The numeric ID of the dashboard computed by Grafana.","description_kind":"markdown","computed":true},"folder":{"type":"string","description":"The id or UID of the folder to save the dashboard in.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"message":{"type":"string","description":"Set a commit message for the version history.","description_kind":"markdown","optional":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"overwrite":{"type":"bool","description":"Set to true if you want to overwrite existing dashboard with newer version, same dashboard title in folder or same dashboard uid.","description_kind":"markdown","optional":true},"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.","description_kind":"markdown","computed":true},"url":{"type":"string","description":"The full URL of the dashboard.","description_kind":"markdown","computed":true},"version":{"type":"number","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.","description_kind":"markdown","computed":true}},"description":"\nManages 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","description_kind":"markdown"}},"grafana_dashboard_permission":{"version":0,"block":{"attributes":{"dashboard_uid":{"type":"string","description":"UID of the dashboard to apply permissions to.","description_kind":"markdown","optional":true,"computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true}},"block_types":{"permissions":{"nesting_mode":"set","block":{"attributes":{"permission":{"type":"string","description":"Permission to associate with item. Must be one of `View`, `Edit`, or `Admin`.","description_kind":"markdown","required":true},"role":{"type":"string","description":"Name of the basic role to manage permissions for. Options: `Viewer`, `Editor` or `Admin`.","description_kind":"markdown","optional":true},"team_id":{"type":"string","description":"ID of the team to manage permissions for. Defaults to `0`.","description_kind":"markdown","optional":true},"user_id":{"type":"string","description":"ID of the user or service account to manage permissions for. Defaults to `0`.","description_kind":"markdown","optional":true}},"description":"The permission items to add/update. Items that are omitted from the list will be removed.","description_kind":"markdown"}}},"description":"\nManages 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","description_kind":"markdown"}},"grafana_dashboard_permission_item":{"version":0,"block":{"attributes":{"dashboard_uid":{"type":"string","description":"The UID of the dashboard.","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","computed":true},"org_id":{"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.","description_kind":"plain","optional":true,"computed":true},"permission":{"type":"string","description":"the permission to be assigned","description_kind":"plain","required":true},"role":{"type":"string","description":"the role onto which the permission is to be assigned","description_kind":"plain","optional":true},"team":{"type":"string","description":"the team onto which the permission is to be assigned","description_kind":"plain","optional":true},"user":{"type":"string","description":"the user or service account onto which the permission is to be assigned","description_kind":"plain","optional":true}},"description":"Manages a single permission item for a dashboard. Conflicts with the \"grafana_dashboard_permission\" resource which manages the entire set of permissions for a dashboard.","description_kind":"markdown"}},"grafana_dashboard_public":{"version":0,"block":{"attributes":{"access_token":{"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.","description_kind":"markdown","optional":true,"computed":true},"annotations_enabled":{"type":"bool","description":"Set to `true` to show annotations. The default value is `false`.","description_kind":"markdown","optional":true},"dashboard_uid":{"type":"string","description":"The unique identifier of the original dashboard.","description_kind":"markdown","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"is_enabled":{"type":"bool","description":"Set to `true` to enable the public dashboard. The default value is `false`.","description_kind":"markdown","optional":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"share":{"type":"string","description":"Set the share mode. The default value is `public`.","description_kind":"markdown","optional":true},"time_selection_enabled":{"type":"bool","description":"Set to `true` to enable the time picker in the public dashboard. The default value is `false`.","description_kind":"markdown","optional":true},"uid":{"type":"string","description":"The unique identifier of a public dashboard. It's automatically generated if not provided when creating a public dashboard.","description_kind":"markdown","optional":true,"computed":true}},"description":"\nManages 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","description_kind":"markdown"}},"grafana_data_source":{"version":1,"block":{"attributes":{"access_mode":{"type":"string","description":"The method by which Grafana will access the data source: `proxy` or `direct`. Defaults to `proxy`.","description_kind":"markdown","optional":true},"basic_auth_enabled":{"type":"bool","description":"Whether to enable basic auth for the data source. Defaults to `false`.","description_kind":"markdown","optional":true},"basic_auth_username":{"type":"string","description":"Basic auth username. Defaults to ``.","description_kind":"markdown","optional":true},"database_name":{"type":"string","description":"(Required by some data source types) The name of the database to use on the selected data source server. Defaults to ``.","description_kind":"markdown","optional":true},"http_headers":{"type":["map","string"],"description":"Custom HTTP headers","description_kind":"markdown","optional":true,"sensitive":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"is_default":{"type":"bool","description":"Whether to set the data source as default. This should only be `true` to a single data source. Defaults to `false`.","description_kind":"markdown","optional":true},"json_data_encoded":{"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.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"A unique name for the data source.","description_kind":"markdown","required":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"private_data_source_connect_network_id":{"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 ``.","description_kind":"markdown","optional":true},"secure_json_data_encoded":{"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.","description_kind":"markdown","optional":true,"sensitive":true},"type":{"type":"string","description":"The data source type. Must be one of the supported data source keywords.","description_kind":"markdown","required":true},"uid":{"type":"string","description":"Unique identifier. If unset, this will be automatically generated.","description_kind":"markdown","optional":true,"computed":true},"url":{"type":"string","description":"The URL for the data source. The type of URL required varies depending on the chosen data source type.","description_kind":"markdown","optional":true},"username":{"type":"string","description":"(Required by some data source types) The username to use to authenticate to the data source. Defaults to ``.","description_kind":"markdown","optional":true}},"description":"\n* [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","description_kind":"markdown"}},"grafana_data_source_config":{"version":0,"block":{"attributes":{"http_headers":{"type":["map","string"],"description":"Custom HTTP headers","description_kind":"markdown","optional":true,"sensitive":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"json_data_encoded":{"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.","description_kind":"markdown","optional":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"secure_json_data_encoded":{"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.","description_kind":"markdown","optional":true,"sensitive":true},"uid":{"type":"string","description":"Unique identifier. If unset, this will be automatically generated.","description_kind":"markdown","optional":true,"computed":true}},"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 (`json_data_encoded` field) requires circular references like in the example below.\n\n\u003e When using the `grafana_data_source_config` resource, the corresponding `grafana_data_source` resources must have the `json_data_encoded` and `http_headers` fields ignored. Otherwise, an infinite update loop will occur. See the example below.\n","description_kind":"markdown"}},"grafana_data_source_config_lbac_rules":{"version":0,"block":{"attributes":{"datasource_uid":{"type":"string","description":"The UID of the datasource.","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","computed":true},"rules":{"type":"string","description":"JSON-encoded LBAC rules for the data source. Map of team UIDs to lists of rule strings.","description_kind":"plain","required":true}},"description":"\nManages 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","description_kind":"markdown"}},"grafana_data_source_permission":{"version":0,"block":{"attributes":{"datasource_uid":{"type":"string","description":"UID of the datasource to apply permissions to.","description_kind":"markdown","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true}},"block_types":{"permissions":{"nesting_mode":"set","block":{"attributes":{"built_in_role":{"type":"string","description":"Name of the basic role to manage permissions for. Options: `Viewer`, `Editor` or `Admin`.","description_kind":"markdown","optional":true},"permission":{"type":"string","description":"Permission to associate with item. Options: `Query`, `Edit` or `Admin` (`Admin` can only be used with Grafana v10.3.0+).","description_kind":"markdown","required":true},"team_id":{"type":"string","description":"ID of the team to manage permissions for. Defaults to `0`.","description_kind":"markdown","optional":true},"user_id":{"type":"string","description":"ID of the user or service account to manage permissions for. Defaults to `0`.","description_kind":"markdown","optional":true}},"description":"The permission items to add/update. Items that are omitted from the list will be removed.","description_kind":"markdown"}}},"description":"\nManages 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","description_kind":"markdown"}},"grafana_data_source_permission_item":{"version":0,"block":{"attributes":{"datasource_uid":{"type":"string","description":"The UID of the datasource.","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","computed":true},"org_id":{"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.","description_kind":"plain","optional":true,"computed":true},"permission":{"type":"string","description":"the permission to be assigned","description_kind":"plain","required":true},"role":{"type":"string","description":"the role onto which the permission is to be assigned","description_kind":"plain","optional":true},"team":{"type":"string","description":"the team onto which the permission is to be assigned","description_kind":"plain","optional":true},"user":{"type":"string","description":"the user or service account onto which the permission is to be assigned","description_kind":"plain","optional":true}},"description":"Manages a single permission item for a datasource. Conflicts with the \"grafana_data_source_permission\" resource which manages the entire set of permissions for a datasource.","description_kind":"markdown"}},"grafana_fleet_management_collector":{"version":0,"block":{"attributes":{"enabled":{"type":"bool","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","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description":"ID of the collector","description_kind":"plain","required":true},"remote_attributes":{"type":["map","string"],"description":"Remote attributes for the collector","description_kind":"plain","optional":true,"computed":true}},"description":"\nManages 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\nRequired access policy scopes:\n\n* fleet-management:read\n* fleet-management:write\n","description_kind":"plain"}},"grafana_fleet_management_pipeline":{"version":0,"block":{"attributes":{"contents":{"type":"string","description":"Configuration contents of the pipeline to be used by collectors","description_kind":"plain","required":true},"enabled":{"type":"bool","description":"Whether the pipeline is enabled for collectors","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description":"Server-assigned ID of the pipeline","description_kind":"plain","computed":true},"matchers":{"type":["list","string"],"description":"Used to match against collectors and assign pipelines to them; follows the syntax of Prometheus Alertmanager matchers","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Name of the pipeline which is the unique identifier for the pipeline","description_kind":"plain","required":true}},"description":"\nManages 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\nRequired access policy scopes:\n\n* fleet-management:read\n* fleet-management:write\n","description_kind":"plain"}},"grafana_folder":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"parent_folder_uid":{"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.","description_kind":"markdown","optional":true},"prevent_destroy_if_not_empty":{"type":"bool","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 `false`.","description_kind":"markdown","optional":true},"title":{"type":"string","description":"The title of the folder.","description_kind":"markdown","required":true},"uid":{"type":"string","description":"Unique identifier.","description_kind":"markdown","optional":true,"computed":true},"url":{"type":"string","description":"The full URL of the folder.","description_kind":"markdown","computed":true}},"description":"\n* [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","description_kind":"markdown"}},"grafana_folder_permission":{"version":0,"block":{"attributes":{"folder_uid":{"type":"string","description":"The UID of the folder.","description_kind":"markdown","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true}},"block_types":{"permissions":{"nesting_mode":"set","block":{"attributes":{"permission":{"type":"string","description":"Permission to associate with item. Must be one of `View`, `Edit`, or `Admin`.","description_kind":"markdown","required":true},"role":{"type":"string","description":"Name of the basic role to manage permissions for. Options: `Viewer`, `Editor` or `Admin`.","description_kind":"markdown","optional":true},"team_id":{"type":"string","description":"ID of the team to manage permissions for. Defaults to `0`.","description_kind":"markdown","optional":true},"user_id":{"type":"string","description":"ID of the user or service account to manage permissions for. Defaults to `0`.","description_kind":"markdown","optional":true}},"description":"The permission items to add/update. Items that are omitted from the list will be removed.","description_kind":"markdown"}}},"description":"\nManages 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","description_kind":"markdown"}},"grafana_folder_permission_item":{"version":0,"block":{"attributes":{"folder_uid":{"type":"string","description":"The UID of the folder.","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","computed":true},"org_id":{"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.","description_kind":"plain","optional":true,"computed":true},"permission":{"type":"string","description":"the permission to be assigned","description_kind":"plain","required":true},"role":{"type":"string","description":"the role onto which the permission is to be assigned","description_kind":"plain","optional":true},"team":{"type":"string","description":"the team onto which the permission is to be assigned","description_kind":"plain","optional":true},"user":{"type":"string","description":"the user or service account onto which the permission is to be assigned","description_kind":"plain","optional":true}},"description":"Manages a single permission item for a folder. Conflicts with the \"grafana_folder_permission\" 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/)","description_kind":"markdown"}},"grafana_frontend_o11y_app":{"version":0,"block":{"attributes":{"allowed_origins":{"type":["list","string"],"description":"A list of allowed origins for CORS.","description_kind":"plain","required":true},"collector_endpoint":{"type":"string","description":"The collector URL Grafana Cloud Frontend Observability. Use this endpoint to send your Telemetry.","description_kind":"plain","computed":true},"extra_log_attributes":{"type":["map","string"],"description":"The extra attributes to append in each signal.","description_kind":"plain","required":true},"id":{"type":"number","description":"The Terraform Resource ID. This is auto-generated from Frontend Observability API.","description_kind":"plain","computed":true},"name":{"type":"string","description":"The name of Frontend Observability App. Part of the Terraform Resource ID.","description_kind":"plain","required":true},"settings":{"type":["map","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}`","description_kind":"markdown","required":true},"stack_id":{"type":"number","description":"The Stack ID of the Grafana Cloud instance. Part of the Terraform Resource ID.","description_kind":"plain","required":true}},"description_kind":"plain"}},"grafana_k6_installation":{"version":0,"block":{"attributes":{"cloud_access_policy_token":{"type":"string","description":"The [Grafana Cloud access policy](https://grafana.com/docs/grafana-cloud/account-management/authentication-and-permissions/access-policies/).","description_kind":"markdown","required":true,"sensitive":true},"grafana_sa_token":{"type":"string","description":"The [service account](https://grafana.com/docs/grafana/latest/administration/service-accounts/) token.","description_kind":"markdown","required":true,"sensitive":true},"grafana_user":{"type":"string","description":"The user to use for the installation.","description_kind":"markdown","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"k6_access_token":{"type":"string","description":"Generated token to access the k6 API.","description_kind":"markdown","computed":true,"sensitive":true},"k6_organization":{"type":"string","description":"The identifier of the k6 organization.","description_kind":"markdown","computed":true},"stack_id":{"type":"string","description":"The identifier of the stack to install k6 on.","description_kind":"markdown","required":true}},"description":"\nSets 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","description_kind":"markdown"}},"grafana_k6_load_test":{"version":1,"block":{"attributes":{"baseline_test_run_id":{"type":"string","description":"Identifier of a baseline test run used for results comparison.","description_kind":"plain","optional":true},"created":{"type":"string","description":"The date when the load test was created.","description_kind":"plain","computed":true},"id":{"type":"string","description":"Numeric identifier of the load test.","description_kind":"plain","computed":true},"name":{"type":"string","description":"Human-friendly identifier of the load test.","description_kind":"plain","required":true},"project_id":{"type":"string","description":"The identifier of the project this load test belongs to.","description_kind":"plain","required":true},"script":{"type":"string","description":"The k6 test script content. Can be provided inline or via the `file()` function.","description_kind":"plain","required":true},"updated":{"type":"string","description":"The date when the load test was last updated.","description_kind":"plain","computed":true}},"description":"Manages a k6 load test.","description_kind":"plain"}},"grafana_k6_project":{"version":1,"block":{"attributes":{"created":{"type":"string","description":"The date when the project was created.","description_kind":"plain","computed":true},"grafana_folder_uid":{"type":"string","description":"The Grafana folder uid.","description_kind":"plain","computed":true},"id":{"type":"string","description":"Numeric identifier of the project.","description_kind":"plain","computed":true},"is_default":{"type":"bool","description":"Use this project as default for running tests when no explicit project identifier is provided.","description_kind":"plain","computed":true},"name":{"type":"string","description":"Human-friendly identifier of the project.","description_kind":"plain","required":true},"updated":{"type":"string","description":"The date when the project was last updated.","description_kind":"plain","computed":true}},"description":"Manages a k6 project.","description_kind":"plain"}},"grafana_k6_project_allowed_load_zones":{"version":0,"block":{"attributes":{"allowed_load_zones":{"type":["list","string"],"description":"List of allowed private k6 load zone IDs for this project.","description_kind":"plain","required":true},"id":{"type":"string","description":"The identifier of the project. This is set to the same as the project_id.","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"The identifier of the project to manage private allowed load zones for.","description_kind":"plain","required":true}},"description":"Manages allowed private load zones for a k6 project.","description_kind":"plain"}},"grafana_k6_project_limits":{"version":1,"block":{"attributes":{"duration_max_per_test":{"type":"number","description":"Maximum duration of a test in seconds.","description_kind":"plain","optional":true},"id":{"type":"string","description":"The identifier of the project limits. This is the same as the project_id.","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"The identifier of the project to manage limits for.","description_kind":"plain","required":true},"vu_browser_max_per_test":{"type":"number","description":"Maximum number of concurrent browser virtual users (VUs) used in one test.","description_kind":"plain","optional":true},"vu_max_per_test":{"type":"number","description":"Maximum number of concurrent virtual users (VUs) used in one test.","description_kind":"plain","optional":true},"vuh_max_per_month":{"type":"number","description":"Maximum amount of virtual user hours (VU/h) used per one calendar month.","description_kind":"plain","optional":true}},"description":"Manages limits for a k6 project.","description_kind":"plain"}},"grafana_k6_schedule":{"version":0,"block":{"attributes":{"created_by":{"type":"string","description":"The email of the user who created the schedule.","description_kind":"plain","computed":true},"deactivated":{"type":"bool","description":"Whether the schedule is deactivated.","description_kind":"plain","computed":true},"id":{"type":"string","description":"Numeric identifier of the schedule.","description_kind":"plain","computed":true},"load_test_id":{"type":"string","description":"The identifier of the load test to schedule.","description_kind":"plain","required":true},"next_run":{"type":"string","description":"The next scheduled execution time.","description_kind":"plain","computed":true},"starts":{"type":"string","description":"The start time for the schedule (RFC3339 format).","description_kind":"plain","required":true}},"block_types":{"recurrence_rule":{"nesting_mode":"single","block":{"attributes":{"byday":{"type":["list","string"],"description":"The weekdays when the 'WEEKLY' recurrence will be applied (e.g., ['MO', 'WE', 'FR']). Cannot be set for other frequencies.","description_kind":"plain","optional":true},"count":{"type":"number","description":"How many times the recurrence will repeat.","description_kind":"plain","optional":true},"frequency":{"type":"string","description":"The frequency of the schedule (HOURLY, DAILY, WEEKLY, MONTHLY, YEARLY).","description_kind":"plain","optional":true},"interval":{"type":"number","description":"The interval between each frequency iteration (e.g., 2 = every 2 hours for HOURLY). Defaults to 1.","description_kind":"plain","optional":true,"computed":true},"until":{"type":"string","description":"The end time for the recurrence (RFC3339 format).","description_kind":"plain","optional":true}},"description":"The schedule recurrence settings. If not specified, the test will run only once on the 'starts' date.","description_kind":"plain"}}},"description":"Manages a k6 schedule for automated test execution.","description_kind":"plain"}},"grafana_library_panel":{"version":0,"block":{"attributes":{"created":{"type":"string","description":"Timestamp when the library panel was created.","description_kind":"markdown","computed":true},"dashboard_ids":{"type":["list","number"],"description":"Numerical IDs of Grafana dashboards containing the library panel.","description_kind":"markdown","computed":true},"description":{"type":"string","description":"Description of the library panel.","description_kind":"markdown","computed":true},"folder_name":{"type":"string","description":"Name of the folder containing the library panel.","description_kind":"markdown","computed":true},"folder_uid":{"type":"string","description":"Unique ID (UID) of the folder containing the library panel.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"model_json":{"type":"string","description":"The JSON model for the library panel.","description_kind":"markdown","required":true},"name":{"type":"string","description":"Name of the library panel.","description_kind":"markdown","required":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"panel_id":{"type":"number","description":"The numeric ID of the library panel computed by Grafana.","description_kind":"markdown","computed":true},"type":{"type":"string","description":"Type of the library panel (eg. text).","description_kind":"markdown","computed":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.","description_kind":"markdown","optional":true,"computed":true},"updated":{"type":"string","description":"Timestamp when the library panel was last modified.","description_kind":"markdown","computed":true},"version":{"type":"number","description":"Version of the library panel.","description_kind":"markdown","computed":true}},"description":"\nManages 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","description_kind":"markdown"}},"grafana_machine_learning_alert":{"version":0,"block":{"attributes":{"annotations":{"type":["map","string"],"description":"Annotations to add to the alert generated in Grafana.","description_kind":"plain","optional":true},"anomaly_condition":{"type":"string","description":"The condition for when to consider a point as anomalous.","description_kind":"plain","optional":true},"for":{"type":"string","description":"How long values must be anomalous before firing an alert.","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description":"The ID of the alert.","description_kind":"plain","computed":true},"job_id":{"type":"string","description":"The forecast this alert belongs to.","description_kind":"plain","optional":true},"labels":{"type":["map","string"],"description":"Labels to add to the alert generated in Grafana.","description_kind":"plain","optional":true},"no_data_state":{"type":"string","description":"How the alert should be processed when no data is returned by the underlying series","description_kind":"plain","optional":true},"outlier_id":{"type":"string","description":"The forecast this alert belongs to.","description_kind":"plain","optional":true},"threshold":{"type":"string","description":"The threshold of points over the window that need to be anomalous to alert.","description_kind":"plain","optional":true},"title":{"type":"string","description":"The title of the alert.","description_kind":"plain","required":true},"window":{"type":"string","description":"How much time to average values over","description_kind":"plain","optional":true,"computed":true}},"description_kind":"plain"}},"grafana_machine_learning_holiday":{"version":0,"block":{"attributes":{"description":{"type":"string","description":"A description of the holiday.","description_kind":"markdown","optional":true},"ical_timezone":{"type":"string","description":"The timezone to use for events in the iCal file pointed to by ical_url.","description_kind":"markdown","optional":true},"ical_url":{"type":"string","description":"A URL to an iCal file containing all occurrences of the holiday.","description_kind":"markdown","optional":true},"id":{"type":"string","description":"The ID of the holiday.","description_kind":"markdown","computed":true},"name":{"type":"string","description":"The name of the holiday.","description_kind":"markdown","required":true}},"block_types":{"custom_periods":{"nesting_mode":"list","block":{"attributes":{"end_time":{"type":"string","description_kind":"plain","required":true},"name":{"type":"string","description":"The name of the custom period.","description_kind":"markdown","optional":true},"start_time":{"type":"string","description_kind":"plain","required":true}},"description":"A list of custom periods for the holiday.","description_kind":"markdown"}}},"description":"\nA 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 `holidays` attribute of a `grafana_machine_learning_job`:\n\n```terraform\nresource \"grafana_machine_learning_job\" \"test_job\" {\n  ...\n  holidays = [\n    grafana_machine_learning_holiday.my_holiday.id\n  ]\n}\n```","description_kind":"markdown"}},"grafana_machine_learning_job":{"version":0,"block":{"attributes":{"custom_labels":{"type":["map","string"],"description":"An object representing the custom labels added on the forecast.","description_kind":"markdown","optional":true},"datasource_type":{"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.","description_kind":"markdown","required":true},"datasource_uid":{"type":"string","description":"The uid of the datasource to query.","description_kind":"markdown","required":true},"description":{"type":"string","description":"A description of the job.","description_kind":"markdown","optional":true},"holidays":{"type":["list","string"],"description":"A list of holiday IDs or names to take into account when training the model.","description_kind":"markdown","optional":true},"hyper_params":{"type":["map","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. Defaults to `map[]`.","description_kind":"markdown","optional":true},"id":{"type":"string","description":"The ID of the job.","description_kind":"markdown","computed":true},"interval":{"type":"number","description":"The data interval in seconds to train the data on. Defaults to `300`.","description_kind":"markdown","optional":true},"metric":{"type":"string","description":"The metric used to query the job results.","description_kind":"markdown","required":true},"name":{"type":"string","description":"The name of the job.","description_kind":"markdown","required":true},"query_params":{"type":["map","string"],"description":"An object representing the query params to query Grafana with.","description_kind":"markdown","required":true},"training_window":{"type":"number","description":"The data interval in seconds to train the data on. Defaults to `7776000`.","description_kind":"markdown","optional":true}},"description":"\nA 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 `hyper_params` field.","description_kind":"markdown"}},"grafana_machine_learning_outlier_detector":{"version":0,"block":{"attributes":{"datasource_type":{"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.","description_kind":"markdown","required":true},"datasource_uid":{"type":"string","description":"The uid of the datasource to query.","description_kind":"markdown","required":true},"description":{"type":"string","description":"A description of the outlier detector.","description_kind":"markdown","optional":true},"id":{"type":"string","description":"The ID of the outlier detector.","description_kind":"markdown","computed":true},"interval":{"type":"number","description":"The data interval in seconds to monitor. Defaults to `300`.","description_kind":"markdown","optional":true},"metric":{"type":"string","description":"The metric used to query the outlier detector results.","description_kind":"markdown","required":true},"name":{"type":"string","description":"The name of the outlier detector.","description_kind":"markdown","required":true},"query_params":{"type":["map","string"],"description":"An object representing the query params to query Grafana with.","description_kind":"markdown","required":true}},"block_types":{"algorithm":{"nesting_mode":"set","block":{"attributes":{"name":{"type":"string","description":"The name of the algorithm to use ('mad' or 'dbscan').","description_kind":"markdown","required":true},"sensitivity":{"type":"number","description":"Specify the sensitivity of the detector (in range [0,1]).","description_kind":"markdown","required":true}},"block_types":{"config":{"nesting_mode":"set","block":{"attributes":{"epsilon":{"type":"number","description":"Specify the epsilon parameter (positive float)","description_kind":"markdown","required":true}},"description":"For DBSCAN only, specify the configuration map","description_kind":"markdown"},"max_items":1}},"description":"The algorithm to use and its configuration. See https://grafana.com/docs/grafana-cloud/machine-learning/outlier-detection/ for details.","description_kind":"markdown"},"min_items":1,"max_items":1}},"description":"\nAn 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","description_kind":"markdown"}},"grafana_message_template":{"version":0,"block":{"attributes":{"disable_provenance":{"type":"bool","description":"Allow modifying the message template from other sources than Terraform or the Grafana API. Defaults to `false`.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The name of the notification template group.","description_kind":"markdown","required":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"template":{"type":"string","description":"The content of the notification template group.","description_kind":"markdown","required":true}},"description":"\nManages Grafana Alerting notification template groups, including notification templates.\n\n* [Official documentation](https://grafana.com/docs/grafana/latest/alerting/set-up/provision-alerting-resources/terraform-provisioning/)\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","description_kind":"markdown"}},"grafana_mute_timing":{"version":0,"block":{"attributes":{"disable_provenance":{"type":"bool","description":"Allow modifying the mute timing from other sources than Terraform or the Grafana API. Defaults to `false`.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The name of the mute timing.","description_kind":"markdown","required":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true}},"block_types":{"intervals":{"nesting_mode":"list","block":{"attributes":{"days_of_month":{"type":["list","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\".","description_kind":"markdown","optional":true},"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\"","description_kind":"markdown","optional":true},"months":{"type":["list","string"],"description":"An inclusive range of months, either numerical or full calendar month, e.g. \"1:3\", \"december\", or \"may:august\".","description_kind":"markdown","optional":true},"weekdays":{"type":["list","string"],"description":"An inclusive range of weekdays, e.g. \"monday\" or \"tuesday:thursday\".","description_kind":"markdown","optional":true},"years":{"type":["list","string"],"description":"A positive inclusive range of years, e.g. \"2030\" or \"2025:2026\".","description_kind":"markdown","optional":true}},"block_types":{"times":{"nesting_mode":"list","block":{"attributes":{"end":{"type":"string","description":"The time, in hh:mm format, of when the interval should end exclusively.","description_kind":"markdown","required":true},"start":{"type":"string","description":"The time, in hh:mm format, of when the interval should begin inclusively.","description_kind":"markdown","required":true}},"description":"The time ranges, represented in minutes, during which to mute in a given day.","description_kind":"markdown"}}},"description":"The time intervals at which to mute notifications. Use an empty block to mute all the time.","description_kind":"markdown"}}},"description":"\nManages Grafana Alerting mute timings.\n\n* [Official documentation](https://grafana.com/docs/grafana/latest/alerting/set-up/provision-alerting-resources/terraform-provisioning/)\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","description_kind":"markdown"}},"grafana_notification_policy":{"version":0,"block":{"attributes":{"contact_point":{"type":"string","description":"The default contact point to route all unmatched notifications to.","description_kind":"markdown","required":true},"disable_provenance":{"type":"bool","description":"Allow modifying the notification policy from other sources than Terraform or the Grafana API. Defaults to `false`.","description_kind":"markdown","optional":true},"group_by":{"type":["list","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.","description_kind":"markdown","required":true},"group_interval":{"type":"string","description":"Minimum time interval between two notifications for the same group. Default is 5 minutes.","description_kind":"markdown","optional":true},"group_wait":{"type":"string","description":"Time to wait to buffer alerts of the same group before sending a notification. Default is 30 seconds.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"repeat_interval":{"type":"string","description":"Minimum time interval for re-sending a notification if an alert is still firing. Default is 4 hours.","description_kind":"markdown","optional":true}},"block_types":{"policy":{"nesting_mode":"list","block":{"attributes":{"active_timings":{"type":["list","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","description_kind":"markdown","optional":true},"contact_point":{"type":"string","description":"The contact point to route notifications that match this rule to.","description_kind":"markdown","optional":true},"continue":{"type":"bool","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.","description_kind":"markdown","optional":true},"group_by":{"type":["list","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.","description_kind":"markdown","optional":true},"group_interval":{"type":"string","description":"Minimum time interval between two notifications for the same group. Default is 5 minutes.","description_kind":"markdown","optional":true},"group_wait":{"type":"string","description":"Time to wait to buffer alerts of the same group before sending a notification. Default is 30 seconds.","description_kind":"markdown","optional":true},"mute_timings":{"type":["list","string"],"description":"A list of time intervals to apply to alerts that match this policy to mute them for the specified time.","description_kind":"markdown","optional":true},"repeat_interval":{"type":"string","description":"Minimum time interval for re-sending a notification if an alert is still firing. Default is 4 hours.","description_kind":"markdown","optional":true}},"block_types":{"matcher":{"nesting_mode":"set","block":{"attributes":{"label":{"type":"string","description":"The name of the label to match against.","description_kind":"markdown","required":true},"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.","description_kind":"markdown","required":true},"value":{"type":"string","description":"The label value to match against.","description_kind":"markdown","required":true}},"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.","description_kind":"markdown"}},"policy":{"nesting_mode":"list","block":{"attributes":{"active_timings":{"type":["list","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","description_kind":"markdown","optional":true},"contact_point":{"type":"string","description":"The contact point to route notifications that match this rule to.","description_kind":"markdown","optional":true},"continue":{"type":"bool","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.","description_kind":"markdown","optional":true},"group_by":{"type":["list","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.","description_kind":"markdown","optional":true},"group_interval":{"type":"string","description":"Minimum time interval between two notifications for the same group. Default is 5 minutes.","description_kind":"markdown","optional":true},"group_wait":{"type":"string","description":"Time to wait to buffer alerts of the same group before sending a notification. Default is 30 seconds.","description_kind":"markdown","optional":true},"mute_timings":{"type":["list","string"],"description":"A list of time intervals to apply to alerts that match this policy to mute them for the specified time.","description_kind":"markdown","optional":true},"repeat_interval":{"type":"string","description":"Minimum time interval for re-sending a notification if an alert is still firing. Default is 4 hours.","description_kind":"markdown","optional":true}},"block_types":{"matcher":{"nesting_mode":"set","block":{"attributes":{"label":{"type":"string","description":"The name of the label to match against.","description_kind":"markdown","required":true},"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.","description_kind":"markdown","required":true},"value":{"type":"string","description":"The label value to match against.","description_kind":"markdown","required":true}},"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.","description_kind":"markdown"}},"policy":{"nesting_mode":"list","block":{"attributes":{"active_timings":{"type":["list","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","description_kind":"markdown","optional":true},"contact_point":{"type":"string","description":"The contact point to route notifications that match this rule to.","description_kind":"markdown","optional":true},"continue":{"type":"bool","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.","description_kind":"markdown","optional":true},"group_by":{"type":["list","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.","description_kind":"markdown","optional":true},"group_interval":{"type":"string","description":"Minimum time interval between two notifications for the same group. Default is 5 minutes.","description_kind":"markdown","optional":true},"group_wait":{"type":"string","description":"Time to wait to buffer alerts of the same group before sending a notification. Default is 30 seconds.","description_kind":"markdown","optional":true},"mute_timings":{"type":["list","string"],"description":"A list of time intervals to apply to alerts that match this policy to mute them for the specified time.","description_kind":"markdown","optional":true},"repeat_interval":{"type":"string","description":"Minimum time interval for re-sending a notification if an alert is still firing. Default is 4 hours.","description_kind":"markdown","optional":true}},"block_types":{"matcher":{"nesting_mode":"set","block":{"attributes":{"label":{"type":"string","description":"The name of the label to match against.","description_kind":"markdown","required":true},"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.","description_kind":"markdown","required":true},"value":{"type":"string","description":"The label value to match against.","description_kind":"markdown","required":true}},"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.","description_kind":"markdown"}},"policy":{"nesting_mode":"list","block":{"attributes":{"active_timings":{"type":["list","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","description_kind":"markdown","optional":true},"contact_point":{"type":"string","description":"The contact point to route notifications that match this rule to.","description_kind":"markdown","optional":true},"continue":{"type":"bool","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.","description_kind":"markdown","optional":true},"group_by":{"type":["list","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.","description_kind":"markdown","required":true},"group_interval":{"type":"string","description":"Minimum time interval between two notifications for the same group. Default is 5 minutes.","description_kind":"markdown","optional":true},"group_wait":{"type":"string","description":"Time to wait to buffer alerts of the same group before sending a notification. Default is 30 seconds.","description_kind":"markdown","optional":true},"mute_timings":{"type":["list","string"],"description":"A list of time intervals to apply to alerts that match this policy to mute them for the specified time.","description_kind":"markdown","optional":true},"repeat_interval":{"type":"string","description":"Minimum time interval for re-sending a notification if an alert is still firing. Default is 4 hours.","description_kind":"markdown","optional":true}},"block_types":{"matcher":{"nesting_mode":"set","block":{"attributes":{"label":{"type":"string","description":"The name of the label to match against.","description_kind":"markdown","required":true},"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.","description_kind":"markdown","required":true},"value":{"type":"string","description":"The label value to match against.","description_kind":"markdown","required":true}},"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.","description_kind":"markdown"}}},"description":"Routing rules for specific label sets.","description_kind":"markdown"}}},"description":"Routing rules for specific label sets.","description_kind":"markdown"}}},"description":"Routing rules for specific label sets.","description_kind":"markdown"}}},"description":"Routing rules for specific label sets.","description_kind":"markdown"}}},"description":"\nSets 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](https://grafana.com/docs/grafana/latest/alerting/set-up/provision-alerting-resources/terraform-provisioning/)\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","description_kind":"markdown"}},"grafana_oncall_escalation":{"version":0,"block":{"attributes":{"action_to_trigger":{"type":"string","description":"The ID of an Action for trigger_webhook type step.","description_kind":"markdown","optional":true},"duration":{"type":"number","description":"The duration of delay for wait type step. (60-86400) seconds","description_kind":"markdown","optional":true},"escalation_chain_id":{"type":"string","description":"The ID of the escalation chain.","description_kind":"markdown","required":true},"group_to_notify":{"type":"string","description":"The ID of a User Group for notify_user_group type step.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"important":{"type":"bool","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","description_kind":"markdown","optional":true},"notify_if_time_from":{"type":"string","description":"The beginning of the time interval for notify_if_time_from_to type step in UTC (for example 08:00:00Z).","description_kind":"markdown","optional":true},"notify_if_time_to":{"type":"string","description":"The end of the time interval for notify_if_time_from_to type step in UTC (for example 18:00:00Z).","description_kind":"markdown","optional":true},"notify_on_call_from_schedule":{"type":"string","description":"ID of a Schedule for notify_on_call_from_schedule type step.","description_kind":"markdown","optional":true},"notify_to_team_members":{"type":"string","description":"The ID of a Team for a notify_team_members type step.","description_kind":"markdown","optional":true},"persons_to_notify":{"type":["set","string"],"description":"The list of ID's of users for notify_persons type step.","description_kind":"markdown","optional":true},"persons_to_notify_next_each_time":{"type":["set","string"],"description":"The list of ID's of users for notify_person_next_each_time type step.","description_kind":"markdown","optional":true},"position":{"type":"number","description":"The position of the escalation step (starts from 0).","description_kind":"markdown","required":true},"severity":{"type":"string","description":"The severity of the incident for declare_incident type step.","description_kind":"markdown","optional":true},"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, repeat_escalation, notify_team_members, declare_incident","description_kind":"markdown","required":true}},"description":"\n* [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","description_kind":"markdown"}},"grafana_oncall_escalation_chain":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The name of the escalation chain.","description_kind":"markdown","required":true},"team_id":{"type":"string","description":"The ID of the OnCall team (using the `grafana_oncall_team` datasource).","description_kind":"markdown","optional":true}},"description":"\n* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/escalation_chains/)\n","description_kind":"markdown"}},"grafana_oncall_integration":{"version":0,"block":{"attributes":{"dynamic_labels":{"type":["list",["map","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 `grafana_oncall_label` datasource).","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"labels":{"type":["list",["map","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 `grafana_oncall_label` datasource).","description_kind":"markdown","optional":true},"link":{"type":"string","description":"The link for using in an integrated tool.","description_kind":"markdown","computed":true},"name":{"type":"string","description":"The name of the service integration.","description_kind":"markdown","required":true},"team_id":{"type":"string","description":"The ID of the OnCall team (using the `grafana_oncall_team` datasource).","description_kind":"markdown","optional":true},"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, heartbeat, demo, manual, stackdriver, uptimerobot, sentry_platform, zabbix, prtg, slack_channel, inbound_email, direct_paging, jira, zendesk.","description_kind":"markdown","required":true}},"block_types":{"default_route":{"nesting_mode":"list","block":{"attributes":{"escalation_chain_id":{"type":"string","description":"The ID of the escalation chain.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","computed":true}},"block_types":{"msteams":{"nesting_mode":"list","block":{"attributes":{"enabled":{"type":"bool","description":"Enable notification in MS teams. Defaults to `true`.","description_kind":"markdown","optional":true},"id":{"type":"string","description":"MS teams channel id. Alerts will be directed to this channel in Microsoft teams.","description_kind":"markdown","optional":true}},"description":"MS teams-specific settings for a route.","description_kind":"markdown"},"max_items":1},"slack":{"nesting_mode":"list","block":{"attributes":{"channel_id":{"type":"string","description":"Slack channel id. Alerts will be directed to this channel in Slack.","description_kind":"markdown","optional":true},"enabled":{"type":"bool","description":"Enable notification in Slack. Defaults to `true`.","description_kind":"markdown","optional":true}},"description":"Slack-specific settings for a route.","description_kind":"markdown"},"max_items":1},"telegram":{"nesting_mode":"list","block":{"attributes":{"enabled":{"type":"bool","description":"Enable notification in Telegram. Defaults to `true`.","description_kind":"markdown","optional":true},"id":{"type":"string","description":"Telegram channel id. Alerts will be directed to this channel in Telegram.","description_kind":"markdown","optional":true}},"description":"Telegram-specific settings for a route.","description_kind":"markdown"},"max_items":1}},"description":"The Default route for all alerts from the given integration","description_kind":"markdown"},"min_items":1,"max_items":1},"templates":{"nesting_mode":"list","block":{"attributes":{"acknowledge_signal":{"type":"string","description":"Template for sending a signal to acknowledge the Incident.","description_kind":"markdown","optional":true},"grouping_key":{"type":"string","description":"Template for the key by which alerts are grouped.","description_kind":"markdown","optional":true},"resolve_signal":{"type":"string","description":"Template for sending a signal to resolve the Incident.","description_kind":"markdown","optional":true},"source_link":{"type":"string","description":"Template for a source link.","description_kind":"markdown","optional":true}},"block_types":{"email":{"nesting_mode":"list","block":{"attributes":{"message":{"type":"string","description":"Template for Alert message.","description_kind":"markdown","optional":true},"title":{"type":"string","description":"Template for Alert title.","description_kind":"markdown","optional":true}},"description":"Templates for Email.","description_kind":"markdown"},"max_items":1},"microsoft_teams":{"nesting_mode":"list","block":{"attributes":{"image_url":{"type":"string","description":"Template for Alert image url.","description_kind":"markdown","optional":true},"message":{"type":"string","description":"Template for Alert message.","description_kind":"markdown","optional":true},"title":{"type":"string","description":"Template for Alert title.","description_kind":"markdown","optional":true}},"description":"Templates for Microsoft Teams. **NOTE**: Microsoft Teams templates are only available on Grafana Cloud.","description_kind":"markdown"},"max_items":1},"mobile_app":{"nesting_mode":"list","block":{"attributes":{"message":{"type":"string","description":"Template for Alert message.","description_kind":"markdown","optional":true},"title":{"type":"string","description":"Template for Alert title.","description_kind":"markdown","optional":true}},"description":"Templates for Mobile app push notifications.","description_kind":"markdown"},"max_items":1},"phone_call":{"nesting_mode":"list","block":{"attributes":{"title":{"type":"string","description":"Template for Alert title.","description_kind":"markdown","optional":true}},"description":"Templates for Phone Call.","description_kind":"markdown"},"max_items":1},"slack":{"nesting_mode":"list","block":{"attributes":{"image_url":{"type":"string","description":"Template for Alert image url.","description_kind":"markdown","optional":true},"message":{"type":"string","description":"Template for Alert message.","description_kind":"markdown","optional":true},"title":{"type":"string","description":"Template for Alert title.","description_kind":"markdown","optional":true}},"description":"Templates for Slack.","description_kind":"markdown"},"max_items":1},"sms":{"nesting_mode":"list","block":{"attributes":{"title":{"type":"string","description":"Template for Alert title.","description_kind":"markdown","optional":true}},"description":"Templates for SMS.","description_kind":"markdown"},"max_items":1},"telegram":{"nesting_mode":"list","block":{"attributes":{"image_url":{"type":"string","description":"Template for Alert image url.","description_kind":"markdown","optional":true},"message":{"type":"string","description":"Template for Alert message.","description_kind":"markdown","optional":true},"title":{"type":"string","description":"Template for Alert title.","description_kind":"markdown","optional":true}},"description":"Templates for Telegram.","description_kind":"markdown"},"max_items":1},"web":{"nesting_mode":"list","block":{"attributes":{"image_url":{"type":"string","description":"Template for Alert image url.","description_kind":"markdown","optional":true},"message":{"type":"string","description":"Template for Alert message.","description_kind":"markdown","optional":true},"title":{"type":"string","description":"Template for Alert title.","description_kind":"markdown","optional":true}},"description":"Templates for Web.","description_kind":"markdown"},"max_items":1}},"description":"Jinja2 templates for Alert payload. An empty templates block will be ignored.","description_kind":"markdown"},"max_items":1}},"description":"\n* [Official documentation](https://grafana.com/docs/oncall/latest/configure/integrations/)\n* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/)\n","description_kind":"markdown"}},"grafana_oncall_on_call_shift":{"version":0,"block":{"attributes":{"by_day":{"type":["set","string"],"description":"This parameter takes a list of days in iCal format. Can be MO, TU, WE, TH, FR, SA, SU","description_kind":"markdown","optional":true},"by_month":{"type":["set","number"],"description":"This parameter takes a list of months. Valid values are 1 to 12","description_kind":"markdown","optional":true},"by_monthday":{"type":["set","number"],"description":"This parameter takes a list of days of the month.  Valid values are 1 to 31 or -31 to -1","description_kind":"markdown","optional":true},"duration":{"type":"number","description":"The duration of the event.","description_kind":"markdown","required":true},"frequency":{"type":"string","description":"The frequency of the event. Can be hourly, daily, weekly, monthly","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"interval":{"type":"number","description":"The positive integer representing at which intervals the recurrence rule repeats.","description_kind":"markdown","optional":true},"level":{"type":"number","description":"The priority level. The higher the value, the higher the priority.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"The shift's name.","description_kind":"markdown","required":true},"rolling_users":{"type":["list",["set","string"]],"description":"The list of lists with on-call users (for rolling_users event type)","description_kind":"markdown","optional":true},"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\")","description_kind":"markdown","required":true},"start_rotation_from_user_index":{"type":"number","description":"The index of the list of users in rolling_users, from which on-call rotation starts.","description_kind":"markdown","optional":true},"team_id":{"type":"string","description":"The ID of the OnCall team (using the `grafana_oncall_team` datasource).","description_kind":"markdown","optional":true},"time_zone":{"type":"string","description":"The shift's timezone.  Overrides schedule's timezone.","description_kind":"markdown","optional":true},"type":{"type":"string","description":"The shift's type. Can be rolling_users, recurrent_event, single_event","description_kind":"markdown","required":true},"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\")","description_kind":"markdown","optional":true},"users":{"type":["set","string"],"description":"The list of on-call users (for single_event and recurrent_event event type).","description_kind":"markdown","optional":true},"week_start":{"type":"string","description":"Start day of the week in iCal format. Can be MO, TU, WE, TH, FR, SA, SU","description_kind":"markdown","optional":true}},"description":"\n* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/on_call_shifts/)\n","description_kind":"markdown"}},"grafana_oncall_outgoing_webhook":{"version":0,"block":{"attributes":{"authorization_header":{"type":"string","description":"The auth data of the webhook. Used in Authorization header instead of user/password auth.","description_kind":"markdown","optional":true,"sensitive":true},"data":{"type":"string","description":"The data of the webhook.","description_kind":"markdown","optional":true},"forward_whole_payload":{"type":"bool","description":"Toggle to send the entire webhook payload instead of using the values in the Data field.","description_kind":"markdown","optional":true},"headers":{"type":"string","description":"Headers to add to the outgoing webhook request.","description_kind":"markdown","optional":true},"http_method":{"type":"string","description":"The HTTP method used in the request made by the outgoing webhook. Defaults to `POST`.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"integration_filter":{"type":["list","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.","description_kind":"markdown","optional":true},"is_webhook_enabled":{"type":"bool","description":"Controls whether the outgoing webhook will trigger or is ignored. Defaults to `true`.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"The name of the outgoing webhook.","description_kind":"markdown","required":true},"password":{"type":"string","description":"The auth data of the webhook. Used for Basic authentication","description_kind":"markdown","optional":true,"sensitive":true},"preset":{"type":"string","description":"The preset of the outgoing webhook. Possible values are: `simple_webhook`, `advanced_webhook`, `grafana_sift`, `incident_webhook`. If no preset is set, the default preset is `advanced_webhook`.","description_kind":"markdown","optional":true},"team_id":{"type":"string","description":"The ID of the OnCall team (using the `grafana_oncall_team` datasource).","description_kind":"markdown","optional":true},"trigger_template":{"type":"string","description":"A template used to dynamically determine whether the webhook should execute based on the content of the payload.","description_kind":"markdown","optional":true},"trigger_type":{"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: `escalation`, `alert group created`, `status change`, `acknowledge`, `resolve`, `silence`, `unsilence`, `unresolve`, `unacknowledge`, `resolution note added`, `personal notification`; for incident webhooks: `incident declared`, `incident changed`, `incident resolved`. Defaults to `escalation`.","description_kind":"markdown","optional":true},"url":{"type":"string","description":"The webhook URL. Required when not using a preset that controls this field.","description_kind":"markdown","optional":true},"user":{"type":"string","description":"Username to use when making the outgoing webhook request.","description_kind":"markdown","optional":true}},"description":"\n* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/outgoing_webhooks/)\n","description_kind":"markdown"}},"grafana_oncall_route":{"version":0,"block":{"attributes":{"escalation_chain_id":{"type":"string","description":"The ID of the escalation chain.","description_kind":"markdown","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"integration_id":{"type":"string","description":"The ID of the integration.","description_kind":"markdown","required":true},"position":{"type":"number","description":"The position of the route (starts from 0).","description_kind":"markdown","required":true},"routing_regex":{"type":"string","description":"Python Regex query. Route is chosen for an alert if there is a match inside the alert payload.","description_kind":"markdown","required":true},"routing_type":{"type":"string","description":"The type of route. Can be jinja2, regex Defaults to `regex`.","description_kind":"markdown","optional":true}},"block_types":{"msteams":{"nesting_mode":"list","block":{"attributes":{"enabled":{"type":"bool","description":"Enable notification in MS teams. Defaults to `true`.","description_kind":"markdown","optional":true},"id":{"type":"string","description":"MS teams channel id. Alerts will be directed to this channel in Microsoft teams.","description_kind":"markdown","optional":true}},"description":"MS teams-specific settings for a route.","description_kind":"markdown"},"max_items":1},"slack":{"nesting_mode":"list","block":{"attributes":{"channel_id":{"type":"string","description":"Slack channel id. Alerts will be directed to this channel in Slack.","description_kind":"markdown","optional":true},"enabled":{"type":"bool","description":"Enable notification in Slack. Defaults to `true`.","description_kind":"markdown","optional":true}},"description":"Slack-specific settings for a route.","description_kind":"markdown"},"max_items":1},"telegram":{"nesting_mode":"list","block":{"attributes":{"enabled":{"type":"bool","description":"Enable notification in Telegram. Defaults to `true`.","description_kind":"markdown","optional":true},"id":{"type":"string","description":"Telegram channel id. Alerts will be directed to this channel in Telegram.","description_kind":"markdown","optional":true}},"description":"Telegram-specific settings for a route.","description_kind":"markdown"},"max_items":1}},"description":"\n* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/routes/)\n","description_kind":"markdown"}},"grafana_oncall_schedule":{"version":0,"block":{"attributes":{"enable_web_overrides":{"type":"bool","description":"Enable overrides via web UI (it will ignore ical_url_overrides).","description_kind":"markdown","optional":true},"ical_url_overrides":{"type":"string","description":"The URL of external iCal calendar which override primary events.","description_kind":"markdown","optional":true},"ical_url_primary":{"type":"string","description":"The URL of the external calendar iCal file.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The schedule's name.","description_kind":"markdown","required":true},"shifts":{"type":["set","string"],"description":"The list of ID's of on-call shifts.","description_kind":"markdown","optional":true},"team_id":{"type":"string","description":"The ID of the OnCall team (using the `grafana_oncall_team` datasource).","description_kind":"markdown","optional":true},"time_zone":{"type":"string","description":"The schedule's time zone.","description_kind":"markdown","optional":true},"type":{"type":"string","description":"The schedule's type. Valid values are `ical`, `calendar`, `web`.","description_kind":"markdown","required":true}},"block_types":{"slack":{"nesting_mode":"list","block":{"attributes":{"channel_id":{"type":"string","description":"Slack channel id. Reminder about schedule shifts will be directed to this channel in Slack.","description_kind":"markdown","optional":true},"user_group_id":{"type":"string","description":"Slack user group id. Members of user group will be updated when on-call users change.","description_kind":"markdown","optional":true}},"description":"The Slack-specific settings for a schedule.","description_kind":"markdown"},"max_items":1}},"description":"\n* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/schedules/)\n","description_kind":"markdown"}},"grafana_oncall_user_notification_rule":{"version":0,"block":{"attributes":{"duration":{"type":"number","description":"A time in seconds to wait (when `type=wait`). Can be 60, 300, 900, 1800, 3600","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","computed":true},"important":{"type":"bool","description":"Boolean value which indicates if a rule is “important”","description_kind":"markdown","optional":true,"computed":true},"position":{"type":"number","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.","description_kind":"markdown","optional":true},"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: `notify_by_msteams` is only available for Grafana Cloud customers.","description_kind":"markdown","required":true},"user_id":{"type":"string","description":"User ID","description_kind":"markdown","required":true}},"description":"\n* [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","description_kind":"markdown"}},"grafana_organization":{"version":0,"block":{"attributes":{"admin_user":{"type":"string","description":"The login name of the configured default admin user for the Grafana\ninstallation. If unset, this value defaults to admin, the Grafana default.\nGrafana adds the default admin user to all organizations automatically upon\ncreation, and this parameter keeps Terraform from removing it from\norganizations.\n Defaults to `admin`.","description_kind":"markdown","optional":true},"admins":{"type":["set","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.","description_kind":"markdown","optional":true},"create_users":{"type":"bool","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.\n Defaults to `true`.","description_kind":"markdown","optional":true},"editors":{"type":["set","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.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The display name for the Grafana organization created.","description_kind":"markdown","required":true},"org_id":{"type":"number","description":"The organization id assigned to this organization by Grafana.","description_kind":"markdown","computed":true},"users_without_access":{"type":["set","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+.","description_kind":"markdown","optional":true},"viewers":{"type":["set","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.","description_kind":"markdown","optional":true}},"description":"\n* [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","description_kind":"markdown"}},"grafana_organization_preferences":{"version":0,"block":{"attributes":{"home_dashboard_uid":{"type":"string","description":"The Organization home dashboard UID. This is only available in Grafana 9.0+.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"theme":{"type":"string","description":"The Organization theme. Available values are `light`, `dark`, `system`, or an empty string for the default.","description_kind":"markdown","optional":true},"timezone":{"type":"string","description":"The Organization timezone. Available values are `utc`, `browser`, or an empty string for the default.","description_kind":"markdown","optional":true},"week_start":{"type":"string","description":"The Organization week start day. Available values are `sunday`, `monday`, `saturday`, or an empty string for the default. Defaults to ``.","description_kind":"markdown","optional":true}},"description":"\n* [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","description_kind":"markdown"}},"grafana_playlist":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"interval":{"type":"string","description_kind":"plain","required":true},"name":{"type":"string","description":"The name of the playlist.","description_kind":"markdown","required":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true}},"block_types":{"item":{"nesting_mode":"set","block":{"attributes":{"id":{"type":"string","description_kind":"plain","computed":true},"order":{"type":"number","description_kind":"plain","required":true},"title":{"type":"string","description_kind":"plain","required":true},"type":{"type":"string","description_kind":"plain","optional":true},"value":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"},"min_items":1}},"description":"\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/playlist/)\n","description_kind":"markdown"}},"grafana_report":{"version":0,"block":{"attributes":{"formats":{"type":["set","string"],"description":"Specifies what kind of attachment to generate for the report. Allowed values: `pdf`, `csv`, `image`.","description_kind":"markdown","optional":true},"id":{"type":"string","description":"Generated identifier of the report.","description_kind":"markdown","computed":true},"include_dashboard_link":{"type":"bool","description":"Whether to include a link to the dashboard in the report. Defaults to `true`.","description_kind":"markdown","optional":true},"include_table_csv":{"type":"bool","description":"Whether to include a CSV file of table panel data. Defaults to `false`.","description_kind":"markdown","optional":true},"layout":{"type":"string","description":"Layout of the report. Allowed values: `simple`, `grid`. Defaults to `grid`.","description_kind":"markdown","optional":true},"message":{"type":"string","description":"Message to be sent in the report.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"Name of the report.","description_kind":"markdown","required":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"orientation":{"type":"string","description":"Orientation of the report. Allowed values: `landscape`, `portrait`. Defaults to `landscape`.","description_kind":"markdown","optional":true},"recipients":{"type":["list","string"],"description":"List of recipients of the report.","description_kind":"markdown","required":true},"reply_to":{"type":"string","description":"Reply-to email address of the report.","description_kind":"markdown","optional":true}},"block_types":{"dashboards":{"nesting_mode":"list","block":{"attributes":{"report_variables":{"type":["map","string"],"description":"Add report variables to the dashboard. Values should be separated by commas.","description_kind":"markdown","optional":true},"uid":{"type":"string","description":"Dashboard uid.","description_kind":"markdown","required":true}},"block_types":{"time_range":{"nesting_mode":"list","block":{"attributes":{"from":{"type":"string","description":"Start of the time range.","description_kind":"markdown","optional":true},"to":{"type":"string","description":"End of the time range.","description_kind":"markdown","optional":true}},"description":"Time range of the report.","description_kind":"markdown"},"max_items":1}},"description":"List of dashboards to render into the report","description_kind":"markdown"}},"schedule":{"nesting_mode":"list","block":{"attributes":{"custom_interval":{"type":"string","description":"Custom interval of the report.\n**Note:** This field is only available when frequency is set to `custom`.","description_kind":"markdown","optional":true},"end_time":{"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","description_kind":"markdown","optional":true},"frequency":{"type":"string","description":"Frequency of the report. Allowed values: `never`, `once`, `hourly`, `daily`, `weekly`, `monthly`, `custom`.","description_kind":"markdown","required":true},"last_day_of_month":{"type":"bool","description":"Send the report on the last day of the month Defaults to `false`.","description_kind":"markdown","optional":true},"start_time":{"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","description_kind":"markdown","optional":true},"timezone":{"type":"string","description":"Set the report time zone. Defaults to `GMT`.","description_kind":"markdown","optional":true},"workdays_only":{"type":"bool","description":"Whether to send the report only on work days. Defaults to `false`.","description_kind":"markdown","optional":true}},"description":"Schedule of the report.","description_kind":"markdown"},"min_items":1,"max_items":1}},"description":"\n**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","description_kind":"markdown"}},"grafana_role":{"version":0,"block":{"attributes":{"auto_increment_version":{"type":"bool","description":"Whether the role version should be incremented automatically on updates (and set to 1 on creation). This field or `version` should be set.","description_kind":"markdown","optional":true},"description":{"type":"string","description":"Description of the role.","description_kind":"markdown","optional":true},"display_name":{"type":"string","description":"Display name of the role. Available with Grafana 8.5+.","description_kind":"markdown","optional":true},"global":{"type":"bool","description":"Boolean to state whether the role is available across all organizations or not. Defaults to `false`.","description_kind":"markdown","optional":true},"group":{"type":"string","description":"Group of the role. Available with Grafana 8.5+.","description_kind":"markdown","optional":true},"hidden":{"type":"bool","description":"Boolean to state whether the role should be visible in the Grafana UI or not. Available with Grafana 8.5+. Defaults to `false`.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Name of the role","description_kind":"markdown","required":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"uid":{"type":"string","description":"Unique identifier of the role. Used for assignments.","description_kind":"markdown","optional":true,"computed":true},"version":{"type":"number","description":"Version of the role. A role is updated only on version increase. This field or `auto_increment_version` should be set.","description_kind":"markdown","optional":true}},"block_types":{"permissions":{"nesting_mode":"set","block":{"attributes":{"action":{"type":"string","description":"Specific action users granted with the role will be allowed to perform (for example: `users:read`)","description_kind":"markdown","required":true},"scope":{"type":"string","description":"Scope to restrict the action to a set of resources (for example: `users:*` or `roles:customrole1`) Defaults to ``.","description_kind":"markdown","optional":true}},"description":"Specific set of actions granted by the role.","description_kind":"markdown"}}},"description":"\n**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","description_kind":"markdown"}},"grafana_role_assignment":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"role_uid":{"type":"string","description":"Grafana RBAC role UID.","description_kind":"markdown","required":true},"service_accounts":{"type":["set","string"],"description":"IDs of service accounts that the role should be assigned to.","description_kind":"markdown","optional":true},"teams":{"type":["set","string"],"description":"IDs of teams that the role should be assigned to.","description_kind":"markdown","optional":true},"users":{"type":["set","number"],"description":"IDs of users that the role should be assigned to.","description_kind":"markdown","optional":true}},"description":"\nManages 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","description_kind":"markdown"}},"grafana_role_assignment_item":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","computed":true},"org_id":{"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.","description_kind":"plain","optional":true,"computed":true},"role_uid":{"type":"string","description":"the role UID onto which to assign an actor","description_kind":"plain","required":true},"service_account_id":{"type":"string","description":"the service account onto which the role is to be assigned","description_kind":"plain","optional":true},"team_id":{"type":"string","description":"the team onto which the role is to be assigned","description_kind":"plain","optional":true},"user_id":{"type":"string","description":"the user onto which the role is to be assigned","description_kind":"plain","optional":true}},"description":"Manages a single assignment for a role. Conflicts with the \"grafana_role_assignment\" resource which manages the entire set of assignments for a role.","description_kind":"markdown"}},"grafana_rule_group":{"version":0,"block":{"attributes":{"disable_provenance":{"type":"bool","description":"Allow modifying the rule group from other sources than Terraform or the Grafana API. Defaults to `false`.","description_kind":"markdown","optional":true},"folder_uid":{"type":"string","description":"The UID of the folder that the group belongs to.","description_kind":"markdown","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"interval_seconds":{"type":"number","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.","description_kind":"markdown","required":true},"name":{"type":"string","description":"The name of the rule group.","description_kind":"markdown","required":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true}},"block_types":{"rule":{"nesting_mode":"list","block":{"attributes":{"annotations":{"type":["map","string"],"description":"Key-value pairs of metadata to attach to the alert rule. They add additional information, such as a `summary` or `runbook_url`, to help identify and investigate alerts. The `__dashboardUid__` and `__panelId__` annotations, which link alerts to a panel, must be set together. Defaults to `map[]`.","description_kind":"markdown","optional":true},"condition":{"type":"string","description":"The `ref_id` of the query node in the `data` field to use as the alert condition.","description_kind":"markdown","optional":true},"exec_err_state":{"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.","description_kind":"markdown","optional":true},"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 `0`.","description_kind":"markdown","optional":true},"is_paused":{"type":"bool","description":"Sets whether the alert should be paused or not. Defaults to `false`.","description_kind":"markdown","optional":true},"keep_firing_for":{"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.","description_kind":"markdown","optional":true},"labels":{"type":["map","string"],"description":"Key-value pairs to attach to the alert rule that can be used in matching, grouping, and routing. Defaults to `map[]`.","description_kind":"markdown","optional":true},"missing_series_evals_to_resolve":{"type":"number","description":"The number of missing series evaluations that must occur before the rule is considered to be resolved.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"The name of the alert rule.","description_kind":"markdown","required":true},"no_data_state":{"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.","description_kind":"markdown","optional":true},"uid":{"type":"string","description":"The unique identifier of the alert rule.","description_kind":"markdown","optional":true,"computed":true}},"block_types":{"data":{"nesting_mode":"list","block":{"attributes":{"datasource_uid":{"type":"string","description":"The UID of the datasource being queried, or \"-100\" if this stage is an expression stage.","description_kind":"markdown","required":true},"model":{"type":"string","description":"Custom JSON data to send to the specified datasource when querying.","description_kind":"markdown","required":true},"query_type":{"type":"string","description":"An optional identifier for the type of query being executed. Defaults to ``.","description_kind":"markdown","optional":true},"ref_id":{"type":"string","description":"A unique string to identify this query stage within a rule.","description_kind":"markdown","required":true}},"block_types":{"relative_time_range":{"nesting_mode":"list","block":{"attributes":{"from":{"type":"number","description":"The number of seconds in the past, relative to when the rule is evaluated, at which the time range begins.","description_kind":"markdown","required":true},"to":{"type":"number","description":"The number of seconds in the past, relative to when the rule is evaluated, at which the time range ends.","description_kind":"markdown","required":true}},"description":"The time range, relative to when the query is executed, across which to query.","description_kind":"markdown"},"min_items":1,"max_items":1}},"description":"A sequence of stages that describe the contents of the rule.","description_kind":"markdown"},"min_items":1},"notification_settings":{"nesting_mode":"list","block":{"attributes":{"active_timings":{"type":["list","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","description_kind":"markdown","optional":true},"contact_point":{"type":"string","description":"The contact point to route notifications that match this rule to.","description_kind":"markdown","required":true},"group_by":{"type":["list","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.","description_kind":"markdown","optional":true},"group_interval":{"type":"string","description":"Minimum time interval between two notifications for the same group. Default is 5 minutes.","description_kind":"markdown","optional":true},"group_wait":{"type":"string","description":"Time to wait to buffer alerts of the same group before sending a notification. Default is 30 seconds.","description_kind":"markdown","optional":true},"mute_timings":{"type":["list","string"],"description":"A list of mute timing names to apply to alerts that match this policy.","description_kind":"markdown","optional":true},"repeat_interval":{"type":"string","description":"Minimum time interval for re-sending a notification if an alert is still firing. Default is 4 hours.","description_kind":"markdown","optional":true}},"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.","description_kind":"markdown"},"max_items":1},"record":{"nesting_mode":"list","block":{"attributes":{"from":{"type":"string","description":"The ref id of the query node in the data field to use as the source of the metric.","description_kind":"markdown","required":true},"metric":{"type":"string","description":"The name of the metric to write to.","description_kind":"markdown","required":true},"target_datasource_uid":{"type":"string","description":"The UID of the datasource to write the metric to.","description_kind":"markdown","optional":true}},"description":"Settings for a recording rule. Available since Grafana 11.2, requires feature flag 'grafanaManagedRecordingRules' to be enabled.","description_kind":"markdown"},"max_items":1}},"description":"The rules within the group.","description_kind":"markdown"},"min_items":1}},"description":"\nManages Grafana Alerting rule groups.\n\n* [Official documentation](https://grafana.com/docs/grafana/latest/alerting/set-up/provision-alerting-resources/terraform-provisioning/)\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","description_kind":"markdown"}},"grafana_scim_config":{"version":0,"block":{"attributes":{"enable_group_sync":{"type":"bool","description":"Whether group synchronization is enabled.","description_kind":"markdown","required":true},"enable_user_sync":{"type":"bool","description":"Whether user synchronization is enabled.","description_kind":"markdown","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"reject_non_provisioned_users":{"type":"bool","description":"Whether to block non-provisioned user access to Grafana. Cloud Portal users will always be able to access Grafana, regardless of this setting.","description_kind":"markdown","required":true}},"description":"\n**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","description_kind":"markdown"}},"grafana_service_account":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"is_disabled":{"type":"bool","description":"The disabled status for the service account. Defaults to `false`.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"The name of the service account.","description_kind":"markdown","required":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"role":{"type":"string","description":"The basic role of the service account in the organization.","description_kind":"markdown","required":true}},"description":"\n**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)","description_kind":"markdown"}},"grafana_service_account_permission":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"service_account_id":{"type":"string","description":"The id of the service account.","description_kind":"markdown","required":true}},"block_types":{"permissions":{"nesting_mode":"set","block":{"attributes":{"permission":{"type":"string","description":"Permission to associate with item. Must be one of `View`, `Edit`, or `Admin`.","description_kind":"markdown","required":true},"team_id":{"type":"string","description":"ID of the team to manage permissions for. Defaults to `0`.","description_kind":"markdown","optional":true},"user_id":{"type":"string","description":"ID of the user or service account to manage permissions for. Defaults to `0`.","description_kind":"markdown","optional":true}},"description":"The permission items to add/update. Items that are omitted from the list will be removed.","description_kind":"markdown"}}},"description":"\nManages 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)","description_kind":"markdown"}},"grafana_service_account_permission_item":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","computed":true},"org_id":{"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.","description_kind":"plain","optional":true,"computed":true},"permission":{"type":"string","description":"the permission to be assigned","description_kind":"plain","required":true},"service_account_id":{"type":"string","description":"The ID of the service account.","description_kind":"plain","required":true},"team":{"type":"string","description":"the team onto which the permission is to be assigned","description_kind":"plain","optional":true},"user":{"type":"string","description":"the user or service account onto which the permission is to be assigned","description_kind":"plain","optional":true}},"description":"Manages a single permission item for a service account. Conflicts with the \"grafana_service_account_permission\" 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)","description_kind":"markdown"}},"grafana_service_account_token":{"version":0,"block":{"attributes":{"expiration":{"type":"string","description":"The expiration date of the service account token.","description_kind":"markdown","computed":true},"has_expired":{"type":"bool","description":"The status of the service account token.","description_kind":"markdown","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"key":{"type":"string","description":"The key of the service account token.","description_kind":"markdown","computed":true,"sensitive":true},"name":{"type":"string","description":"The name of the service account token.","description_kind":"markdown","required":true},"seconds_to_live":{"type":"number","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 `api_key_max_seconds_to_live` configuration option is set) the key will never expire.","description_kind":"markdown","optional":true},"service_account_id":{"type":"string","description":"The ID of the service account to which the token belongs.","description_kind":"markdown","required":true}},"description":"\n**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)","description_kind":"markdown"}},"grafana_slo":{"version":0,"block":{"attributes":{"description":{"type":"string","description":"Description is a free-text field that can provide more context to an SLO.","description_kind":"markdown","required":true},"folder_uid":{"type":"string","description":"UID for the SLO folder","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Name should be a short description of your indicator. Consider names like \"API Availability\"","description_kind":"markdown","required":true},"search_expression":{"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.","description_kind":"markdown","optional":true}},"block_types":{"alerting":{"nesting_mode":"list","block":{"block_types":{"advanced_options":{"nesting_mode":"list","block":{"attributes":{"min_failures":{"type":"number","description":"Minimum number of failed events to trigger an alert","description_kind":"markdown","optional":true}},"description":"Advanced Options for Alert Rules","description_kind":"markdown"},"max_items":1},"annotation":{"nesting_mode":"list","block":{"attributes":{"key":{"type":"string","description":"Key for filtering and identification","description_kind":"markdown","required":true},"value":{"type":"string","description":"Templatable value","description_kind":"markdown","required":true}},"description":"Annotations will be attached to all alerts generated by any of these rules.","description_kind":"markdown"}},"fastburn":{"nesting_mode":"list","block":{"block_types":{"annotation":{"nesting_mode":"list","block":{"attributes":{"key":{"type":"string","description":"Key for filtering and identification","description_kind":"markdown","required":true},"value":{"type":"string","description":"Templatable value","description_kind":"markdown","required":true}},"description":"Annotations to attach only to Fast Burn alerts.","description_kind":"markdown"}},"label":{"nesting_mode":"list","block":{"attributes":{"key":{"type":"string","description":"Key for filtering and identification","description_kind":"markdown","required":true},"value":{"type":"string","description":"Templatable value","description_kind":"markdown","required":true}},"description":"Labels to attach only to Fast Burn alerts.","description_kind":"markdown"}}},"description":"Alerting Rules generated for Fast Burn alerts","description_kind":"markdown"},"max_items":1},"label":{"nesting_mode":"list","block":{"attributes":{"key":{"type":"string","description":"Key for filtering and identification","description_kind":"markdown","required":true},"value":{"type":"string","description":"Templatable value","description_kind":"markdown","required":true}},"description":"Labels will be attached to all alerts generated by any of these rules.","description_kind":"markdown"}},"slowburn":{"nesting_mode":"list","block":{"block_types":{"annotation":{"nesting_mode":"list","block":{"attributes":{"key":{"type":"string","description":"Key for filtering and identification","description_kind":"markdown","required":true},"value":{"type":"string","description":"Templatable value","description_kind":"markdown","required":true}},"description":"Annotations to attach only to Slow Burn alerts.","description_kind":"markdown"}},"label":{"nesting_mode":"list","block":{"attributes":{"key":{"type":"string","description":"Key for filtering and identification","description_kind":"markdown","required":true},"value":{"type":"string","description":"Templatable value","description_kind":"markdown","required":true}},"description":"Labels to attach only to Slow Burn alerts.","description_kind":"markdown"}}},"description":"Alerting Rules generated for Slow Burn alerts","description_kind":"markdown"},"max_items":1}},"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.","description_kind":"markdown"},"max_items":1},"destination_datasource":{"nesting_mode":"list","block":{"attributes":{"uid":{"type":"string","description":"UID for the Datasource","description_kind":"markdown","required":true}},"description":"Destination Datasource sets the datasource defined for an SLO","description_kind":"markdown"},"min_items":1,"max_items":1},"label":{"nesting_mode":"list","block":{"attributes":{"key":{"type":"string","description":"Key for filtering and identification","description_kind":"markdown","required":true},"value":{"type":"string","description":"Templatable value","description_kind":"markdown","required":true}},"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_]*$\"","description_kind":"markdown"}},"objectives":{"nesting_mode":"list","block":{"attributes":{"value":{"type":"number","description":"Value between 0 and 1. If the value of the query is above the objective, the SLO is met.","description_kind":"markdown","required":true},"window":{"type":"string","description":"A Prometheus-parsable time duration string like 24h, 60m. This is the time window the objective is measured over.","description_kind":"markdown","required":true}},"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.","description_kind":"markdown"},"min_items":1},"query":{"nesting_mode":"list","block":{"attributes":{"type":{"type":"string","description":"Query type must be one of: \"freeform\", \"query\", \"ratio\", \"grafana_queries\" or \"threshold\"","description_kind":"markdown","required":true}},"block_types":{"freeform":{"nesting_mode":"list","block":{"attributes":{"query":{"type":"string","description":"Freeform Query Field - valid promQl","description_kind":"markdown","required":true}},"description_kind":"plain"},"max_items":1},"grafana_queries":{"nesting_mode":"list","block":{"attributes":{"grafana_queries":{"type":"string","description":"Query Object - Array of Grafana Query JSON objects","description_kind":"markdown","required":true}},"description":"Array for holding a set of grafana queries","description_kind":"markdown"},"max_items":1},"ratio":{"nesting_mode":"list","block":{"attributes":{"group_by_labels":{"type":["list","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_]*$\"","description_kind":"markdown","optional":true},"success_metric":{"type":"string","description":"Counter metric for success events (numerator)","description_kind":"markdown","required":true},"total_metric":{"type":"string","description":"Metric for total events (denominator)","description_kind":"markdown","required":true}},"description_kind":"plain"},"max_items":1}},"description":"Query describes the indicator that will be measured against the objective. Freeform Query types are currently supported.","description_kind":"markdown"},"min_items":1}},"description":"\nResource manages Grafana SLOs.\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\t\t","description_kind":"markdown"}},"grafana_sso_settings":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"provider_name":{"type":"string","description":"The name of the SSO provider. Supported values: github, gitlab, google, azuread, okta, generic_oauth, saml, ldap.","description_kind":"markdown","required":true}},"block_types":{"ldap_settings":{"nesting_mode":"set","block":{"attributes":{"allow_sign_up":{"type":"bool","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.","description_kind":"markdown","optional":true},"enabled":{"type":"bool","description":"Define whether this configuration is enabled for LDAP. Defaults to `true`.","description_kind":"markdown","optional":true},"skip_org_role_sync":{"type":"bool","description":"Prevent synchronizing users’ organization roles from LDAP.","description_kind":"markdown","optional":true}},"block_types":{"config":{"nesting_mode":"list","block":{"block_types":{"servers":{"nesting_mode":"list","block":{"attributes":{"attributes":{"type":["map","string"],"description":"The LDAP server attributes. The following attributes can be configured: email, member_of, name, surname, username.","description_kind":"markdown","optional":true},"bind_dn":{"type":"string","description":"The search user bind DN.","description_kind":"markdown","optional":true},"bind_password":{"type":"string","description":"The search user bind password.","description_kind":"markdown","optional":true,"sensitive":true},"client_cert":{"type":"string","description":"The path to the client certificate.","description_kind":"markdown","optional":true},"client_cert_value":{"type":"string","description":"The Base64 encoded value of the client certificate.","description_kind":"markdown","optional":true},"client_key":{"type":"string","description":"The path to the client private key.","description_kind":"markdown","optional":true,"sensitive":true},"client_key_value":{"type":"string","description":"The Base64 encoded value of the client private key.","description_kind":"markdown","optional":true,"sensitive":true},"group_search_base_dns":{"type":["list","string"],"description":"An array of the base DNs to search through for groups. Typically uses ou=groups.","description_kind":"markdown","optional":true},"group_search_filter":{"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).","description_kind":"markdown","optional":true},"group_search_filter_user_attribute":{"type":"string","description":"The %s in the search filter will be replaced with the attribute defined in this field.","description_kind":"markdown","optional":true},"host":{"type":"string","description":"The LDAP server host.","description_kind":"markdown","required":true},"min_tls_version":{"type":"string","description":"Minimum TLS version allowed. Accepted values are: TLS1.2, TLS1.3.","description_kind":"markdown","optional":true},"port":{"type":"number","description":"The LDAP server port.","description_kind":"markdown","optional":true},"root_ca_cert":{"type":"string","description":"The path to the root CA certificate.","description_kind":"markdown","optional":true},"root_ca_cert_value":{"type":["list","string"],"description":"The Base64 encoded values of the root CA certificates.","description_kind":"markdown","optional":true},"search_base_dns":{"type":["list","string"],"description":"An array of base DNs to search through.","description_kind":"markdown","required":true},"search_filter":{"type":"string","description":"The user search filter, for example \"(cn=%s)\" or \"(sAMAccountName=%s)\" or \"(uid=%s)\".","description_kind":"markdown","required":true},"ssl_skip_verify":{"type":"bool","description":"If set to true, the SSL cert validation will be skipped.","description_kind":"markdown","optional":true},"start_tls":{"type":"bool","description":"If set to true, use LDAP with STARTTLS instead of LDAPS.","description_kind":"markdown","optional":true},"timeout":{"type":"number","description":"The timeout in seconds for connecting to the LDAP host.","description_kind":"markdown","optional":true},"tls_ciphers":{"type":["list","string"],"description":"Accepted TLS ciphers. For a complete list of supported ciphers, refer to: https://go.dev/src/crypto/tls/cipher_suites.go.","description_kind":"markdown","optional":true},"use_ssl":{"type":"bool","description":"Set to true if LDAP server should use an encrypted TLS connection (either with STARTTLS or LDAPS).","description_kind":"markdown","optional":true}},"block_types":{"group_mappings":{"nesting_mode":"list","block":{"attributes":{"grafana_admin":{"type":"bool","description":"If set to true, it makes the user of group_dn Grafana server admin.","description_kind":"markdown","optional":true},"group_dn":{"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 (\"*\").","description_kind":"markdown","required":true},"org_id":{"type":"number","description":"The Grafana organization database id.","description_kind":"markdown","optional":true},"org_role":{"type":"string","description":"Assign users of group_dn the organization role Admin, Editor, or Viewer.","description_kind":"markdown","required":true}},"description":"For mapping an LDAP group to a Grafana organization and role.","description_kind":"markdown"}}},"description":"The LDAP servers configuration.","description_kind":"markdown"},"min_items":1}},"description":"The LDAP configuration.","description_kind":"markdown"},"min_items":1,"max_items":1}},"description":"The LDAP settings set. Required for the ldap provider.","description_kind":"markdown"},"max_items":1},"oauth2_settings":{"nesting_mode":"set","block":{"attributes":{"allow_assign_grafana_admin":{"type":"bool","description":"If enabled, it will automatically sync the Grafana server administrator role.","description_kind":"markdown","optional":true},"allow_sign_up":{"type":"bool","description":"If not enabled, only existing Grafana users can log in using OAuth.","description_kind":"markdown","optional":true},"allowed_domains":{"type":"string","description":"List of comma- or space-separated domains. The user should belong to at least one domain to log in.","description_kind":"markdown","optional":true},"allowed_groups":{"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.","description_kind":"markdown","optional":true},"allowed_organizations":{"type":"string","description":"List of comma- or space-separated organizations. The user should be a member of at least one organization to log in.","description_kind":"markdown","optional":true},"api_url":{"type":"string","description":"The user information endpoint of your OAuth2 provider. Required for okta and generic_oauth providers.","description_kind":"markdown","optional":true},"auth_style":{"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.","description_kind":"markdown","optional":true},"auth_url":{"type":"string","description":"The authorization endpoint of your OAuth2 provider. Required for azuread, okta and generic_oauth providers.","description_kind":"markdown","optional":true},"auto_login":{"type":"bool","description":"Log in automatically, skipping the login screen.","description_kind":"markdown","optional":true},"client_id":{"type":"string","description":"The client Id of your OAuth2 app.","description_kind":"markdown","required":true},"client_secret":{"type":"string","description":"The client secret of your OAuth2 app.","description_kind":"markdown","optional":true,"sensitive":true},"custom":{"type":["map","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.","description_kind":"markdown","optional":true},"define_allowed_groups":{"type":"bool","description":"Define allowed groups.","description_kind":"markdown","optional":true},"define_allowed_teams_ids":{"type":"bool","description":"Define allowed teams ids.","description_kind":"markdown","optional":true},"email_attribute_name":{"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.","description_kind":"markdown","optional":true},"email_attribute_path":{"type":"string","description":"JMESPath expression to use for user email lookup from the user information. Only applicable to Generic OAuth.","description_kind":"markdown","optional":true},"empty_scopes":{"type":"bool","description":"If enabled, no scopes will be sent to the OAuth2 provider.","description_kind":"markdown","optional":true},"enabled":{"type":"bool","description":"Define whether this configuration is enabled for the specified provider. Defaults to `true`.","description_kind":"markdown","optional":true},"groups_attribute_path":{"type":"string","description":"JMESPath expression to use for user group lookup. If you configure allowed_groups, you must also configure groups_attribute_path.","description_kind":"markdown","optional":true},"id_token_attribute_name":{"type":"string","description":"The name of the key used to extract the ID token from the returned OAuth2 token. Only applicable to Generic OAuth.","description_kind":"markdown","optional":true},"login_attribute_path":{"type":"string","description":"JMESPath expression to use for user login lookup from the user ID token. Only applicable to Generic OAuth.","description_kind":"markdown","optional":true},"login_prompt":{"type":"string","description":"Indicates the type of user interaction when the user logs in with the IdP. Available values are `login`, `consent` and `select_account`.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"Helpful if you use more than one identity providers or SSO protocols.","description_kind":"markdown","optional":true},"name_attribute_path":{"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.","description_kind":"markdown","optional":true},"org_attribute_path":{"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 \"org_mapping\"). Only applicable to Generic OAuth and Okta.","description_kind":"markdown","optional":true},"org_mapping":{"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.","description_kind":"markdown","optional":true},"role_attribute_path":{"type":"string","description":"JMESPath expression to use for Grafana role lookup.","description_kind":"markdown","optional":true},"role_attribute_strict":{"type":"bool","description":"If enabled, denies user login if the Grafana role cannot be extracted using Role attribute path.","description_kind":"markdown","optional":true},"scopes":{"type":"string","description":"List of comma- or space-separated OAuth2 scopes.","description_kind":"markdown","optional":true},"signout_redirect_url":{"type":"string","description":"The URL to redirect the user to after signing out from Grafana.","description_kind":"markdown","optional":true},"skip_org_role_sync":{"type":"bool","description":"Prevent synchronizing users’ organization roles from your IdP.","description_kind":"markdown","optional":true},"team_ids":{"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.","description_kind":"markdown","optional":true},"team_ids_attribute_path":{"type":"string","description":"The JMESPath expression to use for Grafana Team Id lookup within the results returned by the teams_url endpoint. Only applicable to Generic OAuth.","description_kind":"markdown","optional":true},"teams_url":{"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.","description_kind":"markdown","optional":true},"tls_client_ca":{"type":"string","description":"The path to the trusted certificate authority list. Is not applicable on Grafana Cloud.","description_kind":"markdown","optional":true},"tls_client_cert":{"type":"string","description":"The path to the certificate. Is not applicable on Grafana Cloud.","description_kind":"markdown","optional":true},"tls_client_key":{"type":"string","description":"The path to the key. Is not applicable on Grafana Cloud.","description_kind":"markdown","optional":true},"tls_skip_verify_insecure":{"type":"bool","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.","description_kind":"markdown","optional":true},"token_url":{"type":"string","description":"The token endpoint of your OAuth2 provider. Required for azuread, okta and generic_oauth providers.","description_kind":"markdown","optional":true},"use_pkce":{"type":"bool","description":"If enabled, Grafana will use Proof Key for Code Exchange (PKCE) with the OAuth2 Authorization Code Grant.","description_kind":"markdown","optional":true},"use_refresh_token":{"type":"bool","description":"If enabled, Grafana will fetch a new access token using the refresh token provided by the OAuth2 provider.","description_kind":"markdown","optional":true}},"description":"The OAuth2 settings set. Required for github, gitlab, google, azuread, okta, generic_oauth providers.","description_kind":"markdown"},"max_items":1},"saml_settings":{"nesting_mode":"set","block":{"attributes":{"allow_idp_initiated":{"type":"bool","description":"Whether SAML IdP-initiated login is allowed.","description_kind":"markdown","optional":true},"allow_sign_up":{"type":"bool","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.","description_kind":"markdown","optional":true},"allowed_organizations":{"type":"string","description":"List of comma- or space-separated organizations. User should be a member of at least one organization to log in.","description_kind":"markdown","optional":true},"assertion_attribute_email":{"type":"string","description":"Friendly name or name of the attribute within the SAML assertion to use as the user email.","description_kind":"markdown","optional":true},"assertion_attribute_groups":{"type":"string","description":"Friendly name or name of the attribute within the SAML assertion to use as the user groups.","description_kind":"markdown","optional":true},"assertion_attribute_login":{"type":"string","description":"Friendly name or name of the attribute within the SAML assertion to use as the user login handle.","description_kind":"markdown","optional":true},"assertion_attribute_name":{"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.","description_kind":"markdown","optional":true},"assertion_attribute_org":{"type":"string","description":"Friendly name or name of the attribute within the SAML assertion to use as the user organization.","description_kind":"markdown","optional":true},"assertion_attribute_role":{"type":"string","description":"Friendly name or name of the attribute within the SAML assertion to use as the user roles.","description_kind":"markdown","optional":true},"auto_login":{"type":"bool","description":"Whether SAML auto login is enabled.","description_kind":"markdown","optional":true},"certificate":{"type":"string","description":"Base64-encoded string for the SP X.509 certificate.","description_kind":"markdown","optional":true,"sensitive":true},"certificate_path":{"type":"string","description":"Path for the SP X.509 certificate.","description_kind":"markdown","optional":true},"client_id":{"type":"string","description":"The client Id of your OAuth2 app.","description_kind":"markdown","optional":true},"client_secret":{"type":"string","description":"The client secret of your OAuth2 app.","description_kind":"markdown","optional":true},"enabled":{"type":"bool","description":"Define whether this configuration is enabled for SAML. Defaults to `true`.","description_kind":"markdown","optional":true},"entity_id":{"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.","description_kind":"markdown","optional":true},"force_use_graph_api":{"type":"bool","description":"If enabled, Grafana will fetch groups from Microsoft Graph API instead of using the groups claim from the ID token.","description_kind":"markdown","optional":true},"idp_metadata":{"type":"string","description":"Base64-encoded string for the IdP SAML metadata XML.","description_kind":"markdown","optional":true},"idp_metadata_path":{"type":"string","description":"Path for the IdP SAML metadata XML.","description_kind":"markdown","optional":true},"idp_metadata_url":{"type":"string","description":"URL for the IdP SAML metadata XML.","description_kind":"markdown","optional":true},"max_issue_delay":{"type":"string","description":"Duration, since the IdP issued a response and the SP is allowed to process it. For example: 90s, 1h.","description_kind":"markdown","optional":true},"metadata_valid_duration":{"type":"string","description":"Duration, for how long the SP metadata is valid. For example: 48h, 5d.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"Name used to refer to the SAML authentication.","description_kind":"markdown","optional":true},"name_id_format":{"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","description_kind":"markdown","optional":true},"org_mapping":{"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.","description_kind":"markdown","optional":true},"private_key":{"type":"string","description":"Base64-encoded string for the SP private key.","description_kind":"markdown","optional":true,"sensitive":true},"private_key_path":{"type":"string","description":"Path for the SP private key.","description_kind":"markdown","optional":true},"relay_state":{"type":"string","description":"Relay state for IdP-initiated login. Should match relay state configured in IdP.","description_kind":"markdown","optional":true},"role_values_admin":{"type":"string","description":"List of comma- or space-separated roles which will be mapped into the Admin role.","description_kind":"markdown","optional":true},"role_values_editor":{"type":"string","description":"List of comma- or space-separated roles which will be mapped into the Editor role.","description_kind":"markdown","optional":true},"role_values_grafana_admin":{"type":"string","description":"List of comma- or space-separated roles which will be mapped into the Grafana Admin (Super Admin) role.","description_kind":"markdown","optional":true},"role_values_none":{"type":"string","description":"List of comma- or space-separated roles which will be mapped into the None role.","description_kind":"markdown","optional":true},"role_values_viewer":{"type":"string","description":"List of comma- or space-separated roles which will be mapped into the Viewer role.","description_kind":"markdown","optional":true},"signature_algorithm":{"type":"string","description":"Signature algorithm used for signing requests to the IdP. Supported values are rsa-sha1, rsa-sha256, rsa-sha512.","description_kind":"markdown","optional":true},"single_logout":{"type":"bool","description":"Whether SAML Single Logout is enabled.","description_kind":"markdown","optional":true},"skip_org_role_sync":{"type":"bool","description":"Prevent synchronizing users’ organization roles from your IdP.","description_kind":"markdown","optional":true},"token_url":{"type":"string","description":"The token endpoint of your OAuth2 provider. Required for Azure AD providers.","description_kind":"markdown","optional":true}},"description":"The SAML settings set. Required for the saml provider.","description_kind":"markdown"},"max_items":1}},"description":"\nManages 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","description_kind":"markdown"}},"grafana_synthetic_monitoring_check":{"version":0,"block":{"attributes":{"alert_sensitivity":{"type":"string","description":"Can be set to `none`, `low`, `medium`, or `high` to correspond to the check [alert levels](https://grafana.com/docs/grafana-cloud/testing/synthetic-monitoring/configure-alerts/synthetic-monitoring-alerting/). Defaults to `none`.","description_kind":"markdown","optional":true},"basic_metrics_only":{"type":"bool","description":"Metrics are reduced by default. Set this to `false` 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 `true`.","description_kind":"markdown","optional":true},"enabled":{"type":"bool","description":"Whether to enable the check. Defaults to `true`.","description_kind":"markdown","optional":true},"frequency":{"type":"number","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 `60000`.","description_kind":"markdown","optional":true},"id":{"type":"string","description":"The ID of the check.","description_kind":"markdown","computed":true},"job":{"type":"string","description":"Name used for job label.","description_kind":"markdown","required":true},"labels":{"type":["map","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.","description_kind":"markdown","optional":true},"probes":{"type":["set","number"],"description":"List of probe location IDs where this target will be checked from.","description_kind":"markdown","required":true},"target":{"type":"string","description":"Hostname to ping.","description_kind":"markdown","required":true},"tenant_id":{"type":"number","description":"The tenant ID of the check.","description_kind":"markdown","computed":true},"timeout":{"type":"number","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 `3000`.","description_kind":"markdown","optional":true}},"block_types":{"settings":{"nesting_mode":"set","block":{"block_types":{"browser":{"nesting_mode":"set","block":{"attributes":{"script":{"type":"string","description_kind":"plain","required":true}},"description":"Settings for browser check. See https://grafana.com/docs/grafana-cloud/testing/synthetic-monitoring/create-checks/checks/k6-browser/.","description_kind":"markdown"},"max_items":1},"dns":{"nesting_mode":"set","block":{"attributes":{"ip_version":{"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`.","description_kind":"markdown","optional":true},"port":{"type":"number","description":"Port to target. Defaults to `53`.","description_kind":"markdown","optional":true},"protocol":{"type":"string","description":"`TCP` or `UDP`. Defaults to `UDP`.","description_kind":"markdown","optional":true},"record_type":{"type":"string","description":"One of `ANY`, `A`, `AAAA`, `CNAME`, `MX`, `NS`, `PTR`, `SOA`, `SRV`, `TXT`. Defaults to `A`.","description_kind":"markdown","optional":true},"server":{"type":"string","description":"DNS server address to target. Defaults to `8.8.8.8`.","description_kind":"markdown","optional":true},"source_ip_address":{"type":"string","description":"Source IP address.","description_kind":"markdown","optional":true},"valid_r_codes":{"type":["set","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`.","description_kind":"markdown","optional":true}},"block_types":{"validate_additional_rrs":{"nesting_mode":"set","block":{"attributes":{"fail_if_matches_regexp":{"type":["set","string"],"description":"Fail if value matches regex.","description_kind":"markdown","optional":true},"fail_if_not_matches_regexp":{"type":["set","string"],"description":"Fail if value does not match regex.","description_kind":"markdown","optional":true}},"description":"Validate additional matches.","description_kind":"markdown"}},"validate_answer_rrs":{"nesting_mode":"set","block":{"attributes":{"fail_if_matches_regexp":{"type":["set","string"],"description":"Fail if value matches regex.","description_kind":"markdown","optional":true},"fail_if_not_matches_regexp":{"type":["set","string"],"description":"Fail if value does not match regex.","description_kind":"markdown","optional":true}},"description":"Validate response answer.","description_kind":"markdown"},"max_items":1},"validate_authority_rrs":{"nesting_mode":"set","block":{"attributes":{"fail_if_matches_regexp":{"type":["set","string"],"description":"Fail if value matches regex.","description_kind":"markdown","optional":true},"fail_if_not_matches_regexp":{"type":["set","string"],"description":"Fail if value does not match regex.","description_kind":"markdown","optional":true}},"description":"Validate response authority.","description_kind":"markdown"},"max_items":1}},"description":"Settings for DNS check. The target must be a valid hostname (or IP address for `PTR` records).","description_kind":"markdown"},"max_items":1},"grpc":{"nesting_mode":"set","block":{"attributes":{"ip_version":{"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`.","description_kind":"markdown","optional":true},"service":{"type":"string","description":"gRPC service.","description_kind":"markdown","optional":true},"tls":{"type":"bool","description":"Whether or not TLS is used when the connection is initiated. Defaults to `false`.","description_kind":"markdown","optional":true}},"block_types":{"tls_config":{"nesting_mode":"set","block":{"attributes":{"ca_cert":{"type":"string","description":"CA certificate in PEM format.","description_kind":"markdown","optional":true},"client_cert":{"type":"string","description":"Client certificate in PEM format.","description_kind":"markdown","optional":true},"client_key":{"type":"string","description":"Client key in PEM format.","description_kind":"markdown","optional":true,"sensitive":true},"insecure_skip_verify":{"type":"bool","description":"Disable target certificate validation. Defaults to `false`.","description_kind":"markdown","optional":true},"server_name":{"type":"string","description":"Used to verify the hostname for the targets.","description_kind":"markdown","optional":true}},"description":"TLS config.","description_kind":"markdown"},"max_items":1}},"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.","description_kind":"markdown"},"max_items":1},"http":{"nesting_mode":"set","block":{"attributes":{"bearer_token":{"type":"string","description":"Token for use with bearer authorization header.","description_kind":"markdown","optional":true,"sensitive":true},"body":{"type":"string","description":"The body of the HTTP request used in probe.","description_kind":"markdown","optional":true},"cache_busting_query_param_name":{"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.","description_kind":"markdown","optional":true},"compression":{"type":"string","description":"Check fails if the response body is not compressed using this compression algorithm. One of `none`, `identity`, `br`, `gzip`, `deflate`.","description_kind":"markdown","optional":true},"fail_if_body_matches_regexp":{"type":["set","string"],"description":"List of regexes. If any match the response body, the check will fail.","description_kind":"markdown","optional":true},"fail_if_body_not_matches_regexp":{"type":["set","string"],"description":"List of regexes. If any do not match the response body, the check will fail.","description_kind":"markdown","optional":true},"fail_if_not_ssl":{"type":"bool","description":"Fail if SSL is not present. Defaults to `false`.","description_kind":"markdown","optional":true},"fail_if_ssl":{"type":"bool","description":"Fail if SSL is present. Defaults to `false`.","description_kind":"markdown","optional":true},"headers":{"type":["set","string"],"description":"The HTTP headers set for the probe.","description_kind":"markdown","optional":true},"ip_version":{"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`.","description_kind":"markdown","optional":true},"method":{"type":"string","description":"Request method. One of `GET`, `CONNECT`, `DELETE`, `HEAD`, `OPTIONS`, `POST`, `PUT`, `TRACE` Defaults to `GET`.","description_kind":"markdown","optional":true},"no_follow_redirects":{"type":"bool","description":"Do not follow redirects. Defaults to `false`.","description_kind":"markdown","optional":true},"proxy_connect_headers":{"type":["set","string"],"description":"The HTTP headers sent to the proxy URL","description_kind":"markdown","optional":true},"proxy_url":{"type":"string","description":"Proxy URL.","description_kind":"markdown","optional":true},"valid_http_versions":{"type":["set","string"],"description":"List of valid HTTP versions. Options include `HTTP/1.0`, `HTTP/1.1`, `HTTP/2.0`","description_kind":"markdown","optional":true},"valid_status_codes":{"type":["set","number"],"description":"Accepted status codes. If unset, defaults to 2xx.","description_kind":"markdown","optional":true}},"block_types":{"basic_auth":{"nesting_mode":"set","block":{"attributes":{"password":{"type":"string","description":"Basic auth password.","description_kind":"markdown","required":true,"sensitive":true},"username":{"type":"string","description":"Basic auth username.","description_kind":"markdown","required":true}},"description":"Basic auth settings.","description_kind":"markdown"},"max_items":1},"fail_if_header_matches_regexp":{"nesting_mode":"set","block":{"attributes":{"allow_missing":{"type":"bool","description":"Allow header to be missing from responses. Defaults to `false`.","description_kind":"markdown","optional":true},"header":{"type":"string","description":"Header name.","description_kind":"markdown","required":true},"regexp":{"type":"string","description":"Regex that header value should match.","description_kind":"markdown","required":true}},"description":"Check fails if headers match.","description_kind":"markdown"}},"fail_if_header_not_matches_regexp":{"nesting_mode":"set","block":{"attributes":{"allow_missing":{"type":"bool","description":"Allow header to be missing from responses. Defaults to `false`.","description_kind":"markdown","optional":true},"header":{"type":"string","description":"Header name.","description_kind":"markdown","required":true},"regexp":{"type":"string","description":"Regex that header value should match.","description_kind":"markdown","required":true}},"description":"Check fails if headers do not match.","description_kind":"markdown"}},"tls_config":{"nesting_mode":"set","block":{"attributes":{"ca_cert":{"type":"string","description":"CA certificate in PEM format.","description_kind":"markdown","optional":true},"client_cert":{"type":"string","description":"Client certificate in PEM format.","description_kind":"markdown","optional":true},"client_key":{"type":"string","description":"Client key in PEM format.","description_kind":"markdown","optional":true,"sensitive":true},"insecure_skip_verify":{"type":"bool","description":"Disable target certificate validation. Defaults to `false`.","description_kind":"markdown","optional":true},"server_name":{"type":"string","description":"Used to verify the hostname for the targets.","description_kind":"markdown","optional":true}},"description":"TLS config.","description_kind":"markdown"},"max_items":1}},"description":"Settings for HTTP check. The target must be a URL (http or https).","description_kind":"markdown"},"max_items":1},"multihttp":{"nesting_mode":"set","block":{"block_types":{"entries":{"nesting_mode":"list","block":{"block_types":{"assertions":{"nesting_mode":"list","block":{"attributes":{"condition":{"type":"string","description":"The condition of the assertion: NOT_CONTAINS, EQUALS, STARTS_WITH, ENDS_WITH, TYPE_OF, CONTAINS","description_kind":"markdown","optional":true},"expression":{"type":"string","description":"The expression of the assertion. Should start with $.","description_kind":"markdown","optional":true},"subject":{"type":"string","description":"The subject of the assertion: RESPONSE_HEADERS, HTTP_STATUS_CODE, RESPONSE_BODY","description_kind":"markdown","optional":true},"type":{"type":"string","description":"The type of assertion to make: TEXT, JSON_PATH_VALUE, JSON_PATH_ASSERTION, REGEX_ASSERTION","description_kind":"markdown","required":true},"value":{"type":"string","description":"The value of the assertion","description_kind":"markdown","optional":true}},"description":"Assertions to make on the request response","description_kind":"markdown"}},"request":{"nesting_mode":"set","block":{"attributes":{"method":{"type":"string","description":"The HTTP method to use","description_kind":"markdown","required":true},"url":{"type":"string","description":"The URL for the request","description_kind":"markdown","required":true}},"block_types":{"body":{"nesting_mode":"set","block":{"attributes":{"content_encoding":{"type":"string","description":"The content encoding of the body","description_kind":"markdown","optional":true},"content_type":{"type":"string","description":"The content type of the body","description_kind":"markdown","optional":true},"payload":{"type":"string","description":"The body payload","description_kind":"markdown","optional":true}},"description":"The body of the HTTP request used in probe.","description_kind":"markdown"}},"headers":{"nesting_mode":"set","block":{"attributes":{"name":{"type":"string","description":"Name of the header to send","description_kind":"markdown","required":true},"value":{"type":"string","description":"Value of the header to send","description_kind":"markdown","required":true}},"description":"The headers to send with the request","description_kind":"markdown"}},"query_fields":{"nesting_mode":"set","block":{"attributes":{"name":{"type":"string","description":"Name of the query field to send","description_kind":"markdown","required":true},"value":{"type":"string","description":"Value of the query field to send","description_kind":"markdown","required":true}},"description":"Query fields to send with the request","description_kind":"markdown"}}},"description":"An individual MultiHTTP request","description_kind":"markdown"},"max_items":1},"variables":{"nesting_mode":"list","block":{"attributes":{"attribute":{"type":"string","description":"The attribute to use when finding the variable value. Only used when type is CSS_SELECTOR","description_kind":"markdown","optional":true},"expression":{"type":"string","description":"The expression to when finding the variable. Should start with $. Only use when type is JSON_PATH or REGEX","description_kind":"markdown","optional":true},"name":{"type":"string","description":"The name of the variable to extract","description_kind":"markdown","optional":true},"type":{"type":"string","description":"The method of finding the variable value to extract. JSON_PATH, REGEX, CSS_SELECTOR","description_kind":"markdown","required":true}},"description":"Variables to extract from the request response","description_kind":"markdown"}}},"description_kind":"plain"}}},"description":"Settings for MultiHTTP check. The target must be a URL (http or https)","description_kind":"markdown"},"max_items":1},"ping":{"nesting_mode":"set","block":{"attributes":{"dont_fragment":{"type":"bool","description":"Set the DF-bit in the IP-header. Only works with ipV4. Defaults to `false`.","description_kind":"markdown","optional":true},"ip_version":{"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`.","description_kind":"markdown","optional":true},"payload_size":{"type":"number","description":"Payload size. Defaults to `0`.","description_kind":"markdown","optional":true},"source_ip_address":{"type":"string","description":"Source IP address.","description_kind":"markdown","optional":true}},"description":"Settings for ping (ICMP) check. The target must be a valid hostname or IP address.","description_kind":"markdown"},"max_items":1},"scripted":{"nesting_mode":"set","block":{"attributes":{"script":{"type":"string","description_kind":"plain","required":true}},"description":"Settings for scripted check. See https://grafana.com/docs/grafana-cloud/testing/synthetic-monitoring/create-checks/checks/k6/.","description_kind":"markdown"},"max_items":1},"tcp":{"nesting_mode":"set","block":{"attributes":{"ip_version":{"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`.","description_kind":"markdown","optional":true},"source_ip_address":{"type":"string","description":"Source IP address.","description_kind":"markdown","optional":true},"tls":{"type":"bool","description":"Whether or not TLS is used when the connection is initiated. Defaults to `false`.","description_kind":"markdown","optional":true}},"block_types":{"query_response":{"nesting_mode":"set","block":{"attributes":{"expect":{"type":"string","description":"Response to expect.","description_kind":"markdown","required":true},"send":{"type":"string","description":"Data to send.","description_kind":"markdown","required":true},"start_tls":{"type":"bool","description":"Upgrade TCP connection to TLS. Defaults to `false`.","description_kind":"markdown","optional":true}},"description":"The query sent in the TCP probe and the expected associated response.","description_kind":"markdown"}},"tls_config":{"nesting_mode":"set","block":{"attributes":{"ca_cert":{"type":"string","description":"CA certificate in PEM format.","description_kind":"markdown","optional":true},"client_cert":{"type":"string","description":"Client certificate in PEM format.","description_kind":"markdown","optional":true},"client_key":{"type":"string","description":"Client key in PEM format.","description_kind":"markdown","optional":true,"sensitive":true},"insecure_skip_verify":{"type":"bool","description":"Disable target certificate validation. Defaults to `false`.","description_kind":"markdown","optional":true},"server_name":{"type":"string","description":"Used to verify the hostname for the targets.","description_kind":"markdown","optional":true}},"description":"TLS config.","description_kind":"markdown"},"max_items":1}},"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.","description_kind":"markdown"},"max_items":1},"traceroute":{"nesting_mode":"set","block":{"attributes":{"max_hops":{"type":"number","description":"Maximum TTL for the trace Defaults to `64`.","description_kind":"markdown","optional":true},"max_unknown_hops":{"type":"number","description":"Maximum number of hosts to travers that give no response Defaults to `15`.","description_kind":"markdown","optional":true},"ptr_lookup":{"type":"bool","description":"Reverse lookup hostnames from IP addresses Defaults to `true`.","description_kind":"markdown","optional":true}},"description":"Settings for traceroute check. The target must be a valid hostname or IP address","description_kind":"markdown"},"max_items":1}},"description":"Check settings. Should contain exactly one nested block.","description_kind":"markdown"},"min_items":1,"max_items":1}},"description":"\nSynthetic 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","description_kind":"markdown"}},"grafana_synthetic_monitoring_check_alerts":{"version":0,"block":{"attributes":{"alerts":{"type":["set",["object",{"name":"string","period":"string","threshold":"number"}]],"description":"List of alerts for the check.","description_kind":"markdown","required":true},"check_id":{"type":"number","description":"The ID of the check to manage alerts for.","description_kind":"markdown","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true}},"description":"\nManages 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/)","description_kind":"markdown"}},"grafana_synthetic_monitoring_installation":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"metrics_publisher_key":{"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.","description_kind":"markdown","required":true,"sensitive":true},"sm_access_token":{"type":"string","description":"Generated token to access the SM API.","description_kind":"markdown","computed":true},"stack_id":{"type":"string","description":"The ID or slug of the stack to install SM on.","description_kind":"markdown","required":true},"stack_sm_api_url":{"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.","description_kind":"markdown","optional":true,"computed":true}},"description":"\nSets 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","description_kind":"markdown"}},"grafana_synthetic_monitoring_probe":{"version":0,"block":{"attributes":{"auth_token":{"type":"string","description":"The probe authentication token. Your probe must use this to authenticate with Grafana Cloud.","description_kind":"markdown","computed":true,"sensitive":true},"disable_browser_checks":{"type":"bool","description":"Disables browser checks for this probe. Defaults to `false`.","description_kind":"markdown","optional":true},"disable_scripted_checks":{"type":"bool","description":"Disables scripted checks for this probe. Defaults to `false`.","description_kind":"markdown","optional":true},"id":{"type":"string","description":"The ID of the probe.","description_kind":"markdown","computed":true},"labels":{"type":["map","string"],"description":"Custom labels to be included with collected metrics and logs.","description_kind":"markdown","optional":true},"latitude":{"type":"number","description":"Latitude coordinates.","description_kind":"markdown","required":true},"longitude":{"type":"number","description":"Longitude coordinates.","description_kind":"markdown","required":true},"name":{"type":"string","description":"Name of the probe.","description_kind":"markdown","required":true},"public":{"type":"bool","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 `true`. Defaults to `false`.","description_kind":"markdown","optional":true},"region":{"type":"string","description":"Region of the probe.","description_kind":"markdown","required":true},"tenant_id":{"type":"number","description":"The tenant ID of the probe.","description_kind":"markdown","computed":true}},"description":"\nBesides 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","description_kind":"markdown"}},"grafana_team":{"version":0,"block":{"attributes":{"email":{"type":"string","description":"An email address for the team.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ignore_externally_synced_members":{"type":"bool","description":"Ignores team members that have been added to team by [Team Sync](https://grafana.com/docs/grafana/latest/setup-grafana/configure-security/configure-team-sync/).\nTeam Sync can be provisioned using [grafana_team_external_group resource](https://registry.terraform.io/providers/grafana/grafana/latest/docs/resources/team_external_group).\n Defaults to `true`.","description_kind":"markdown","optional":true},"members":{"type":["set","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.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"The display name for the Grafana team created.","description_kind":"markdown","required":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"team_id":{"type":"number","description":"The team id assigned to this team by Grafana.","description_kind":"markdown","computed":true},"team_uid":{"type":"string","description":"The team uid assigned to this team by Grafana.","description_kind":"markdown","computed":true}},"block_types":{"preferences":{"nesting_mode":"list","block":{"attributes":{"home_dashboard_uid":{"type":"string","description":"The UID of the dashboard to display when a team member logs in. Defaults to ``.","description_kind":"markdown","optional":true},"theme":{"type":"string","description":"The default theme for this team. Available themes are `light`, `dark`, `system`, or an empty string for the default theme. Defaults to ``.","description_kind":"markdown","optional":true},"timezone":{"type":"string","description":"The default timezone for this team. Available values are `utc`, `browser`, or an empty string for the default. Defaults to ``.","description_kind":"markdown","optional":true},"week_start":{"type":"string","description":"The default week start day for this team. Available values are `sunday`, `monday`, `saturday`, or an empty string for the default. Defaults to ``.","description_kind":"markdown","optional":true}},"description_kind":"plain"},"max_items":1},"team_sync":{"nesting_mode":"list","block":{"attributes":{"groups":{"type":["set","string"],"description_kind":"plain","optional":true}},"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/)","description_kind":"markdown"},"max_items":1}},"description":"\n* [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","description_kind":"markdown"}},"grafana_team_external_group":{"version":0,"block":{"attributes":{"groups":{"type":["set","string"],"description":"The team external groups list","description_kind":"markdown","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"team_id":{"type":"string","description":"The Team ID","description_kind":"markdown","required":true}},"description":"Equivalent to the the `team_sync` attribute of the `grafana_team` resource. Use one or the other to configure a team's external groups syncing config.","description_kind":"markdown"}},"grafana_user":{"version":0,"block":{"attributes":{"email":{"type":"string","description":"The email address of the Grafana user.","description_kind":"markdown","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"is_admin":{"type":"bool","description":"Whether to make user an admin. Defaults to `false`.","description_kind":"markdown","optional":true},"login":{"type":"string","description":"The username for the Grafana user.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"The display name for the Grafana user.","description_kind":"markdown","optional":true},"password":{"type":"string","description":"The password for the Grafana user.","description_kind":"markdown","required":true,"sensitive":true},"user_id":{"type":"number","description":"The numerical ID of the Grafana user.","description_kind":"markdown","computed":true}},"description":"\n* [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","description_kind":"markdown"}}},"data_source_schemas":{"grafana_cloud_access_policies":{"version":0,"block":{"attributes":{"access_policies":{"type":["set",["object",{"display_name":"string","id":"string","name":"string","region":"string","status":"string"}]],"description_kind":"plain","computed":true},"id":{"type":"string","description":"The ID of this datasource. This is an internal identifier used by the provider to track this datasource.","description_kind":"plain","computed":true},"name_filter":{"type":"string","description":"If set, only access policies with the specified name will be returned. This is faster than filtering in Terraform.","description_kind":"plain","optional":true},"region_filter":{"type":"string","description":"If set, only access policies in the specified region will be returned. This is faster than filtering in Terraform.","description_kind":"plain","optional":true}},"description":"\nFetches 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","description_kind":"markdown"}},"grafana_cloud_ips":{"version":0,"block":{"attributes":{"hosted_alerts":{"type":["set","string"],"description":"Set of IP addresses that are used for hosted alerts.","description_kind":"markdown","computed":true},"hosted_grafana":{"type":["set","string"],"description":"Set of IP addresses that are used for hosted Grafana.","description_kind":"markdown","computed":true},"hosted_logs":{"type":["set","string"],"description":"Set of IP addresses that are used for hosted logs.","description_kind":"markdown","computed":true},"hosted_metrics":{"type":["set","string"],"description":"Set of IP addresses that are used for hosted metrics.","description_kind":"markdown","computed":true},"hosted_profiles":{"type":["set","string"],"description":"Set of IP addresses that are used for hosted profiles.","description_kind":"markdown","computed":true},"hosted_traces":{"type":["set","string"],"description":"Set of IP addresses that are used for hosted traces.","description_kind":"markdown","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true}},"description":"Data source for retrieving sets of cloud IPs. See https://grafana.com/docs/grafana-cloud/reference/allow-list/ for more info","description_kind":"markdown"}},"grafana_cloud_organization":{"version":0,"block":{"attributes":{"created_at":{"type":"string","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description_kind":"plain","computed":true},"slug":{"type":"string","description_kind":"plain","optional":true,"computed":true},"updated_at":{"type":"string","description_kind":"plain","computed":true},"url":{"type":"string","description_kind":"plain","computed":true}},"description_kind":"plain"}},"grafana_cloud_private_data_source_connect_networks":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The ID of this datasource. This is an internal identifier used by the provider to track this datasource.","description_kind":"plain","computed":true},"name_filter":{"type":"string","description":"If set, only private data source connect networks with the specified name will be returned. This is faster than filtering in Terraform.","description_kind":"plain","optional":true},"private_data_source_connect_networks":{"type":["set",["object",{"display_name":"string","id":"string","name":"string","region":"string","status":"string"}]],"description_kind":"plain","computed":true},"region_filter":{"type":"string","description":"If set, only private data source connect networks in the specified region will be returned. This is faster than filtering in Terraform.","description_kind":"plain","optional":true}},"description":"\nFetches 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","description_kind":"markdown"}},"grafana_cloud_provider_aws_account":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The Terraform Resource ID. This has the format \"{{ stack_id }}:{{ resource_id }}\".","description_kind":"plain","computed":true},"name":{"type":"string","description":"An optional human-readable name for this AWS Account resource.","description_kind":"plain","computed":true},"regions":{"type":["set","string"],"description":"A set of regions that this AWS Account resource applies to.","description_kind":"plain","computed":true},"resource_id":{"type":"string","description":"The ID given by the Grafana Cloud Provider API to this AWS Account resource.","description_kind":"plain","required":true},"role_arn":{"type":"string","description":"An IAM Role ARN string to represent with this AWS Account resource.","description_kind":"plain","computed":true},"stack_id":{"type":"string","description":"The StackID of the Grafana Cloud instance. Part of the Terraform Resource ID.","description_kind":"plain","required":true}},"description_kind":"plain"}},"grafana_cloud_provider_aws_cloudwatch_scrape_job":{"version":0,"block":{"attributes":{"aws_account_resource_id":{"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 `resource_id` attribute of the `grafana_cloud_provider_aws_account` resource.","description_kind":"plain","computed":true},"disabled_reason":{"type":"string","description":"When the AWS CloudWatch Scrape Job is disabled, this will show the reason that it is in that state.","description_kind":"plain","computed":true},"enabled":{"type":"bool","description":"Whether the AWS CloudWatch Scrape Job is enabled or not.","description_kind":"plain","computed":true},"export_tags":{"type":"bool","description":"When enabled, AWS resource tags are exported as Prometheus labels to metrics formatted as `aws_\u003cservice_name\u003e_info`.","description_kind":"plain","computed":true},"id":{"type":"string","description":"The Terraform Resource ID. This has the format \"{{ stack_id }}:{{ name }}\".","description_kind":"plain","computed":true},"name":{"type":"string","description":"The name of the AWS CloudWatch Scrape Job. Part of the Terraform Resource ID.","description_kind":"plain","required":true},"regions":{"type":["set","string"],"description":"The set of AWS region names that this AWS CloudWatch Scrape Job is configured to scrape.","description_kind":"plain","computed":true},"regions_subset_override_used":{"type":"bool","description":"When true, the `regions` attribute will be the set of regions configured in the override. When false, the `regions` attribute will be the set of regions belonging to the AWS Account resource that is associated with this AWS CloudWatch Scrape Job.","description_kind":"plain","computed":true},"role_arn":{"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.","description_kind":"plain","computed":true},"stack_id":{"type":"string","description":"The Stack ID of the Grafana Cloud instance. Part of the Terraform Resource ID.","description_kind":"plain","required":true},"static_labels":{"type":["map","string"],"description":"A set of static labels to add to all metrics exported by this scrape job.","description_kind":"plain","computed":true}},"block_types":{"custom_namespace":{"nesting_mode":"list","block":{"attributes":{"name":{"type":"string","description":"The name of the custom namespace to scrape.","description_kind":"plain","computed":true},"scrape_interval_seconds":{"type":"number","description":"The interval in seconds to scrape the custom namespace.","description_kind":"plain","computed":true}},"block_types":{"metric":{"nesting_mode":"list","block":{"attributes":{"name":{"type":"string","description":"The name of the metric to scrape.","description_kind":"plain","computed":true},"statistics":{"type":["set","string"],"description":"A set of statistics to scrape.","description_kind":"plain","computed":true}},"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.","description_kind":"plain"}}},"description":"Zero or more configuration blocks to configure custom namespaces for the AWS CloudWatch Scrape Job to scrape. Each block must have a distinct `name` attribute. When accessing this as an attribute reference, it is a list of objects.","description_kind":"plain"}},"service":{"nesting_mode":"list","block":{"attributes":{"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.","description_kind":"plain","computed":true},"scrape_interval_seconds":{"type":"number","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.","description_kind":"plain","computed":true},"tags_to_add_to_metrics":{"type":["set","string"],"description":"A set of tags to add to all metrics exported by this scrape job, for use in PromQL queries.","description_kind":"plain","computed":true}},"block_types":{"metric":{"nesting_mode":"list","block":{"attributes":{"name":{"type":"string","description":"The name of the metric to scrape.","description_kind":"plain","computed":true},"statistics":{"type":["set","string"],"description":"A set of statistics to scrape.","description_kind":"plain","computed":true}},"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.","description_kind":"plain"}},"resource_discovery_tag_filter":{"nesting_mode":"list","block":{"attributes":{"key":{"type":"string","description":"The key of the tag filter.","description_kind":"plain","computed":true},"value":{"type":"string","description":"The value of the tag filter.","description_kind":"plain","computed":true}},"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.","description_kind":"plain"}}},"description":"One or more configuration blocks to dictate what this AWS CloudWatch Scrape Job should scrape. Each block must have a distinct `name` attribute. When accessing this as an attribute reference, it is a list of objects.","description_kind":"plain"}}},"description_kind":"plain"}},"grafana_cloud_provider_aws_cloudwatch_scrape_jobs":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The Terraform Resource ID. This has the format \"{{ stack_id }}\".","description_kind":"plain","computed":true},"stack_id":{"type":"string","description":"The Stack ID of the Grafana Cloud instance. Part of the Terraform Resource ID.","description_kind":"plain","required":true}},"block_types":{"scrape_job":{"nesting_mode":"list","block":{"attributes":{"aws_account_resource_id":{"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 `resource_id` attribute of the `grafana_cloud_provider_aws_account` resource.","description_kind":"plain","computed":true},"disabled_reason":{"type":"string","description":"When the AWS CloudWatch Scrape Job is disabled, this will show the reason that it is in that state.","description_kind":"plain","computed":true},"enabled":{"type":"bool","description":"Whether the AWS CloudWatch Scrape Job is enabled or not.","description_kind":"plain","computed":true},"export_tags":{"type":"bool","description":"When enabled, AWS resource tags are exported as Prometheus labels to metrics formatted as `aws_\u003cservice_name\u003e_info`.","description_kind":"plain","computed":true},"id":{"type":"string","description":"The Terraform Resource ID. This has the format \"{{ stack_id }}:{{ name }}\".","description_kind":"plain","computed":true},"name":{"type":"string","description":"The name of the AWS CloudWatch Scrape Job. Part of the Terraform Resource ID.","description_kind":"plain","computed":true},"regions":{"type":["set","string"],"description":"The set of AWS region names that this AWS CloudWatch Scrape Job is configured to scrape.","description_kind":"plain","computed":true},"regions_subset_override_used":{"type":"bool","description":"When true, the `regions` attribute will be the set of regions configured in the override. When false, the `regions` attribute will be the set of regions belonging to the AWS Account resource that is associated with this AWS CloudWatch Scrape Job.","description_kind":"plain","computed":true},"role_arn":{"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.","description_kind":"plain","computed":true},"stack_id":{"type":"string","description":"The Stack ID of the Grafana Cloud instance. Part of the Terraform Resource ID.","description_kind":"plain","computed":true},"static_labels":{"type":["map","string"],"description":"A set of static labels to add to all metrics exported by this scrape job.","description_kind":"plain","computed":true}},"block_types":{"custom_namespace":{"nesting_mode":"list","block":{"attributes":{"name":{"type":"string","description":"The name of the custom namespace to scrape.","description_kind":"plain","computed":true},"scrape_interval_seconds":{"type":"number","description":"The interval in seconds to scrape the custom namespace.","description_kind":"plain","computed":true}},"block_types":{"metric":{"nesting_mode":"list","block":{"attributes":{"name":{"type":"string","description":"The name of the metric to scrape.","description_kind":"plain","computed":true},"statistics":{"type":["set","string"],"description":"A set of statistics to scrape.","description_kind":"plain","computed":true}},"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.","description_kind":"plain"}}},"description":"Zero or more configuration blocks to configure custom namespaces for the AWS CloudWatch Scrape Job to scrape. Each block must have a distinct `name` attribute. When accessing this as an attribute reference, it is a list of objects.","description_kind":"plain"}},"service":{"nesting_mode":"list","block":{"attributes":{"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.","description_kind":"plain","computed":true},"scrape_interval_seconds":{"type":"number","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.","description_kind":"plain","computed":true},"tags_to_add_to_metrics":{"type":["set","string"],"description":"A set of tags to add to all metrics exported by this scrape job, for use in PromQL queries.","description_kind":"plain","computed":true}},"block_types":{"metric":{"nesting_mode":"list","block":{"attributes":{"name":{"type":"string","description":"The name of the metric to scrape.","description_kind":"plain","computed":true},"statistics":{"type":["set","string"],"description":"A set of statistics to scrape.","description_kind":"plain","computed":true}},"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.","description_kind":"plain"}},"resource_discovery_tag_filter":{"nesting_mode":"list","block":{"attributes":{"key":{"type":"string","description":"The key of the tag filter.","description_kind":"plain","computed":true},"value":{"type":"string","description":"The value of the tag filter.","description_kind":"plain","computed":true}},"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.","description_kind":"plain"}}},"description":"One or more configuration blocks to dictate what this AWS CloudWatch Scrape Job should scrape. Each block must have a distinct `name` attribute. When accessing this as an attribute reference, it is a list of objects.","description_kind":"plain"}}},"description":"A list of AWS CloudWatch Scrape Job objects associated with the given StackID.","description_kind":"plain"}}},"description_kind":"plain"}},"grafana_cloud_provider_azure_credential":{"version":0,"block":{"attributes":{"client_id":{"type":"string","description":"The client ID of the Azure Credential.","description_kind":"plain","computed":true},"client_secret":{"type":"string","description":"The client secret of the Azure Credential.","description_kind":"plain","computed":true,"sensitive":true},"id":{"type":"string","description":"The Terraform Resource ID. This has the format \"{{ stack_id }}:{{ resource_id }}\".","description_kind":"plain","computed":true},"name":{"type":"string","description":"The name of the Azure Credential.","description_kind":"plain","computed":true},"resource_id":{"type":"string","description":"The ID given by the Grafana Cloud Provider API to this Azure Credential resource.","description_kind":"plain","required":true},"resource_tags_to_add_to_metrics":{"type":["set","string"],"description":"The list of resource tags to add to metrics.","description_kind":"plain","computed":true},"stack_id":{"type":"string","description":"The StackID of the Grafana Cloud instance. Part of the Terraform Resource ID.","description_kind":"plain","required":true},"tenant_id":{"type":"string","description":"The tenant ID of the Azure Credential.","description_kind":"plain","computed":true}},"block_types":{"auto_discovery_configuration":{"nesting_mode":"list","block":{"attributes":{"resource_type_configurations":{"type":["list",["object",{"metric_configuration":["list",["object",{"aggregations":["list","string"],"dimensions":["list","string"],"name":"string"}]],"resource_type_name":"string"}]],"description":"The list of resource type configurations.","description_kind":"plain","computed":true},"subscription_id":{"type":"string","description":"The subscription ID of the Azure account.","description_kind":"plain","computed":true}},"description":"The list of auto discovery configurations.","description_kind":"plain"}},"resource_discovery_tag_filter":{"nesting_mode":"list","block":{"attributes":{"key":{"type":"string","description":"The key of the tag filter.","description_kind":"plain","computed":true},"value":{"type":"string","description":"The value of the tag filter.","description_kind":"plain","computed":true}},"description":"The list of tag filters to apply to resources.","description_kind":"plain"}}},"description_kind":"plain"}},"grafana_cloud_stack":{"version":0,"block":{"attributes":{"alertmanager_ip_allow_list_cname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the Alertmanager instances (Optional)","description_kind":"markdown","computed":true},"alertmanager_name":{"type":"string","description":"Name of the Alertmanager instance configured for this stack.","description_kind":"markdown","computed":true},"alertmanager_status":{"type":"string","description":"Status of the Alertmanager instance configured for this stack.","description_kind":"markdown","computed":true},"alertmanager_url":{"type":"string","description":"Base URL of the Alertmanager instance configured for this stack.","description_kind":"markdown","computed":true},"alertmanager_user_id":{"type":"number","description":"User ID of the Alertmanager instance configured for this stack.","description_kind":"markdown","computed":true},"cluster_slug":{"type":"string","description":"Slug of the cluster where this stack resides.","description_kind":"markdown","computed":true},"delete_protection":{"type":"bool","description":"Whether to enable delete protection for the stack, preventing accidental deletion.","description_kind":"markdown","computed":true},"description":{"type":"string","description":"Description of stack.","description_kind":"markdown","computed":true},"fleet_management_name":{"type":"string","description":"Name of the Fleet Management instance configured for this stack.","description_kind":"markdown","computed":true},"fleet_management_private_connectivity_info_private_dns":{"type":"string","description":"Private DNS for Fleet Management when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"fleet_management_private_connectivity_info_service_name":{"type":"string","description":"Service Name for Fleet Management when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"fleet_management_status":{"type":"string","description":"Status of the Fleet Management instance configured for this stack.","description_kind":"markdown","computed":true},"fleet_management_url":{"type":"string","description":"Base URL of the Fleet Management instance configured for this stack.","description_kind":"markdown","computed":true},"fleet_management_user_id":{"type":"number","description":"User ID of the Fleet Management instance configured for this stack.","description_kind":"markdown","computed":true},"grafanas_ip_allow_list_cname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the grafana instance (Optional)","description_kind":"markdown","computed":true},"graphite_ip_allow_list_cname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the Graphite instance (Optional)","description_kind":"markdown","computed":true},"graphite_name":{"type":"string","description_kind":"plain","computed":true},"graphite_private_connectivity_info_private_dns":{"type":"string","description":"Private DNS for Graphite when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"graphite_private_connectivity_info_service_name":{"type":"string","description":"Service Name for Graphite when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"graphite_status":{"type":"string","description_kind":"plain","computed":true},"graphite_url":{"type":"string","description_kind":"plain","computed":true},"graphite_user_id":{"type":"number","description_kind":"plain","computed":true},"id":{"type":"string","description":"The stack id assigned to this stack by Grafana.","description_kind":"markdown","computed":true},"influx_url":{"type":"string","description":"Base URL of the InfluxDB instance configured for this stack. The username is the same as the metrics' (`prometheus_user_id` 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.","description_kind":"markdown","computed":true},"labels":{"type":["map","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.","description_kind":"markdown","computed":true},"logs_ip_allow_list_cname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the Logs instance (Optional)","description_kind":"markdown","computed":true},"logs_name":{"type":"string","description_kind":"plain","computed":true},"logs_private_connectivity_info_private_dns":{"type":"string","description":"Private DNS for Logs when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"logs_private_connectivity_info_service_name":{"type":"string","description":"Service Name for Logs when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"logs_status":{"type":"string","description_kind":"plain","computed":true},"logs_url":{"type":"string","description_kind":"plain","computed":true},"logs_user_id":{"type":"number","description_kind":"plain","computed":true},"name":{"type":"string","description":"Name of stack. Conventionally matches the url of the instance (e.g. `\u003cstack_slug\u003e.grafana.net`).","description_kind":"markdown","computed":true},"oncall_api_url":{"type":"string","description":"Base URL of the OnCall API instance configured for this stack.","description_kind":"markdown","computed":true},"org_id":{"type":"number","description":"Organization id to assign to this stack.","description_kind":"markdown","computed":true},"org_name":{"type":"string","description":"Organization name to assign to this stack.","description_kind":"markdown","computed":true},"org_slug":{"type":"string","description":"Organization slug to assign to this stack.","description_kind":"markdown","computed":true},"otlp_private_connectivity_info_private_dns":{"type":"string","description":"Private DNS for OTLP when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"otlp_private_connectivity_info_service_name":{"type":"string","description":"Service Name for OTLP when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"otlp_url":{"type":"string","description":"Base URL of the OTLP instance configured for this stack. The username is the stack's ID (`id` attribute of this resource). See https://grafana.com/docs/grafana-cloud/send-data/otlp/send-data-otlp/ for docs on how to use this.","description_kind":"markdown","computed":true},"pdc_api_private_connectivity_info_private_dns":{"type":"string","description":"Private DNS for PDC's API when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"pdc_api_private_connectivity_info_service_name":{"type":"string","description":"Service Name for PDC's API when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"pdc_gateway_private_connectivity_info_private_dns":{"type":"string","description":"Private DNS for PDC's Gateway when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"pdc_gateway_private_connectivity_info_service_name":{"type":"string","description":"Service Name for PDC's Gateway when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"profiles_ip_allow_list_cname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the Profiles instance (Optional)","description_kind":"markdown","computed":true},"profiles_name":{"type":"string","description_kind":"plain","computed":true},"profiles_private_connectivity_info_private_dns":{"type":"string","description":"Private DNS for Profiles when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"profiles_private_connectivity_info_service_name":{"type":"string","description":"Service Name for Profiles when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"profiles_status":{"type":"string","description_kind":"plain","computed":true},"profiles_url":{"type":"string","description_kind":"plain","computed":true},"profiles_user_id":{"type":"number","description_kind":"plain","computed":true},"prometheus_ip_allow_list_cname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the Prometheus instance (Optional)","description_kind":"markdown","computed":true},"prometheus_name":{"type":"string","description":"Prometheus name for this instance.","description_kind":"markdown","computed":true},"prometheus_private_connectivity_info_private_dns":{"type":"string","description":"Private DNS for Prometheus when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"prometheus_private_connectivity_info_service_name":{"type":"string","description":"Service Name for Prometheus when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"prometheus_remote_endpoint":{"type":"string","description":"Use this URL to query hosted metrics data e.g. Prometheus data source in Grafana","description_kind":"markdown","computed":true},"prometheus_remote_write_endpoint":{"type":"string","description":"Use this URL to send prometheus metrics to Grafana cloud","description_kind":"markdown","computed":true},"prometheus_status":{"type":"string","description":"Prometheus status for this instance.","description_kind":"markdown","computed":true},"prometheus_url":{"type":"string","description":"Prometheus url for this instance.","description_kind":"markdown","computed":true},"prometheus_user_id":{"type":"number","description":"Prometheus user ID. Used for e.g. remote_write.","description_kind":"markdown","computed":true},"region_slug":{"type":"string","description":"The region this stack is deployed to.","description_kind":"markdown","computed":true},"slug":{"type":"string","description":"Subdomain that the Grafana instance will be available at (i.e. setting slug to “\u003cstack_slug\u003e” will make the instance\navailable at “https://\u003cstack_slug\u003e.grafana.net\".","description_kind":"markdown","required":true},"status":{"type":"string","description":"Status of the stack.","description_kind":"markdown","computed":true},"traces_ip_allow_list_cname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the Traces instance (Optional)","description_kind":"markdown","computed":true},"traces_name":{"type":"string","description_kind":"plain","computed":true},"traces_private_connectivity_info_private_dns":{"type":"string","description":"Private DNS for Traces when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"traces_private_connectivity_info_service_name":{"type":"string","description":"Service Name for Traces when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"traces_status":{"type":"string","description_kind":"plain","computed":true},"traces_url":{"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.","description_kind":"markdown","computed":true},"traces_user_id":{"type":"number","description_kind":"plain","computed":true},"url":{"type":"string","description":"Custom URL for the Grafana instance. Must have a CNAME setup to point to `.grafana.net` before creating the stack","description_kind":"markdown","computed":true}},"description":"Data source for Grafana Stack","description_kind":"markdown"}},"grafana_connections_metrics_endpoint_scrape_job":{"version":0,"block":{"attributes":{"authentication_basic_password":{"type":"string","description":"Password for basic authentication.","description_kind":"plain","computed":true,"sensitive":true},"authentication_basic_username":{"type":"string","description":"Username for basic authentication.","description_kind":"plain","computed":true},"authentication_bearer_token":{"type":"string","description":"Token for authentication bearer.","description_kind":"plain","computed":true,"sensitive":true},"authentication_method":{"type":"string","description":"Method to pass authentication credentials: basic or bearer.","description_kind":"plain","computed":true},"enabled":{"type":"bool","description":"Whether the metrics endpoint scrape job is enabled or not.","description_kind":"plain","computed":true},"id":{"type":"string","description":"The Terraform Resource ID. This has the format \"{{ stack_id }}:{{ name }}\".","description_kind":"plain","computed":true},"name":{"type":"string","description":"The name of the Metrics Endpoint Scrape Job. Part of the Terraform Resource ID.","description_kind":"plain","required":true},"scrape_interval_seconds":{"type":"number","description":"Frequency for scraping the metrics endpoint: 30, 60, or 120 seconds.","description_kind":"plain","computed":true},"stack_id":{"type":"string","description":"The Stack ID of the Grafana Cloud instance. Part of the Terraform Resource ID.","description_kind":"plain","required":true},"url":{"type":"string","description":"The url to scrape metrics.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"grafana_dashboard":{"version":1,"block":{"attributes":{"config_json":{"type":"string","description":"The complete dashboard model JSON.","description_kind":"markdown","computed":true},"dashboard_id":{"type":"number","description":"The numerical ID of the Grafana dashboard. Specify either this or `uid`. Defaults to `-1`.","description_kind":"markdown","optional":true},"folder_uid":{"type":"string","description":"The UID of the folder where the Grafana dashboard is found.","description_kind":"markdown","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"is_starred":{"type":"bool","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.","description_kind":"markdown","computed":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"slug":{"type":"string","description":"URL slug of the dashboard (deprecated).","description_kind":"markdown","computed":true},"title":{"type":"string","description":"The title of the Grafana dashboard.","description_kind":"markdown","computed":true},"uid":{"type":"string","description":"The uid of the Grafana dashboard. Specify either this or `dashboard_id`. Defaults to ``.","description_kind":"markdown","optional":true},"url":{"type":"string","description":"The full URL of the dashboard.","description_kind":"markdown","computed":true},"version":{"type":"number","description":"The numerical version of the Grafana dashboard.","description_kind":"markdown","computed":true}},"description":"\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","description_kind":"markdown"}},"grafana_dashboards":{"version":0,"block":{"attributes":{"dashboards":{"type":["list",["object",{"folder_title":"string","title":"string","uid":"string"}]],"description_kind":"plain","computed":true},"folder_uids":{"type":["list","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.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"limit":{"type":"number","description":"Maximum number of dashboard search results to return. Defaults to `5000`.","description_kind":"markdown","optional":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"tags":{"type":["list","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.","description_kind":"markdown","optional":true}},"description":"\nDatasource 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","description_kind":"markdown"}},"grafana_data_source":{"version":1,"block":{"attributes":{"access_mode":{"type":"string","description":"The method by which Grafana will access the data source: `proxy` or `direct`.","description_kind":"markdown","computed":true},"basic_auth_enabled":{"type":"bool","description":"Whether to enable basic auth for the data source.","description_kind":"markdown","computed":true},"basic_auth_username":{"type":"string","description":"Basic auth username.","description_kind":"markdown","computed":true},"database_name":{"type":"string","description":"(Required by some data source types) The name of the database to use on the selected data source server.","description_kind":"markdown","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"is_default":{"type":"bool","description":"Whether to set the data source as default. This should only be `true` to a single data source.","description_kind":"markdown","computed":true},"json_data_encoded":{"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.","description_kind":"markdown","computed":true},"name":{"type":"string","description_kind":"plain","optional":true,"computed":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"private_data_source_connect_network_id":{"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.","description_kind":"markdown","computed":true},"type":{"type":"string","description":"The data source type. Must be one of the supported data source keywords.","description_kind":"markdown","computed":true},"uid":{"type":"string","description_kind":"plain","optional":true,"computed":true},"url":{"type":"string","description":"The URL for the data source. The type of URL required varies depending on the chosen data source type.","description_kind":"markdown","computed":true},"username":{"type":"string","description":"(Required by some data source types) The username to use to authenticate to the data source.","description_kind":"markdown","computed":true}},"description":"Get details about a Grafana Datasource querying by either name, uid or ID","description_kind":"markdown"}},"grafana_fleet_management_collector":{"version":0,"block":{"attributes":{"enabled":{"type":"bool","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","description_kind":"plain","computed":true},"id":{"type":"string","description":"ID of the collector","description_kind":"plain","required":true},"local_attributes":{"type":["map","string"],"description":"Local attributes for the collector","description_kind":"plain","computed":true},"remote_attributes":{"type":["map","string"],"description":"Remote attributes for the collector","description_kind":"plain","computed":true}},"description":"\nRepresents 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\nRequired access policy scopes:\n\n* fleet-management:read\n","description_kind":"plain"}},"grafana_fleet_management_collectors":{"version":0,"block":{"attributes":{"collectors":{"type":["list",["object",{"enabled":"bool","id":"string","local_attributes":["map","string"],"remote_attributes":["map","string"]}]],"description":"List of collectors","description_kind":"plain","computed":true}},"description":"\nRepresents 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\nRequired access policy scopes:\n\n* fleet-management:read\n","description_kind":"plain"}},"grafana_folder":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"parent_folder_uid":{"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.","description_kind":"markdown","computed":true},"title":{"type":"string","description":"The title of the folder. If not set, only the uid is used to find the folder.","description_kind":"markdown","optional":true},"uid":{"type":"string","description":"The uid of the folder. If not set, only the title of the folder is used to find the folder.","description_kind":"markdown","optional":true,"computed":true},"url":{"type":"string","description":"The full URL of the folder.","description_kind":"markdown","computed":true}},"description":"\n* [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","description_kind":"markdown"}},"grafana_folders":{"version":0,"block":{"attributes":{"folders":{"type":["set",["object",{"id":"number","title":"string","uid":"string","url":"string"}]],"description":"The Grafana instance's folders.","description_kind":"markdown","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true}},"description":"\n* [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","description_kind":"markdown"}},"grafana_frontend_o11y_app":{"version":0,"block":{"attributes":{"allowed_origins":{"type":["list","string"],"description":"A list of allowed origins for CORS.","description_kind":"plain","computed":true},"collector_endpoint":{"type":"string","description":"The collector URL Grafana Cloud Frontend Observability. Use this endpoint to send your Telemetry.","description_kind":"plain","computed":true},"extra_log_attributes":{"type":["map","string"],"description":"The extra attributes to append in each signal.","description_kind":"plain","computed":true},"id":{"type":"number","description":"The Terraform Resource ID. This auto-generated from Frontend Observability API.","description_kind":"plain","computed":true},"name":{"type":"string","description":"The name of the Frontend Observability App. Part of the Terraform Resource ID.","description_kind":"plain","required":true},"settings":{"type":["map","string"],"description":"The settings of the Frontend Observability App.","description_kind":"plain","computed":true},"stack_id":{"type":"number","description":"The Stack ID of the Grafana Cloud instance. Part of the Terraform Resource ID.","description_kind":"plain","required":true}},"description_kind":"plain"}},"grafana_k6_load_test":{"version":1,"block":{"attributes":{"baseline_test_run_id":{"type":"string","description":"Identifier of a baseline test run used for results comparison.","description_kind":"plain","computed":true},"created":{"type":"string","description":"The date when the load test was created.","description_kind":"plain","computed":true},"id":{"type":"string","description":"Numeric identifier of the load test.","description_kind":"plain","required":true},"name":{"type":"string","description":"Human-friendly identifier of the load test.","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"The identifier of the project this load test belongs to.","description_kind":"plain","computed":true},"script":{"type":"string","description":"The k6 test script content.","description_kind":"plain","computed":true},"updated":{"type":"string","description":"The date when the load test was last updated.","description_kind":"plain","computed":true}},"description":"Retrieves a k6 load test.","description_kind":"plain"}},"grafana_k6_load_tests":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The identifier of the project the load tests belong to. This is set to the same as the project_id.","description_kind":"plain","computed":true},"load_tests":{"type":["list",["object",{"baseline_test_run_id":"string","created":"string","id":"string","name":"string","project_id":"string","script":"string","updated":"string"}]],"description_kind":"plain","computed":true},"name":{"type":"string","description":"Human-friendly identifier of the load test.","description_kind":"plain","optional":true},"project_id":{"type":"string","description":"The identifier of the project the load tests belong to.","description_kind":"plain","required":true}},"description":"Retrieves all k6 load tests that belong to a project.","description_kind":"plain"}},"grafana_k6_project":{"version":1,"block":{"attributes":{"created":{"type":"string","description":"The date when the project was created.","description_kind":"plain","computed":true},"grafana_folder_uid":{"type":"string","description":"The Grafana folder uid.","description_kind":"plain","computed":true},"id":{"type":"string","description":"Numeric identifier of the project.","description_kind":"plain","required":true},"is_default":{"type":"bool","description":"Whether this project is the default for running tests when no explicit project identifier is provided.","description_kind":"plain","computed":true},"name":{"type":"string","description":"Human-friendly identifier of the project.","description_kind":"plain","computed":true},"updated":{"type":"string","description":"The date when the project was last updated.","description_kind":"plain","computed":true}},"description":"Retrieves a k6 project.","description_kind":"plain"}},"grafana_k6_project_allowed_load_zones":{"version":0,"block":{"attributes":{"allowed_load_zones":{"type":["list","string"],"description":"List of allowed private k6 load zone IDs for this project.","description_kind":"plain","computed":true},"id":{"type":"string","description":"The identifier of the project. This is set to the same as the project_id.","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"The identifier of the project to retrieve private allowed load zones for.","description_kind":"plain","required":true}},"description":"Retrieves allowed private load zones for a k6 project.","description_kind":"plain"}},"grafana_k6_project_limits":{"version":1,"block":{"attributes":{"duration_max_per_test":{"type":"number","description":"Maximum duration of a test in seconds.","description_kind":"plain","computed":true},"id":{"type":"string","description":"The identifier of the project limits. This is set to the same as the project_id.","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"The identifier of the project to get limits for.","description_kind":"plain","required":true},"vu_browser_max_per_test":{"type":"number","description":"Maximum number of concurrent browser virtual users (VUs) used in one test.","description_kind":"plain","computed":true},"vu_max_per_test":{"type":"number","description":"Maximum number of concurrent virtual users (VUs) used in one test.","description_kind":"plain","computed":true},"vuh_max_per_month":{"type":"number","description":"Maximum amount of virtual user hours (VU/h) used per one calendar month.","description_kind":"plain","computed":true}},"description":"Retrieves a k6 project limits.","description_kind":"plain"}},"grafana_k6_projects":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"Human-friendly identifier of the project. This is set to the same as name.","description_kind":"plain","computed":true},"name":{"type":"string","description":"Human-friendly identifier of the project.","description_kind":"plain","optional":true},"projects":{"type":["list",["object",{"created":"string","grafana_folder_uid":"string","id":"string","is_default":"bool","name":"string","updated":"string"}]],"description_kind":"plain","computed":true}},"description":"Retrieves all k6 projects with the given name.","description_kind":"plain"}},"grafana_k6_schedule":{"version":0,"block":{"attributes":{"created_by":{"type":"string","description":"The email of the user who created the schedule.","description_kind":"plain","computed":true},"deactivated":{"type":"bool","description":"Whether the schedule is deactivated.","description_kind":"plain","computed":true},"id":{"type":"string","description":"Numeric identifier of the schedule.","description_kind":"plain","computed":true},"load_test_id":{"type":"string","description":"The identifier of the load test to retrieve the schedule for.","description_kind":"plain","required":true},"next_run":{"type":"string","description":"The next scheduled execution time.","description_kind":"plain","computed":true},"starts":{"type":"string","description":"The start time for the schedule (RFC3339 format).","description_kind":"plain","computed":true}},"block_types":{"recurrence_rule":{"nesting_mode":"single","block":{"attributes":{"byday":{"type":["list","string"],"description":"The weekdays when the 'WEEKLY' recurrence will be applied (e.g., ['MO', 'WE', 'FR']). Cannot be set for other frequencies.","description_kind":"plain","computed":true},"count":{"type":"number","description":"How many times the recurrence will repeat.","description_kind":"plain","computed":true},"frequency":{"type":"string","description":"The frequency of the schedule (HOURLY, DAILY, WEEKLY, MONTHLY).","description_kind":"plain","computed":true},"interval":{"type":"number","description":"The interval between each frequency iteration (e.g., 2 = every 2 hours for HOURLY).","description_kind":"plain","computed":true},"until":{"type":"string","description":"The end time for the recurrence (RFC3339 format).","description_kind":"plain","computed":true}},"description":"The schedule recurrence settings. If null, the test will run only once on the starts date.","description_kind":"plain"}}},"description":"Retrieves a k6 schedule.","description_kind":"plain"}},"grafana_k6_schedules":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The identifier for this data source.","description_kind":"plain","computed":true},"schedules":{"type":["list",["object",{"created_by":"string","deactivated":"bool","id":"string","load_test_id":"string","next_run":"string","recurrence_rule":["object",{"byday":["list","string"],"count":"number","frequency":"string","interval":"number","until":"string"}],"starts":"string"}]],"description":"List of k6 schedules.","description_kind":"plain","computed":true}},"description":"Retrieves all k6 schedules.","description_kind":"plain"}},"grafana_library_panel":{"version":0,"block":{"attributes":{"created":{"type":"string","description":"Timestamp when the library panel was created.","description_kind":"markdown","computed":true},"dashboard_ids":{"type":["list","number"],"description":"Numerical IDs of Grafana dashboards containing the library panel.","description_kind":"markdown","computed":true},"description":{"type":"string","description":"Description of the library panel.","description_kind":"markdown","computed":true},"folder_name":{"type":"string","description":"Name of the folder containing the library panel.","description_kind":"markdown","computed":true},"folder_uid":{"type":"string","description":"Unique ID (UID) of the folder containing the library panel.","description_kind":"markdown","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"model_json":{"type":"string","description":"The JSON model for the library panel.","description_kind":"markdown","computed":true},"name":{"type":"string","description":"Name of the library panel.","description_kind":"markdown","optional":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"panel_id":{"type":"number","description":"The numeric ID of the library panel computed by Grafana.","description_kind":"markdown","computed":true},"type":{"type":"string","description":"Type of the library panel (eg. text).","description_kind":"markdown","computed":true},"uid":{"type":"string","description":"The unique identifier (UID) of the library panel.","description_kind":"markdown","optional":true},"updated":{"type":"string","description":"Timestamp when the library panel was last modified.","description_kind":"markdown","computed":true},"version":{"type":"number","description":"Version of the library panel.","description_kind":"markdown","computed":true}},"description":"Data source for retrieving a single library panel by name or uid.","description_kind":"markdown"}},"grafana_library_panels":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","computed":true},"org_id":{"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.","description_kind":"plain","optional":true,"computed":true},"panels":{"type":["set",["object",{"description":"string","folder_uid":"string","model_json":"string","name":"string","uid":"string"}]],"description_kind":"plain","computed":true}},"description_kind":"plain"}},"grafana_oncall_escalation_chain":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The escalation chain name.","description_kind":"markdown","required":true}},"description":"\n* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/escalation_chains/)\n","description_kind":"markdown"}},"grafana_oncall_integration":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The integration ID.","description_kind":"markdown","required":true},"link":{"type":"string","description":"The link for the integration.","description_kind":"markdown","computed":true},"name":{"type":"string","description":"The integration name.","description_kind":"markdown","computed":true}},"description":"\n* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/integrations/)\n","description_kind":"markdown"}},"grafana_oncall_label":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The ID of the label.","description_kind":"plain","computed":true},"key":{"type":"string","description":"The key for the label.","description_kind":"plain","required":true},"value":{"type":"string","description":"The value of the label.","description_kind":"plain","required":true}},"description":"* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/users/)","description_kind":"markdown"}},"grafana_oncall_outgoing_webhook":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The outgoing webhook name.","description_kind":"markdown","required":true}},"description":"\n* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/outgoing_webhooks/)\n","description_kind":"markdown"}},"grafana_oncall_schedule":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The schedule name.","description_kind":"markdown","required":true},"type":{"type":"string","description":"The schedule type.","description_kind":"markdown","computed":true}},"description":"\n* [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","description_kind":"markdown"}},"grafana_oncall_slack_channel":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The Slack channel name.","description_kind":"markdown","required":true},"slack_id":{"type":"string","description":"The Slack ID of the channel.","description_kind":"markdown","computed":true}},"description":"\n* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/slack_channels/)\n","description_kind":"markdown"}},"grafana_oncall_team":{"version":0,"block":{"attributes":{"avatar_url":{"type":"string","description_kind":"plain","computed":true},"email":{"type":"string","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The team name.","description_kind":"markdown","required":true}},"description_kind":"plain"}},"grafana_oncall_user":{"version":0,"block":{"attributes":{"email":{"type":"string","description":"The email of the user.","description_kind":"plain","computed":true},"id":{"type":"string","description":"The ID of the user.","description_kind":"plain","computed":true},"role":{"type":"string","description":"The role of the user.","description_kind":"plain","computed":true},"username":{"type":"string","description":"The username of the user.","description_kind":"plain","required":true}},"description":"* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/users/)","description_kind":"markdown"}},"grafana_oncall_user_group":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"slack_handle":{"type":"string","description_kind":"plain","required":true},"slack_id":{"type":"string","description_kind":"plain","computed":true}},"description":"\n* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/user_groups/)\n","description_kind":"markdown"}},"grafana_oncall_users":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","computed":true},"users":{"type":["list",["object",{"email":"string","id":"string","role":"string","username":"string"}]],"description_kind":"plain","computed":true}},"description":"* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/users/)","description_kind":"markdown"}},"grafana_organization":{"version":0,"block":{"attributes":{"admins":{"type":["set","string"],"description":"A list of email addresses corresponding to users given admin access to the organization.","description_kind":"markdown","computed":true},"editors":{"type":["set","string"],"description":"A list of email addresses corresponding to users given editor access to the organization.","description_kind":"markdown","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The name of the Organization.","description_kind":"markdown","required":true},"viewers":{"type":["set","string"],"description":"A list of email addresses corresponding to users given viewer access to the organization.","description_kind":"markdown","computed":true}},"description":"\n* [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","description_kind":"markdown"}},"grafana_organization_preferences":{"version":0,"block":{"attributes":{"home_dashboard_uid":{"type":"string","description":"The Organization home dashboard UID. This is only available in Grafana 9.0+.","description_kind":"markdown","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"theme":{"type":"string","description":"The Organization theme. Available values are `light`, `dark`, `system`, or an empty string for the default.","description_kind":"markdown","computed":true},"timezone":{"type":"string","description":"The Organization timezone. Available values are `utc`, `browser`, or an empty string for the default.","description_kind":"markdown","computed":true},"week_start":{"type":"string","description":"The Organization week start day. Available values are `sunday`, `monday`, `saturday`, or an empty string for the default.","description_kind":"markdown","computed":true}},"description":"\n* [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","description_kind":"markdown"}},"grafana_organization_user":{"version":0,"block":{"attributes":{"email":{"type":"string","description":"The email address of the Grafana user. Defaults to ``.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"login":{"type":"string","description":"The username of the Grafana user. Defaults to ``.","description_kind":"markdown","optional":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"user_id":{"type":"number","description":"The numerical ID of the Grafana user.","description_kind":"markdown","computed":true}},"description":"\n* [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","description_kind":"markdown"}},"grafana_role":{"version":0,"block":{"attributes":{"description":{"type":"string","description":"Description of the role.","description_kind":"markdown","computed":true},"display_name":{"type":"string","description":"Display name of the role. Available with Grafana 8.5+.","description_kind":"markdown","computed":true},"global":{"type":"bool","description":"Boolean to state whether the role is available across all organizations or not.","description_kind":"markdown","computed":true},"group":{"type":"string","description":"Group of the role. Available with Grafana 8.5+.","description_kind":"markdown","computed":true},"hidden":{"type":"bool","description":"Boolean to state whether the role should be visible in the Grafana UI or not. Available with Grafana 8.5+.","description_kind":"markdown","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Name of the role","description_kind":"markdown","required":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","computed":true},"permissions":{"type":["set",["object",{"action":"string","scope":"string"}]],"description":"Specific set of actions granted by the role.","description_kind":"markdown","computed":true},"uid":{"type":"string","description":"Unique identifier of the role. Used for assignments.","description_kind":"markdown","computed":true},"version":{"type":"number","description":"Version of the role. A role is updated only on version increase. This field or `auto_increment_version` should be set.","description_kind":"markdown","computed":true}},"description":"\n**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","description_kind":"markdown"}},"grafana_service_account":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"is_disabled":{"type":"bool","description":"The disabled status for the service account.","description_kind":"markdown","computed":true},"name":{"type":"string","description":"The name of the Service Account.","description_kind":"markdown","required":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"role":{"type":"string","description":"The basic role of the service account in the organization.","description_kind":"markdown","computed":true}},"description":"\n\t\t* [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","description_kind":"markdown"}},"grafana_slos":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"slos":{"type":["list",["object",{"alerting":["list",["object",{"advanced_options":["list",["object",{"min_failures":"number"}]],"annotation":["list",["object",{"key":"string","value":"string"}]],"fastburn":["list",["object",{"annotation":["list",["object",{"key":"string","value":"string"}]],"label":["list",["object",{"key":"string","value":"string"}]]}]],"label":["list",["object",{"key":"string","value":"string"}]],"slowburn":["list",["object",{"annotation":["list",["object",{"key":"string","value":"string"}]],"label":["list",["object",{"key":"string","value":"string"}]]}]]}]],"description":"string","destination_datasource":["list",["object",{"uid":"string"}]],"folder_uid":"string","label":["list",["object",{"key":"string","value":"string"}]],"name":"string","objectives":["list",["object",{"value":"number","window":"string"}]],"query":["list",["object",{"freeform":["list",["object",{"query":"string"}]],"grafana_queries":["list",["object",{"grafana_queries":"string"}]],"ratio":["list",["object",{"group_by_labels":["list","string"],"success_metric":"string","total_metric":"string"}]],"type":"string"}]],"search_expression":"string","uuid":"string"}]],"description":"Returns a list of all SLOs\"","description_kind":"markdown","computed":true}},"description":"\nDatasource 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\t\t\t\t","description_kind":"markdown"}},"grafana_synthetic_monitoring_probe":{"version":0,"block":{"attributes":{"disable_browser_checks":{"type":"bool","description":"Disables browser checks for this probe.","description_kind":"markdown","computed":true},"disable_scripted_checks":{"type":"bool","description":"Disables scripted checks for this probe.","description_kind":"markdown","computed":true},"id":{"type":"string","description":"The ID of the probe.","description_kind":"markdown","computed":true},"labels":{"type":["map","string"],"description":"Custom labels to be included with collected metrics and logs.","description_kind":"markdown","computed":true},"latitude":{"type":"number","description":"Latitude coordinates.","description_kind":"markdown","computed":true},"longitude":{"type":"number","description":"Longitude coordinates.","description_kind":"markdown","computed":true},"name":{"type":"string","description":"Name of the probe.","description_kind":"markdown","required":true},"public":{"type":"bool","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 `true`.","description_kind":"markdown","computed":true},"region":{"type":"string","description":"Region of the probe.","description_kind":"markdown","computed":true},"tenant_id":{"type":"number","description":"The tenant ID of the probe.","description_kind":"markdown","computed":true}},"description":"Data source for retrieving a single probe by name.","description_kind":"markdown"}},"grafana_synthetic_monitoring_probes":{"version":0,"block":{"attributes":{"filter_deprecated":{"type":"bool","description":"If true, only probes that are not deprecated will be returned. Defaults to `true`.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"probes":{"type":["map","number"],"description":"Map of probes with their names as keys and IDs as values.","description_kind":"markdown","computed":true}},"description":"Data source for retrieving all probes.","description_kind":"markdown"}},"grafana_team":{"version":0,"block":{"attributes":{"email":{"type":"string","description":"An email address for the team.","description_kind":"markdown","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"members":{"type":["set","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.","description_kind":"markdown","computed":true},"name":{"type":"string","description":"The name of the Grafana team","description_kind":"markdown","required":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"preferences":{"type":["list",["object",{"home_dashboard_uid":"string","theme":"string","timezone":"string","week_start":"string"}]],"description_kind":"plain","computed":true},"read_team_sync":{"type":"bool","description":"Whether to read the team sync settings. This is only available in Grafana Enterprise. Defaults to `false`.","description_kind":"markdown","optional":true},"team_id":{"type":"number","description":"The team id assigned to this team by Grafana.","description_kind":"markdown","computed":true},"team_sync":{"type":["list",["object",{"groups":["set","string"]}]],"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/)","description_kind":"markdown","computed":true},"team_uid":{"type":"string","description":"The team uid assigned to this team by Grafana.","description_kind":"markdown","computed":true}},"description":"\n* [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","description_kind":"markdown"}},"grafana_user":{"version":0,"block":{"attributes":{"email":{"type":"string","description":"The email address of the Grafana user. Defaults to ``.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"is_admin":{"type":"bool","description":"Whether the user is an admin.","description_kind":"markdown","computed":true},"login":{"type":"string","description":"The username for the Grafana user. Defaults to ``.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"The display name for the Grafana user.","description_kind":"markdown","computed":true},"user_id":{"type":"number","description":"The numerical ID of the Grafana user. Defaults to `-1`.","description_kind":"markdown","optional":true}},"description":"\n* [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","description_kind":"markdown"}},"grafana_users":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"users":{"type":["set",["object",{"email":"string","id":"number","is_admin":"bool","login":"string","name":"string"}]],"description":"The Grafana instance's users.","description_kind":"markdown","computed":true}},"description":"\n* [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\t\t","description_kind":"markdown"}}}}}}
+{"format_version":"1.0","provider_schemas":{"registry.terraform.io/grafana/grafana":{"provider":{"version":0,"block":{"attributes":{"auth":{"type":"string","description":"API token, basic auth in the `username:password` format or `anonymous` (string literal). May alternatively be set via the `GRAFANA_AUTH` environment variable.","description_kind":"markdown","optional":true,"sensitive":true},"ca_cert":{"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.","description_kind":"markdown","optional":true},"cloud_access_policy_token":{"type":"string","description":"Access Policy Token for Grafana Cloud. May alternatively be set via the `GRAFANA_CLOUD_ACCESS_POLICY_TOKEN` environment variable.","description_kind":"markdown","optional":true,"sensitive":true},"cloud_api_url":{"type":"string","description":"Grafana Cloud's API URL. May alternatively be set via the `GRAFANA_CLOUD_API_URL` environment variable.","description_kind":"markdown","optional":true},"cloud_provider_access_token":{"type":"string","description":"A Grafana Cloud Provider access token. May alternatively be set via the `GRAFANA_CLOUD_PROVIDER_ACCESS_TOKEN` environment variable.","description_kind":"markdown","optional":true,"sensitive":true},"cloud_provider_url":{"type":"string","description":"A Grafana Cloud Provider backend address. May alternatively be set via the `GRAFANA_CLOUD_PROVIDER_URL` environment variable.","description_kind":"markdown","optional":true},"connections_api_access_token":{"type":"string","description":"A Grafana Connections API access token. May alternatively be set via the `GRAFANA_CONNECTIONS_API_ACCESS_TOKEN` environment variable.","description_kind":"markdown","optional":true,"sensitive":true},"connections_api_url":{"type":"string","description":"A Grafana Connections API address. May alternatively be set via the `GRAFANA_CONNECTIONS_API_URL` environment variable.","description_kind":"markdown","optional":true},"fleet_management_auth":{"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.","description_kind":"markdown","optional":true,"sensitive":true},"fleet_management_url":{"type":"string","description":"A Grafana Fleet Management API address. May alternatively be set via the `GRAFANA_FLEET_MANAGEMENT_URL` environment variable.","description_kind":"markdown","optional":true},"frontend_o11y_api_access_token":{"type":"string","description":"A Grafana Frontend Observability API access token. May alternatively be set via the `GRAFANA_FRONTEND_O11Y_API_ACCESS_TOKEN` environment variable.","description_kind":"markdown","optional":true,"sensitive":true},"http_headers":{"type":["map","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.","description_kind":"markdown","optional":true,"sensitive":true},"insecure_skip_verify":{"type":"bool","description":"Skip TLS certificate verification. May alternatively be set via the `GRAFANA_INSECURE_SKIP_VERIFY` environment variable.","description_kind":"markdown","optional":true},"k6_access_token":{"type":"string","description":"The k6 Cloud API token. May alternatively be set via the `GRAFANA_K6_ACCESS_TOKEN` environment variable.","description_kind":"markdown","optional":true,"sensitive":true},"k6_url":{"type":"string","description":"The k6 Cloud API url. May alternatively be set via the `GRAFANA_K6_URL` environment variable.","description_kind":"markdown","optional":true},"oncall_access_token":{"type":"string","description":"A Grafana OnCall access token. May alternatively be set via the `GRAFANA_ONCALL_ACCESS_TOKEN` environment variable.","description_kind":"markdown","optional":true,"sensitive":true},"oncall_url":{"type":"string","description":"An Grafana OnCall backend address. May alternatively be set via the `GRAFANA_ONCALL_URL` environment variable.","description_kind":"markdown","optional":true},"org_id":{"type":"number","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.","description_kind":"markdown","optional":true},"retries":{"type":"number","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.","description_kind":"markdown","optional":true},"retry_status_codes":{"type":["set","string"],"description":"The status codes to retry on for Grafana API and Grafana Cloud API calls. Use `x` as a digit wildcard. Defaults to 429 and 5xx. May alternatively be set via the `GRAFANA_RETRY_STATUS_CODES` environment variable.","description_kind":"markdown","optional":true},"retry_wait":{"type":"number","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.","description_kind":"markdown","optional":true},"sm_access_token":{"type":"string","description":"A Synthetic Monitoring access token. May alternatively be set via the `GRAFANA_SM_ACCESS_TOKEN` environment variable.","description_kind":"markdown","optional":true,"sensitive":true},"sm_url":{"type":"string","description":"Synthetic monitoring backend address. May alternatively be set via the `GRAFANA_SM_URL` environment variable. The correct value for each service region is cited in the [Synthetic Monitoring documentation](https://grafana.com/docs/grafana-cloud/testing/synthetic-monitoring/set-up/set-up-private-probes/#probe-api-server-url). Note the `sm_url` value is optional, but it must correspond with the value specified as the `region_slug` in the `grafana_cloud_stack` resource. Also note that when a Terraform configuration contains multiple provider instances managing SM resources associated with the same Grafana stack, specifying an explicit `sm_url` set to the same value for each provider ensures all providers interact with the same SM API.","description_kind":"markdown","optional":true},"stack_id":{"type":"number","description":"The Grafana stack ID, if you are using a Grafana Cloud stack. May alternatively be set via the `GRAFANA_STACK_ID` environment variable.","description_kind":"markdown","optional":true},"store_dashboard_sha256":{"type":"bool","description":"Set to true if you want to save only the sha256sum instead of complete dashboard model JSON in the tfstate.","description_kind":"markdown","optional":true},"tls_cert":{"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.","description_kind":"markdown","optional":true},"tls_key":{"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.","description_kind":"markdown","optional":true},"url":{"type":"string","description":"The root URL of a Grafana server. May alternatively be set via the `GRAFANA_URL` environment variable.","description_kind":"markdown","optional":true}},"description_kind":"plain"}},"resource_schemas":{"grafana_annotation":{"version":0,"block":{"attributes":{"dashboard_uid":{"type":"string","description":"The UID of the dashboard on which to create the annotation.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"panel_id":{"type":"number","description":"The ID of the dashboard panel on which to create the annotation.","description_kind":"markdown","optional":true},"tags":{"type":["set","string"],"description":"The tags to associate with the annotation.","description_kind":"markdown","optional":true},"text":{"type":"string","description":"The text to associate with the annotation.","description_kind":"markdown","required":true},"time":{"type":"string","description":"The RFC 3339-formatted time string indicating the annotation's time.","description_kind":"markdown","optional":true,"computed":true},"time_end":{"type":"string","description":"The RFC 3339-formatted time string indicating the annotation's end time.","description_kind":"markdown","optional":true,"computed":true}},"description":"\n* [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","description_kind":"markdown"}},"grafana_apps_alertenrichment_alertenrichment_v1beta1":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The ID of the resource derived from UUID.","description_kind":"plain","computed":true}},"block_types":{"metadata":{"nesting_mode":"single","block":{"attributes":{"annotations":{"type":["map","string"],"description":"Annotations of the resource.","description_kind":"plain","computed":true},"folder_uid":{"type":"string","description":"The UID of the folder to save the resource in.","description_kind":"plain","optional":true},"uid":{"type":"string","description":"The unique identifier of the resource.","description_kind":"plain","required":true},"url":{"type":"string","description":"The full URL of the resource.","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"The globally unique identifier of a resource, used by the API for tracking.","description_kind":"plain","computed":true},"version":{"type":"string","description":"The version of the resource.","description_kind":"plain","computed":true}},"description":"The metadata of the resource.","description_kind":"plain"}},"options":{"nesting_mode":"single","block":{"attributes":{"overwrite":{"type":"bool","description":"Set to true if you want to overwrite existing resource with newer version, same resource title in folder or same resource uid.","description_kind":"plain","optional":true}},"description":"Options for applying the resource.","description_kind":"plain"}},"spec":{"nesting_mode":"single","block":{"attributes":{"alert_rule_uids":{"type":["list","string"],"description":"UIDs of alert rules this enrichment applies to. If empty, applies to all alert rules.","description_kind":"plain","optional":true},"annotation_matchers":{"type":["list",["object",{"name":"string","type":"string","value":"string"}]],"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).","description_kind":"plain","optional":true},"description":{"type":"string","description":"Description of the alert enrichment.","description_kind":"plain","optional":true,"computed":true},"disable_provenance":{"type":"bool","description":"Allow modifying alert enrichment outside of Terraform","description_kind":"plain","optional":true,"computed":true},"label_matchers":{"type":["list",["object",{"name":"string","type":"string","value":"string"}]],"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).","description_kind":"plain","optional":true},"receivers":{"type":["list","string"],"description":"Receiver names to match. If empty, applies to all receivers.","description_kind":"plain","optional":true},"title":{"type":"string","description":"The title of the alert enrichment.","description_kind":"plain","required":true}},"block_types":{"step":{"nesting_mode":"list","block":{"block_types":{"asserts":{"nesting_mode":"single","block":{"attributes":{"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')","description_kind":"plain","optional":true}},"description":"Integrate with Grafana Asserts for enrichment.","description_kind":"plain"}},"assign":{"nesting_mode":"single","block":{"attributes":{"annotations":{"type":["map","string"],"description":"Map of annotation names to values to set on matching alerts.","description_kind":"plain","optional":true},"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')","description_kind":"plain","optional":true}},"description":"Assign annotations to an alert.","description_kind":"plain"}},"assistant_investigations":{"nesting_mode":"single","block":{"attributes":{"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')","description_kind":"plain","optional":true}},"description":"Use AI assistant to investigate alerts and add insights.","description_kind":"plain"}},"conditional":{"nesting_mode":"single","block":{"attributes":{"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')","description_kind":"plain","optional":true}},"block_types":{"else":{"nesting_mode":"single","block":{"block_types":{"step":{"nesting_mode":"list","block":{"block_types":{"asserts":{"nesting_mode":"single","block":{"attributes":{"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')","description_kind":"plain","optional":true}},"description":"Integrate with Grafana Asserts for enrichment.","description_kind":"plain"}},"assign":{"nesting_mode":"single","block":{"attributes":{"annotations":{"type":["map","string"],"description":"Map of annotation names to values to set on matching alerts.","description_kind":"plain","optional":true},"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')","description_kind":"plain","optional":true}},"description":"Assign annotations to an alert.","description_kind":"plain"}},"assistant_investigations":{"nesting_mode":"single","block":{"attributes":{"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')","description_kind":"plain","optional":true}},"description":"Use AI assistant to investigate alerts and add insights.","description_kind":"plain"}},"data_source":{"nesting_mode":"single","block":{"attributes":{"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')","description_kind":"plain","optional":true}},"block_types":{"logs_query":{"nesting_mode":"single","block":{"attributes":{"data_source_type":{"type":"string","description":"Data source type (e.g., 'loki').","description_kind":"plain","optional":true},"data_source_uid":{"type":"string","description":"UID of the data source to query.","description_kind":"plain","optional":true},"expr":{"type":"string","description":"Log query expression to execute.","description_kind":"plain","optional":true},"max_lines":{"type":"number","description":"Maximum number of log lines to include. Defaults to 3.","description_kind":"plain","optional":true,"computed":true}},"description":"Logs query configuration for querying log data sources.","description_kind":"plain"}},"raw_query":{"nesting_mode":"single","block":{"attributes":{"ref_id":{"type":"string","description":"Reference ID for correlating queries.","description_kind":"plain","optional":true,"computed":true},"request":{"type":"string","description":"Raw request payload for the data source query.","description_kind":"plain","optional":true}},"description":"Raw query configuration for advanced data source queries.","description_kind":"plain"}}},"description":"Query Grafana data sources and add results to alerts.","description_kind":"plain"}},"explain":{"nesting_mode":"single","block":{"attributes":{"annotation":{"type":"string","description":"Annotation name to set the explanation in. Defaults to 'ai_explanation'.","description_kind":"plain","optional":true,"computed":true},"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')","description_kind":"plain","optional":true}},"description":"Generate AI explanation and store in an annotation.","description_kind":"plain"}},"external":{"nesting_mode":"single","block":{"attributes":{"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')","description_kind":"plain","optional":true},"url":{"type":"string","description":"HTTP endpoint URL to call for enrichment","description_kind":"plain","optional":true}},"description":"Call an external HTTP service for enrichment.","description_kind":"plain"}},"sift":{"nesting_mode":"single","block":{"attributes":{"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')","description_kind":"plain","optional":true}},"description":"Analyze alerts for patterns and insights.","description_kind":"plain"}}},"description_kind":"plain"}}},"description":"Steps when condition is false.","description_kind":"plain"}},"if":{"nesting_mode":"single","block":{"attributes":{"annotation_matchers":{"type":["list",["object",{"name":"string","type":"string","value":"string"}]],"description":"Annotation matchers for the condition.","description_kind":"plain","optional":true},"label_matchers":{"type":["list",["object",{"name":"string","type":"string","value":"string"}]],"description":"Label matchers for the condition.","description_kind":"plain","optional":true}},"block_types":{"data_source_condition":{"nesting_mode":"single","block":{"attributes":{"request":{"type":"string","description":"Data source request payload.","description_kind":"plain","optional":true}},"description":"Data source condition.","description_kind":"plain"}}},"description":"Condition to evaluate.","description_kind":"plain"}},"then":{"nesting_mode":"single","block":{"block_types":{"step":{"nesting_mode":"list","block":{"block_types":{"asserts":{"nesting_mode":"single","block":{"attributes":{"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')","description_kind":"plain","optional":true}},"description":"Integrate with Grafana Asserts for enrichment.","description_kind":"plain"}},"assign":{"nesting_mode":"single","block":{"attributes":{"annotations":{"type":["map","string"],"description":"Map of annotation names to values to set on matching alerts.","description_kind":"plain","optional":true},"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')","description_kind":"plain","optional":true}},"description":"Assign annotations to an alert.","description_kind":"plain"}},"assistant_investigations":{"nesting_mode":"single","block":{"attributes":{"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')","description_kind":"plain","optional":true}},"description":"Use AI assistant to investigate alerts and add insights.","description_kind":"plain"}},"data_source":{"nesting_mode":"single","block":{"attributes":{"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')","description_kind":"plain","optional":true}},"block_types":{"logs_query":{"nesting_mode":"single","block":{"attributes":{"data_source_type":{"type":"string","description":"Data source type (e.g., 'loki').","description_kind":"plain","optional":true},"data_source_uid":{"type":"string","description":"UID of the data source to query.","description_kind":"plain","optional":true},"expr":{"type":"string","description":"Log query expression to execute.","description_kind":"plain","optional":true},"max_lines":{"type":"number","description":"Maximum number of log lines to include. Defaults to 3.","description_kind":"plain","optional":true,"computed":true}},"description":"Logs query configuration for querying log data sources.","description_kind":"plain"}},"raw_query":{"nesting_mode":"single","block":{"attributes":{"ref_id":{"type":"string","description":"Reference ID for correlating queries.","description_kind":"plain","optional":true,"computed":true},"request":{"type":"string","description":"Raw request payload for the data source query.","description_kind":"plain","optional":true}},"description":"Raw query configuration for advanced data source queries.","description_kind":"plain"}}},"description":"Query Grafana data sources and add results to alerts.","description_kind":"plain"}},"explain":{"nesting_mode":"single","block":{"attributes":{"annotation":{"type":"string","description":"Annotation name to set the explanation in. Defaults to 'ai_explanation'.","description_kind":"plain","optional":true,"computed":true},"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')","description_kind":"plain","optional":true}},"description":"Generate AI explanation and store in an annotation.","description_kind":"plain"}},"external":{"nesting_mode":"single","block":{"attributes":{"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')","description_kind":"plain","optional":true},"url":{"type":"string","description":"HTTP endpoint URL to call for enrichment","description_kind":"plain","optional":true}},"description":"Call an external HTTP service for enrichment.","description_kind":"plain"}},"sift":{"nesting_mode":"single","block":{"attributes":{"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')","description_kind":"plain","optional":true}},"description":"Analyze alerts for patterns and insights.","description_kind":"plain"}}},"description_kind":"plain"}}},"description":"Steps when condition is true.","description_kind":"plain"}}},"description":"Conditional step with if/then/else.","description_kind":"plain"}},"data_source":{"nesting_mode":"single","block":{"attributes":{"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')","description_kind":"plain","optional":true}},"block_types":{"logs_query":{"nesting_mode":"single","block":{"attributes":{"data_source_type":{"type":"string","description":"Data source type (e.g., 'loki').","description_kind":"plain","optional":true},"data_source_uid":{"type":"string","description":"UID of the data source to query.","description_kind":"plain","optional":true},"expr":{"type":"string","description":"Log query expression to execute.","description_kind":"plain","optional":true},"max_lines":{"type":"number","description":"Maximum number of log lines to include. Defaults to 3.","description_kind":"plain","optional":true,"computed":true}},"description":"Logs query configuration for querying log data sources.","description_kind":"plain"}},"raw_query":{"nesting_mode":"single","block":{"attributes":{"ref_id":{"type":"string","description":"Reference ID for correlating queries.","description_kind":"plain","optional":true,"computed":true},"request":{"type":"string","description":"Raw request payload for the data source query.","description_kind":"plain","optional":true}},"description":"Raw query configuration for advanced data source queries.","description_kind":"plain"}}},"description":"Query Grafana data sources and add results to alerts.","description_kind":"plain"}},"explain":{"nesting_mode":"single","block":{"attributes":{"annotation":{"type":"string","description":"Annotation name to set the explanation in. Defaults to 'ai_explanation'.","description_kind":"plain","optional":true,"computed":true},"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')","description_kind":"plain","optional":true}},"description":"Generate AI explanation and store in an annotation.","description_kind":"plain"}},"external":{"nesting_mode":"single","block":{"attributes":{"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')","description_kind":"plain","optional":true},"url":{"type":"string","description":"HTTP endpoint URL to call for enrichment","description_kind":"plain","optional":true}},"description":"Call an external HTTP service for enrichment.","description_kind":"plain"}},"sift":{"nesting_mode":"single","block":{"attributes":{"timeout":{"type":"string","description":"Maximum execution time (e.g., '30s', '1m')","description_kind":"plain","optional":true}},"description":"Analyze alerts for patterns and insights.","description_kind":"plain"}}},"description":"Enrichment step. Can be repeated multiple times to define a sequence of steps. Each step must contain exactly one enrichment block.","description_kind":"plain"}}},"description":"The spec of the resource.","description_kind":"plain"}}},"description":"\nManages Grafana Alert Enrichments.\n","description_kind":"markdown"}},"grafana_apps_dashboard_dashboard_v1beta1":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The ID of the resource derived from UUID.","description_kind":"plain","computed":true}},"block_types":{"metadata":{"nesting_mode":"single","block":{"attributes":{"annotations":{"type":["map","string"],"description":"Annotations of the resource.","description_kind":"plain","computed":true},"folder_uid":{"type":"string","description":"The UID of the folder to save the resource in.","description_kind":"plain","optional":true},"uid":{"type":"string","description":"The unique identifier of the resource.","description_kind":"plain","required":true},"url":{"type":"string","description":"The full URL of the resource.","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"The globally unique identifier of a resource, used by the API for tracking.","description_kind":"plain","computed":true},"version":{"type":"string","description":"The version of the resource.","description_kind":"plain","computed":true}},"description":"The metadata of the resource.","description_kind":"plain"}},"options":{"nesting_mode":"single","block":{"attributes":{"overwrite":{"type":"bool","description":"Set to true if you want to overwrite existing resource with newer version, same resource title in folder or same resource uid.","description_kind":"plain","optional":true}},"description":"Options for applying the resource.","description_kind":"plain"}},"spec":{"nesting_mode":"single","block":{"attributes":{"json":{"type":"string","description":"The JSON representation of the dashboard spec.","description_kind":"plain","required":true},"tags":{"type":["list","string"],"description":"The tags of the dashboard. If not set, the tags will be derived from the JSON spec.","description_kind":"plain","optional":true},"title":{"type":"string","description":"The title of the dashboard. If not set, the title will be derived from the JSON spec.","description_kind":"plain","optional":true}},"description":"The spec of the resource.","description_kind":"plain"}}},"description":"\nManages 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\t","description_kind":"markdown"}},"grafana_apps_playlist_playlist_v0alpha1":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The ID of the resource derived from UUID.","description_kind":"plain","computed":true}},"block_types":{"metadata":{"nesting_mode":"single","block":{"attributes":{"annotations":{"type":["map","string"],"description":"Annotations of the resource.","description_kind":"plain","computed":true},"folder_uid":{"type":"string","description":"The UID of the folder to save the resource in.","description_kind":"plain","optional":true},"uid":{"type":"string","description":"The unique identifier of the resource.","description_kind":"plain","required":true},"url":{"type":"string","description":"The full URL of the resource.","description_kind":"plain","computed":true},"uuid":{"type":"string","description":"The globally unique identifier of a resource, used by the API for tracking.","description_kind":"plain","computed":true},"version":{"type":"string","description":"The version of the resource.","description_kind":"plain","computed":true}},"description":"The metadata of the resource.","description_kind":"plain"}},"options":{"nesting_mode":"single","block":{"attributes":{"overwrite":{"type":"bool","description":"Set to true if you want to overwrite existing resource with newer version, same resource title in folder or same resource uid.","description_kind":"plain","optional":true}},"description":"Options for applying the resource.","description_kind":"plain"}},"spec":{"nesting_mode":"single","block":{"attributes":{"interval":{"type":"string","description":"The interval of the playlist.","description_kind":"plain","optional":true},"items":{"type":["list",["object",{"type":"string","value":"string"}]],"description":"The items of the playlist.","description_kind":"plain","required":true},"title":{"type":"string","description":"The title of the playlist.","description_kind":"plain","required":true}},"description":"The spec of the resource.","description_kind":"plain"}}},"description":"\nManages 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","description_kind":"markdown"}},"grafana_asserts_custom_model_rules":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The name of the custom model rules.","description_kind":"markdown","required":true}},"block_types":{"rules":{"nesting_mode":"list","block":{"block_types":{"entity":{"nesting_mode":"list","block":{"attributes":{"disabled":{"type":"bool","description":"Whether this entity is disabled.","description_kind":"markdown","optional":true},"enriched_by":{"type":["list","string"],"description":"List of enrichment sources for the entity.","description_kind":"markdown","optional":true},"lookup":{"type":["map","string"],"description":"Lookup mappings for the entity.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"The name of the entity.","description_kind":"markdown","required":true},"scope":{"type":["map","string"],"description":"Scope labels for the entity.","description_kind":"markdown","optional":true},"type":{"type":"string","description":"The type of the entity (e.g., Service, Pod, Namespace).","description_kind":"markdown","required":true}},"block_types":{"defined_by":{"nesting_mode":"list","block":{"attributes":{"disabled":{"type":"bool","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.","description_kind":"markdown","optional":true},"label_values":{"type":["map","string"],"description":"Label value mappings for the query.","description_kind":"markdown","optional":true},"literals":{"type":["map","string"],"description":"Literal value mappings for the query.","description_kind":"markdown","optional":true},"metric_value":{"type":"string","description":"Metric value for the query.","description_kind":"markdown","optional":true},"query":{"type":"string","description":"The Prometheus query that defines this entity.","description_kind":"markdown","required":true}},"description":"List of queries that define this entity.","description_kind":"markdown"},"min_items":1}},"description":"List of entities to define in the custom model rules.","description_kind":"markdown"},"min_items":1}},"description":"The rules configuration for the custom model rules.","description_kind":"markdown"},"min_items":1,"max_items":1}},"description":"Manages Asserts Custom Model Rules through the Grafana API.","description_kind":"markdown"}},"grafana_asserts_notification_alerts_config":{"version":0,"block":{"attributes":{"alert_labels":{"type":["map","string"],"description":"Labels to add to alerts generated by this configuration.","description_kind":"markdown","optional":true},"duration":{"type":"string","description":"Duration for which the condition must be true before firing (e.g., '5m', '30s'). Maps to 'for' in Asserts API.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"match_labels":{"type":["map","string"],"description":"Labels to match for this alert configuration.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"The name of the alert configuration.","description_kind":"markdown","required":true},"silenced":{"type":"bool","description":"Whether this alert configuration is silenced. Defaults to `false`.","description_kind":"markdown","optional":true}},"description":"Manages Asserts Alert Configurations through Grafana API.","description_kind":"markdown"}},"grafana_asserts_suppressed_assertions_config":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"match_labels":{"type":["map","string"],"description":"Labels to match for this disabled alert configuration.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"The name of the disabled alert configuration.","description_kind":"markdown","required":true}},"description":"Manages Asserts Disabled Alert Configurations through Grafana API.","description_kind":"markdown"}},"grafana_cloud_access_policy":{"version":0,"block":{"attributes":{"created_at":{"type":"string","description":"Creation date of the access policy.","description_kind":"markdown","computed":true},"display_name":{"type":"string","description":"Display name of the access policy. Defaults to the name.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Name of the access policy.","description_kind":"markdown","required":true},"policy_id":{"type":"string","description":"ID of the access policy.","description_kind":"markdown","computed":true},"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.","description_kind":"markdown","required":true},"scopes":{"type":["set","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.","description_kind":"markdown","required":true},"updated_at":{"type":"string","description":"Last update date of the access policy.","description_kind":"markdown","computed":true}},"block_types":{"conditions":{"nesting_mode":"set","block":{"attributes":{"allowed_subnets":{"type":["set","string"],"description":"Conditions that apply to the access policy,such as IP Allow lists.","description_kind":"markdown","required":true}},"description":"Conditions for the access policy.","description_kind":"markdown"}},"realm":{"nesting_mode":"set","block":{"attributes":{"identifier":{"type":"string","description":"The identifier of the org or stack. For orgs, this is the slug, for stacks, this is the stack ID.","description_kind":"markdown","required":true},"type":{"type":"string","description":"Whether a policy applies to a Cloud org or a specific stack. Should be one of `org` or `stack`.","description_kind":"markdown","required":true}},"block_types":{"label_policy":{"nesting_mode":"set","block":{"attributes":{"selector":{"type":"string","description":"The label selector to match in metrics or logs query. Should be in PromQL or LogQL format.","description_kind":"markdown","required":true}},"description_kind":"plain"}}},"description_kind":"plain"},"min_items":1}},"description":"\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/#create-an-access-policy)\n\nRequired access policy scopes:\n\n* accesspolicies:read\n* accesspolicies:write\n* accesspolicies:delete\n","description_kind":"markdown"}},"grafana_cloud_access_policy_token":{"version":0,"block":{"attributes":{"access_policy_id":{"type":"string","description":"ID of the access policy for which to create a token.","description_kind":"markdown","required":true},"created_at":{"type":"string","description":"Creation date of the access policy token.","description_kind":"markdown","computed":true},"display_name":{"type":"string","description":"Display name of the access policy token. Defaults to the name.","description_kind":"markdown","optional":true},"expires_at":{"type":"string","description":"Expiration date of the access policy token. Does not expire by default.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Name of the access policy token.","description_kind":"markdown","required":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.","description_kind":"markdown","required":true},"token":{"type":"string","description_kind":"plain","computed":true,"sensitive":true},"updated_at":{"type":"string","description":"Last update date of the access policy token.","description_kind":"markdown","computed":true}},"description":"\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/#create-a-token)\n\nRequired access policy scopes:\n\n* accesspolicies:read\n* accesspolicies:write\n* accesspolicies:delete\n","description_kind":"markdown"}},"grafana_cloud_org_member":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","computed":true},"org":{"type":"string","description":"The slug or ID of the organization.","description_kind":"markdown","required":true},"receive_billing_emails":{"type":"bool","description":"Whether the user should receive billing emails.","description_kind":"markdown","optional":true,"computed":true},"role":{"type":"string","description":"The role to assign to the user in the organization.","description_kind":"markdown","required":true},"user":{"type":"string","description":"Username or ID of the user to add to the org's members.","description_kind":"markdown","required":true}},"description":"Manages the membership of a user in an organization.","description_kind":"markdown"}},"grafana_cloud_plugin_installation":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"slug":{"type":"string","description":"Slug of the plugin to be installed.","description_kind":"markdown","required":true},"stack_slug":{"type":"string","description":"The stack id to which the plugin should be installed.","description_kind":"markdown","required":true},"version":{"type":"string","description":"Version of the plugin to be installed. Defaults to 'latest' and installs the most recent version. Terraform will detect new version as drift for plan/apply. Defaults to `latest`.","description_kind":"markdown","optional":true}},"description":"\nManages 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","description_kind":"markdown"}},"grafana_cloud_private_data_source_connect_network":{"version":0,"block":{"attributes":{"created_at":{"type":"string","description":"Creation date of the private data source connect network.","description_kind":"markdown","computed":true},"display_name":{"type":"string","description":"Display name of the PDC network. Defaults to the name.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"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","description_kind":"markdown","required":true},"pdc_network_id":{"type":"string","description":"ID of the private data source connect network.","description_kind":"markdown","computed":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","description_kind":"markdown","required":true},"stack_identifier":{"type":"string","description":"The identifier of the stack.","description_kind":"markdown","required":true},"updated_at":{"type":"string","description":"Last update date of the private data source connect network.","description_kind":"markdown","computed":true}},"description":"\n* [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","description_kind":"markdown"}},"grafana_cloud_private_data_source_connect_network_token":{"version":0,"block":{"attributes":{"created_at":{"type":"string","description":"Creation date of the private data source network token.","description_kind":"markdown","computed":true},"display_name":{"type":"string","description":"Display name of the private data source network token. Defaults to the name.","description_kind":"markdown","optional":true},"expires_at":{"type":"string","description":"Expiration date of the private data source network token. Does not expire by default.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Name of the private data source network token.","description_kind":"markdown","required":true},"pdc_network_id":{"type":"string","description":"ID of the private data source network for which to create a token.","description_kind":"markdown","required":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.","description_kind":"markdown","required":true},"token":{"type":"string","description_kind":"plain","computed":true,"sensitive":true},"updated_at":{"type":"string","description":"Last update date of the private data source network token.","description_kind":"markdown","computed":true}},"description":"\n* [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","description_kind":"markdown"}},"grafana_cloud_provider_aws_account":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The Terraform Resource ID. This has the format \"{{ stack_id }}:{{ resource_id }}\".","description_kind":"plain","computed":true},"name":{"type":"string","description":"An optional human-readable name for this AWS Account resource.","description_kind":"plain","optional":true,"computed":true},"regions":{"type":["set","string"],"description":"A set of regions that this AWS Account resource applies to.","description_kind":"plain","required":true},"resource_id":{"type":"string","description":"The ID given by the Grafana Cloud Provider API to this AWS Account resource.","description_kind":"plain","computed":true},"role_arn":{"type":"string","description":"An IAM Role ARN string to represent with this AWS Account resource.","description_kind":"plain","required":true},"stack_id":{"type":"string","description":"The StackID of the Grafana Cloud instance. Part of the Terraform Resource ID.","description_kind":"plain","required":true}},"description_kind":"plain"}},"grafana_cloud_provider_aws_cloudwatch_scrape_job":{"version":0,"block":{"attributes":{"aws_account_resource_id":{"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 `resource_id` attribute of the `grafana_cloud_provider_aws_account` resource.","description_kind":"plain","required":true},"disabled_reason":{"type":"string","description":"When the AWS CloudWatch Scrape Job is disabled, this will show the reason that it is in that state.","description_kind":"plain","computed":true},"enabled":{"type":"bool","description":"Whether the AWS CloudWatch Scrape Job is enabled or not. Defaults to `true`.","description_kind":"plain","optional":true,"computed":true},"export_tags":{"type":"bool","description":"When enabled, AWS resource tags are exported as Prometheus labels to metrics formatted as `aws_\u003cservice_name\u003e_info`. Defaults to `true`.","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description":"The Terraform Resource ID. This has the format \"{{ stack_id }}:{{ name }}\".","description_kind":"plain","computed":true},"name":{"type":"string","description":"The name of the AWS CloudWatch Scrape Job. Part of the Terraform Resource ID.","description_kind":"plain","required":true},"regions_subset_override":{"type":["set","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.","description_kind":"plain","optional":true,"computed":true},"stack_id":{"type":"string","description":"The Stack ID of the Grafana Cloud instance. Part of the Terraform Resource ID.","description_kind":"plain","required":true},"static_labels":{"type":["map","string"],"description":"A set of static labels to add to all metrics exported by this scrape job.","description_kind":"plain","optional":true,"computed":true}},"block_types":{"custom_namespace":{"nesting_mode":"list","block":{"attributes":{"name":{"type":"string","description":"The name of the custom namespace to scrape.","description_kind":"plain","required":true},"scrape_interval_seconds":{"type":"number","description":"The interval in seconds to scrape the custom namespace. Defaults to `300`.","description_kind":"plain","optional":true,"computed":true}},"block_types":{"metric":{"nesting_mode":"list","block":{"attributes":{"name":{"type":"string","description":"The name of the metric to scrape.","description_kind":"plain","required":true},"statistics":{"type":["set","string"],"description":"A set of statistics to scrape.","description_kind":"plain","required":true}},"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.","description_kind":"plain"}}},"description":"Zero or more configuration blocks to configure custom namespaces for the AWS CloudWatch Scrape Job to scrape. Each block must have a distinct `name` attribute. When accessing this as an attribute reference, it is a list of objects.","description_kind":"plain"}},"service":{"nesting_mode":"list","block":{"attributes":{"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.","description_kind":"plain","required":true},"scrape_interval_seconds":{"type":"number","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 `300`.","description_kind":"plain","optional":true,"computed":true},"tags_to_add_to_metrics":{"type":["set","string"],"description":"A set of tags to add to all metrics exported by this scrape job, for use in PromQL queries.","description_kind":"plain","optional":true,"computed":true}},"block_types":{"metric":{"nesting_mode":"list","block":{"attributes":{"name":{"type":"string","description":"The name of the metric to scrape.","description_kind":"plain","required":true},"statistics":{"type":["set","string"],"description":"A set of statistics to scrape.","description_kind":"plain","required":true}},"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.","description_kind":"plain"}},"resource_discovery_tag_filter":{"nesting_mode":"list","block":{"attributes":{"key":{"type":"string","description":"The key of the tag filter.","description_kind":"plain","required":true},"value":{"type":"string","description":"The value of the tag filter.","description_kind":"plain","required":true}},"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.","description_kind":"plain"}}},"description":"One or more configuration blocks to configure AWS services for the AWS CloudWatch Scrape Job to scrape. Each block must have a distinct `name` attribute. When accessing this as an attribute reference, it is a list of objects.","description_kind":"plain"}}},"description_kind":"plain"}},"grafana_cloud_provider_aws_resource_metadata_scrape_job":{"version":0,"block":{"attributes":{"aws_account_resource_id":{"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 `resource_id` attribute of the `grafana_cloud_provider_aws_account` resource.","description_kind":"plain","required":true},"disabled_reason":{"type":"string","description":"When the AWS Resource Metadata Scrape Job is disabled, this will show the reason that it is in that state.","description_kind":"plain","computed":true},"enabled":{"type":"bool","description":"Whether the AWS Resource Metadata Scrape Job is enabled or not. Defaults to `true`.","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description":"The Terraform Resource ID. This has the format \"{{ stack_id }}:{{ name }}\".","description_kind":"plain","computed":true},"name":{"type":"string","description":"The name of the AWS Resource Metadata Scrape Job. Part of the Terraform Resource ID.","description_kind":"plain","required":true},"regions_subset_override":{"type":["set","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.","description_kind":"plain","optional":true,"computed":true},"stack_id":{"type":"string","description":"The Stack ID of the Grafana Cloud instance. Part of the Terraform Resource ID.","description_kind":"plain","required":true},"static_labels":{"type":["map","string"],"description":"A set of static labels to add to all metrics exported by this scrape job.","description_kind":"plain","optional":true,"computed":true}},"block_types":{"service":{"nesting_mode":"list","block":{"attributes":{"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.","description_kind":"plain","required":true},"scrape_interval_seconds":{"type":"number","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 `300`.","description_kind":"plain","optional":true,"computed":true}},"block_types":{"resource_discovery_tag_filter":{"nesting_mode":"list","block":{"attributes":{"key":{"type":"string","description":"The key of the tag filter.","description_kind":"plain","required":true},"value":{"type":"string","description":"The value of the tag filter.","description_kind":"plain","required":true}},"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.","description_kind":"plain"}}},"description":"One or more configuration blocks to configure AWS services for the Resource Metadata Scrape Job to scrape. Each block must have a distinct `name` attribute. When accessing this as an attribute reference, it is a list of objects.","description_kind":"plain"}}},"description_kind":"plain"}},"grafana_cloud_provider_azure_credential":{"version":0,"block":{"attributes":{"client_id":{"type":"string","description":"The client ID of the Azure Credential.","description_kind":"plain","required":true},"client_secret":{"type":"string","description":"The client secret of the Azure Credential.","description_kind":"plain","required":true,"sensitive":true},"id":{"type":"string","description":"The Terraform Resource ID. This has the format \"{{ stack_id }}:{{ resource_id }}\".","description_kind":"plain","computed":true},"name":{"type":"string","description":"The name of the Azure Credential.","description_kind":"plain","required":true},"resource_id":{"type":"string","description":"The ID given by the Grafana Cloud Provider API to this Azure Credential resource.","description_kind":"plain","computed":true},"resource_tags_to_add_to_metrics":{"type":["set","string"],"description":"The list of resource tags to add to metrics.","description_kind":"plain","optional":true},"stack_id":{"type":"string","description":"The StackID of the Grafana Cloud instance. Part of the Terraform Resource ID.","description_kind":"plain","required":true},"tenant_id":{"type":"string","description":"The tenant ID of the Azure Credential.","description_kind":"plain","required":true}},"block_types":{"auto_discovery_configuration":{"nesting_mode":"list","block":{"attributes":{"resource_type_configurations":{"type":["list",["object",{"metric_configuration":["list",["object",{"aggregations":["list","string"],"dimensions":["list","string"],"name":"string"}]],"resource_type_name":"string"}]],"description":"The list of resource type configurations.","description_kind":"plain","required":true},"subscription_id":{"type":"string","description":"The subscription ID of the Azure account.","description_kind":"plain","required":true}},"description":"The list of auto discovery configurations.","description_kind":"plain"}},"resource_discovery_tag_filter":{"nesting_mode":"list","block":{"attributes":{"key":{"type":"string","description":"The key of the tag filter.","description_kind":"plain","required":true},"value":{"type":"string","description":"The value of the tag filter.","description_kind":"plain","required":true}},"description":"The list of tag filters to apply to resources.","description_kind":"plain"}}},"description_kind":"plain"}},"grafana_cloud_stack":{"version":0,"block":{"attributes":{"alertmanager_ip_allow_list_cname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the Alertmanager instances (Optional)","description_kind":"markdown","computed":true},"alertmanager_name":{"type":"string","description":"Name of the Alertmanager instance configured for this stack.","description_kind":"markdown","computed":true},"alertmanager_status":{"type":"string","description":"Status of the Alertmanager instance configured for this stack.","description_kind":"markdown","computed":true},"alertmanager_url":{"type":"string","description":"Base URL of the Alertmanager instance configured for this stack.","description_kind":"markdown","computed":true},"alertmanager_user_id":{"type":"number","description":"User ID of the Alertmanager instance configured for this stack.","description_kind":"markdown","computed":true},"cluster_slug":{"type":"string","description":"Slug of the cluster where this stack resides.","description_kind":"markdown","computed":true},"delete_protection":{"type":"bool","description":"Whether to enable delete protection for the stack, preventing accidental deletion. Defaults to `true`.","description_kind":"markdown","optional":true},"description":{"type":"string","description":"Description of stack.","description_kind":"markdown","optional":true},"fleet_management_name":{"type":"string","description":"Name of the Fleet Management instance configured for this stack.","description_kind":"markdown","computed":true},"fleet_management_private_connectivity_info_private_dns":{"type":"string","description":"Private DNS for Fleet Management when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"fleet_management_private_connectivity_info_service_name":{"type":"string","description":"Service Name for Fleet Management when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"fleet_management_status":{"type":"string","description":"Status of the Fleet Management instance configured for this stack.","description_kind":"markdown","computed":true},"fleet_management_url":{"type":"string","description":"Base URL of the Fleet Management instance configured for this stack.","description_kind":"markdown","computed":true},"fleet_management_user_id":{"type":"number","description":"User ID of the Fleet Management instance configured for this stack.","description_kind":"markdown","computed":true},"grafanas_ip_allow_list_cname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the grafana instance (Optional)","description_kind":"markdown","computed":true},"graphite_ip_allow_list_cname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the Graphite instance (Optional)","description_kind":"markdown","computed":true},"graphite_name":{"type":"string","description_kind":"plain","computed":true},"graphite_private_connectivity_info_private_dns":{"type":"string","description":"Private DNS for Graphite when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"graphite_private_connectivity_info_service_name":{"type":"string","description":"Service Name for Graphite when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"graphite_status":{"type":"string","description_kind":"plain","computed":true},"graphite_url":{"type":"string","description_kind":"plain","computed":true},"graphite_user_id":{"type":"number","description_kind":"plain","computed":true},"id":{"type":"string","description":"The stack id assigned to this stack by Grafana.","description_kind":"markdown","computed":true},"influx_url":{"type":"string","description":"Base URL of the InfluxDB instance configured for this stack. The username is the same as the metrics' (`prometheus_user_id` 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.","description_kind":"markdown","computed":true},"labels":{"type":["map","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.","description_kind":"markdown","optional":true},"logs_ip_allow_list_cname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the Logs instance (Optional)","description_kind":"markdown","computed":true},"logs_name":{"type":"string","description_kind":"plain","computed":true},"logs_private_connectivity_info_private_dns":{"type":"string","description":"Private DNS for Logs when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"logs_private_connectivity_info_service_name":{"type":"string","description":"Service Name for Logs when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"logs_status":{"type":"string","description_kind":"plain","computed":true},"logs_url":{"type":"string","description_kind":"plain","computed":true},"logs_user_id":{"type":"number","description_kind":"plain","computed":true},"name":{"type":"string","description":"Name of stack. Conventionally matches the url of the instance (e.g. `\u003cstack_slug\u003e.grafana.net`).","description_kind":"markdown","required":true},"oncall_api_url":{"type":"string","description":"Base URL of the OnCall API instance configured for this stack.","description_kind":"markdown","computed":true},"org_id":{"type":"number","description":"Organization id to assign to this stack.","description_kind":"markdown","computed":true},"org_name":{"type":"string","description":"Organization name to assign to this stack.","description_kind":"markdown","computed":true},"org_slug":{"type":"string","description":"Organization slug to assign to this stack.","description_kind":"markdown","computed":true},"otlp_private_connectivity_info_private_dns":{"type":"string","description":"Private DNS for OTLP when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"otlp_private_connectivity_info_service_name":{"type":"string","description":"Service Name for OTLP when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"otlp_url":{"type":"string","description":"Base URL of the OTLP instance configured for this stack. The username is the stack's ID (`id` attribute of this resource). See https://grafana.com/docs/grafana-cloud/send-data/otlp/send-data-otlp/ for docs on how to use this.","description_kind":"markdown","computed":true},"pdc_api_private_connectivity_info_private_dns":{"type":"string","description":"Private DNS for PDC's API when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"pdc_api_private_connectivity_info_service_name":{"type":"string","description":"Service Name for PDC's API when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"pdc_gateway_private_connectivity_info_private_dns":{"type":"string","description":"Private DNS for PDC's Gateway when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"pdc_gateway_private_connectivity_info_service_name":{"type":"string","description":"Service Name for PDC's Gateway when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"profiles_ip_allow_list_cname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the Profiles instance (Optional)","description_kind":"markdown","computed":true},"profiles_name":{"type":"string","description_kind":"plain","computed":true},"profiles_private_connectivity_info_private_dns":{"type":"string","description":"Private DNS for Profiles when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"profiles_private_connectivity_info_service_name":{"type":"string","description":"Service Name for Profiles when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"profiles_status":{"type":"string","description_kind":"plain","computed":true},"profiles_url":{"type":"string","description_kind":"plain","computed":true},"profiles_user_id":{"type":"number","description_kind":"plain","computed":true},"prometheus_ip_allow_list_cname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the Prometheus instance (Optional)","description_kind":"markdown","computed":true},"prometheus_name":{"type":"string","description":"Prometheus name for this instance.","description_kind":"markdown","computed":true},"prometheus_private_connectivity_info_private_dns":{"type":"string","description":"Private DNS for Prometheus when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"prometheus_private_connectivity_info_service_name":{"type":"string","description":"Service Name for Prometheus when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"prometheus_remote_endpoint":{"type":"string","description":"Use this URL to query hosted metrics data e.g. Prometheus data source in Grafana","description_kind":"markdown","computed":true},"prometheus_remote_write_endpoint":{"type":"string","description":"Use this URL to send prometheus metrics to Grafana cloud","description_kind":"markdown","computed":true},"prometheus_status":{"type":"string","description":"Prometheus status for this instance.","description_kind":"markdown","computed":true},"prometheus_url":{"type":"string","description":"Prometheus url for this instance.","description_kind":"markdown","computed":true},"prometheus_user_id":{"type":"number","description":"Prometheus user ID. Used for e.g. remote_write.","description_kind":"markdown","computed":true},"region_slug":{"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.","description_kind":"markdown","optional":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`.","description_kind":"markdown","required":true},"status":{"type":"string","description":"Status of the stack.","description_kind":"markdown","computed":true},"traces_ip_allow_list_cname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the Traces instance (Optional)","description_kind":"markdown","computed":true},"traces_name":{"type":"string","description_kind":"plain","computed":true},"traces_private_connectivity_info_private_dns":{"type":"string","description":"Private DNS for Traces when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"traces_private_connectivity_info_service_name":{"type":"string","description":"Service Name for Traces when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"traces_status":{"type":"string","description_kind":"plain","computed":true},"traces_url":{"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.","description_kind":"markdown","computed":true},"traces_user_id":{"type":"number","description_kind":"plain","computed":true},"url":{"type":"string","description":"Custom URL for the Grafana instance. Must have a CNAME setup to point to `.grafana.net` before creating the stack","description_kind":"markdown","optional":true,"computed":true},"wait_for_readiness":{"type":"bool","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 `true`.","description_kind":"markdown","optional":true},"wait_for_readiness_timeout":{"type":"string","description":"How long to wait for readiness (if enabled). Defaults to `5m0s`.","description_kind":"markdown","optional":true}},"description":"\n* [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","description_kind":"markdown"}},"grafana_cloud_stack_service_account":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"is_disabled":{"type":"bool","description":"The disabled status for the service account. Defaults to `false`.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"The name of the service account.","description_kind":"markdown","required":true},"role":{"type":"string","description":"The basic role of the service account in the organization.","description_kind":"markdown","required":true},"stack_slug":{"type":"string","description_kind":"plain","required":true}},"description":"\nManages 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","description_kind":"markdown"}},"grafana_cloud_stack_service_account_token":{"version":0,"block":{"attributes":{"expiration":{"type":"string","description_kind":"plain","computed":true},"has_expired":{"type":"bool","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"key":{"type":"string","description_kind":"plain","computed":true,"sensitive":true},"name":{"type":"string","description_kind":"plain","required":true},"seconds_to_live":{"type":"number","description_kind":"plain","optional":true},"service_account_id":{"type":"string","description_kind":"plain","required":true},"stack_slug":{"type":"string","description_kind":"plain","required":true}},"description":"\nManages 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","description_kind":"markdown"}},"grafana_connections_metrics_endpoint_scrape_job":{"version":0,"block":{"attributes":{"authentication_basic_password":{"type":"string","description":"Password for basic authentication, use if scrape job is using basic authentication method","description_kind":"plain","optional":true,"sensitive":true},"authentication_basic_username":{"type":"string","description":"Username for basic authentication, use if scrape job is using basic authentication method","description_kind":"plain","optional":true},"authentication_bearer_token":{"type":"string","description":"Bearer token used for authentication, use if scrape job is using bearer authentication method","description_kind":"plain","optional":true,"sensitive":true},"authentication_method":{"type":"string","description":"Method to pass authentication credentials: basic or bearer.","description_kind":"plain","required":true},"enabled":{"type":"bool","description":"Whether the metrics endpoint scrape job is enabled or not.","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description":"The Terraform Resource ID. This has the format \"{{ stack_id }}:{{ name }}\".","description_kind":"plain","computed":true},"name":{"type":"string","description":"The name of the metrics endpoint scrape job. Part of the Terraform Resource ID.","description_kind":"plain","required":true},"scrape_interval_seconds":{"type":"number","description":"Frequency for scraping the metrics endpoint: 30, 60, or 120 seconds.","description_kind":"plain","optional":true,"computed":true},"stack_id":{"type":"string","description":"The Stack ID of the Grafana Cloud instance. Part of the Terraform Resource ID.","description_kind":"plain","required":true},"url":{"type":"string","description":"The url to scrape metrics from; a valid HTTPs URL is required.","description_kind":"plain","required":true}},"description_kind":"plain"}},"grafana_contact_point":{"version":0,"block":{"attributes":{"disable_provenance":{"type":"bool","description":"Allow modifying the contact point from other sources than Terraform or the Grafana API. Defaults to `false`.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The name of the contact point.","description_kind":"markdown","required":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true}},"block_types":{"alertmanager":{"nesting_mode":"set","block":{"attributes":{"basic_auth_password":{"type":"string","description":"The password component of the basic auth credentials to use.","description_kind":"markdown","optional":true,"sensitive":true},"basic_auth_user":{"type":"string","description":"The username component of the basic auth credentials to use.","description_kind":"markdown","optional":true},"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true},"url":{"type":"string","description":"The URL of the Alertmanager instance.","description_kind":"markdown","required":true}},"description":"A contact point that sends notifications to other Alertmanager instances.","description_kind":"markdown"}},"dingding":{"nesting_mode":"set","block":{"attributes":{"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"message":{"type":"string","description":"The templated content of the message.","description_kind":"markdown","optional":true},"message_type":{"type":"string","description":"The format of message to send - either 'link' or 'actionCard'","description_kind":"markdown","optional":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"title":{"type":"string","description":"The templated title of the message.","description_kind":"markdown","optional":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true},"url":{"type":"string","description":"The DingDing webhook URL.","description_kind":"markdown","required":true,"sensitive":true}},"description":"A contact point that sends notifications to DingDing.","description_kind":"markdown"}},"discord":{"nesting_mode":"set","block":{"attributes":{"avatar_url":{"type":"string","description":"The URL of a custom avatar image to use. Defaults to ``.","description_kind":"markdown","optional":true},"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"message":{"type":"string","description":"The templated content of the message. Defaults to ``.","description_kind":"markdown","optional":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"title":{"type":"string","description":"The templated content of the title.","description_kind":"markdown","optional":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true},"url":{"type":"string","description":"The discord webhook URL.","description_kind":"markdown","required":true,"sensitive":true},"use_discord_username":{"type":"bool","description":"Whether to use the bot account's plain username instead of \"Grafana.\" Defaults to `false`.","description_kind":"markdown","optional":true}},"description":"A contact point that sends notifications as Discord messages","description_kind":"markdown"}},"email":{"nesting_mode":"set","block":{"attributes":{"addresses":{"type":["list","string"],"description":"The addresses to send emails to.","description_kind":"markdown","required":true},"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"message":{"type":"string","description":"The templated content of the email. Defaults to ``.","description_kind":"markdown","optional":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"single_email":{"type":"bool","description":"Whether to send a single email CC'ing all addresses, rather than a separate email to each address. Defaults to `false`.","description_kind":"markdown","optional":true},"subject":{"type":"string","description":"The templated subject line of the email. Defaults to ``.","description_kind":"markdown","optional":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true}},"description":"A contact point that sends notifications to an email address.","description_kind":"markdown"}},"googlechat":{"nesting_mode":"set","block":{"attributes":{"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"message":{"type":"string","description":"The templated content of the message.","description_kind":"markdown","optional":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"title":{"type":"string","description":"The templated content of the title.","description_kind":"markdown","optional":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true},"url":{"type":"string","description":"The Google Chat webhook URL.","description_kind":"markdown","required":true,"sensitive":true}},"description":"A contact point that sends notifications to Google Chat.","description_kind":"markdown"}},"kafka":{"nesting_mode":"set","block":{"attributes":{"api_version":{"type":"string","description":"The API version to use when contacting the Kafka REST Server. Supported: v2 (default) and v3. Defaults to `v2`.","description_kind":"markdown","optional":true},"cluster_id":{"type":"string","description":"The Id of cluster to use when contacting the Kafka REST Server. Required api_version to be 'v3'","description_kind":"markdown","optional":true},"description":{"type":"string","description":"The templated description of the Kafka message.","description_kind":"markdown","optional":true},"details":{"type":"string","description":"The templated details to include with the message.","description_kind":"markdown","optional":true},"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"password":{"type":"string","description":"The password to use when making a call to the Kafka REST Proxy","description_kind":"markdown","optional":true,"sensitive":true},"rest_proxy_url":{"type":"string","description":"The URL of the Kafka REST proxy to send requests to.","description_kind":"markdown","required":true,"sensitive":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"topic":{"type":"string","description":"The name of the Kafka topic to publish to.","description_kind":"markdown","required":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true},"username":{"type":"string","description":"The user name to use when making a call to the Kafka REST Proxy","description_kind":"markdown","optional":true}},"description":"A contact point that publishes notifications to Apache Kafka topics.","description_kind":"markdown"}},"line":{"nesting_mode":"set","block":{"attributes":{"description":{"type":"string","description":"The templated description of the message.","description_kind":"markdown","optional":true},"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"title":{"type":"string","description":"The templated title of the message.","description_kind":"markdown","optional":true},"token":{"type":"string","description":"The bearer token used to authorize the client.","description_kind":"markdown","required":true,"sensitive":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true}},"description":"A contact point that sends notifications to LINE.me.","description_kind":"markdown"}},"oncall":{"nesting_mode":"set","block":{"attributes":{"authorization_credentials":{"type":"string","description":"Allows a custom authorization scheme - attaches an auth header with this value. Do not use in conjunction with basic auth parameters.","description_kind":"markdown","optional":true,"sensitive":true},"authorization_scheme":{"type":"string","description":"Allows a custom authorization scheme - attaches an auth header with this name. Do not use in conjunction with basic auth parameters.","description_kind":"markdown","optional":true},"basic_auth_password":{"type":"string","description":"The username to use in basic auth headers attached to the request. If omitted, basic auth will not be used.","description_kind":"markdown","optional":true,"sensitive":true},"basic_auth_user":{"type":"string","description":"The username to use in basic auth headers attached to the request. If omitted, basic auth will not be used.","description_kind":"markdown","optional":true},"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"http_method":{"type":"string","description":"The HTTP method to use in the request. Defaults to `POST`.","description_kind":"markdown","optional":true},"max_alerts":{"type":"number","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.","description_kind":"markdown","optional":true},"message":{"type":"string","description":"Custom message. You can use template variables.","description_kind":"markdown","optional":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"title":{"type":"string","description":"Templated title of the message.","description_kind":"markdown","optional":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true},"url":{"type":"string","description":"The URL to send webhook requests to.","description_kind":"markdown","required":true}},"description":"A contact point that sends notifications to Grafana On-Call.","description_kind":"markdown"}},"opsgenie":{"nesting_mode":"set","block":{"attributes":{"api_key":{"type":"string","description":"The OpsGenie API key to use.","description_kind":"markdown","required":true,"sensitive":true},"auto_close":{"type":"bool","description":"Whether to auto-close alerts in OpsGenie when they resolve in the Alertmanager.","description_kind":"markdown","optional":true},"description":{"type":"string","description":"A templated high-level description to use for the alert.","description_kind":"markdown","optional":true},"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"message":{"type":"string","description":"The templated content of the message.","description_kind":"markdown","optional":true},"override_priority":{"type":"bool","description":"Whether to allow the alert priority to be configured via the value of the `og_priority` annotation on the alert.","description_kind":"markdown","optional":true},"send_tags_as":{"type":"string","description":"Whether to send annotations to OpsGenie as Tags, Details, or both. Supported values are `tags`, `details`, `both`, or empty to use the default behavior of Tags.","description_kind":"markdown","optional":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true},"url":{"type":"string","description":"Allows customization of the OpsGenie API URL.","description_kind":"markdown","optional":true}},"block_types":{"responders":{"nesting_mode":"list","block":{"attributes":{"id":{"type":"string","description":"ID of the responder. Must be specified if name and username are empty.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"Name of the responder. Must be specified if username and id are empty.","description_kind":"markdown","optional":true},"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.","description_kind":"markdown","required":true},"username":{"type":"string","description":"User name of the responder. Must be specified if name and id are empty.","description_kind":"markdown","optional":true}},"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+.","description_kind":"markdown"}}},"description":"A contact point that sends notifications to OpsGenie.","description_kind":"markdown"}},"pagerduty":{"nesting_mode":"set","block":{"attributes":{"class":{"type":"string","description":"The class or type of event, for example `ping failure`.","description_kind":"markdown","optional":true},"client":{"type":"string","description":"The name of the monitoring client that is triggering this event.","description_kind":"markdown","optional":true},"client_url":{"type":"string","description":"The URL of the monitoring client that is triggering this event.","description_kind":"markdown","optional":true},"component":{"type":"string","description":"The component being affected by the event.","description_kind":"markdown","optional":true},"details":{"type":["map","string"],"description":"A set of arbitrary key/value pairs that provide further detail about the incident.","description_kind":"markdown","optional":true},"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"group":{"type":"string","description":"The group to which the provided component belongs to.","description_kind":"markdown","optional":true},"integration_key":{"type":"string","description":"The PagerDuty API key.","description_kind":"markdown","required":true,"sensitive":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"severity":{"type":"string","description":"The PagerDuty event severity level. Default is `critical`.","description_kind":"markdown","optional":true},"source":{"type":"string","description":"The unique location of the affected system.","description_kind":"markdown","optional":true},"summary":{"type":"string","description":"The templated summary message of the event.","description_kind":"markdown","optional":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true},"url":{"type":"string","description":"The URL to send API requests to","description_kind":"markdown","optional":true}},"description":"A contact point that sends notifications to PagerDuty.","description_kind":"markdown"}},"pushover":{"nesting_mode":"set","block":{"attributes":{"api_token":{"type":"string","description":"The Pushover API token.","description_kind":"markdown","required":true,"sensitive":true},"device":{"type":"string","description":"Comma-separated list of devices to which the event is associated.","description_kind":"markdown","optional":true},"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"expire":{"type":"number","description":"How many seconds for which the notification will continue to be retried by Pushover.","description_kind":"markdown","optional":true},"message":{"type":"string","description":"The templated notification message content.","description_kind":"markdown","optional":true},"ok_priority":{"type":"number","description":"The priority level of the resolved event.","description_kind":"markdown","optional":true},"ok_sound":{"type":"string","description":"The sound associated with the resolved notification.","description_kind":"markdown","optional":true},"priority":{"type":"number","description":"The priority level of the event.","description_kind":"markdown","optional":true},"retry":{"type":"number","description":"How often, in seconds, the Pushover servers will send the same notification to the user.","description_kind":"markdown","optional":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"sound":{"type":"string","description":"The sound associated with the notification.","description_kind":"markdown","optional":true},"title":{"type":"string","description":"The templated title of the message.","description_kind":"markdown","optional":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true},"upload_image":{"type":"bool","description":"Whether to send images in the notification or not. Default is true. Requires Grafana to be configured to send images in notifications.","description_kind":"markdown","optional":true},"user_key":{"type":"string","description":"The Pushover user key.","description_kind":"markdown","required":true,"sensitive":true}},"description":"A contact point that sends notifications to Pushover.","description_kind":"markdown"}},"sensugo":{"nesting_mode":"set","block":{"attributes":{"api_key":{"type":"string","description":"The SensuGo API key.","description_kind":"markdown","required":true,"sensitive":true},"check":{"type":"string","description":"The SensuGo check to which the event should be routed.","description_kind":"markdown","optional":true},"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"entity":{"type":"string","description":"The entity being monitored.","description_kind":"markdown","optional":true},"handler":{"type":"string","description":"A custom handler to execute in addition to the check.","description_kind":"markdown","optional":true},"message":{"type":"string","description":"Templated message content describing the alert.","description_kind":"markdown","optional":true},"namespace":{"type":"string","description":"The namespace in which the check resides.","description_kind":"markdown","optional":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true},"url":{"type":"string","description":"The SensuGo URL to send requests to.","description_kind":"markdown","required":true}},"description":"A contact point that sends notifications to SensuGo.","description_kind":"markdown"}},"slack":{"nesting_mode":"set","block":{"attributes":{"color":{"type":"string","description":"Templated color of the slack message.","description_kind":"markdown","optional":true},"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"endpoint_url":{"type":"string","description":"Use this to override the Slack API endpoint URL to send requests to.","description_kind":"markdown","optional":true},"icon_emoji":{"type":"string","description":"The name of a Slack workspace emoji to use as the bot icon.","description_kind":"markdown","optional":true},"icon_url":{"type":"string","description":"A URL of an image to use as the bot icon.","description_kind":"markdown","optional":true},"mention_channel":{"type":"string","description":"Describes how to ping the slack channel that messages are being sent to. Options are `here` for an @here ping, `channel` for @channel, or empty for no ping.","description_kind":"markdown","optional":true},"mention_groups":{"type":"string","description":"Comma-separated list of groups to mention in the message.","description_kind":"markdown","optional":true},"mention_users":{"type":"string","description":"Comma-separated list of users to mention in the message.","description_kind":"markdown","optional":true},"recipient":{"type":"string","description":"Channel, private group, or IM channel (can be an encoded ID or a name) to send messages to.","description_kind":"markdown","optional":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"text":{"type":"string","description":"Templated content of the message.","description_kind":"markdown","optional":true},"title":{"type":"string","description":"Templated title of the message.","description_kind":"markdown","optional":true},"token":{"type":"string","description":"A Slack API token,for sending messages directly without the webhook method.","description_kind":"markdown","optional":true,"sensitive":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true},"url":{"type":"string","description":"A Slack webhook URL,for sending messages via the webhook method.","description_kind":"markdown","optional":true,"sensitive":true},"username":{"type":"string","description":"Username for the bot to use.","description_kind":"markdown","optional":true}},"description":"A contact point that sends notifications to Slack.","description_kind":"markdown"}},"sns":{"nesting_mode":"set","block":{"attributes":{"access_key":{"type":"string","description":"AWS access key ID used to authenticate with Amazon SNS.","description_kind":"markdown","optional":true,"sensitive":true},"assume_role_arn":{"type":"string","description":"The Amazon Resource Name (ARN) of the role to assume to send notifications to Amazon SNS.","description_kind":"markdown","optional":true},"auth_provider":{"type":"string","description":"The authentication provider to use. Valid values are `default`, `arn` and `keys`. Default is `default`. Defaults to `default`.","description_kind":"markdown","optional":true},"body":{"type":"string","description_kind":"plain","optional":true},"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"external_id":{"type":"string","description":"The external ID to use when assuming the role.","description_kind":"markdown","optional":true},"message_format":{"type":"string","description":"The format of the message to send. Valid values are `text`, `body` and `json`. Default is `text`. Defaults to `text`.","description_kind":"markdown","optional":true},"secret_key":{"type":"string","description":"AWS secret access key used to authenticate with Amazon SNS.","description_kind":"markdown","optional":true,"sensitive":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"subject":{"type":"string","description_kind":"plain","optional":true},"topic":{"type":"string","description":"The Amazon SNS topic to send notifications to.","description_kind":"markdown","required":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true}},"description":"A contact point that sends notifications to Amazon SNS. Requires Amazon Managed Grafana.","description_kind":"markdown"}},"teams":{"nesting_mode":"set","block":{"attributes":{"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"message":{"type":"string","description":"The templated message content to send.","description_kind":"markdown","optional":true},"section_title":{"type":"string","description":"The templated subtitle for each message section.","description_kind":"markdown","optional":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"title":{"type":"string","description":"The templated title of the message.","description_kind":"markdown","optional":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true},"url":{"type":"string","description":"A Teams webhook URL.","description_kind":"markdown","required":true,"sensitive":true}},"description":"A contact point that sends notifications to Microsoft Teams.","description_kind":"markdown"}},"telegram":{"nesting_mode":"set","block":{"attributes":{"chat_id":{"type":"string","description":"The chat ID to send messages to.","description_kind":"markdown","required":true},"disable_notifications":{"type":"bool","description":"When set users will receive a notification with no sound.","description_kind":"markdown","optional":true},"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"disable_web_page_preview":{"type":"bool","description":"When set it disables link previews for links in the message.","description_kind":"markdown","optional":true},"message":{"type":"string","description":"The templated content of the message.","description_kind":"markdown","optional":true},"message_thread_id":{"type":"string","description":"The ID of the message thread to send the message to.","description_kind":"markdown","optional":true},"parse_mode":{"type":"string","description":"Mode for parsing entities in the message text. Supported: None, Markdown, MarkdownV2, and HTML. HTML is the default.","description_kind":"markdown","optional":true},"protect_content":{"type":"bool","description":"When set it protects the contents of the message from forwarding and saving.","description_kind":"markdown","optional":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"token":{"type":"string","description":"The Telegram bot token.","description_kind":"markdown","required":true,"sensitive":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true}},"description":"A contact point that sends notifications to Telegram.","description_kind":"markdown"}},"threema":{"nesting_mode":"set","block":{"attributes":{"api_secret":{"type":"string","description":"The Threema API key.","description_kind":"markdown","required":true,"sensitive":true},"description":{"type":"string","description":"The templated description of the message.","description_kind":"markdown","optional":true},"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"gateway_id":{"type":"string","description":"The Threema gateway ID.","description_kind":"markdown","required":true},"recipient_id":{"type":"string","description":"The ID of the recipient of the message.","description_kind":"markdown","required":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"title":{"type":"string","description":"The templated title of the message.","description_kind":"markdown","optional":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true}},"description":"A contact point that sends notifications to Threema.","description_kind":"markdown"}},"victorops":{"nesting_mode":"set","block":{"attributes":{"description":{"type":"string","description":"Templated description of the message.","description_kind":"markdown","optional":true},"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"message_type":{"type":"string","description":"The VictorOps alert state - typically either `CRITICAL` or `RECOVERY`.","description_kind":"markdown","optional":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"title":{"type":"string","description":"Templated title to display.","description_kind":"markdown","optional":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true},"url":{"type":"string","description":"The VictorOps webhook URL.","description_kind":"markdown","required":true,"sensitive":true}},"description":"A contact point that sends notifications to VictorOps (now known as Splunk OnCall).","description_kind":"markdown"}},"webex":{"nesting_mode":"set","block":{"attributes":{"api_url":{"type":"string","description":"The URL to send webhook requests to.","description_kind":"markdown","optional":true},"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"message":{"type":"string","description":"The templated title of the message to send.","description_kind":"markdown","optional":true},"room_id":{"type":"string","description":"ID of the Webex Teams room where to send the messages.","description_kind":"markdown","required":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"token":{"type":"string","description":"The bearer token used to authorize the client.","description_kind":"markdown","required":true,"sensitive":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true}},"description":"A contact point that sends notifications to Cisco Webex.","description_kind":"markdown"}},"webhook":{"nesting_mode":"set","block":{"attributes":{"authorization_credentials":{"type":"string","description":"Allows a custom authorization scheme - attaches an auth header with this value. Do not use in conjunction with basic auth parameters.","description_kind":"markdown","optional":true,"sensitive":true},"authorization_scheme":{"type":"string","description":"Allows a custom authorization scheme - attaches an auth header with this name. Do not use in conjunction with basic auth parameters.","description_kind":"markdown","optional":true},"basic_auth_password":{"type":"string","description":"The username to use in basic auth headers attached to the request. If omitted, basic auth will not be used.","description_kind":"markdown","optional":true,"sensitive":true},"basic_auth_user":{"type":"string","description":"The username to use in basic auth headers attached to the request. If omitted, basic auth will not be used.","description_kind":"markdown","optional":true},"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"headers":{"type":["map","string"],"description":"Custom headers to attach to the request.","description_kind":"markdown","optional":true},"http_method":{"type":"string","description":"The HTTP method to use in the request. Defaults to `POST`.","description_kind":"markdown","optional":true},"max_alerts":{"type":"number","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.","description_kind":"markdown","optional":true},"message":{"type":"string","description":"Custom message. You can use template variables.","description_kind":"markdown","optional":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"title":{"type":"string","description":"Templated title of the message.","description_kind":"markdown","optional":true},"tls_config":{"type":["map","string"],"description":"Allows configuring TLS for the webhook notifier.","description_kind":"markdown","optional":true,"sensitive":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true},"url":{"type":"string","description":"The URL to send webhook requests to.","description_kind":"markdown","required":true}},"block_types":{"hmac_config":{"nesting_mode":"set","block":{"attributes":{"header":{"type":"string","description":"The header in which the HMAC signature will be included. Defaults to `X-Grafana-Alerting-Signature`.","description_kind":"markdown","optional":true},"secret":{"type":"string","description":"The secret key used to generate the HMAC signature.","description_kind":"markdown","required":true,"sensitive":true},"timestamp_header":{"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.","description_kind":"markdown","optional":true}},"description":"HMAC signature configuration options.","description_kind":"markdown"},"max_items":1},"http_config":{"nesting_mode":"set","block":{"block_types":{"oauth2":{"nesting_mode":"set","block":{"attributes":{"client_id":{"type":"string","description":"Client ID to use when authenticating.","description_kind":"markdown","required":true},"client_secret":{"type":"string","description":"Client secret to use when authenticating.","description_kind":"markdown","required":true,"sensitive":true},"endpoint_params":{"type":["map","string"],"description":"Optional parameters to append to the access token request.","description_kind":"markdown","optional":true},"scopes":{"type":["list","string"],"description":"Optional scopes to request when obtaining an access token.","description_kind":"markdown","optional":true},"token_url":{"type":"string","description":"URL for the access token endpoint.","description_kind":"markdown","required":true}},"block_types":{"proxy_config":{"nesting_mode":"set","block":{"attributes":{"no_proxy":{"type":"string","description":"Comma-separated list of addresses that should not use a proxy.","description_kind":"markdown","optional":true},"proxy_connect_header":{"type":["map","string"],"description":"Optional headers to send to proxies during CONNECT requests.","description_kind":"markdown","optional":true},"proxy_from_environment":{"type":"bool","description":"Use environment HTTP_PROXY, HTTPS_PROXY and NO_PROXY to determine proxies. Defaults to `false`.","description_kind":"markdown","optional":true},"proxy_url":{"type":"string","description":"HTTP proxy server to use to connect to the targets.","description_kind":"markdown","optional":true}},"description":"Optional proxy configuration for OAuth2 requests.","description_kind":"markdown"},"max_items":1},"tls_config":{"nesting_mode":"set","block":{"attributes":{"ca_certificate":{"type":"string","description":"Certificate in PEM format to use when verifying the server's certificate chain.","description_kind":"markdown","optional":true,"sensitive":true},"client_certificate":{"type":"string","description":"Client certificate in PEM format to use when connecting to the server.","description_kind":"markdown","optional":true,"sensitive":true},"client_key":{"type":"string","description":"Client key in PEM format to use when connecting to the server.","description_kind":"markdown","optional":true,"sensitive":true},"insecure_skip_verify":{"type":"bool","description":"Do not verify the server's certificate chain and host name. Defaults to `false`.","description_kind":"markdown","optional":true}},"description":"Optional TLS configuration options for OAuth2 requests.","description_kind":"markdown"},"max_items":1}},"description":"OAuth2 configuration options.","description_kind":"markdown"},"max_items":1}},"description":"Common HTTP client options.","description_kind":"markdown"},"max_items":1},"payload":{"nesting_mode":"set","block":{"attributes":{"template":{"type":"string","description":"Custom payload template.","description_kind":"markdown","required":true},"vars":{"type":["map","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`.","description_kind":"markdown","optional":true}},"description":"Optionally provide a templated payload. Overrides 'Message' and 'Title' field.","description_kind":"markdown"},"max_items":1}},"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","description_kind":"markdown"}},"wecom":{"nesting_mode":"set","block":{"attributes":{"agent_id":{"type":"string","description":"Agent ID added to the request payload when using APIAPP.","description_kind":"markdown","optional":true},"corp_id":{"type":"string","description":"Corp ID used to get token when using APIAPP.","description_kind":"markdown","optional":true},"disable_resolve_message":{"type":"bool","description":"Whether to disable sending resolve messages. Defaults to `false`.","description_kind":"markdown","optional":true},"message":{"type":"string","description":"The templated content of the message to send.","description_kind":"markdown","optional":true},"msg_type":{"type":"string","description":"The type of them message. Supported: markdown, text. Default: text.","description_kind":"markdown","optional":true},"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.","description_kind":"markdown","optional":true,"sensitive":true},"settings":{"type":["map","string"],"description":"Additional custom properties to attach to the notifier. Defaults to `map[]`.","description_kind":"markdown","optional":true,"sensitive":true},"title":{"type":"string","description":"The templated title of the message to send.","description_kind":"markdown","optional":true},"to_user":{"type":"string","description":"The ID of user that should receive the message. Multiple entries should be separated by '|'. Default: @all.","description_kind":"markdown","optional":true},"uid":{"type":"string","description":"The UID of the contact point.","description_kind":"markdown","computed":true},"url":{"type":"string","description":"The WeCom webhook URL. Required if using GroupRobot.","description_kind":"markdown","optional":true,"sensitive":true}},"description":"A contact point that sends notifications to WeCom.","description_kind":"markdown"}}},"description":"\nManages Grafana Alerting contact points.\n\n* [Official documentation](https://grafana.com/docs/grafana/latest/alerting/set-up/provision-alerting-resources/terraform-provisioning/)\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","description_kind":"markdown"}},"grafana_dashboard":{"version":1,"block":{"attributes":{"config_json":{"type":"string","description":"The complete dashboard model JSON.","description_kind":"markdown","required":true},"dashboard_id":{"type":"number","description":"The numeric ID of the dashboard computed by Grafana.","description_kind":"markdown","computed":true},"folder":{"type":"string","description":"The id or UID of the folder to save the dashboard in.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"message":{"type":"string","description":"Set a commit message for the version history.","description_kind":"markdown","optional":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"overwrite":{"type":"bool","description":"Set to true if you want to overwrite existing dashboard with newer version, same dashboard title in folder or same dashboard uid.","description_kind":"markdown","optional":true},"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.","description_kind":"markdown","computed":true},"url":{"type":"string","description":"The full URL of the dashboard.","description_kind":"markdown","computed":true},"version":{"type":"number","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.","description_kind":"markdown","computed":true}},"description":"\nManages 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","description_kind":"markdown"}},"grafana_dashboard_permission":{"version":0,"block":{"attributes":{"dashboard_uid":{"type":"string","description":"UID of the dashboard to apply permissions to.","description_kind":"markdown","optional":true,"computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true}},"block_types":{"permissions":{"nesting_mode":"set","block":{"attributes":{"permission":{"type":"string","description":"Permission to associate with item. Must be one of `View`, `Edit`, or `Admin`.","description_kind":"markdown","required":true},"role":{"type":"string","description":"Name of the basic role to manage permissions for. Options: `Viewer`, `Editor` or `Admin`.","description_kind":"markdown","optional":true},"team_id":{"type":"string","description":"ID of the team to manage permissions for. Defaults to `0`.","description_kind":"markdown","optional":true},"user_id":{"type":"string","description":"ID of the user or service account to manage permissions for. Defaults to `0`.","description_kind":"markdown","optional":true}},"description":"The permission items to add/update. Items that are omitted from the list will be removed.","description_kind":"markdown"}}},"description":"\nManages 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","description_kind":"markdown"}},"grafana_dashboard_permission_item":{"version":0,"block":{"attributes":{"dashboard_uid":{"type":"string","description":"The UID of the dashboard.","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","computed":true},"org_id":{"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.","description_kind":"plain","optional":true,"computed":true},"permission":{"type":"string","description":"the permission to be assigned","description_kind":"plain","required":true},"role":{"type":"string","description":"the role onto which the permission is to be assigned","description_kind":"plain","optional":true},"team":{"type":"string","description":"the team onto which the permission is to be assigned","description_kind":"plain","optional":true},"user":{"type":"string","description":"the user or service account onto which the permission is to be assigned","description_kind":"plain","optional":true}},"description":"Manages a single permission item for a dashboard. Conflicts with the \"grafana_dashboard_permission\" resource which manages the entire set of permissions for a dashboard.","description_kind":"markdown"}},"grafana_dashboard_public":{"version":0,"block":{"attributes":{"access_token":{"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.","description_kind":"markdown","optional":true,"computed":true},"annotations_enabled":{"type":"bool","description":"Set to `true` to show annotations. The default value is `false`.","description_kind":"markdown","optional":true},"dashboard_uid":{"type":"string","description":"The unique identifier of the original dashboard.","description_kind":"markdown","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"is_enabled":{"type":"bool","description":"Set to `true` to enable the public dashboard. The default value is `false`.","description_kind":"markdown","optional":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"share":{"type":"string","description":"Set the share mode. The default value is `public`.","description_kind":"markdown","optional":true},"time_selection_enabled":{"type":"bool","description":"Set to `true` to enable the time picker in the public dashboard. The default value is `false`.","description_kind":"markdown","optional":true},"uid":{"type":"string","description":"The unique identifier of a public dashboard. It's automatically generated if not provided when creating a public dashboard.","description_kind":"markdown","optional":true,"computed":true}},"description":"\nManages 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","description_kind":"markdown"}},"grafana_data_source":{"version":1,"block":{"attributes":{"access_mode":{"type":"string","description":"The method by which Grafana will access the data source: `proxy` or `direct`. Defaults to `proxy`.","description_kind":"markdown","optional":true},"basic_auth_enabled":{"type":"bool","description":"Whether to enable basic auth for the data source. Defaults to `false`.","description_kind":"markdown","optional":true},"basic_auth_username":{"type":"string","description":"Basic auth username. Defaults to ``.","description_kind":"markdown","optional":true},"database_name":{"type":"string","description":"(Required by some data source types) The name of the database to use on the selected data source server. Defaults to ``.","description_kind":"markdown","optional":true},"http_headers":{"type":["map","string"],"description":"Custom HTTP headers","description_kind":"markdown","optional":true,"sensitive":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"is_default":{"type":"bool","description":"Whether to set the data source as default. This should only be `true` to a single data source. Defaults to `false`.","description_kind":"markdown","optional":true},"json_data_encoded":{"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.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"A unique name for the data source.","description_kind":"markdown","required":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"private_data_source_connect_network_id":{"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 ``.","description_kind":"markdown","optional":true},"secure_json_data_encoded":{"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.","description_kind":"markdown","optional":true,"sensitive":true},"type":{"type":"string","description":"The data source type. Must be one of the supported data source keywords.","description_kind":"markdown","required":true},"uid":{"type":"string","description":"Unique identifier. If unset, this will be automatically generated.","description_kind":"markdown","optional":true,"computed":true},"url":{"type":"string","description":"The URL for the data source. The type of URL required varies depending on the chosen data source type.","description_kind":"markdown","optional":true},"username":{"type":"string","description":"(Required by some data source types) The username to use to authenticate to the data source. Defaults to ``.","description_kind":"markdown","optional":true}},"description":"\n* [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","description_kind":"markdown"}},"grafana_data_source_config":{"version":0,"block":{"attributes":{"http_headers":{"type":["map","string"],"description":"Custom HTTP headers","description_kind":"markdown","optional":true,"sensitive":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"json_data_encoded":{"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.","description_kind":"markdown","optional":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"secure_json_data_encoded":{"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.","description_kind":"markdown","optional":true,"sensitive":true},"uid":{"type":"string","description":"Unique identifier. If unset, this will be automatically generated.","description_kind":"markdown","optional":true,"computed":true}},"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 (`json_data_encoded` field) requires circular references like in the example below.\n\n\u003e When using the `grafana_data_source_config` resource, the corresponding `grafana_data_source` resources must have the `json_data_encoded` and `http_headers` fields ignored. Otherwise, an infinite update loop will occur. See the example below.\n","description_kind":"markdown"}},"grafana_data_source_config_lbac_rules":{"version":0,"block":{"attributes":{"datasource_uid":{"type":"string","description":"The UID of the datasource.","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","computed":true},"rules":{"type":"string","description":"JSON-encoded LBAC rules for the data source. Map of team UIDs to lists of rule strings.","description_kind":"plain","required":true}},"description":"\nManages 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","description_kind":"markdown"}},"grafana_data_source_permission":{"version":0,"block":{"attributes":{"datasource_uid":{"type":"string","description":"UID of the datasource to apply permissions to.","description_kind":"markdown","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true}},"block_types":{"permissions":{"nesting_mode":"set","block":{"attributes":{"built_in_role":{"type":"string","description":"Name of the basic role to manage permissions for. Options: `Viewer`, `Editor` or `Admin`.","description_kind":"markdown","optional":true},"permission":{"type":"string","description":"Permission to associate with item. Options: `Query`, `Edit` or `Admin` (`Admin` can only be used with Grafana v10.3.0+).","description_kind":"markdown","required":true},"team_id":{"type":"string","description":"ID of the team to manage permissions for. Defaults to `0`.","description_kind":"markdown","optional":true},"user_id":{"type":"string","description":"ID of the user or service account to manage permissions for. Defaults to `0`.","description_kind":"markdown","optional":true}},"description":"The permission items to add/update. Items that are omitted from the list will be removed.","description_kind":"markdown"}}},"description":"\nManages 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","description_kind":"markdown"}},"grafana_data_source_permission_item":{"version":0,"block":{"attributes":{"datasource_uid":{"type":"string","description":"The UID of the datasource.","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","computed":true},"org_id":{"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.","description_kind":"plain","optional":true,"computed":true},"permission":{"type":"string","description":"the permission to be assigned","description_kind":"plain","required":true},"role":{"type":"string","description":"the role onto which the permission is to be assigned","description_kind":"plain","optional":true},"team":{"type":"string","description":"the team onto which the permission is to be assigned","description_kind":"plain","optional":true},"user":{"type":"string","description":"the user or service account onto which the permission is to be assigned","description_kind":"plain","optional":true}},"description":"Manages a single permission item for a datasource. Conflicts with the \"grafana_data_source_permission\" resource which manages the entire set of permissions for a datasource.","description_kind":"markdown"}},"grafana_fleet_management_collector":{"version":0,"block":{"attributes":{"enabled":{"type":"bool","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","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description":"ID of the collector","description_kind":"plain","required":true},"remote_attributes":{"type":["map","string"],"description":"Remote attributes for the collector","description_kind":"plain","optional":true,"computed":true}},"description":"\nManages 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\nRequired access policy scopes:\n\n* fleet-management:read\n* fleet-management:write\n","description_kind":"plain"}},"grafana_fleet_management_pipeline":{"version":0,"block":{"attributes":{"contents":{"type":"string","description":"Configuration contents of the pipeline to be used by collectors","description_kind":"plain","required":true},"enabled":{"type":"bool","description":"Whether the pipeline is enabled for collectors","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description":"Server-assigned ID of the pipeline","description_kind":"plain","computed":true},"matchers":{"type":["list","string"],"description":"Used to match against collectors and assign pipelines to them; follows the syntax of Prometheus Alertmanager matchers","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Name of the pipeline which is the unique identifier for the pipeline","description_kind":"plain","required":true}},"description":"\nManages 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\nRequired access policy scopes:\n\n* fleet-management:read\n* fleet-management:write\n","description_kind":"plain"}},"grafana_folder":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"parent_folder_uid":{"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.","description_kind":"markdown","optional":true},"prevent_destroy_if_not_empty":{"type":"bool","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 `false`.","description_kind":"markdown","optional":true},"title":{"type":"string","description":"The title of the folder.","description_kind":"markdown","required":true},"uid":{"type":"string","description":"Unique identifier.","description_kind":"markdown","optional":true,"computed":true},"url":{"type":"string","description":"The full URL of the folder.","description_kind":"markdown","computed":true}},"description":"\n* [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","description_kind":"markdown"}},"grafana_folder_permission":{"version":0,"block":{"attributes":{"folder_uid":{"type":"string","description":"The UID of the folder.","description_kind":"markdown","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true}},"block_types":{"permissions":{"nesting_mode":"set","block":{"attributes":{"permission":{"type":"string","description":"Permission to associate with item. Must be one of `View`, `Edit`, or `Admin`.","description_kind":"markdown","required":true},"role":{"type":"string","description":"Name of the basic role to manage permissions for. Options: `Viewer`, `Editor` or `Admin`.","description_kind":"markdown","optional":true},"team_id":{"type":"string","description":"ID of the team to manage permissions for. Defaults to `0`.","description_kind":"markdown","optional":true},"user_id":{"type":"string","description":"ID of the user or service account to manage permissions for. Defaults to `0`.","description_kind":"markdown","optional":true}},"description":"The permission items to add/update. Items that are omitted from the list will be removed.","description_kind":"markdown"}}},"description":"\nManages 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","description_kind":"markdown"}},"grafana_folder_permission_item":{"version":0,"block":{"attributes":{"folder_uid":{"type":"string","description":"The UID of the folder.","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","computed":true},"org_id":{"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.","description_kind":"plain","optional":true,"computed":true},"permission":{"type":"string","description":"the permission to be assigned","description_kind":"plain","required":true},"role":{"type":"string","description":"the role onto which the permission is to be assigned","description_kind":"plain","optional":true},"team":{"type":"string","description":"the team onto which the permission is to be assigned","description_kind":"plain","optional":true},"user":{"type":"string","description":"the user or service account onto which the permission is to be assigned","description_kind":"plain","optional":true}},"description":"Manages a single permission item for a folder. Conflicts with the \"grafana_folder_permission\" 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/)","description_kind":"markdown"}},"grafana_frontend_o11y_app":{"version":0,"block":{"attributes":{"allowed_origins":{"type":["list","string"],"description":"A list of allowed origins for CORS.","description_kind":"plain","required":true},"collector_endpoint":{"type":"string","description":"The collector URL Grafana Cloud Frontend Observability. Use this endpoint to send your Telemetry.","description_kind":"plain","computed":true},"extra_log_attributes":{"type":["map","string"],"description":"The extra attributes to append in each signal.","description_kind":"plain","required":true},"id":{"type":"number","description":"The Terraform Resource ID. This is auto-generated from Frontend Observability API.","description_kind":"plain","computed":true},"name":{"type":"string","description":"The name of Frontend Observability App. Part of the Terraform Resource ID.","description_kind":"plain","required":true},"settings":{"type":["map","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}`","description_kind":"markdown","required":true},"stack_id":{"type":"number","description":"The Stack ID of the Grafana Cloud instance. Part of the Terraform Resource ID.","description_kind":"plain","required":true}},"description_kind":"plain"}},"grafana_k6_installation":{"version":0,"block":{"attributes":{"cloud_access_policy_token":{"type":"string","description":"The [Grafana Cloud access policy](https://grafana.com/docs/grafana-cloud/account-management/authentication-and-permissions/access-policies/).","description_kind":"markdown","required":true,"sensitive":true},"grafana_sa_token":{"type":"string","description":"The [service account](https://grafana.com/docs/grafana/latest/administration/service-accounts/) token.","description_kind":"markdown","required":true,"sensitive":true},"grafana_user":{"type":"string","description":"The user to use for the installation.","description_kind":"markdown","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"k6_access_token":{"type":"string","description":"Generated token to access the k6 API.","description_kind":"markdown","computed":true,"sensitive":true},"k6_organization":{"type":"string","description":"The identifier of the k6 organization.","description_kind":"markdown","computed":true},"stack_id":{"type":"string","description":"The identifier of the stack to install k6 on.","description_kind":"markdown","required":true}},"description":"\nSets 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","description_kind":"markdown"}},"grafana_k6_load_test":{"version":1,"block":{"attributes":{"baseline_test_run_id":{"type":"string","description":"Identifier of a baseline test run used for results comparison.","description_kind":"plain","optional":true},"created":{"type":"string","description":"The date when the load test was created.","description_kind":"plain","computed":true},"id":{"type":"string","description":"Numeric identifier of the load test.","description_kind":"plain","computed":true},"name":{"type":"string","description":"Human-friendly identifier of the load test.","description_kind":"plain","required":true},"project_id":{"type":"string","description":"The identifier of the project this load test belongs to.","description_kind":"plain","required":true},"script":{"type":"string","description":"The k6 test script content. Can be provided inline or via the `file()` function.","description_kind":"plain","required":true},"updated":{"type":"string","description":"The date when the load test was last updated.","description_kind":"plain","computed":true}},"description":"Manages a k6 load test.","description_kind":"plain"}},"grafana_k6_project":{"version":1,"block":{"attributes":{"created":{"type":"string","description":"The date when the project was created.","description_kind":"plain","computed":true},"grafana_folder_uid":{"type":"string","description":"The Grafana folder uid.","description_kind":"plain","computed":true},"id":{"type":"string","description":"Numeric identifier of the project.","description_kind":"plain","computed":true},"is_default":{"type":"bool","description":"Use this project as default for running tests when no explicit project identifier is provided.","description_kind":"plain","computed":true},"name":{"type":"string","description":"Human-friendly identifier of the project.","description_kind":"plain","required":true},"updated":{"type":"string","description":"The date when the project was last updated.","description_kind":"plain","computed":true}},"description":"Manages a k6 project.","description_kind":"plain"}},"grafana_k6_project_allowed_load_zones":{"version":0,"block":{"attributes":{"allowed_load_zones":{"type":["list","string"],"description":"List of allowed private k6 load zone IDs for this project.","description_kind":"plain","required":true},"id":{"type":"string","description":"The identifier of the project. This is set to the same as the project_id.","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"The identifier of the project to manage private allowed load zones for.","description_kind":"plain","required":true}},"description":"Manages allowed private load zones for a k6 project.","description_kind":"plain"}},"grafana_k6_project_limits":{"version":1,"block":{"attributes":{"duration_max_per_test":{"type":"number","description":"Maximum duration of a test in seconds.","description_kind":"plain","optional":true},"id":{"type":"string","description":"The identifier of the project limits. This is the same as the project_id.","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"The identifier of the project to manage limits for.","description_kind":"plain","required":true},"vu_browser_max_per_test":{"type":"number","description":"Maximum number of concurrent browser virtual users (VUs) used in one test.","description_kind":"plain","optional":true},"vu_max_per_test":{"type":"number","description":"Maximum number of concurrent virtual users (VUs) used in one test.","description_kind":"plain","optional":true},"vuh_max_per_month":{"type":"number","description":"Maximum amount of virtual user hours (VU/h) used per one calendar month.","description_kind":"plain","optional":true}},"description":"Manages limits for a k6 project.","description_kind":"plain"}},"grafana_k6_schedule":{"version":0,"block":{"attributes":{"created_by":{"type":"string","description":"The email of the user who created the schedule.","description_kind":"plain","computed":true},"deactivated":{"type":"bool","description":"Whether the schedule is deactivated.","description_kind":"plain","computed":true},"id":{"type":"string","description":"Numeric identifier of the schedule.","description_kind":"plain","computed":true},"load_test_id":{"type":"string","description":"The identifier of the load test to schedule.","description_kind":"plain","required":true},"next_run":{"type":"string","description":"The next scheduled execution time.","description_kind":"plain","computed":true},"starts":{"type":"string","description":"The start time for the schedule (RFC3339 format).","description_kind":"plain","required":true}},"block_types":{"recurrence_rule":{"nesting_mode":"single","block":{"attributes":{"byday":{"type":["list","string"],"description":"The weekdays when the 'WEEKLY' recurrence will be applied (e.g., ['MO', 'WE', 'FR']). Cannot be set for other frequencies.","description_kind":"plain","optional":true},"count":{"type":"number","description":"How many times the recurrence will repeat.","description_kind":"plain","optional":true},"frequency":{"type":"string","description":"The frequency of the schedule (HOURLY, DAILY, WEEKLY, MONTHLY, YEARLY).","description_kind":"plain","optional":true},"interval":{"type":"number","description":"The interval between each frequency iteration (e.g., 2 = every 2 hours for HOURLY). Defaults to 1.","description_kind":"plain","optional":true,"computed":true},"until":{"type":"string","description":"The end time for the recurrence (RFC3339 format).","description_kind":"plain","optional":true}},"description":"The schedule recurrence settings. If not specified, the test will run only once on the 'starts' date.","description_kind":"plain"}}},"description":"Manages a k6 schedule for automated test execution.","description_kind":"plain"}},"grafana_library_panel":{"version":0,"block":{"attributes":{"created":{"type":"string","description":"Timestamp when the library panel was created.","description_kind":"markdown","computed":true},"dashboard_ids":{"type":["list","number"],"description":"Numerical IDs of Grafana dashboards containing the library panel.","description_kind":"markdown","computed":true},"description":{"type":"string","description":"Description of the library panel.","description_kind":"markdown","computed":true},"folder_name":{"type":"string","description":"Name of the folder containing the library panel.","description_kind":"markdown","computed":true},"folder_uid":{"type":"string","description":"Unique ID (UID) of the folder containing the library panel.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"model_json":{"type":"string","description":"The JSON model for the library panel.","description_kind":"markdown","required":true},"name":{"type":"string","description":"Name of the library panel.","description_kind":"markdown","required":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"panel_id":{"type":"number","description":"The numeric ID of the library panel computed by Grafana.","description_kind":"markdown","computed":true},"type":{"type":"string","description":"Type of the library panel (eg. text).","description_kind":"markdown","computed":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.","description_kind":"markdown","optional":true,"computed":true},"updated":{"type":"string","description":"Timestamp when the library panel was last modified.","description_kind":"markdown","computed":true},"version":{"type":"number","description":"Version of the library panel.","description_kind":"markdown","computed":true}},"description":"\nManages 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","description_kind":"markdown"}},"grafana_machine_learning_alert":{"version":0,"block":{"attributes":{"annotations":{"type":["map","string"],"description":"Annotations to add to the alert generated in Grafana.","description_kind":"plain","optional":true},"anomaly_condition":{"type":"string","description":"The condition for when to consider a point as anomalous.","description_kind":"plain","optional":true},"for":{"type":"string","description":"How long values must be anomalous before firing an alert.","description_kind":"plain","optional":true,"computed":true},"id":{"type":"string","description":"The ID of the alert.","description_kind":"plain","computed":true},"job_id":{"type":"string","description":"The forecast this alert belongs to.","description_kind":"plain","optional":true},"labels":{"type":["map","string"],"description":"Labels to add to the alert generated in Grafana.","description_kind":"plain","optional":true},"no_data_state":{"type":"string","description":"How the alert should be processed when no data is returned by the underlying series","description_kind":"plain","optional":true},"outlier_id":{"type":"string","description":"The forecast this alert belongs to.","description_kind":"plain","optional":true},"threshold":{"type":"string","description":"The threshold of points over the window that need to be anomalous to alert.","description_kind":"plain","optional":true},"title":{"type":"string","description":"The title of the alert.","description_kind":"plain","required":true},"window":{"type":"string","description":"How much time to average values over","description_kind":"plain","optional":true,"computed":true}},"description_kind":"plain"}},"grafana_machine_learning_holiday":{"version":0,"block":{"attributes":{"description":{"type":"string","description":"A description of the holiday.","description_kind":"markdown","optional":true},"ical_timezone":{"type":"string","description":"The timezone to use for events in the iCal file pointed to by ical_url.","description_kind":"markdown","optional":true},"ical_url":{"type":"string","description":"A URL to an iCal file containing all occurrences of the holiday.","description_kind":"markdown","optional":true},"id":{"type":"string","description":"The ID of the holiday.","description_kind":"markdown","computed":true},"name":{"type":"string","description":"The name of the holiday.","description_kind":"markdown","required":true}},"block_types":{"custom_periods":{"nesting_mode":"list","block":{"attributes":{"end_time":{"type":"string","description_kind":"plain","required":true},"name":{"type":"string","description":"The name of the custom period.","description_kind":"markdown","optional":true},"start_time":{"type":"string","description_kind":"plain","required":true}},"description":"A list of custom periods for the holiday.","description_kind":"markdown"}}},"description":"\nA 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 `holidays` attribute of a `grafana_machine_learning_job`:\n\n```terraform\nresource \"grafana_machine_learning_job\" \"test_job\" {\n  ...\n  holidays = [\n    grafana_machine_learning_holiday.my_holiday.id\n  ]\n}\n```","description_kind":"markdown"}},"grafana_machine_learning_job":{"version":0,"block":{"attributes":{"custom_labels":{"type":["map","string"],"description":"An object representing the custom labels added on the forecast.","description_kind":"markdown","optional":true},"datasource_type":{"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.","description_kind":"markdown","required":true},"datasource_uid":{"type":"string","description":"The uid of the datasource to query.","description_kind":"markdown","required":true},"description":{"type":"string","description":"A description of the job.","description_kind":"markdown","optional":true},"holidays":{"type":["list","string"],"description":"A list of holiday IDs or names to take into account when training the model.","description_kind":"markdown","optional":true},"hyper_params":{"type":["map","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. Defaults to `map[]`.","description_kind":"markdown","optional":true},"id":{"type":"string","description":"The ID of the job.","description_kind":"markdown","computed":true},"interval":{"type":"number","description":"The data interval in seconds to train the data on. Defaults to `300`.","description_kind":"markdown","optional":true},"metric":{"type":"string","description":"The metric used to query the job results.","description_kind":"markdown","required":true},"name":{"type":"string","description":"The name of the job.","description_kind":"markdown","required":true},"query_params":{"type":["map","string"],"description":"An object representing the query params to query Grafana with.","description_kind":"markdown","required":true},"training_window":{"type":"number","description":"The data interval in seconds to train the data on. Defaults to `7776000`.","description_kind":"markdown","optional":true}},"description":"\nA 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 `hyper_params` field.","description_kind":"markdown"}},"grafana_machine_learning_outlier_detector":{"version":0,"block":{"attributes":{"datasource_type":{"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.","description_kind":"markdown","required":true},"datasource_uid":{"type":"string","description":"The uid of the datasource to query.","description_kind":"markdown","required":true},"description":{"type":"string","description":"A description of the outlier detector.","description_kind":"markdown","optional":true},"id":{"type":"string","description":"The ID of the outlier detector.","description_kind":"markdown","computed":true},"interval":{"type":"number","description":"The data interval in seconds to monitor. Defaults to `300`.","description_kind":"markdown","optional":true},"metric":{"type":"string","description":"The metric used to query the outlier detector results.","description_kind":"markdown","required":true},"name":{"type":"string","description":"The name of the outlier detector.","description_kind":"markdown","required":true},"query_params":{"type":["map","string"],"description":"An object representing the query params to query Grafana with.","description_kind":"markdown","required":true}},"block_types":{"algorithm":{"nesting_mode":"set","block":{"attributes":{"name":{"type":"string","description":"The name of the algorithm to use ('mad' or 'dbscan').","description_kind":"markdown","required":true},"sensitivity":{"type":"number","description":"Specify the sensitivity of the detector (in range [0,1]).","description_kind":"markdown","required":true}},"block_types":{"config":{"nesting_mode":"set","block":{"attributes":{"epsilon":{"type":"number","description":"Specify the epsilon parameter (positive float)","description_kind":"markdown","required":true}},"description":"For DBSCAN only, specify the configuration map","description_kind":"markdown"},"max_items":1}},"description":"The algorithm to use and its configuration. See https://grafana.com/docs/grafana-cloud/machine-learning/outlier-detection/ for details.","description_kind":"markdown"},"min_items":1,"max_items":1}},"description":"\nAn 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","description_kind":"markdown"}},"grafana_message_template":{"version":0,"block":{"attributes":{"disable_provenance":{"type":"bool","description":"Allow modifying the message template from other sources than Terraform or the Grafana API. Defaults to `false`.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The name of the notification template group.","description_kind":"markdown","required":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"template":{"type":"string","description":"The content of the notification template group.","description_kind":"markdown","required":true}},"description":"\nManages Grafana Alerting notification template groups, including notification templates.\n\n* [Official documentation](https://grafana.com/docs/grafana/latest/alerting/set-up/provision-alerting-resources/terraform-provisioning/)\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","description_kind":"markdown"}},"grafana_mute_timing":{"version":0,"block":{"attributes":{"disable_provenance":{"type":"bool","description":"Allow modifying the mute timing from other sources than Terraform or the Grafana API. Defaults to `false`.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The name of the mute timing.","description_kind":"markdown","required":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true}},"block_types":{"intervals":{"nesting_mode":"list","block":{"attributes":{"days_of_month":{"type":["list","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\".","description_kind":"markdown","optional":true},"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\"","description_kind":"markdown","optional":true},"months":{"type":["list","string"],"description":"An inclusive range of months, either numerical or full calendar month, e.g. \"1:3\", \"december\", or \"may:august\".","description_kind":"markdown","optional":true},"weekdays":{"type":["list","string"],"description":"An inclusive range of weekdays, e.g. \"monday\" or \"tuesday:thursday\".","description_kind":"markdown","optional":true},"years":{"type":["list","string"],"description":"A positive inclusive range of years, e.g. \"2030\" or \"2025:2026\".","description_kind":"markdown","optional":true}},"block_types":{"times":{"nesting_mode":"list","block":{"attributes":{"end":{"type":"string","description":"The time, in hh:mm format, of when the interval should end exclusively.","description_kind":"markdown","required":true},"start":{"type":"string","description":"The time, in hh:mm format, of when the interval should begin inclusively.","description_kind":"markdown","required":true}},"description":"The time ranges, represented in minutes, during which to mute in a given day.","description_kind":"markdown"}}},"description":"The time intervals at which to mute notifications. Use an empty block to mute all the time.","description_kind":"markdown"}}},"description":"\nManages Grafana Alerting mute timings.\n\n* [Official documentation](https://grafana.com/docs/grafana/latest/alerting/set-up/provision-alerting-resources/terraform-provisioning/)\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","description_kind":"markdown"}},"grafana_notification_policy":{"version":0,"block":{"attributes":{"contact_point":{"type":"string","description":"The default contact point to route all unmatched notifications to.","description_kind":"markdown","required":true},"disable_provenance":{"type":"bool","description":"Allow modifying the notification policy from other sources than Terraform or the Grafana API. Defaults to `false`.","description_kind":"markdown","optional":true},"group_by":{"type":["list","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.","description_kind":"markdown","required":true},"group_interval":{"type":"string","description":"Minimum time interval between two notifications for the same group. Default is 5 minutes.","description_kind":"markdown","optional":true},"group_wait":{"type":"string","description":"Time to wait to buffer alerts of the same group before sending a notification. Default is 30 seconds.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"repeat_interval":{"type":"string","description":"Minimum time interval for re-sending a notification if an alert is still firing. Default is 4 hours.","description_kind":"markdown","optional":true}},"block_types":{"policy":{"nesting_mode":"list","block":{"attributes":{"active_timings":{"type":["list","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","description_kind":"markdown","optional":true},"contact_point":{"type":"string","description":"The contact point to route notifications that match this rule to.","description_kind":"markdown","optional":true},"continue":{"type":"bool","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.","description_kind":"markdown","optional":true},"group_by":{"type":["list","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.","description_kind":"markdown","optional":true},"group_interval":{"type":"string","description":"Minimum time interval between two notifications for the same group. Default is 5 minutes.","description_kind":"markdown","optional":true},"group_wait":{"type":"string","description":"Time to wait to buffer alerts of the same group before sending a notification. Default is 30 seconds.","description_kind":"markdown","optional":true},"mute_timings":{"type":["list","string"],"description":"A list of time intervals to apply to alerts that match this policy to mute them for the specified time.","description_kind":"markdown","optional":true},"repeat_interval":{"type":"string","description":"Minimum time interval for re-sending a notification if an alert is still firing. Default is 4 hours.","description_kind":"markdown","optional":true}},"block_types":{"matcher":{"nesting_mode":"set","block":{"attributes":{"label":{"type":"string","description":"The name of the label to match against.","description_kind":"markdown","required":true},"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.","description_kind":"markdown","required":true},"value":{"type":"string","description":"The label value to match against.","description_kind":"markdown","required":true}},"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.","description_kind":"markdown"}},"policy":{"nesting_mode":"list","block":{"attributes":{"active_timings":{"type":["list","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","description_kind":"markdown","optional":true},"contact_point":{"type":"string","description":"The contact point to route notifications that match this rule to.","description_kind":"markdown","optional":true},"continue":{"type":"bool","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.","description_kind":"markdown","optional":true},"group_by":{"type":["list","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.","description_kind":"markdown","optional":true},"group_interval":{"type":"string","description":"Minimum time interval between two notifications for the same group. Default is 5 minutes.","description_kind":"markdown","optional":true},"group_wait":{"type":"string","description":"Time to wait to buffer alerts of the same group before sending a notification. Default is 30 seconds.","description_kind":"markdown","optional":true},"mute_timings":{"type":["list","string"],"description":"A list of time intervals to apply to alerts that match this policy to mute them for the specified time.","description_kind":"markdown","optional":true},"repeat_interval":{"type":"string","description":"Minimum time interval for re-sending a notification if an alert is still firing. Default is 4 hours.","description_kind":"markdown","optional":true}},"block_types":{"matcher":{"nesting_mode":"set","block":{"attributes":{"label":{"type":"string","description":"The name of the label to match against.","description_kind":"markdown","required":true},"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.","description_kind":"markdown","required":true},"value":{"type":"string","description":"The label value to match against.","description_kind":"markdown","required":true}},"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.","description_kind":"markdown"}},"policy":{"nesting_mode":"list","block":{"attributes":{"active_timings":{"type":["list","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","description_kind":"markdown","optional":true},"contact_point":{"type":"string","description":"The contact point to route notifications that match this rule to.","description_kind":"markdown","optional":true},"continue":{"type":"bool","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.","description_kind":"markdown","optional":true},"group_by":{"type":["list","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.","description_kind":"markdown","optional":true},"group_interval":{"type":"string","description":"Minimum time interval between two notifications for the same group. Default is 5 minutes.","description_kind":"markdown","optional":true},"group_wait":{"type":"string","description":"Time to wait to buffer alerts of the same group before sending a notification. Default is 30 seconds.","description_kind":"markdown","optional":true},"mute_timings":{"type":["list","string"],"description":"A list of time intervals to apply to alerts that match this policy to mute them for the specified time.","description_kind":"markdown","optional":true},"repeat_interval":{"type":"string","description":"Minimum time interval for re-sending a notification if an alert is still firing. Default is 4 hours.","description_kind":"markdown","optional":true}},"block_types":{"matcher":{"nesting_mode":"set","block":{"attributes":{"label":{"type":"string","description":"The name of the label to match against.","description_kind":"markdown","required":true},"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.","description_kind":"markdown","required":true},"value":{"type":"string","description":"The label value to match against.","description_kind":"markdown","required":true}},"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.","description_kind":"markdown"}},"policy":{"nesting_mode":"list","block":{"attributes":{"active_timings":{"type":["list","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","description_kind":"markdown","optional":true},"contact_point":{"type":"string","description":"The contact point to route notifications that match this rule to.","description_kind":"markdown","optional":true},"continue":{"type":"bool","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.","description_kind":"markdown","optional":true},"group_by":{"type":["list","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.","description_kind":"markdown","required":true},"group_interval":{"type":"string","description":"Minimum time interval between two notifications for the same group. Default is 5 minutes.","description_kind":"markdown","optional":true},"group_wait":{"type":"string","description":"Time to wait to buffer alerts of the same group before sending a notification. Default is 30 seconds.","description_kind":"markdown","optional":true},"mute_timings":{"type":["list","string"],"description":"A list of time intervals to apply to alerts that match this policy to mute them for the specified time.","description_kind":"markdown","optional":true},"repeat_interval":{"type":"string","description":"Minimum time interval for re-sending a notification if an alert is still firing. Default is 4 hours.","description_kind":"markdown","optional":true}},"block_types":{"matcher":{"nesting_mode":"set","block":{"attributes":{"label":{"type":"string","description":"The name of the label to match against.","description_kind":"markdown","required":true},"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.","description_kind":"markdown","required":true},"value":{"type":"string","description":"The label value to match against.","description_kind":"markdown","required":true}},"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.","description_kind":"markdown"}}},"description":"Routing rules for specific label sets.","description_kind":"markdown"}}},"description":"Routing rules for specific label sets.","description_kind":"markdown"}}},"description":"Routing rules for specific label sets.","description_kind":"markdown"}}},"description":"Routing rules for specific label sets.","description_kind":"markdown"}}},"description":"\nSets 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](https://grafana.com/docs/grafana/latest/alerting/set-up/provision-alerting-resources/terraform-provisioning/)\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","description_kind":"markdown"}},"grafana_oncall_escalation":{"version":0,"block":{"attributes":{"action_to_trigger":{"type":"string","description":"The ID of an Action for trigger_webhook type step.","description_kind":"markdown","optional":true},"duration":{"type":"number","description":"The duration of delay for wait type step. (60-86400) seconds","description_kind":"markdown","optional":true},"escalation_chain_id":{"type":"string","description":"The ID of the escalation chain.","description_kind":"markdown","required":true},"group_to_notify":{"type":"string","description":"The ID of a User Group for notify_user_group type step.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"important":{"type":"bool","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","description_kind":"markdown","optional":true},"notify_if_time_from":{"type":"string","description":"The beginning of the time interval for notify_if_time_from_to type step in UTC (for example 08:00:00Z).","description_kind":"markdown","optional":true},"notify_if_time_to":{"type":"string","description":"The end of the time interval for notify_if_time_from_to type step in UTC (for example 18:00:00Z).","description_kind":"markdown","optional":true},"notify_on_call_from_schedule":{"type":"string","description":"ID of a Schedule for notify_on_call_from_schedule type step.","description_kind":"markdown","optional":true},"notify_to_team_members":{"type":"string","description":"The ID of a Team for a notify_team_members type step.","description_kind":"markdown","optional":true},"persons_to_notify":{"type":["set","string"],"description":"The list of ID's of users for notify_persons type step.","description_kind":"markdown","optional":true},"persons_to_notify_next_each_time":{"type":["set","string"],"description":"The list of ID's of users for notify_person_next_each_time type step.","description_kind":"markdown","optional":true},"position":{"type":"number","description":"The position of the escalation step (starts from 0).","description_kind":"markdown","required":true},"severity":{"type":"string","description":"The severity of the incident for declare_incident type step.","description_kind":"markdown","optional":true},"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, repeat_escalation, notify_team_members, declare_incident","description_kind":"markdown","required":true}},"description":"\n* [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","description_kind":"markdown"}},"grafana_oncall_escalation_chain":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The name of the escalation chain.","description_kind":"markdown","required":true},"team_id":{"type":"string","description":"The ID of the OnCall team (using the `grafana_oncall_team` datasource).","description_kind":"markdown","optional":true}},"description":"\n* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/escalation_chains/)\n","description_kind":"markdown"}},"grafana_oncall_integration":{"version":0,"block":{"attributes":{"dynamic_labels":{"type":["list",["map","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 `grafana_oncall_label` datasource).","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"labels":{"type":["list",["map","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 `grafana_oncall_label` datasource).","description_kind":"markdown","optional":true},"link":{"type":"string","description":"The link for using in an integrated tool.","description_kind":"markdown","computed":true},"name":{"type":"string","description":"The name of the service integration.","description_kind":"markdown","required":true},"team_id":{"type":"string","description":"The ID of the OnCall team (using the `grafana_oncall_team` datasource).","description_kind":"markdown","optional":true},"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, heartbeat, demo, manual, stackdriver, uptimerobot, sentry_platform, zabbix, prtg, slack_channel, inbound_email, direct_paging, jira, zendesk.","description_kind":"markdown","required":true}},"block_types":{"default_route":{"nesting_mode":"list","block":{"attributes":{"escalation_chain_id":{"type":"string","description":"The ID of the escalation chain.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","computed":true}},"block_types":{"msteams":{"nesting_mode":"list","block":{"attributes":{"enabled":{"type":"bool","description":"Enable notification in MS teams. Defaults to `true`.","description_kind":"markdown","optional":true},"id":{"type":"string","description":"MS teams channel id. Alerts will be directed to this channel in Microsoft teams.","description_kind":"markdown","optional":true}},"description":"MS teams-specific settings for a route.","description_kind":"markdown"},"max_items":1},"slack":{"nesting_mode":"list","block":{"attributes":{"channel_id":{"type":"string","description":"Slack channel id. Alerts will be directed to this channel in Slack.","description_kind":"markdown","optional":true},"enabled":{"type":"bool","description":"Enable notification in Slack. Defaults to `true`.","description_kind":"markdown","optional":true}},"description":"Slack-specific settings for a route.","description_kind":"markdown"},"max_items":1},"telegram":{"nesting_mode":"list","block":{"attributes":{"enabled":{"type":"bool","description":"Enable notification in Telegram. Defaults to `true`.","description_kind":"markdown","optional":true},"id":{"type":"string","description":"Telegram channel id. Alerts will be directed to this channel in Telegram.","description_kind":"markdown","optional":true}},"description":"Telegram-specific settings for a route.","description_kind":"markdown"},"max_items":1}},"description":"The Default route for all alerts from the given integration","description_kind":"markdown"},"min_items":1,"max_items":1},"templates":{"nesting_mode":"list","block":{"attributes":{"acknowledge_signal":{"type":"string","description":"Template for sending a signal to acknowledge the Incident.","description_kind":"markdown","optional":true},"grouping_key":{"type":"string","description":"Template for the key by which alerts are grouped.","description_kind":"markdown","optional":true},"resolve_signal":{"type":"string","description":"Template for sending a signal to resolve the Incident.","description_kind":"markdown","optional":true},"source_link":{"type":"string","description":"Template for a source link.","description_kind":"markdown","optional":true}},"block_types":{"email":{"nesting_mode":"list","block":{"attributes":{"message":{"type":"string","description":"Template for Alert message.","description_kind":"markdown","optional":true},"title":{"type":"string","description":"Template for Alert title.","description_kind":"markdown","optional":true}},"description":"Templates for Email.","description_kind":"markdown"},"max_items":1},"microsoft_teams":{"nesting_mode":"list","block":{"attributes":{"image_url":{"type":"string","description":"Template for Alert image url.","description_kind":"markdown","optional":true},"message":{"type":"string","description":"Template for Alert message.","description_kind":"markdown","optional":true},"title":{"type":"string","description":"Template for Alert title.","description_kind":"markdown","optional":true}},"description":"Templates for Microsoft Teams. **NOTE**: Microsoft Teams templates are only available on Grafana Cloud.","description_kind":"markdown"},"max_items":1},"mobile_app":{"nesting_mode":"list","block":{"attributes":{"message":{"type":"string","description":"Template for Alert message.","description_kind":"markdown","optional":true},"title":{"type":"string","description":"Template for Alert title.","description_kind":"markdown","optional":true}},"description":"Templates for Mobile app push notifications.","description_kind":"markdown"},"max_items":1},"phone_call":{"nesting_mode":"list","block":{"attributes":{"title":{"type":"string","description":"Template for Alert title.","description_kind":"markdown","optional":true}},"description":"Templates for Phone Call.","description_kind":"markdown"},"max_items":1},"slack":{"nesting_mode":"list","block":{"attributes":{"image_url":{"type":"string","description":"Template for Alert image url.","description_kind":"markdown","optional":true},"message":{"type":"string","description":"Template for Alert message.","description_kind":"markdown","optional":true},"title":{"type":"string","description":"Template for Alert title.","description_kind":"markdown","optional":true}},"description":"Templates for Slack.","description_kind":"markdown"},"max_items":1},"sms":{"nesting_mode":"list","block":{"attributes":{"title":{"type":"string","description":"Template for Alert title.","description_kind":"markdown","optional":true}},"description":"Templates for SMS.","description_kind":"markdown"},"max_items":1},"telegram":{"nesting_mode":"list","block":{"attributes":{"image_url":{"type":"string","description":"Template for Alert image url.","description_kind":"markdown","optional":true},"message":{"type":"string","description":"Template for Alert message.","description_kind":"markdown","optional":true},"title":{"type":"string","description":"Template for Alert title.","description_kind":"markdown","optional":true}},"description":"Templates for Telegram.","description_kind":"markdown"},"max_items":1},"web":{"nesting_mode":"list","block":{"attributes":{"image_url":{"type":"string","description":"Template for Alert image url.","description_kind":"markdown","optional":true},"message":{"type":"string","description":"Template for Alert message.","description_kind":"markdown","optional":true},"title":{"type":"string","description":"Template for Alert title.","description_kind":"markdown","optional":true}},"description":"Templates for Web.","description_kind":"markdown"},"max_items":1}},"description":"Jinja2 templates for Alert payload. An empty templates block will be ignored.","description_kind":"markdown"},"max_items":1}},"description":"\n* [Official documentation](https://grafana.com/docs/oncall/latest/configure/integrations/)\n* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/)\n","description_kind":"markdown"}},"grafana_oncall_on_call_shift":{"version":0,"block":{"attributes":{"by_day":{"type":["set","string"],"description":"This parameter takes a list of days in iCal format. Can be MO, TU, WE, TH, FR, SA, SU","description_kind":"markdown","optional":true},"by_month":{"type":["set","number"],"description":"This parameter takes a list of months. Valid values are 1 to 12","description_kind":"markdown","optional":true},"by_monthday":{"type":["set","number"],"description":"This parameter takes a list of days of the month.  Valid values are 1 to 31 or -31 to -1","description_kind":"markdown","optional":true},"duration":{"type":"number","description":"The duration of the event.","description_kind":"markdown","required":true},"frequency":{"type":"string","description":"The frequency of the event. Can be hourly, daily, weekly, monthly","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"interval":{"type":"number","description":"The positive integer representing at which intervals the recurrence rule repeats.","description_kind":"markdown","optional":true},"level":{"type":"number","description":"The priority level. The higher the value, the higher the priority.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"The shift's name.","description_kind":"markdown","required":true},"rolling_users":{"type":["list",["set","string"]],"description":"The list of lists with on-call users (for rolling_users event type)","description_kind":"markdown","optional":true},"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\")","description_kind":"markdown","required":true},"start_rotation_from_user_index":{"type":"number","description":"The index of the list of users in rolling_users, from which on-call rotation starts.","description_kind":"markdown","optional":true},"team_id":{"type":"string","description":"The ID of the OnCall team (using the `grafana_oncall_team` datasource).","description_kind":"markdown","optional":true},"time_zone":{"type":"string","description":"The shift's timezone.  Overrides schedule's timezone.","description_kind":"markdown","optional":true},"type":{"type":"string","description":"The shift's type. Can be rolling_users, recurrent_event, single_event","description_kind":"markdown","required":true},"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\")","description_kind":"markdown","optional":true},"users":{"type":["set","string"],"description":"The list of on-call users (for single_event and recurrent_event event type).","description_kind":"markdown","optional":true},"week_start":{"type":"string","description":"Start day of the week in iCal format. Can be MO, TU, WE, TH, FR, SA, SU","description_kind":"markdown","optional":true}},"description":"\n* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/on_call_shifts/)\n","description_kind":"markdown"}},"grafana_oncall_outgoing_webhook":{"version":0,"block":{"attributes":{"authorization_header":{"type":"string","description":"The auth data of the webhook. Used in Authorization header instead of user/password auth.","description_kind":"markdown","optional":true,"sensitive":true},"data":{"type":"string","description":"The data of the webhook.","description_kind":"markdown","optional":true},"forward_whole_payload":{"type":"bool","description":"Toggle to send the entire webhook payload instead of using the values in the Data field.","description_kind":"markdown","optional":true},"headers":{"type":"string","description":"Headers to add to the outgoing webhook request.","description_kind":"markdown","optional":true},"http_method":{"type":"string","description":"The HTTP method used in the request made by the outgoing webhook. Defaults to `POST`.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"integration_filter":{"type":["list","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.","description_kind":"markdown","optional":true},"is_webhook_enabled":{"type":"bool","description":"Controls whether the outgoing webhook will trigger or is ignored. Defaults to `true`.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"The name of the outgoing webhook.","description_kind":"markdown","required":true},"password":{"type":"string","description":"The auth data of the webhook. Used for Basic authentication","description_kind":"markdown","optional":true,"sensitive":true},"preset":{"type":"string","description":"The preset of the outgoing webhook. Possible values are: `simple_webhook`, `advanced_webhook`, `grafana_sift`, `incident_webhook`. If no preset is set, the default preset is `advanced_webhook`.","description_kind":"markdown","optional":true},"team_id":{"type":"string","description":"The ID of the OnCall team (using the `grafana_oncall_team` datasource).","description_kind":"markdown","optional":true},"trigger_template":{"type":"string","description":"A template used to dynamically determine whether the webhook should execute based on the content of the payload.","description_kind":"markdown","optional":true},"trigger_type":{"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: `escalation`, `alert group created`, `status change`, `acknowledge`, `resolve`, `silence`, `unsilence`, `unresolve`, `unacknowledge`, `resolution note added`, `personal notification`; for incident webhooks: `incident declared`, `incident changed`, `incident resolved`. Defaults to `escalation`.","description_kind":"markdown","optional":true},"url":{"type":"string","description":"The webhook URL. Required when not using a preset that controls this field.","description_kind":"markdown","optional":true},"user":{"type":"string","description":"Username to use when making the outgoing webhook request.","description_kind":"markdown","optional":true}},"description":"\n* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/outgoing_webhooks/)\n","description_kind":"markdown"}},"grafana_oncall_route":{"version":0,"block":{"attributes":{"escalation_chain_id":{"type":"string","description":"The ID of the escalation chain.","description_kind":"markdown","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"integration_id":{"type":"string","description":"The ID of the integration.","description_kind":"markdown","required":true},"position":{"type":"number","description":"The position of the route (starts from 0).","description_kind":"markdown","required":true},"routing_regex":{"type":"string","description":"Python Regex query. Route is chosen for an alert if there is a match inside the alert payload.","description_kind":"markdown","required":true},"routing_type":{"type":"string","description":"The type of route. Can be jinja2, regex Defaults to `regex`.","description_kind":"markdown","optional":true}},"block_types":{"msteams":{"nesting_mode":"list","block":{"attributes":{"enabled":{"type":"bool","description":"Enable notification in MS teams. Defaults to `true`.","description_kind":"markdown","optional":true},"id":{"type":"string","description":"MS teams channel id. Alerts will be directed to this channel in Microsoft teams.","description_kind":"markdown","optional":true}},"description":"MS teams-specific settings for a route.","description_kind":"markdown"},"max_items":1},"slack":{"nesting_mode":"list","block":{"attributes":{"channel_id":{"type":"string","description":"Slack channel id. Alerts will be directed to this channel in Slack.","description_kind":"markdown","optional":true},"enabled":{"type":"bool","description":"Enable notification in Slack. Defaults to `true`.","description_kind":"markdown","optional":true}},"description":"Slack-specific settings for a route.","description_kind":"markdown"},"max_items":1},"telegram":{"nesting_mode":"list","block":{"attributes":{"enabled":{"type":"bool","description":"Enable notification in Telegram. Defaults to `true`.","description_kind":"markdown","optional":true},"id":{"type":"string","description":"Telegram channel id. Alerts will be directed to this channel in Telegram.","description_kind":"markdown","optional":true}},"description":"Telegram-specific settings for a route.","description_kind":"markdown"},"max_items":1}},"description":"\n* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/routes/)\n","description_kind":"markdown"}},"grafana_oncall_schedule":{"version":0,"block":{"attributes":{"enable_web_overrides":{"type":"bool","description":"Enable overrides via web UI (it will ignore ical_url_overrides).","description_kind":"markdown","optional":true},"ical_url_overrides":{"type":"string","description":"The URL of external iCal calendar which override primary events.","description_kind":"markdown","optional":true},"ical_url_primary":{"type":"string","description":"The URL of the external calendar iCal file.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The schedule's name.","description_kind":"markdown","required":true},"shifts":{"type":["set","string"],"description":"The list of ID's of on-call shifts.","description_kind":"markdown","optional":true},"team_id":{"type":"string","description":"The ID of the OnCall team (using the `grafana_oncall_team` datasource).","description_kind":"markdown","optional":true},"time_zone":{"type":"string","description":"The schedule's time zone.","description_kind":"markdown","optional":true},"type":{"type":"string","description":"The schedule's type. Valid values are `ical`, `calendar`, `web`.","description_kind":"markdown","required":true}},"block_types":{"slack":{"nesting_mode":"list","block":{"attributes":{"channel_id":{"type":"string","description":"Slack channel id. Reminder about schedule shifts will be directed to this channel in Slack.","description_kind":"markdown","optional":true},"user_group_id":{"type":"string","description":"Slack user group id. Members of user group will be updated when on-call users change.","description_kind":"markdown","optional":true}},"description":"The Slack-specific settings for a schedule.","description_kind":"markdown"},"max_items":1}},"description":"\n* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/schedules/)\n","description_kind":"markdown"}},"grafana_oncall_user_notification_rule":{"version":0,"block":{"attributes":{"duration":{"type":"number","description":"A time in seconds to wait (when `type=wait`). Can be 60, 300, 900, 1800, 3600","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","computed":true},"important":{"type":"bool","description":"Boolean value which indicates if a rule is “important”","description_kind":"markdown","optional":true,"computed":true},"position":{"type":"number","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.","description_kind":"markdown","optional":true},"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: `notify_by_msteams` is only available for Grafana Cloud customers.","description_kind":"markdown","required":true},"user_id":{"type":"string","description":"User ID","description_kind":"markdown","required":true}},"description":"\n* [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","description_kind":"markdown"}},"grafana_organization":{"version":0,"block":{"attributes":{"admin_user":{"type":"string","description":"The login name of the configured default admin user for the Grafana\ninstallation. If unset, this value defaults to admin, the Grafana default.\nGrafana adds the default admin user to all organizations automatically upon\ncreation, and this parameter keeps Terraform from removing it from\norganizations.\n Defaults to `admin`.","description_kind":"markdown","optional":true},"admins":{"type":["set","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.","description_kind":"markdown","optional":true},"create_users":{"type":"bool","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.\n Defaults to `true`.","description_kind":"markdown","optional":true},"editors":{"type":["set","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.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The display name for the Grafana organization created.","description_kind":"markdown","required":true},"org_id":{"type":"number","description":"The organization id assigned to this organization by Grafana.","description_kind":"markdown","computed":true},"users_without_access":{"type":["set","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+.","description_kind":"markdown","optional":true},"viewers":{"type":["set","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.","description_kind":"markdown","optional":true}},"description":"\n* [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","description_kind":"markdown"}},"grafana_organization_preferences":{"version":0,"block":{"attributes":{"home_dashboard_uid":{"type":"string","description":"The Organization home dashboard UID. This is only available in Grafana 9.0+.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"theme":{"type":"string","description":"The Organization theme. Available values are `light`, `dark`, `system`, or an empty string for the default.","description_kind":"markdown","optional":true},"timezone":{"type":"string","description":"The Organization timezone. Available values are `utc`, `browser`, or an empty string for the default.","description_kind":"markdown","optional":true},"week_start":{"type":"string","description":"The Organization week start day. Available values are `sunday`, `monday`, `saturday`, or an empty string for the default. Defaults to ``.","description_kind":"markdown","optional":true}},"description":"\n* [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","description_kind":"markdown"}},"grafana_playlist":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"interval":{"type":"string","description_kind":"plain","required":true},"name":{"type":"string","description":"The name of the playlist.","description_kind":"markdown","required":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true}},"block_types":{"item":{"nesting_mode":"set","block":{"attributes":{"id":{"type":"string","description_kind":"plain","computed":true},"order":{"type":"number","description_kind":"plain","required":true},"title":{"type":"string","description_kind":"plain","required":true},"type":{"type":"string","description_kind":"plain","optional":true},"value":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"},"min_items":1}},"description":"\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/playlist/)\n","description_kind":"markdown"}},"grafana_report":{"version":0,"block":{"attributes":{"formats":{"type":["set","string"],"description":"Specifies what kind of attachment to generate for the report. Allowed values: `pdf`, `csv`, `image`.","description_kind":"markdown","optional":true},"id":{"type":"string","description":"Generated identifier of the report.","description_kind":"markdown","computed":true},"include_dashboard_link":{"type":"bool","description":"Whether to include a link to the dashboard in the report. Defaults to `true`.","description_kind":"markdown","optional":true},"include_table_csv":{"type":"bool","description":"Whether to include a CSV file of table panel data. Defaults to `false`.","description_kind":"markdown","optional":true},"layout":{"type":"string","description":"Layout of the report. Allowed values: `simple`, `grid`. Defaults to `grid`.","description_kind":"markdown","optional":true},"message":{"type":"string","description":"Message to be sent in the report.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"Name of the report.","description_kind":"markdown","required":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"orientation":{"type":"string","description":"Orientation of the report. Allowed values: `landscape`, `portrait`. Defaults to `landscape`.","description_kind":"markdown","optional":true},"recipients":{"type":["list","string"],"description":"List of recipients of the report.","description_kind":"markdown","required":true},"reply_to":{"type":"string","description":"Reply-to email address of the report.","description_kind":"markdown","optional":true}},"block_types":{"dashboards":{"nesting_mode":"list","block":{"attributes":{"report_variables":{"type":["map","string"],"description":"Add report variables to the dashboard. Values should be separated by commas.","description_kind":"markdown","optional":true},"uid":{"type":"string","description":"Dashboard uid.","description_kind":"markdown","required":true}},"block_types":{"time_range":{"nesting_mode":"list","block":{"attributes":{"from":{"type":"string","description":"Start of the time range.","description_kind":"markdown","optional":true},"to":{"type":"string","description":"End of the time range.","description_kind":"markdown","optional":true}},"description":"Time range of the report.","description_kind":"markdown"},"max_items":1}},"description":"List of dashboards to render into the report","description_kind":"markdown"}},"schedule":{"nesting_mode":"list","block":{"attributes":{"custom_interval":{"type":"string","description":"Custom interval of the report.\n**Note:** This field is only available when frequency is set to `custom`.","description_kind":"markdown","optional":true},"end_time":{"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","description_kind":"markdown","optional":true},"frequency":{"type":"string","description":"Frequency of the report. Allowed values: `never`, `once`, `hourly`, `daily`, `weekly`, `monthly`, `custom`.","description_kind":"markdown","required":true},"last_day_of_month":{"type":"bool","description":"Send the report on the last day of the month Defaults to `false`.","description_kind":"markdown","optional":true},"start_time":{"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","description_kind":"markdown","optional":true},"timezone":{"type":"string","description":"Set the report time zone. Defaults to `GMT`.","description_kind":"markdown","optional":true},"workdays_only":{"type":"bool","description":"Whether to send the report only on work days. Defaults to `false`.","description_kind":"markdown","optional":true}},"description":"Schedule of the report.","description_kind":"markdown"},"min_items":1,"max_items":1}},"description":"\n**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","description_kind":"markdown"}},"grafana_role":{"version":0,"block":{"attributes":{"auto_increment_version":{"type":"bool","description":"Whether the role version should be incremented automatically on updates (and set to 1 on creation). This field or `version` should be set.","description_kind":"markdown","optional":true},"description":{"type":"string","description":"Description of the role.","description_kind":"markdown","optional":true},"display_name":{"type":"string","description":"Display name of the role. Available with Grafana 8.5+.","description_kind":"markdown","optional":true},"global":{"type":"bool","description":"Boolean to state whether the role is available across all organizations or not. Defaults to `false`.","description_kind":"markdown","optional":true},"group":{"type":"string","description":"Group of the role. Available with Grafana 8.5+.","description_kind":"markdown","optional":true},"hidden":{"type":"bool","description":"Boolean to state whether the role should be visible in the Grafana UI or not. Available with Grafana 8.5+. Defaults to `false`.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Name of the role","description_kind":"markdown","required":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"uid":{"type":"string","description":"Unique identifier of the role. Used for assignments.","description_kind":"markdown","optional":true,"computed":true},"version":{"type":"number","description":"Version of the role. A role is updated only on version increase. This field or `auto_increment_version` should be set.","description_kind":"markdown","optional":true}},"block_types":{"permissions":{"nesting_mode":"set","block":{"attributes":{"action":{"type":"string","description":"Specific action users granted with the role will be allowed to perform (for example: `users:read`)","description_kind":"markdown","required":true},"scope":{"type":"string","description":"Scope to restrict the action to a set of resources (for example: `users:*` or `roles:customrole1`) Defaults to ``.","description_kind":"markdown","optional":true}},"description":"Specific set of actions granted by the role.","description_kind":"markdown"}}},"description":"\n**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","description_kind":"markdown"}},"grafana_role_assignment":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"role_uid":{"type":"string","description":"Grafana RBAC role UID.","description_kind":"markdown","required":true},"service_accounts":{"type":["set","string"],"description":"IDs of service accounts that the role should be assigned to.","description_kind":"markdown","optional":true},"teams":{"type":["set","string"],"description":"IDs of teams that the role should be assigned to.","description_kind":"markdown","optional":true},"users":{"type":["set","number"],"description":"IDs of users that the role should be assigned to.","description_kind":"markdown","optional":true}},"description":"\nManages 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","description_kind":"markdown"}},"grafana_role_assignment_item":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","computed":true},"org_id":{"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.","description_kind":"plain","optional":true,"computed":true},"role_uid":{"type":"string","description":"the role UID onto which to assign an actor","description_kind":"plain","required":true},"service_account_id":{"type":"string","description":"the service account onto which the role is to be assigned","description_kind":"plain","optional":true},"team_id":{"type":"string","description":"the team onto which the role is to be assigned","description_kind":"plain","optional":true},"user_id":{"type":"string","description":"the user onto which the role is to be assigned","description_kind":"plain","optional":true}},"description":"Manages a single assignment for a role. Conflicts with the \"grafana_role_assignment\" resource which manages the entire set of assignments for a role.","description_kind":"markdown"}},"grafana_rule_group":{"version":0,"block":{"attributes":{"disable_provenance":{"type":"bool","description":"Allow modifying the rule group from other sources than Terraform or the Grafana API. Defaults to `false`.","description_kind":"markdown","optional":true},"folder_uid":{"type":"string","description":"The UID of the folder that the group belongs to.","description_kind":"markdown","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"interval_seconds":{"type":"number","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.","description_kind":"markdown","required":true},"name":{"type":"string","description":"The name of the rule group.","description_kind":"markdown","required":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true}},"block_types":{"rule":{"nesting_mode":"list","block":{"attributes":{"annotations":{"type":["map","string"],"description":"Key-value pairs of metadata to attach to the alert rule. They add additional information, such as a `summary` or `runbook_url`, to help identify and investigate alerts. The `__dashboardUid__` and `__panelId__` annotations, which link alerts to a panel, must be set together. Defaults to `map[]`.","description_kind":"markdown","optional":true},"condition":{"type":"string","description":"The `ref_id` of the query node in the `data` field to use as the alert condition.","description_kind":"markdown","optional":true},"exec_err_state":{"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.","description_kind":"markdown","optional":true},"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 `0`.","description_kind":"markdown","optional":true},"is_paused":{"type":"bool","description":"Sets whether the alert should be paused or not. Defaults to `false`.","description_kind":"markdown","optional":true},"keep_firing_for":{"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.","description_kind":"markdown","optional":true},"labels":{"type":["map","string"],"description":"Key-value pairs to attach to the alert rule that can be used in matching, grouping, and routing. Defaults to `map[]`.","description_kind":"markdown","optional":true},"missing_series_evals_to_resolve":{"type":"number","description":"The number of missing series evaluations that must occur before the rule is considered to be resolved.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"The name of the alert rule.","description_kind":"markdown","required":true},"no_data_state":{"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.","description_kind":"markdown","optional":true},"uid":{"type":"string","description":"The unique identifier of the alert rule.","description_kind":"markdown","optional":true,"computed":true}},"block_types":{"data":{"nesting_mode":"list","block":{"attributes":{"datasource_uid":{"type":"string","description":"The UID of the datasource being queried, or \"-100\" if this stage is an expression stage.","description_kind":"markdown","required":true},"model":{"type":"string","description":"Custom JSON data to send to the specified datasource when querying.","description_kind":"markdown","required":true},"query_type":{"type":"string","description":"An optional identifier for the type of query being executed. Defaults to ``.","description_kind":"markdown","optional":true},"ref_id":{"type":"string","description":"A unique string to identify this query stage within a rule.","description_kind":"markdown","required":true}},"block_types":{"relative_time_range":{"nesting_mode":"list","block":{"attributes":{"from":{"type":"number","description":"The number of seconds in the past, relative to when the rule is evaluated, at which the time range begins.","description_kind":"markdown","required":true},"to":{"type":"number","description":"The number of seconds in the past, relative to when the rule is evaluated, at which the time range ends.","description_kind":"markdown","required":true}},"description":"The time range, relative to when the query is executed, across which to query.","description_kind":"markdown"},"min_items":1,"max_items":1}},"description":"A sequence of stages that describe the contents of the rule.","description_kind":"markdown"},"min_items":1},"notification_settings":{"nesting_mode":"list","block":{"attributes":{"active_timings":{"type":["list","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","description_kind":"markdown","optional":true},"contact_point":{"type":"string","description":"The contact point to route notifications that match this rule to.","description_kind":"markdown","required":true},"group_by":{"type":["list","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.","description_kind":"markdown","optional":true},"group_interval":{"type":"string","description":"Minimum time interval between two notifications for the same group. Default is 5 minutes.","description_kind":"markdown","optional":true},"group_wait":{"type":"string","description":"Time to wait to buffer alerts of the same group before sending a notification. Default is 30 seconds.","description_kind":"markdown","optional":true},"mute_timings":{"type":["list","string"],"description":"A list of mute timing names to apply to alerts that match this policy.","description_kind":"markdown","optional":true},"repeat_interval":{"type":"string","description":"Minimum time interval for re-sending a notification if an alert is still firing. Default is 4 hours.","description_kind":"markdown","optional":true}},"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.","description_kind":"markdown"},"max_items":1},"record":{"nesting_mode":"list","block":{"attributes":{"from":{"type":"string","description":"The ref id of the query node in the data field to use as the source of the metric.","description_kind":"markdown","required":true},"metric":{"type":"string","description":"The name of the metric to write to.","description_kind":"markdown","required":true},"target_datasource_uid":{"type":"string","description":"The UID of the datasource to write the metric to.","description_kind":"markdown","optional":true}},"description":"Settings for a recording rule. Available since Grafana 11.2, requires feature flag 'grafanaManagedRecordingRules' to be enabled.","description_kind":"markdown"},"max_items":1}},"description":"The rules within the group.","description_kind":"markdown"},"min_items":1}},"description":"\nManages Grafana Alerting rule groups.\n\n* [Official documentation](https://grafana.com/docs/grafana/latest/alerting/set-up/provision-alerting-resources/terraform-provisioning/)\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","description_kind":"markdown"}},"grafana_scim_config":{"version":0,"block":{"attributes":{"enable_group_sync":{"type":"bool","description":"Whether group synchronization is enabled.","description_kind":"markdown","required":true},"enable_user_sync":{"type":"bool","description":"Whether user synchronization is enabled.","description_kind":"markdown","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"reject_non_provisioned_users":{"type":"bool","description":"Whether to block non-provisioned user access to Grafana. Cloud Portal users will always be able to access Grafana, regardless of this setting.","description_kind":"markdown","required":true}},"description":"\n**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","description_kind":"markdown"}},"grafana_service_account":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"is_disabled":{"type":"bool","description":"The disabled status for the service account. Defaults to `false`.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"The name of the service account.","description_kind":"markdown","required":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"role":{"type":"string","description":"The basic role of the service account in the organization.","description_kind":"markdown","required":true}},"description":"\n**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)","description_kind":"markdown"}},"grafana_service_account_permission":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"service_account_id":{"type":"string","description":"The id of the service account.","description_kind":"markdown","required":true}},"block_types":{"permissions":{"nesting_mode":"set","block":{"attributes":{"permission":{"type":"string","description":"Permission to associate with item. Must be one of `View`, `Edit`, or `Admin`.","description_kind":"markdown","required":true},"team_id":{"type":"string","description":"ID of the team to manage permissions for. Defaults to `0`.","description_kind":"markdown","optional":true},"user_id":{"type":"string","description":"ID of the user or service account to manage permissions for. Defaults to `0`.","description_kind":"markdown","optional":true}},"description":"The permission items to add/update. Items that are omitted from the list will be removed.","description_kind":"markdown"}}},"description":"\nManages 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)","description_kind":"markdown"}},"grafana_service_account_permission_item":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","computed":true},"org_id":{"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.","description_kind":"plain","optional":true,"computed":true},"permission":{"type":"string","description":"the permission to be assigned","description_kind":"plain","required":true},"service_account_id":{"type":"string","description":"The ID of the service account.","description_kind":"plain","required":true},"team":{"type":"string","description":"the team onto which the permission is to be assigned","description_kind":"plain","optional":true},"user":{"type":"string","description":"the user or service account onto which the permission is to be assigned","description_kind":"plain","optional":true}},"description":"Manages a single permission item for a service account. Conflicts with the \"grafana_service_account_permission\" 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)","description_kind":"markdown"}},"grafana_service_account_token":{"version":0,"block":{"attributes":{"expiration":{"type":"string","description":"The expiration date of the service account token.","description_kind":"markdown","computed":true},"has_expired":{"type":"bool","description":"The status of the service account token.","description_kind":"markdown","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"key":{"type":"string","description":"The key of the service account token.","description_kind":"markdown","computed":true,"sensitive":true},"name":{"type":"string","description":"The name of the service account token.","description_kind":"markdown","required":true},"seconds_to_live":{"type":"number","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 `api_key_max_seconds_to_live` configuration option is set) the key will never expire.","description_kind":"markdown","optional":true},"service_account_id":{"type":"string","description":"The ID of the service account to which the token belongs.","description_kind":"markdown","required":true}},"description":"\n**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)","description_kind":"markdown"}},"grafana_slo":{"version":0,"block":{"attributes":{"description":{"type":"string","description":"Description is a free-text field that can provide more context to an SLO.","description_kind":"markdown","required":true},"folder_uid":{"type":"string","description":"UID for the SLO folder","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Name should be a short description of your indicator. Consider names like \"API Availability\"","description_kind":"markdown","required":true},"search_expression":{"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.","description_kind":"markdown","optional":true}},"block_types":{"alerting":{"nesting_mode":"list","block":{"block_types":{"advanced_options":{"nesting_mode":"list","block":{"attributes":{"min_failures":{"type":"number","description":"Minimum number of failed events to trigger an alert","description_kind":"markdown","optional":true}},"description":"Advanced Options for Alert Rules","description_kind":"markdown"},"max_items":1},"annotation":{"nesting_mode":"list","block":{"attributes":{"key":{"type":"string","description":"Key for filtering and identification","description_kind":"markdown","required":true},"value":{"type":"string","description":"Templatable value","description_kind":"markdown","required":true}},"description":"Annotations will be attached to all alerts generated by any of these rules.","description_kind":"markdown"}},"fastburn":{"nesting_mode":"list","block":{"block_types":{"annotation":{"nesting_mode":"list","block":{"attributes":{"key":{"type":"string","description":"Key for filtering and identification","description_kind":"markdown","required":true},"value":{"type":"string","description":"Templatable value","description_kind":"markdown","required":true}},"description":"Annotations to attach only to Fast Burn alerts.","description_kind":"markdown"}},"label":{"nesting_mode":"list","block":{"attributes":{"key":{"type":"string","description":"Key for filtering and identification","description_kind":"markdown","required":true},"value":{"type":"string","description":"Templatable value","description_kind":"markdown","required":true}},"description":"Labels to attach only to Fast Burn alerts.","description_kind":"markdown"}}},"description":"Alerting Rules generated for Fast Burn alerts","description_kind":"markdown"},"max_items":1},"label":{"nesting_mode":"list","block":{"attributes":{"key":{"type":"string","description":"Key for filtering and identification","description_kind":"markdown","required":true},"value":{"type":"string","description":"Templatable value","description_kind":"markdown","required":true}},"description":"Labels will be attached to all alerts generated by any of these rules.","description_kind":"markdown"}},"slowburn":{"nesting_mode":"list","block":{"block_types":{"annotation":{"nesting_mode":"list","block":{"attributes":{"key":{"type":"string","description":"Key for filtering and identification","description_kind":"markdown","required":true},"value":{"type":"string","description":"Templatable value","description_kind":"markdown","required":true}},"description":"Annotations to attach only to Slow Burn alerts.","description_kind":"markdown"}},"label":{"nesting_mode":"list","block":{"attributes":{"key":{"type":"string","description":"Key for filtering and identification","description_kind":"markdown","required":true},"value":{"type":"string","description":"Templatable value","description_kind":"markdown","required":true}},"description":"Labels to attach only to Slow Burn alerts.","description_kind":"markdown"}}},"description":"Alerting Rules generated for Slow Burn alerts","description_kind":"markdown"},"max_items":1}},"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.","description_kind":"markdown"},"max_items":1},"destination_datasource":{"nesting_mode":"list","block":{"attributes":{"uid":{"type":"string","description":"UID for the Datasource","description_kind":"markdown","required":true}},"description":"Destination Datasource sets the datasource defined for an SLO","description_kind":"markdown"},"min_items":1,"max_items":1},"label":{"nesting_mode":"list","block":{"attributes":{"key":{"type":"string","description":"Key for filtering and identification","description_kind":"markdown","required":true},"value":{"type":"string","description":"Templatable value","description_kind":"markdown","required":true}},"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_]*$\"","description_kind":"markdown"}},"objectives":{"nesting_mode":"list","block":{"attributes":{"value":{"type":"number","description":"Value between 0 and 1. If the value of the query is above the objective, the SLO is met.","description_kind":"markdown","required":true},"window":{"type":"string","description":"A Prometheus-parsable time duration string like 24h, 60m. This is the time window the objective is measured over.","description_kind":"markdown","required":true}},"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.","description_kind":"markdown"},"min_items":1},"query":{"nesting_mode":"list","block":{"attributes":{"type":{"type":"string","description":"Query type must be one of: \"freeform\", \"query\", \"ratio\", \"grafana_queries\" or \"threshold\"","description_kind":"markdown","required":true}},"block_types":{"freeform":{"nesting_mode":"list","block":{"attributes":{"query":{"type":"string","description":"Freeform Query Field - valid promQl","description_kind":"markdown","required":true}},"description_kind":"plain"},"max_items":1},"grafana_queries":{"nesting_mode":"list","block":{"attributes":{"grafana_queries":{"type":"string","description":"Query Object - Array of Grafana Query JSON objects","description_kind":"markdown","required":true}},"description":"Array for holding a set of grafana queries","description_kind":"markdown"},"max_items":1},"ratio":{"nesting_mode":"list","block":{"attributes":{"group_by_labels":{"type":["list","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_]*$\"","description_kind":"markdown","optional":true},"success_metric":{"type":"string","description":"Counter metric for success events (numerator)","description_kind":"markdown","required":true},"total_metric":{"type":"string","description":"Metric for total events (denominator)","description_kind":"markdown","required":true}},"description_kind":"plain"},"max_items":1}},"description":"Query describes the indicator that will be measured against the objective. Freeform Query types are currently supported.","description_kind":"markdown"},"min_items":1}},"description":"\nResource manages Grafana SLOs.\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\t\t","description_kind":"markdown"}},"grafana_sso_settings":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"provider_name":{"type":"string","description":"The name of the SSO provider. Supported values: github, gitlab, google, azuread, okta, generic_oauth, saml, ldap.","description_kind":"markdown","required":true}},"block_types":{"ldap_settings":{"nesting_mode":"set","block":{"attributes":{"allow_sign_up":{"type":"bool","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.","description_kind":"markdown","optional":true},"enabled":{"type":"bool","description":"Define whether this configuration is enabled for LDAP. Defaults to `true`.","description_kind":"markdown","optional":true},"skip_org_role_sync":{"type":"bool","description":"Prevent synchronizing users’ organization roles from LDAP.","description_kind":"markdown","optional":true}},"block_types":{"config":{"nesting_mode":"list","block":{"block_types":{"servers":{"nesting_mode":"list","block":{"attributes":{"attributes":{"type":["map","string"],"description":"The LDAP server attributes. The following attributes can be configured: email, member_of, name, surname, username.","description_kind":"markdown","optional":true},"bind_dn":{"type":"string","description":"The search user bind DN.","description_kind":"markdown","optional":true},"bind_password":{"type":"string","description":"The search user bind password.","description_kind":"markdown","optional":true,"sensitive":true},"client_cert":{"type":"string","description":"The path to the client certificate.","description_kind":"markdown","optional":true},"client_cert_value":{"type":"string","description":"The Base64 encoded value of the client certificate.","description_kind":"markdown","optional":true},"client_key":{"type":"string","description":"The path to the client private key.","description_kind":"markdown","optional":true,"sensitive":true},"client_key_value":{"type":"string","description":"The Base64 encoded value of the client private key.","description_kind":"markdown","optional":true,"sensitive":true},"group_search_base_dns":{"type":["list","string"],"description":"An array of the base DNs to search through for groups. Typically uses ou=groups.","description_kind":"markdown","optional":true},"group_search_filter":{"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).","description_kind":"markdown","optional":true},"group_search_filter_user_attribute":{"type":"string","description":"The %s in the search filter will be replaced with the attribute defined in this field.","description_kind":"markdown","optional":true},"host":{"type":"string","description":"The LDAP server host.","description_kind":"markdown","required":true},"min_tls_version":{"type":"string","description":"Minimum TLS version allowed. Accepted values are: TLS1.2, TLS1.3.","description_kind":"markdown","optional":true},"port":{"type":"number","description":"The LDAP server port.","description_kind":"markdown","optional":true},"root_ca_cert":{"type":"string","description":"The path to the root CA certificate.","description_kind":"markdown","optional":true},"root_ca_cert_value":{"type":["list","string"],"description":"The Base64 encoded values of the root CA certificates.","description_kind":"markdown","optional":true},"search_base_dns":{"type":["list","string"],"description":"An array of base DNs to search through.","description_kind":"markdown","required":true},"search_filter":{"type":"string","description":"The user search filter, for example \"(cn=%s)\" or \"(sAMAccountName=%s)\" or \"(uid=%s)\".","description_kind":"markdown","required":true},"ssl_skip_verify":{"type":"bool","description":"If set to true, the SSL cert validation will be skipped.","description_kind":"markdown","optional":true},"start_tls":{"type":"bool","description":"If set to true, use LDAP with STARTTLS instead of LDAPS.","description_kind":"markdown","optional":true},"timeout":{"type":"number","description":"The timeout in seconds for connecting to the LDAP host.","description_kind":"markdown","optional":true},"tls_ciphers":{"type":["list","string"],"description":"Accepted TLS ciphers. For a complete list of supported ciphers, refer to: https://go.dev/src/crypto/tls/cipher_suites.go.","description_kind":"markdown","optional":true},"use_ssl":{"type":"bool","description":"Set to true if LDAP server should use an encrypted TLS connection (either with STARTTLS or LDAPS).","description_kind":"markdown","optional":true}},"block_types":{"group_mappings":{"nesting_mode":"list","block":{"attributes":{"grafana_admin":{"type":"bool","description":"If set to true, it makes the user of group_dn Grafana server admin.","description_kind":"markdown","optional":true},"group_dn":{"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 (\"*\").","description_kind":"markdown","required":true},"org_id":{"type":"number","description":"The Grafana organization database id.","description_kind":"markdown","optional":true},"org_role":{"type":"string","description":"Assign users of group_dn the organization role Admin, Editor, or Viewer.","description_kind":"markdown","required":true}},"description":"For mapping an LDAP group to a Grafana organization and role.","description_kind":"markdown"}}},"description":"The LDAP servers configuration.","description_kind":"markdown"},"min_items":1}},"description":"The LDAP configuration.","description_kind":"markdown"},"min_items":1,"max_items":1}},"description":"The LDAP settings set. Required for the ldap provider.","description_kind":"markdown"},"max_items":1},"oauth2_settings":{"nesting_mode":"set","block":{"attributes":{"allow_assign_grafana_admin":{"type":"bool","description":"If enabled, it will automatically sync the Grafana server administrator role.","description_kind":"markdown","optional":true},"allow_sign_up":{"type":"bool","description":"If not enabled, only existing Grafana users can log in using OAuth.","description_kind":"markdown","optional":true},"allowed_domains":{"type":"string","description":"List of comma- or space-separated domains. The user should belong to at least one domain to log in.","description_kind":"markdown","optional":true},"allowed_groups":{"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.","description_kind":"markdown","optional":true},"allowed_organizations":{"type":"string","description":"List of comma- or space-separated organizations. The user should be a member of at least one organization to log in.","description_kind":"markdown","optional":true},"api_url":{"type":"string","description":"The user information endpoint of your OAuth2 provider. Required for okta and generic_oauth providers.","description_kind":"markdown","optional":true},"auth_style":{"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.","description_kind":"markdown","optional":true},"auth_url":{"type":"string","description":"The authorization endpoint of your OAuth2 provider. Required for azuread, okta and generic_oauth providers.","description_kind":"markdown","optional":true},"auto_login":{"type":"bool","description":"Log in automatically, skipping the login screen.","description_kind":"markdown","optional":true},"client_id":{"type":"string","description":"The client Id of your OAuth2 app.","description_kind":"markdown","required":true},"client_secret":{"type":"string","description":"The client secret of your OAuth2 app.","description_kind":"markdown","optional":true,"sensitive":true},"custom":{"type":["map","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.","description_kind":"markdown","optional":true},"define_allowed_groups":{"type":"bool","description":"Define allowed groups.","description_kind":"markdown","optional":true},"define_allowed_teams_ids":{"type":"bool","description":"Define allowed teams ids.","description_kind":"markdown","optional":true},"email_attribute_name":{"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.","description_kind":"markdown","optional":true},"email_attribute_path":{"type":"string","description":"JMESPath expression to use for user email lookup from the user information. Only applicable to Generic OAuth.","description_kind":"markdown","optional":true},"empty_scopes":{"type":"bool","description":"If enabled, no scopes will be sent to the OAuth2 provider.","description_kind":"markdown","optional":true},"enabled":{"type":"bool","description":"Define whether this configuration is enabled for the specified provider. Defaults to `true`.","description_kind":"markdown","optional":true},"groups_attribute_path":{"type":"string","description":"JMESPath expression to use for user group lookup. If you configure allowed_groups, you must also configure groups_attribute_path.","description_kind":"markdown","optional":true},"id_token_attribute_name":{"type":"string","description":"The name of the key used to extract the ID token from the returned OAuth2 token. Only applicable to Generic OAuth.","description_kind":"markdown","optional":true},"login_attribute_path":{"type":"string","description":"JMESPath expression to use for user login lookup from the user ID token. Only applicable to Generic OAuth.","description_kind":"markdown","optional":true},"login_prompt":{"type":"string","description":"Indicates the type of user interaction when the user logs in with the IdP. Available values are `login`, `consent` and `select_account`.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"Helpful if you use more than one identity providers or SSO protocols.","description_kind":"markdown","optional":true},"name_attribute_path":{"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.","description_kind":"markdown","optional":true},"org_attribute_path":{"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 \"org_mapping\"). Only applicable to Generic OAuth and Okta.","description_kind":"markdown","optional":true},"org_mapping":{"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.","description_kind":"markdown","optional":true},"role_attribute_path":{"type":"string","description":"JMESPath expression to use for Grafana role lookup.","description_kind":"markdown","optional":true},"role_attribute_strict":{"type":"bool","description":"If enabled, denies user login if the Grafana role cannot be extracted using Role attribute path.","description_kind":"markdown","optional":true},"scopes":{"type":"string","description":"List of comma- or space-separated OAuth2 scopes.","description_kind":"markdown","optional":true},"signout_redirect_url":{"type":"string","description":"The URL to redirect the user to after signing out from Grafana.","description_kind":"markdown","optional":true},"skip_org_role_sync":{"type":"bool","description":"Prevent synchronizing users’ organization roles from your IdP.","description_kind":"markdown","optional":true},"team_ids":{"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.","description_kind":"markdown","optional":true},"team_ids_attribute_path":{"type":"string","description":"The JMESPath expression to use for Grafana Team Id lookup within the results returned by the teams_url endpoint. Only applicable to Generic OAuth.","description_kind":"markdown","optional":true},"teams_url":{"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.","description_kind":"markdown","optional":true},"tls_client_ca":{"type":"string","description":"The path to the trusted certificate authority list. Is not applicable on Grafana Cloud.","description_kind":"markdown","optional":true},"tls_client_cert":{"type":"string","description":"The path to the certificate. Is not applicable on Grafana Cloud.","description_kind":"markdown","optional":true},"tls_client_key":{"type":"string","description":"The path to the key. Is not applicable on Grafana Cloud.","description_kind":"markdown","optional":true},"tls_skip_verify_insecure":{"type":"bool","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.","description_kind":"markdown","optional":true},"token_url":{"type":"string","description":"The token endpoint of your OAuth2 provider. Required for azuread, okta and generic_oauth providers.","description_kind":"markdown","optional":true},"use_pkce":{"type":"bool","description":"If enabled, Grafana will use Proof Key for Code Exchange (PKCE) with the OAuth2 Authorization Code Grant.","description_kind":"markdown","optional":true},"use_refresh_token":{"type":"bool","description":"If enabled, Grafana will fetch a new access token using the refresh token provided by the OAuth2 provider.","description_kind":"markdown","optional":true}},"description":"The OAuth2 settings set. Required for github, gitlab, google, azuread, okta, generic_oauth providers.","description_kind":"markdown"},"max_items":1},"saml_settings":{"nesting_mode":"set","block":{"attributes":{"allow_idp_initiated":{"type":"bool","description":"Whether SAML IdP-initiated login is allowed.","description_kind":"markdown","optional":true},"allow_sign_up":{"type":"bool","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.","description_kind":"markdown","optional":true},"allowed_organizations":{"type":"string","description":"List of comma- or space-separated organizations. User should be a member of at least one organization to log in.","description_kind":"markdown","optional":true},"assertion_attribute_email":{"type":"string","description":"Friendly name or name of the attribute within the SAML assertion to use as the user email.","description_kind":"markdown","optional":true},"assertion_attribute_groups":{"type":"string","description":"Friendly name or name of the attribute within the SAML assertion to use as the user groups.","description_kind":"markdown","optional":true},"assertion_attribute_login":{"type":"string","description":"Friendly name or name of the attribute within the SAML assertion to use as the user login handle.","description_kind":"markdown","optional":true},"assertion_attribute_name":{"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.","description_kind":"markdown","optional":true},"assertion_attribute_org":{"type":"string","description":"Friendly name or name of the attribute within the SAML assertion to use as the user organization.","description_kind":"markdown","optional":true},"assertion_attribute_role":{"type":"string","description":"Friendly name or name of the attribute within the SAML assertion to use as the user roles.","description_kind":"markdown","optional":true},"auto_login":{"type":"bool","description":"Whether SAML auto login is enabled.","description_kind":"markdown","optional":true},"certificate":{"type":"string","description":"Base64-encoded string for the SP X.509 certificate.","description_kind":"markdown","optional":true,"sensitive":true},"certificate_path":{"type":"string","description":"Path for the SP X.509 certificate.","description_kind":"markdown","optional":true},"client_id":{"type":"string","description":"The client Id of your OAuth2 app.","description_kind":"markdown","optional":true},"client_secret":{"type":"string","description":"The client secret of your OAuth2 app.","description_kind":"markdown","optional":true},"enabled":{"type":"bool","description":"Define whether this configuration is enabled for SAML. Defaults to `true`.","description_kind":"markdown","optional":true},"entity_id":{"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.","description_kind":"markdown","optional":true},"force_use_graph_api":{"type":"bool","description":"If enabled, Grafana will fetch groups from Microsoft Graph API instead of using the groups claim from the ID token.","description_kind":"markdown","optional":true},"idp_metadata":{"type":"string","description":"Base64-encoded string for the IdP SAML metadata XML.","description_kind":"markdown","optional":true},"idp_metadata_path":{"type":"string","description":"Path for the IdP SAML metadata XML.","description_kind":"markdown","optional":true},"idp_metadata_url":{"type":"string","description":"URL for the IdP SAML metadata XML.","description_kind":"markdown","optional":true},"max_issue_delay":{"type":"string","description":"Duration, since the IdP issued a response and the SP is allowed to process it. For example: 90s, 1h.","description_kind":"markdown","optional":true},"metadata_valid_duration":{"type":"string","description":"Duration, for how long the SP metadata is valid. For example: 48h, 5d.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"Name used to refer to the SAML authentication.","description_kind":"markdown","optional":true},"name_id_format":{"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","description_kind":"markdown","optional":true},"org_mapping":{"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.","description_kind":"markdown","optional":true},"private_key":{"type":"string","description":"Base64-encoded string for the SP private key.","description_kind":"markdown","optional":true,"sensitive":true},"private_key_path":{"type":"string","description":"Path for the SP private key.","description_kind":"markdown","optional":true},"relay_state":{"type":"string","description":"Relay state for IdP-initiated login. Should match relay state configured in IdP.","description_kind":"markdown","optional":true},"role_values_admin":{"type":"string","description":"List of comma- or space-separated roles which will be mapped into the Admin role.","description_kind":"markdown","optional":true},"role_values_editor":{"type":"string","description":"List of comma- or space-separated roles which will be mapped into the Editor role.","description_kind":"markdown","optional":true},"role_values_grafana_admin":{"type":"string","description":"List of comma- or space-separated roles which will be mapped into the Grafana Admin (Super Admin) role.","description_kind":"markdown","optional":true},"role_values_none":{"type":"string","description":"List of comma- or space-separated roles which will be mapped into the None role.","description_kind":"markdown","optional":true},"role_values_viewer":{"type":"string","description":"List of comma- or space-separated roles which will be mapped into the Viewer role.","description_kind":"markdown","optional":true},"signature_algorithm":{"type":"string","description":"Signature algorithm used for signing requests to the IdP. Supported values are rsa-sha1, rsa-sha256, rsa-sha512.","description_kind":"markdown","optional":true},"single_logout":{"type":"bool","description":"Whether SAML Single Logout is enabled.","description_kind":"markdown","optional":true},"skip_org_role_sync":{"type":"bool","description":"Prevent synchronizing users’ organization roles from your IdP.","description_kind":"markdown","optional":true},"token_url":{"type":"string","description":"The token endpoint of your OAuth2 provider. Required for Azure AD providers.","description_kind":"markdown","optional":true}},"description":"The SAML settings set. Required for the saml provider.","description_kind":"markdown"},"max_items":1}},"description":"\nManages 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","description_kind":"markdown"}},"grafana_synthetic_monitoring_check":{"version":0,"block":{"attributes":{"alert_sensitivity":{"type":"string","description":"Can be set to `none`, `low`, `medium`, or `high` to correspond to the check [alert levels](https://grafana.com/docs/grafana-cloud/testing/synthetic-monitoring/configure-alerts/synthetic-monitoring-alerting/). Defaults to `none`.","description_kind":"markdown","optional":true},"basic_metrics_only":{"type":"bool","description":"Metrics are reduced by default. Set this to `false` 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 `true`.","description_kind":"markdown","optional":true},"enabled":{"type":"bool","description":"Whether to enable the check. Defaults to `true`.","description_kind":"markdown","optional":true},"frequency":{"type":"number","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 `60000`.","description_kind":"markdown","optional":true},"id":{"type":"string","description":"The ID of the check.","description_kind":"markdown","computed":true},"job":{"type":"string","description":"Name used for job label.","description_kind":"markdown","required":true},"labels":{"type":["map","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.","description_kind":"markdown","optional":true},"probes":{"type":["set","number"],"description":"List of probe location IDs where this target will be checked from.","description_kind":"markdown","required":true},"target":{"type":"string","description":"Hostname to ping.","description_kind":"markdown","required":true},"tenant_id":{"type":"number","description":"The tenant ID of the check.","description_kind":"markdown","computed":true},"timeout":{"type":"number","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 `3000`.","description_kind":"markdown","optional":true}},"block_types":{"settings":{"nesting_mode":"set","block":{"block_types":{"browser":{"nesting_mode":"set","block":{"attributes":{"script":{"type":"string","description_kind":"plain","required":true}},"description":"Settings for browser check. See https://grafana.com/docs/grafana-cloud/testing/synthetic-monitoring/create-checks/checks/k6-browser/.","description_kind":"markdown"},"max_items":1},"dns":{"nesting_mode":"set","block":{"attributes":{"ip_version":{"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`.","description_kind":"markdown","optional":true},"port":{"type":"number","description":"Port to target. Defaults to `53`.","description_kind":"markdown","optional":true},"protocol":{"type":"string","description":"`TCP` or `UDP`. Defaults to `UDP`.","description_kind":"markdown","optional":true},"record_type":{"type":"string","description":"One of `ANY`, `A`, `AAAA`, `CNAME`, `MX`, `NS`, `PTR`, `SOA`, `SRV`, `TXT`. Defaults to `A`.","description_kind":"markdown","optional":true},"server":{"type":"string","description":"DNS server address to target. Defaults to `8.8.8.8`.","description_kind":"markdown","optional":true},"source_ip_address":{"type":"string","description":"Source IP address.","description_kind":"markdown","optional":true},"valid_r_codes":{"type":["set","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`.","description_kind":"markdown","optional":true}},"block_types":{"validate_additional_rrs":{"nesting_mode":"set","block":{"attributes":{"fail_if_matches_regexp":{"type":["set","string"],"description":"Fail if value matches regex.","description_kind":"markdown","optional":true},"fail_if_not_matches_regexp":{"type":["set","string"],"description":"Fail if value does not match regex.","description_kind":"markdown","optional":true}},"description":"Validate additional matches.","description_kind":"markdown"}},"validate_answer_rrs":{"nesting_mode":"set","block":{"attributes":{"fail_if_matches_regexp":{"type":["set","string"],"description":"Fail if value matches regex.","description_kind":"markdown","optional":true},"fail_if_not_matches_regexp":{"type":["set","string"],"description":"Fail if value does not match regex.","description_kind":"markdown","optional":true}},"description":"Validate response answer.","description_kind":"markdown"},"max_items":1},"validate_authority_rrs":{"nesting_mode":"set","block":{"attributes":{"fail_if_matches_regexp":{"type":["set","string"],"description":"Fail if value matches regex.","description_kind":"markdown","optional":true},"fail_if_not_matches_regexp":{"type":["set","string"],"description":"Fail if value does not match regex.","description_kind":"markdown","optional":true}},"description":"Validate response authority.","description_kind":"markdown"},"max_items":1}},"description":"Settings for DNS check. The target must be a valid hostname (or IP address for `PTR` records).","description_kind":"markdown"},"max_items":1},"grpc":{"nesting_mode":"set","block":{"attributes":{"ip_version":{"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`.","description_kind":"markdown","optional":true},"service":{"type":"string","description":"gRPC service.","description_kind":"markdown","optional":true},"tls":{"type":"bool","description":"Whether or not TLS is used when the connection is initiated. Defaults to `false`.","description_kind":"markdown","optional":true}},"block_types":{"tls_config":{"nesting_mode":"set","block":{"attributes":{"ca_cert":{"type":"string","description":"CA certificate in PEM format.","description_kind":"markdown","optional":true},"client_cert":{"type":"string","description":"Client certificate in PEM format.","description_kind":"markdown","optional":true},"client_key":{"type":"string","description":"Client key in PEM format.","description_kind":"markdown","optional":true,"sensitive":true},"insecure_skip_verify":{"type":"bool","description":"Disable target certificate validation. Defaults to `false`.","description_kind":"markdown","optional":true},"server_name":{"type":"string","description":"Used to verify the hostname for the targets.","description_kind":"markdown","optional":true}},"description":"TLS config.","description_kind":"markdown"},"max_items":1}},"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.","description_kind":"markdown"},"max_items":1},"http":{"nesting_mode":"set","block":{"attributes":{"bearer_token":{"type":"string","description":"Token for use with bearer authorization header.","description_kind":"markdown","optional":true,"sensitive":true},"body":{"type":"string","description":"The body of the HTTP request used in probe.","description_kind":"markdown","optional":true},"cache_busting_query_param_name":{"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.","description_kind":"markdown","optional":true},"compression":{"type":"string","description":"Check fails if the response body is not compressed using this compression algorithm. One of `none`, `identity`, `br`, `gzip`, `deflate`.","description_kind":"markdown","optional":true},"fail_if_body_matches_regexp":{"type":["set","string"],"description":"List of regexes. If any match the response body, the check will fail.","description_kind":"markdown","optional":true},"fail_if_body_not_matches_regexp":{"type":["set","string"],"description":"List of regexes. If any do not match the response body, the check will fail.","description_kind":"markdown","optional":true},"fail_if_not_ssl":{"type":"bool","description":"Fail if SSL is not present. Defaults to `false`.","description_kind":"markdown","optional":true},"fail_if_ssl":{"type":"bool","description":"Fail if SSL is present. Defaults to `false`.","description_kind":"markdown","optional":true},"headers":{"type":["set","string"],"description":"The HTTP headers set for the probe.","description_kind":"markdown","optional":true},"ip_version":{"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`.","description_kind":"markdown","optional":true},"method":{"type":"string","description":"Request method. One of `GET`, `CONNECT`, `DELETE`, `HEAD`, `OPTIONS`, `POST`, `PUT`, `TRACE` Defaults to `GET`.","description_kind":"markdown","optional":true},"no_follow_redirects":{"type":"bool","description":"Do not follow redirects. Defaults to `false`.","description_kind":"markdown","optional":true},"proxy_connect_headers":{"type":["set","string"],"description":"The HTTP headers sent to the proxy URL","description_kind":"markdown","optional":true},"proxy_url":{"type":"string","description":"Proxy URL.","description_kind":"markdown","optional":true},"valid_http_versions":{"type":["set","string"],"description":"List of valid HTTP versions. Options include `HTTP/1.0`, `HTTP/1.1`, `HTTP/2.0`","description_kind":"markdown","optional":true},"valid_status_codes":{"type":["set","number"],"description":"Accepted status codes. If unset, defaults to 2xx.","description_kind":"markdown","optional":true}},"block_types":{"basic_auth":{"nesting_mode":"set","block":{"attributes":{"password":{"type":"string","description":"Basic auth password.","description_kind":"markdown","required":true,"sensitive":true},"username":{"type":"string","description":"Basic auth username.","description_kind":"markdown","required":true}},"description":"Basic auth settings.","description_kind":"markdown"},"max_items":1},"fail_if_header_matches_regexp":{"nesting_mode":"set","block":{"attributes":{"allow_missing":{"type":"bool","description":"Allow header to be missing from responses. Defaults to `false`.","description_kind":"markdown","optional":true},"header":{"type":"string","description":"Header name.","description_kind":"markdown","required":true},"regexp":{"type":"string","description":"Regex that header value should match.","description_kind":"markdown","required":true}},"description":"Check fails if headers match.","description_kind":"markdown"}},"fail_if_header_not_matches_regexp":{"nesting_mode":"set","block":{"attributes":{"allow_missing":{"type":"bool","description":"Allow header to be missing from responses. Defaults to `false`.","description_kind":"markdown","optional":true},"header":{"type":"string","description":"Header name.","description_kind":"markdown","required":true},"regexp":{"type":"string","description":"Regex that header value should match.","description_kind":"markdown","required":true}},"description":"Check fails if headers do not match.","description_kind":"markdown"}},"tls_config":{"nesting_mode":"set","block":{"attributes":{"ca_cert":{"type":"string","description":"CA certificate in PEM format.","description_kind":"markdown","optional":true},"client_cert":{"type":"string","description":"Client certificate in PEM format.","description_kind":"markdown","optional":true},"client_key":{"type":"string","description":"Client key in PEM format.","description_kind":"markdown","optional":true,"sensitive":true},"insecure_skip_verify":{"type":"bool","description":"Disable target certificate validation. Defaults to `false`.","description_kind":"markdown","optional":true},"server_name":{"type":"string","description":"Used to verify the hostname for the targets.","description_kind":"markdown","optional":true}},"description":"TLS config.","description_kind":"markdown"},"max_items":1}},"description":"Settings for HTTP check. The target must be a URL (http or https).","description_kind":"markdown"},"max_items":1},"multihttp":{"nesting_mode":"set","block":{"block_types":{"entries":{"nesting_mode":"list","block":{"block_types":{"assertions":{"nesting_mode":"list","block":{"attributes":{"condition":{"type":"string","description":"The condition of the assertion: NOT_CONTAINS, EQUALS, STARTS_WITH, ENDS_WITH, TYPE_OF, CONTAINS","description_kind":"markdown","optional":true},"expression":{"type":"string","description":"The expression of the assertion. Should start with $.","description_kind":"markdown","optional":true},"subject":{"type":"string","description":"The subject of the assertion: RESPONSE_HEADERS, HTTP_STATUS_CODE, RESPONSE_BODY","description_kind":"markdown","optional":true},"type":{"type":"string","description":"The type of assertion to make: TEXT, JSON_PATH_VALUE, JSON_PATH_ASSERTION, REGEX_ASSERTION","description_kind":"markdown","required":true},"value":{"type":"string","description":"The value of the assertion","description_kind":"markdown","optional":true}},"description":"Assertions to make on the request response","description_kind":"markdown"}},"request":{"nesting_mode":"set","block":{"attributes":{"method":{"type":"string","description":"The HTTP method to use","description_kind":"markdown","required":true},"url":{"type":"string","description":"The URL for the request","description_kind":"markdown","required":true}},"block_types":{"body":{"nesting_mode":"set","block":{"attributes":{"content_encoding":{"type":"string","description":"The content encoding of the body","description_kind":"markdown","optional":true},"content_type":{"type":"string","description":"The content type of the body","description_kind":"markdown","optional":true},"payload":{"type":"string","description":"The body payload","description_kind":"markdown","optional":true}},"description":"The body of the HTTP request used in probe.","description_kind":"markdown"}},"headers":{"nesting_mode":"set","block":{"attributes":{"name":{"type":"string","description":"Name of the header to send","description_kind":"markdown","required":true},"value":{"type":"string","description":"Value of the header to send","description_kind":"markdown","required":true}},"description":"The headers to send with the request","description_kind":"markdown"}},"query_fields":{"nesting_mode":"set","block":{"attributes":{"name":{"type":"string","description":"Name of the query field to send","description_kind":"markdown","required":true},"value":{"type":"string","description":"Value of the query field to send","description_kind":"markdown","required":true}},"description":"Query fields to send with the request","description_kind":"markdown"}}},"description":"An individual MultiHTTP request","description_kind":"markdown"},"max_items":1},"variables":{"nesting_mode":"list","block":{"attributes":{"attribute":{"type":"string","description":"The attribute to use when finding the variable value. Only used when type is CSS_SELECTOR","description_kind":"markdown","optional":true},"expression":{"type":"string","description":"The expression to when finding the variable. Should start with $. Only use when type is JSON_PATH or REGEX","description_kind":"markdown","optional":true},"name":{"type":"string","description":"The name of the variable to extract","description_kind":"markdown","optional":true},"type":{"type":"string","description":"The method of finding the variable value to extract. JSON_PATH, REGEX, CSS_SELECTOR","description_kind":"markdown","required":true}},"description":"Variables to extract from the request response","description_kind":"markdown"}}},"description_kind":"plain"}}},"description":"Settings for MultiHTTP check. The target must be a URL (http or https)","description_kind":"markdown"},"max_items":1},"ping":{"nesting_mode":"set","block":{"attributes":{"dont_fragment":{"type":"bool","description":"Set the DF-bit in the IP-header. Only works with ipV4. Defaults to `false`.","description_kind":"markdown","optional":true},"ip_version":{"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`.","description_kind":"markdown","optional":true},"payload_size":{"type":"number","description":"Payload size. Defaults to `0`.","description_kind":"markdown","optional":true},"source_ip_address":{"type":"string","description":"Source IP address.","description_kind":"markdown","optional":true}},"description":"Settings for ping (ICMP) check. The target must be a valid hostname or IP address.","description_kind":"markdown"},"max_items":1},"scripted":{"nesting_mode":"set","block":{"attributes":{"script":{"type":"string","description_kind":"plain","required":true}},"description":"Settings for scripted check. See https://grafana.com/docs/grafana-cloud/testing/synthetic-monitoring/create-checks/checks/k6/.","description_kind":"markdown"},"max_items":1},"tcp":{"nesting_mode":"set","block":{"attributes":{"ip_version":{"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`.","description_kind":"markdown","optional":true},"source_ip_address":{"type":"string","description":"Source IP address.","description_kind":"markdown","optional":true},"tls":{"type":"bool","description":"Whether or not TLS is used when the connection is initiated. Defaults to `false`.","description_kind":"markdown","optional":true}},"block_types":{"query_response":{"nesting_mode":"set","block":{"attributes":{"expect":{"type":"string","description":"Response to expect.","description_kind":"markdown","required":true},"send":{"type":"string","description":"Data to send.","description_kind":"markdown","required":true},"start_tls":{"type":"bool","description":"Upgrade TCP connection to TLS. Defaults to `false`.","description_kind":"markdown","optional":true}},"description":"The query sent in the TCP probe and the expected associated response.","description_kind":"markdown"}},"tls_config":{"nesting_mode":"set","block":{"attributes":{"ca_cert":{"type":"string","description":"CA certificate in PEM format.","description_kind":"markdown","optional":true},"client_cert":{"type":"string","description":"Client certificate in PEM format.","description_kind":"markdown","optional":true},"client_key":{"type":"string","description":"Client key in PEM format.","description_kind":"markdown","optional":true,"sensitive":true},"insecure_skip_verify":{"type":"bool","description":"Disable target certificate validation. Defaults to `false`.","description_kind":"markdown","optional":true},"server_name":{"type":"string","description":"Used to verify the hostname for the targets.","description_kind":"markdown","optional":true}},"description":"TLS config.","description_kind":"markdown"},"max_items":1}},"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.","description_kind":"markdown"},"max_items":1},"traceroute":{"nesting_mode":"set","block":{"attributes":{"max_hops":{"type":"number","description":"Maximum TTL for the trace Defaults to `64`.","description_kind":"markdown","optional":true},"max_unknown_hops":{"type":"number","description":"Maximum number of hosts to travers that give no response Defaults to `15`.","description_kind":"markdown","optional":true},"ptr_lookup":{"type":"bool","description":"Reverse lookup hostnames from IP addresses Defaults to `true`.","description_kind":"markdown","optional":true}},"description":"Settings for traceroute check. The target must be a valid hostname or IP address","description_kind":"markdown"},"max_items":1}},"description":"Check settings. Should contain exactly one nested block.","description_kind":"markdown"},"min_items":1,"max_items":1}},"description":"\nSynthetic 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","description_kind":"markdown"}},"grafana_synthetic_monitoring_check_alerts":{"version":0,"block":{"attributes":{"alerts":{"type":["set",["object",{"name":"string","period":"string","runbook_url":"string","threshold":"number"}]],"description":"List of alerts for the check.","description_kind":"markdown","required":true},"check_id":{"type":"number","description":"The ID of the check to manage alerts for.","description_kind":"markdown","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true}},"description":"\nManages 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/)","description_kind":"markdown"}},"grafana_synthetic_monitoring_installation":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"metrics_publisher_key":{"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.","description_kind":"markdown","required":true,"sensitive":true},"sm_access_token":{"type":"string","description":"Generated token to access the SM API.","description_kind":"markdown","computed":true},"stack_id":{"type":"string","description":"The ID or slug of the stack to install SM on.","description_kind":"markdown","required":true},"stack_sm_api_url":{"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.","description_kind":"markdown","optional":true,"computed":true}},"description":"\nSets 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","description_kind":"markdown"}},"grafana_synthetic_monitoring_probe":{"version":0,"block":{"attributes":{"auth_token":{"type":"string","description":"The probe authentication token. Your probe must use this to authenticate with Grafana Cloud.","description_kind":"markdown","computed":true,"sensitive":true},"disable_browser_checks":{"type":"bool","description":"Disables browser checks for this probe. Defaults to `false`.","description_kind":"markdown","optional":true},"disable_scripted_checks":{"type":"bool","description":"Disables scripted checks for this probe. Defaults to `false`.","description_kind":"markdown","optional":true},"id":{"type":"string","description":"The ID of the probe.","description_kind":"markdown","computed":true},"labels":{"type":["map","string"],"description":"Custom labels to be included with collected metrics and logs.","description_kind":"markdown","optional":true},"latitude":{"type":"number","description":"Latitude coordinates.","description_kind":"markdown","required":true},"longitude":{"type":"number","description":"Longitude coordinates.","description_kind":"markdown","required":true},"name":{"type":"string","description":"Name of the probe.","description_kind":"markdown","required":true},"public":{"type":"bool","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 `true`. Defaults to `false`.","description_kind":"markdown","optional":true},"region":{"type":"string","description":"Region of the probe.","description_kind":"markdown","required":true},"tenant_id":{"type":"number","description":"The tenant ID of the probe.","description_kind":"markdown","computed":true}},"description":"\nBesides 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","description_kind":"markdown"}},"grafana_team":{"version":0,"block":{"attributes":{"email":{"type":"string","description":"An email address for the team.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"ignore_externally_synced_members":{"type":"bool","description":"Ignores team members that have been added to team by [Team Sync](https://grafana.com/docs/grafana/latest/setup-grafana/configure-security/configure-team-sync/).\nTeam Sync can be provisioned using [grafana_team_external_group resource](https://registry.terraform.io/providers/grafana/grafana/latest/docs/resources/team_external_group).\n Defaults to `true`.","description_kind":"markdown","optional":true},"members":{"type":["set","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.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"The display name for the Grafana team created.","description_kind":"markdown","required":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"team_id":{"type":"number","description":"The team id assigned to this team by Grafana.","description_kind":"markdown","computed":true},"team_uid":{"type":"string","description":"The team uid assigned to this team by Grafana.","description_kind":"markdown","computed":true}},"block_types":{"preferences":{"nesting_mode":"list","block":{"attributes":{"home_dashboard_uid":{"type":"string","description":"The UID of the dashboard to display when a team member logs in. Defaults to ``.","description_kind":"markdown","optional":true},"theme":{"type":"string","description":"The default theme for this team. Available themes are `light`, `dark`, `system`, or an empty string for the default theme. Defaults to ``.","description_kind":"markdown","optional":true},"timezone":{"type":"string","description":"The default timezone for this team. Available values are `utc`, `browser`, or an empty string for the default. Defaults to ``.","description_kind":"markdown","optional":true},"week_start":{"type":"string","description":"The default week start day for this team. Available values are `sunday`, `monday`, `saturday`, or an empty string for the default. Defaults to ``.","description_kind":"markdown","optional":true}},"description_kind":"plain"},"max_items":1},"team_sync":{"nesting_mode":"list","block":{"attributes":{"groups":{"type":["set","string"],"description_kind":"plain","optional":true}},"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/)","description_kind":"markdown"},"max_items":1}},"description":"\n* [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","description_kind":"markdown"}},"grafana_team_external_group":{"version":0,"block":{"attributes":{"groups":{"type":["set","string"],"description":"The team external groups list","description_kind":"markdown","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"team_id":{"type":"string","description":"The Team ID","description_kind":"markdown","required":true}},"description":"Equivalent to the the `team_sync` attribute of the `grafana_team` resource. Use one or the other to configure a team's external groups syncing config.","description_kind":"markdown"}},"grafana_user":{"version":0,"block":{"attributes":{"email":{"type":"string","description":"The email address of the Grafana user.","description_kind":"markdown","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"is_admin":{"type":"bool","description":"Whether to make user an admin. Defaults to `false`.","description_kind":"markdown","optional":true},"login":{"type":"string","description":"The username for the Grafana user.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"The display name for the Grafana user.","description_kind":"markdown","optional":true},"password":{"type":"string","description":"The password for the Grafana user.","description_kind":"markdown","required":true,"sensitive":true},"user_id":{"type":"number","description":"The numerical ID of the Grafana user.","description_kind":"markdown","computed":true}},"description":"\n* [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","description_kind":"markdown"}}},"data_source_schemas":{"grafana_cloud_access_policies":{"version":0,"block":{"attributes":{"access_policies":{"type":["set",["object",{"display_name":"string","id":"string","name":"string","region":"string","status":"string"}]],"description_kind":"plain","computed":true},"id":{"type":"string","description":"The ID of this datasource. This is an internal identifier used by the provider to track this datasource.","description_kind":"plain","computed":true},"name_filter":{"type":"string","description":"If set, only access policies with the specified name will be returned. This is faster than filtering in Terraform.","description_kind":"plain","optional":true},"region_filter":{"type":"string","description":"If set, only access policies in the specified region will be returned. This is faster than filtering in Terraform.","description_kind":"plain","optional":true}},"description":"\nFetches 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","description_kind":"markdown"}},"grafana_cloud_ips":{"version":0,"block":{"attributes":{"hosted_alerts":{"type":["set","string"],"description":"Set of IP addresses that are used for hosted alerts.","description_kind":"markdown","computed":true},"hosted_grafana":{"type":["set","string"],"description":"Set of IP addresses that are used for hosted Grafana.","description_kind":"markdown","computed":true},"hosted_logs":{"type":["set","string"],"description":"Set of IP addresses that are used for hosted logs.","description_kind":"markdown","computed":true},"hosted_metrics":{"type":["set","string"],"description":"Set of IP addresses that are used for hosted metrics.","description_kind":"markdown","computed":true},"hosted_profiles":{"type":["set","string"],"description":"Set of IP addresses that are used for hosted profiles.","description_kind":"markdown","computed":true},"hosted_traces":{"type":["set","string"],"description":"Set of IP addresses that are used for hosted traces.","description_kind":"markdown","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true}},"description":"Data source for retrieving sets of cloud IPs. See https://grafana.com/docs/grafana-cloud/reference/allow-list/ for more info","description_kind":"markdown"}},"grafana_cloud_organization":{"version":0,"block":{"attributes":{"created_at":{"type":"string","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description_kind":"plain","computed":true},"slug":{"type":"string","description_kind":"plain","optional":true,"computed":true},"updated_at":{"type":"string","description_kind":"plain","computed":true},"url":{"type":"string","description_kind":"plain","computed":true}},"description_kind":"plain"}},"grafana_cloud_private_data_source_connect_networks":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The ID of this datasource. This is an internal identifier used by the provider to track this datasource.","description_kind":"plain","computed":true},"name_filter":{"type":"string","description":"If set, only private data source connect networks with the specified name will be returned. This is faster than filtering in Terraform.","description_kind":"plain","optional":true},"private_data_source_connect_networks":{"type":["set",["object",{"display_name":"string","id":"string","name":"string","region":"string","status":"string"}]],"description_kind":"plain","computed":true},"region_filter":{"type":"string","description":"If set, only private data source connect networks in the specified region will be returned. This is faster than filtering in Terraform.","description_kind":"plain","optional":true}},"description":"\nFetches 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","description_kind":"markdown"}},"grafana_cloud_provider_aws_account":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The Terraform Resource ID. This has the format \"{{ stack_id }}:{{ resource_id }}\".","description_kind":"plain","computed":true},"name":{"type":"string","description":"An optional human-readable name for this AWS Account resource.","description_kind":"plain","computed":true},"regions":{"type":["set","string"],"description":"A set of regions that this AWS Account resource applies to.","description_kind":"plain","computed":true},"resource_id":{"type":"string","description":"The ID given by the Grafana Cloud Provider API to this AWS Account resource.","description_kind":"plain","required":true},"role_arn":{"type":"string","description":"An IAM Role ARN string to represent with this AWS Account resource.","description_kind":"plain","computed":true},"stack_id":{"type":"string","description":"The StackID of the Grafana Cloud instance. Part of the Terraform Resource ID.","description_kind":"plain","required":true}},"description_kind":"plain"}},"grafana_cloud_provider_aws_cloudwatch_scrape_job":{"version":0,"block":{"attributes":{"aws_account_resource_id":{"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 `resource_id` attribute of the `grafana_cloud_provider_aws_account` resource.","description_kind":"plain","computed":true},"disabled_reason":{"type":"string","description":"When the AWS CloudWatch Scrape Job is disabled, this will show the reason that it is in that state.","description_kind":"plain","computed":true},"enabled":{"type":"bool","description":"Whether the AWS CloudWatch Scrape Job is enabled or not.","description_kind":"plain","computed":true},"export_tags":{"type":"bool","description":"When enabled, AWS resource tags are exported as Prometheus labels to metrics formatted as `aws_\u003cservice_name\u003e_info`.","description_kind":"plain","computed":true},"id":{"type":"string","description":"The Terraform Resource ID. This has the format \"{{ stack_id }}:{{ name }}\".","description_kind":"plain","computed":true},"name":{"type":"string","description":"The name of the AWS CloudWatch Scrape Job. Part of the Terraform Resource ID.","description_kind":"plain","required":true},"regions":{"type":["set","string"],"description":"The set of AWS region names that this AWS CloudWatch Scrape Job is configured to scrape.","description_kind":"plain","computed":true},"regions_subset_override_used":{"type":"bool","description":"When true, the `regions` attribute will be the set of regions configured in the override. When false, the `regions` attribute will be the set of regions belonging to the AWS Account resource that is associated with this AWS CloudWatch Scrape Job.","description_kind":"plain","computed":true},"role_arn":{"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.","description_kind":"plain","computed":true},"stack_id":{"type":"string","description":"The Stack ID of the Grafana Cloud instance. Part of the Terraform Resource ID.","description_kind":"plain","required":true},"static_labels":{"type":["map","string"],"description":"A set of static labels to add to all metrics exported by this scrape job.","description_kind":"plain","computed":true}},"block_types":{"custom_namespace":{"nesting_mode":"list","block":{"attributes":{"name":{"type":"string","description":"The name of the custom namespace to scrape.","description_kind":"plain","computed":true},"scrape_interval_seconds":{"type":"number","description":"The interval in seconds to scrape the custom namespace.","description_kind":"plain","computed":true}},"block_types":{"metric":{"nesting_mode":"list","block":{"attributes":{"name":{"type":"string","description":"The name of the metric to scrape.","description_kind":"plain","computed":true},"statistics":{"type":["set","string"],"description":"A set of statistics to scrape.","description_kind":"plain","computed":true}},"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.","description_kind":"plain"}}},"description":"Zero or more configuration blocks to configure custom namespaces for the AWS CloudWatch Scrape Job to scrape. Each block must have a distinct `name` attribute. When accessing this as an attribute reference, it is a list of objects.","description_kind":"plain"}},"service":{"nesting_mode":"list","block":{"attributes":{"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.","description_kind":"plain","computed":true},"scrape_interval_seconds":{"type":"number","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.","description_kind":"plain","computed":true},"tags_to_add_to_metrics":{"type":["set","string"],"description":"A set of tags to add to all metrics exported by this scrape job, for use in PromQL queries.","description_kind":"plain","computed":true}},"block_types":{"metric":{"nesting_mode":"list","block":{"attributes":{"name":{"type":"string","description":"The name of the metric to scrape.","description_kind":"plain","computed":true},"statistics":{"type":["set","string"],"description":"A set of statistics to scrape.","description_kind":"plain","computed":true}},"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.","description_kind":"plain"}},"resource_discovery_tag_filter":{"nesting_mode":"list","block":{"attributes":{"key":{"type":"string","description":"The key of the tag filter.","description_kind":"plain","computed":true},"value":{"type":"string","description":"The value of the tag filter.","description_kind":"plain","computed":true}},"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.","description_kind":"plain"}}},"description":"One or more configuration blocks to dictate what this AWS CloudWatch Scrape Job should scrape. Each block must have a distinct `name` attribute. When accessing this as an attribute reference, it is a list of objects.","description_kind":"plain"}}},"description_kind":"plain"}},"grafana_cloud_provider_aws_cloudwatch_scrape_jobs":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The Terraform Resource ID. This has the format \"{{ stack_id }}\".","description_kind":"plain","computed":true},"stack_id":{"type":"string","description":"The Stack ID of the Grafana Cloud instance. Part of the Terraform Resource ID.","description_kind":"plain","required":true}},"block_types":{"scrape_job":{"nesting_mode":"list","block":{"attributes":{"aws_account_resource_id":{"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 `resource_id` attribute of the `grafana_cloud_provider_aws_account` resource.","description_kind":"plain","computed":true},"disabled_reason":{"type":"string","description":"When the AWS CloudWatch Scrape Job is disabled, this will show the reason that it is in that state.","description_kind":"plain","computed":true},"enabled":{"type":"bool","description":"Whether the AWS CloudWatch Scrape Job is enabled or not.","description_kind":"plain","computed":true},"export_tags":{"type":"bool","description":"When enabled, AWS resource tags are exported as Prometheus labels to metrics formatted as `aws_\u003cservice_name\u003e_info`.","description_kind":"plain","computed":true},"id":{"type":"string","description":"The Terraform Resource ID. This has the format \"{{ stack_id }}:{{ name }}\".","description_kind":"plain","computed":true},"name":{"type":"string","description":"The name of the AWS CloudWatch Scrape Job. Part of the Terraform Resource ID.","description_kind":"plain","computed":true},"regions":{"type":["set","string"],"description":"The set of AWS region names that this AWS CloudWatch Scrape Job is configured to scrape.","description_kind":"plain","computed":true},"regions_subset_override_used":{"type":"bool","description":"When true, the `regions` attribute will be the set of regions configured in the override. When false, the `regions` attribute will be the set of regions belonging to the AWS Account resource that is associated with this AWS CloudWatch Scrape Job.","description_kind":"plain","computed":true},"role_arn":{"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.","description_kind":"plain","computed":true},"stack_id":{"type":"string","description":"The Stack ID of the Grafana Cloud instance. Part of the Terraform Resource ID.","description_kind":"plain","computed":true},"static_labels":{"type":["map","string"],"description":"A set of static labels to add to all metrics exported by this scrape job.","description_kind":"plain","computed":true}},"block_types":{"custom_namespace":{"nesting_mode":"list","block":{"attributes":{"name":{"type":"string","description":"The name of the custom namespace to scrape.","description_kind":"plain","computed":true},"scrape_interval_seconds":{"type":"number","description":"The interval in seconds to scrape the custom namespace.","description_kind":"plain","computed":true}},"block_types":{"metric":{"nesting_mode":"list","block":{"attributes":{"name":{"type":"string","description":"The name of the metric to scrape.","description_kind":"plain","computed":true},"statistics":{"type":["set","string"],"description":"A set of statistics to scrape.","description_kind":"plain","computed":true}},"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.","description_kind":"plain"}}},"description":"Zero or more configuration blocks to configure custom namespaces for the AWS CloudWatch Scrape Job to scrape. Each block must have a distinct `name` attribute. When accessing this as an attribute reference, it is a list of objects.","description_kind":"plain"}},"service":{"nesting_mode":"list","block":{"attributes":{"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.","description_kind":"plain","computed":true},"scrape_interval_seconds":{"type":"number","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.","description_kind":"plain","computed":true},"tags_to_add_to_metrics":{"type":["set","string"],"description":"A set of tags to add to all metrics exported by this scrape job, for use in PromQL queries.","description_kind":"plain","computed":true}},"block_types":{"metric":{"nesting_mode":"list","block":{"attributes":{"name":{"type":"string","description":"The name of the metric to scrape.","description_kind":"plain","computed":true},"statistics":{"type":["set","string"],"description":"A set of statistics to scrape.","description_kind":"plain","computed":true}},"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.","description_kind":"plain"}},"resource_discovery_tag_filter":{"nesting_mode":"list","block":{"attributes":{"key":{"type":"string","description":"The key of the tag filter.","description_kind":"plain","computed":true},"value":{"type":"string","description":"The value of the tag filter.","description_kind":"plain","computed":true}},"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.","description_kind":"plain"}}},"description":"One or more configuration blocks to dictate what this AWS CloudWatch Scrape Job should scrape. Each block must have a distinct `name` attribute. When accessing this as an attribute reference, it is a list of objects.","description_kind":"plain"}}},"description":"A list of AWS CloudWatch Scrape Job objects associated with the given StackID.","description_kind":"plain"}}},"description_kind":"plain"}},"grafana_cloud_provider_azure_credential":{"version":0,"block":{"attributes":{"client_id":{"type":"string","description":"The client ID of the Azure Credential.","description_kind":"plain","computed":true},"client_secret":{"type":"string","description":"The client secret of the Azure Credential.","description_kind":"plain","computed":true,"sensitive":true},"id":{"type":"string","description":"The Terraform Resource ID. This has the format \"{{ stack_id }}:{{ resource_id }}\".","description_kind":"plain","computed":true},"name":{"type":"string","description":"The name of the Azure Credential.","description_kind":"plain","computed":true},"resource_id":{"type":"string","description":"The ID given by the Grafana Cloud Provider API to this Azure Credential resource.","description_kind":"plain","required":true},"resource_tags_to_add_to_metrics":{"type":["set","string"],"description":"The list of resource tags to add to metrics.","description_kind":"plain","computed":true},"stack_id":{"type":"string","description":"The StackID of the Grafana Cloud instance. Part of the Terraform Resource ID.","description_kind":"plain","required":true},"tenant_id":{"type":"string","description":"The tenant ID of the Azure Credential.","description_kind":"plain","computed":true}},"block_types":{"auto_discovery_configuration":{"nesting_mode":"list","block":{"attributes":{"resource_type_configurations":{"type":["list",["object",{"metric_configuration":["list",["object",{"aggregations":["list","string"],"dimensions":["list","string"],"name":"string"}]],"resource_type_name":"string"}]],"description":"The list of resource type configurations.","description_kind":"plain","computed":true},"subscription_id":{"type":"string","description":"The subscription ID of the Azure account.","description_kind":"plain","computed":true}},"description":"The list of auto discovery configurations.","description_kind":"plain"}},"resource_discovery_tag_filter":{"nesting_mode":"list","block":{"attributes":{"key":{"type":"string","description":"The key of the tag filter.","description_kind":"plain","computed":true},"value":{"type":"string","description":"The value of the tag filter.","description_kind":"plain","computed":true}},"description":"The list of tag filters to apply to resources.","description_kind":"plain"}}},"description_kind":"plain"}},"grafana_cloud_stack":{"version":0,"block":{"attributes":{"alertmanager_ip_allow_list_cname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the Alertmanager instances (Optional)","description_kind":"markdown","computed":true},"alertmanager_name":{"type":"string","description":"Name of the Alertmanager instance configured for this stack.","description_kind":"markdown","computed":true},"alertmanager_status":{"type":"string","description":"Status of the Alertmanager instance configured for this stack.","description_kind":"markdown","computed":true},"alertmanager_url":{"type":"string","description":"Base URL of the Alertmanager instance configured for this stack.","description_kind":"markdown","computed":true},"alertmanager_user_id":{"type":"number","description":"User ID of the Alertmanager instance configured for this stack.","description_kind":"markdown","computed":true},"cluster_slug":{"type":"string","description":"Slug of the cluster where this stack resides.","description_kind":"markdown","computed":true},"delete_protection":{"type":"bool","description":"Whether to enable delete protection for the stack, preventing accidental deletion.","description_kind":"markdown","computed":true},"description":{"type":"string","description":"Description of stack.","description_kind":"markdown","computed":true},"fleet_management_name":{"type":"string","description":"Name of the Fleet Management instance configured for this stack.","description_kind":"markdown","computed":true},"fleet_management_private_connectivity_info_private_dns":{"type":"string","description":"Private DNS for Fleet Management when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"fleet_management_private_connectivity_info_service_name":{"type":"string","description":"Service Name for Fleet Management when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"fleet_management_status":{"type":"string","description":"Status of the Fleet Management instance configured for this stack.","description_kind":"markdown","computed":true},"fleet_management_url":{"type":"string","description":"Base URL of the Fleet Management instance configured for this stack.","description_kind":"markdown","computed":true},"fleet_management_user_id":{"type":"number","description":"User ID of the Fleet Management instance configured for this stack.","description_kind":"markdown","computed":true},"grafanas_ip_allow_list_cname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the grafana instance (Optional)","description_kind":"markdown","computed":true},"graphite_ip_allow_list_cname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the Graphite instance (Optional)","description_kind":"markdown","computed":true},"graphite_name":{"type":"string","description_kind":"plain","computed":true},"graphite_private_connectivity_info_private_dns":{"type":"string","description":"Private DNS for Graphite when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"graphite_private_connectivity_info_service_name":{"type":"string","description":"Service Name for Graphite when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"graphite_status":{"type":"string","description_kind":"plain","computed":true},"graphite_url":{"type":"string","description_kind":"plain","computed":true},"graphite_user_id":{"type":"number","description_kind":"plain","computed":true},"id":{"type":"string","description":"The stack id assigned to this stack by Grafana.","description_kind":"markdown","computed":true},"influx_url":{"type":"string","description":"Base URL of the InfluxDB instance configured for this stack. The username is the same as the metrics' (`prometheus_user_id` 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.","description_kind":"markdown","computed":true},"labels":{"type":["map","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.","description_kind":"markdown","computed":true},"logs_ip_allow_list_cname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the Logs instance (Optional)","description_kind":"markdown","computed":true},"logs_name":{"type":"string","description_kind":"plain","computed":true},"logs_private_connectivity_info_private_dns":{"type":"string","description":"Private DNS for Logs when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"logs_private_connectivity_info_service_name":{"type":"string","description":"Service Name for Logs when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"logs_status":{"type":"string","description_kind":"plain","computed":true},"logs_url":{"type":"string","description_kind":"plain","computed":true},"logs_user_id":{"type":"number","description_kind":"plain","computed":true},"name":{"type":"string","description":"Name of stack. Conventionally matches the url of the instance (e.g. `\u003cstack_slug\u003e.grafana.net`).","description_kind":"markdown","computed":true},"oncall_api_url":{"type":"string","description":"Base URL of the OnCall API instance configured for this stack.","description_kind":"markdown","computed":true},"org_id":{"type":"number","description":"Organization id to assign to this stack.","description_kind":"markdown","computed":true},"org_name":{"type":"string","description":"Organization name to assign to this stack.","description_kind":"markdown","computed":true},"org_slug":{"type":"string","description":"Organization slug to assign to this stack.","description_kind":"markdown","computed":true},"otlp_private_connectivity_info_private_dns":{"type":"string","description":"Private DNS for OTLP when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"otlp_private_connectivity_info_service_name":{"type":"string","description":"Service Name for OTLP when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"otlp_url":{"type":"string","description":"Base URL of the OTLP instance configured for this stack. The username is the stack's ID (`id` attribute of this resource). See https://grafana.com/docs/grafana-cloud/send-data/otlp/send-data-otlp/ for docs on how to use this.","description_kind":"markdown","computed":true},"pdc_api_private_connectivity_info_private_dns":{"type":"string","description":"Private DNS for PDC's API when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"pdc_api_private_connectivity_info_service_name":{"type":"string","description":"Service Name for PDC's API when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"pdc_gateway_private_connectivity_info_private_dns":{"type":"string","description":"Private DNS for PDC's Gateway when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"pdc_gateway_private_connectivity_info_service_name":{"type":"string","description":"Service Name for PDC's Gateway when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"profiles_ip_allow_list_cname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the Profiles instance (Optional)","description_kind":"markdown","computed":true},"profiles_name":{"type":"string","description_kind":"plain","computed":true},"profiles_private_connectivity_info_private_dns":{"type":"string","description":"Private DNS for Profiles when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"profiles_private_connectivity_info_service_name":{"type":"string","description":"Service Name for Profiles when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"profiles_status":{"type":"string","description_kind":"plain","computed":true},"profiles_url":{"type":"string","description_kind":"plain","computed":true},"profiles_user_id":{"type":"number","description_kind":"plain","computed":true},"prometheus_ip_allow_list_cname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the Prometheus instance (Optional)","description_kind":"markdown","computed":true},"prometheus_name":{"type":"string","description":"Prometheus name for this instance.","description_kind":"markdown","computed":true},"prometheus_private_connectivity_info_private_dns":{"type":"string","description":"Private DNS for Prometheus when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"prometheus_private_connectivity_info_service_name":{"type":"string","description":"Service Name for Prometheus when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"prometheus_remote_endpoint":{"type":"string","description":"Use this URL to query hosted metrics data e.g. Prometheus data source in Grafana","description_kind":"markdown","computed":true},"prometheus_remote_write_endpoint":{"type":"string","description":"Use this URL to send prometheus metrics to Grafana cloud","description_kind":"markdown","computed":true},"prometheus_status":{"type":"string","description":"Prometheus status for this instance.","description_kind":"markdown","computed":true},"prometheus_url":{"type":"string","description":"Prometheus url for this instance.","description_kind":"markdown","computed":true},"prometheus_user_id":{"type":"number","description":"Prometheus user ID. Used for e.g. remote_write.","description_kind":"markdown","computed":true},"region_slug":{"type":"string","description":"The region this stack is deployed to.","description_kind":"markdown","computed":true},"slug":{"type":"string","description":"Subdomain that the Grafana instance will be available at (i.e. setting slug to “\u003cstack_slug\u003e” will make the instance\navailable at “https://\u003cstack_slug\u003e.grafana.net\".","description_kind":"markdown","required":true},"status":{"type":"string","description":"Status of the stack.","description_kind":"markdown","computed":true},"traces_ip_allow_list_cname":{"type":"string","description":"Comma-separated list of CNAMEs that can be whitelisted to access the Traces instance (Optional)","description_kind":"markdown","computed":true},"traces_name":{"type":"string","description_kind":"plain","computed":true},"traces_private_connectivity_info_private_dns":{"type":"string","description":"Private DNS for Traces when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"traces_private_connectivity_info_service_name":{"type":"string","description":"Service Name for Traces when using AWS PrivateLink (only for AWS stacks)","description_kind":"markdown","computed":true},"traces_status":{"type":"string","description_kind":"plain","computed":true},"traces_url":{"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.","description_kind":"markdown","computed":true},"traces_user_id":{"type":"number","description_kind":"plain","computed":true},"url":{"type":"string","description":"Custom URL for the Grafana instance. Must have a CNAME setup to point to `.grafana.net` before creating the stack","description_kind":"markdown","computed":true}},"description":"Data source for Grafana Stack","description_kind":"markdown"}},"grafana_connections_metrics_endpoint_scrape_job":{"version":0,"block":{"attributes":{"authentication_basic_password":{"type":"string","description":"Password for basic authentication.","description_kind":"plain","computed":true,"sensitive":true},"authentication_basic_username":{"type":"string","description":"Username for basic authentication.","description_kind":"plain","computed":true},"authentication_bearer_token":{"type":"string","description":"Token for authentication bearer.","description_kind":"plain","computed":true,"sensitive":true},"authentication_method":{"type":"string","description":"Method to pass authentication credentials: basic or bearer.","description_kind":"plain","computed":true},"enabled":{"type":"bool","description":"Whether the metrics endpoint scrape job is enabled or not.","description_kind":"plain","computed":true},"id":{"type":"string","description":"The Terraform Resource ID. This has the format \"{{ stack_id }}:{{ name }}\".","description_kind":"plain","computed":true},"name":{"type":"string","description":"The name of the Metrics Endpoint Scrape Job. Part of the Terraform Resource ID.","description_kind":"plain","required":true},"scrape_interval_seconds":{"type":"number","description":"Frequency for scraping the metrics endpoint: 30, 60, or 120 seconds.","description_kind":"plain","computed":true},"stack_id":{"type":"string","description":"The Stack ID of the Grafana Cloud instance. Part of the Terraform Resource ID.","description_kind":"plain","required":true},"url":{"type":"string","description":"The url to scrape metrics.","description_kind":"plain","computed":true}},"description_kind":"plain"}},"grafana_dashboard":{"version":0,"block":{"attributes":{"config_json":{"type":"string","description":"The complete dashboard model JSON.","description_kind":"markdown","computed":true},"dashboard_id":{"type":"number","description":"The numerical ID of the Grafana dashboard. Specify either this or `uid`. Defaults to `-1`.","description_kind":"markdown","optional":true},"folder_uid":{"type":"string","description":"The UID of the folder where the Grafana dashboard is found.","description_kind":"markdown","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"is_starred":{"type":"bool","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.","description_kind":"markdown","computed":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"slug":{"type":"string","description":"URL slug of the dashboard (deprecated).","description_kind":"markdown","computed":true},"title":{"type":"string","description":"The title of the Grafana dashboard.","description_kind":"markdown","computed":true},"uid":{"type":"string","description":"The uid of the Grafana dashboard. Specify either this or `dashboard_id`. Defaults to ``.","description_kind":"markdown","optional":true},"url":{"type":"string","description":"The full URL of the dashboard.","description_kind":"markdown","computed":true},"version":{"type":"number","description":"The numerical version of the Grafana dashboard.","description_kind":"markdown","computed":true}},"description":"\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","description_kind":"markdown"}},"grafana_dashboards":{"version":0,"block":{"attributes":{"dashboards":{"type":["list",["object",{"folder_title":"string","title":"string","uid":"string"}]],"description_kind":"plain","computed":true},"folder_uids":{"type":["list","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.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"limit":{"type":"number","description":"Maximum number of dashboard search results to return. Defaults to `5000`.","description_kind":"markdown","optional":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"tags":{"type":["list","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.","description_kind":"markdown","optional":true}},"description":"\nDatasource 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","description_kind":"markdown"}},"grafana_data_source":{"version":0,"block":{"attributes":{"access_mode":{"type":"string","description":"The method by which Grafana will access the data source: `proxy` or `direct`.","description_kind":"markdown","computed":true},"basic_auth_enabled":{"type":"bool","description":"Whether to enable basic auth for the data source.","description_kind":"markdown","computed":true},"basic_auth_username":{"type":"string","description":"Basic auth username.","description_kind":"markdown","computed":true},"database_name":{"type":"string","description":"(Required by some data source types) The name of the database to use on the selected data source server.","description_kind":"markdown","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"is_default":{"type":"bool","description":"Whether to set the data source as default. This should only be `true` to a single data source.","description_kind":"markdown","computed":true},"json_data_encoded":{"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.","description_kind":"markdown","computed":true},"name":{"type":"string","description_kind":"plain","optional":true,"computed":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"private_data_source_connect_network_id":{"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.","description_kind":"markdown","computed":true},"type":{"type":"string","description":"The data source type. Must be one of the supported data source keywords.","description_kind":"markdown","computed":true},"uid":{"type":"string","description_kind":"plain","optional":true,"computed":true},"url":{"type":"string","description":"The URL for the data source. The type of URL required varies depending on the chosen data source type.","description_kind":"markdown","computed":true},"username":{"type":"string","description":"(Required by some data source types) The username to use to authenticate to the data source.","description_kind":"markdown","computed":true}},"description":"Get details about a Grafana Datasource querying by either name, uid or ID","description_kind":"markdown"}},"grafana_fleet_management_collector":{"version":0,"block":{"attributes":{"enabled":{"type":"bool","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","description_kind":"plain","computed":true},"id":{"type":"string","description":"ID of the collector","description_kind":"plain","required":true},"local_attributes":{"type":["map","string"],"description":"Local attributes for the collector","description_kind":"plain","computed":true},"remote_attributes":{"type":["map","string"],"description":"Remote attributes for the collector","description_kind":"plain","computed":true}},"description":"\nRepresents 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\nRequired access policy scopes:\n\n* fleet-management:read\n","description_kind":"plain"}},"grafana_fleet_management_collectors":{"version":0,"block":{"attributes":{"collectors":{"type":["list",["object",{"enabled":"bool","id":"string","local_attributes":["map","string"],"remote_attributes":["map","string"]}]],"description":"List of collectors","description_kind":"plain","computed":true}},"description":"\nRepresents 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\nRequired access policy scopes:\n\n* fleet-management:read\n","description_kind":"plain"}},"grafana_folder":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"parent_folder_uid":{"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.","description_kind":"markdown","computed":true},"title":{"type":"string","description":"The title of the folder. If not set, only the uid is used to find the folder.","description_kind":"markdown","optional":true},"uid":{"type":"string","description":"The uid of the folder. If not set, only the title of the folder is used to find the folder.","description_kind":"markdown","optional":true,"computed":true},"url":{"type":"string","description":"The full URL of the folder.","description_kind":"markdown","computed":true}},"description":"\n* [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","description_kind":"markdown"}},"grafana_folders":{"version":0,"block":{"attributes":{"folders":{"type":["set",["object",{"id":"number","title":"string","uid":"string","url":"string"}]],"description":"The Grafana instance's folders.","description_kind":"markdown","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true}},"description":"\n* [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","description_kind":"markdown"}},"grafana_frontend_o11y_app":{"version":0,"block":{"attributes":{"allowed_origins":{"type":["list","string"],"description":"A list of allowed origins for CORS.","description_kind":"plain","computed":true},"collector_endpoint":{"type":"string","description":"The collector URL Grafana Cloud Frontend Observability. Use this endpoint to send your Telemetry.","description_kind":"plain","computed":true},"extra_log_attributes":{"type":["map","string"],"description":"The extra attributes to append in each signal.","description_kind":"plain","computed":true},"id":{"type":"number","description":"The Terraform Resource ID. This auto-generated from Frontend Observability API.","description_kind":"plain","computed":true},"name":{"type":"string","description":"The name of the Frontend Observability App. Part of the Terraform Resource ID.","description_kind":"plain","required":true},"settings":{"type":["map","string"],"description":"The settings of the Frontend Observability App.","description_kind":"plain","computed":true},"stack_id":{"type":"number","description":"The Stack ID of the Grafana Cloud instance. Part of the Terraform Resource ID.","description_kind":"plain","required":true}},"description_kind":"plain"}},"grafana_k6_load_test":{"version":0,"block":{"attributes":{"baseline_test_run_id":{"type":"string","description":"Identifier of a baseline test run used for results comparison.","description_kind":"plain","computed":true},"created":{"type":"string","description":"The date when the load test was created.","description_kind":"plain","computed":true},"id":{"type":"string","description":"Numeric identifier of the load test.","description_kind":"plain","required":true},"name":{"type":"string","description":"Human-friendly identifier of the load test.","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"The identifier of the project this load test belongs to.","description_kind":"plain","computed":true},"script":{"type":"string","description":"The k6 test script content.","description_kind":"plain","computed":true},"updated":{"type":"string","description":"The date when the load test was last updated.","description_kind":"plain","computed":true}},"description":"Retrieves a k6 load test.","description_kind":"plain"}},"grafana_k6_load_tests":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The identifier of the project the load tests belong to. This is set to the same as the project_id.","description_kind":"plain","computed":true},"load_tests":{"type":["list",["object",{"baseline_test_run_id":"string","created":"string","id":"string","name":"string","project_id":"string","script":"string","updated":"string"}]],"description_kind":"plain","computed":true},"name":{"type":"string","description":"Human-friendly identifier of the load test.","description_kind":"plain","optional":true},"project_id":{"type":"string","description":"The identifier of the project the load tests belong to.","description_kind":"plain","required":true}},"description":"Retrieves all k6 load tests that belong to a project.","description_kind":"plain"}},"grafana_k6_project":{"version":0,"block":{"attributes":{"created":{"type":"string","description":"The date when the project was created.","description_kind":"plain","computed":true},"grafana_folder_uid":{"type":"string","description":"The Grafana folder uid.","description_kind":"plain","computed":true},"id":{"type":"string","description":"Numeric identifier of the project.","description_kind":"plain","required":true},"is_default":{"type":"bool","description":"Whether this project is the default for running tests when no explicit project identifier is provided.","description_kind":"plain","computed":true},"name":{"type":"string","description":"Human-friendly identifier of the project.","description_kind":"plain","computed":true},"updated":{"type":"string","description":"The date when the project was last updated.","description_kind":"plain","computed":true}},"description":"Retrieves a k6 project.","description_kind":"plain"}},"grafana_k6_project_allowed_load_zones":{"version":0,"block":{"attributes":{"allowed_load_zones":{"type":["list","string"],"description":"List of allowed private k6 load zone IDs for this project.","description_kind":"plain","computed":true},"id":{"type":"string","description":"The identifier of the project. This is set to the same as the project_id.","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"The identifier of the project to retrieve private allowed load zones for.","description_kind":"plain","required":true}},"description":"Retrieves allowed private load zones for a k6 project.","description_kind":"plain"}},"grafana_k6_project_limits":{"version":0,"block":{"attributes":{"duration_max_per_test":{"type":"number","description":"Maximum duration of a test in seconds.","description_kind":"plain","computed":true},"id":{"type":"string","description":"The identifier of the project limits. This is set to the same as the project_id.","description_kind":"plain","computed":true},"project_id":{"type":"string","description":"The identifier of the project to get limits for.","description_kind":"plain","required":true},"vu_browser_max_per_test":{"type":"number","description":"Maximum number of concurrent browser virtual users (VUs) used in one test.","description_kind":"plain","computed":true},"vu_max_per_test":{"type":"number","description":"Maximum number of concurrent virtual users (VUs) used in one test.","description_kind":"plain","computed":true},"vuh_max_per_month":{"type":"number","description":"Maximum amount of virtual user hours (VU/h) used per one calendar month.","description_kind":"plain","computed":true}},"description":"Retrieves a k6 project limits.","description_kind":"plain"}},"grafana_k6_projects":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"Human-friendly identifier of the project. This is set to the same as name.","description_kind":"plain","computed":true},"name":{"type":"string","description":"Human-friendly identifier of the project.","description_kind":"plain","optional":true},"projects":{"type":["list",["object",{"created":"string","grafana_folder_uid":"string","id":"string","is_default":"bool","name":"string","updated":"string"}]],"description_kind":"plain","computed":true}},"description":"Retrieves all k6 projects with the given name.","description_kind":"plain"}},"grafana_k6_schedule":{"version":0,"block":{"attributes":{"created_by":{"type":"string","description":"The email of the user who created the schedule.","description_kind":"plain","computed":true},"deactivated":{"type":"bool","description":"Whether the schedule is deactivated.","description_kind":"plain","computed":true},"id":{"type":"string","description":"Numeric identifier of the schedule.","description_kind":"plain","computed":true},"load_test_id":{"type":"string","description":"The identifier of the load test to retrieve the schedule for.","description_kind":"plain","required":true},"next_run":{"type":"string","description":"The next scheduled execution time.","description_kind":"plain","computed":true},"starts":{"type":"string","description":"The start time for the schedule (RFC3339 format).","description_kind":"plain","computed":true}},"block_types":{"recurrence_rule":{"nesting_mode":"single","block":{"attributes":{"byday":{"type":["list","string"],"description":"The weekdays when the 'WEEKLY' recurrence will be applied (e.g., ['MO', 'WE', 'FR']). Cannot be set for other frequencies.","description_kind":"plain","computed":true},"count":{"type":"number","description":"How many times the recurrence will repeat.","description_kind":"plain","computed":true},"frequency":{"type":"string","description":"The frequency of the schedule (HOURLY, DAILY, WEEKLY, MONTHLY).","description_kind":"plain","computed":true},"interval":{"type":"number","description":"The interval between each frequency iteration (e.g., 2 = every 2 hours for HOURLY).","description_kind":"plain","computed":true},"until":{"type":"string","description":"The end time for the recurrence (RFC3339 format).","description_kind":"plain","computed":true}},"description":"The schedule recurrence settings. If null, the test will run only once on the starts date.","description_kind":"plain"}}},"description":"Retrieves a k6 schedule.","description_kind":"plain"}},"grafana_k6_schedules":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The identifier for this data source.","description_kind":"plain","computed":true},"schedules":{"type":["list",["object",{"created_by":"string","deactivated":"bool","id":"string","load_test_id":"string","next_run":"string","recurrence_rule":["object",{"byday":["list","string"],"count":"number","frequency":"string","interval":"number","until":"string"}],"starts":"string"}]],"description":"List of k6 schedules.","description_kind":"plain","computed":true}},"description":"Retrieves all k6 schedules.","description_kind":"plain"}},"grafana_library_panel":{"version":0,"block":{"attributes":{"created":{"type":"string","description":"Timestamp when the library panel was created.","description_kind":"markdown","computed":true},"dashboard_ids":{"type":["list","number"],"description":"Numerical IDs of Grafana dashboards containing the library panel.","description_kind":"markdown","computed":true},"description":{"type":"string","description":"Description of the library panel.","description_kind":"markdown","computed":true},"folder_name":{"type":"string","description":"Name of the folder containing the library panel.","description_kind":"markdown","computed":true},"folder_uid":{"type":"string","description":"Unique ID (UID) of the folder containing the library panel.","description_kind":"markdown","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"model_json":{"type":"string","description":"The JSON model for the library panel.","description_kind":"markdown","computed":true},"name":{"type":"string","description":"Name of the library panel.","description_kind":"markdown","optional":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"panel_id":{"type":"number","description":"The numeric ID of the library panel computed by Grafana.","description_kind":"markdown","computed":true},"type":{"type":"string","description":"Type of the library panel (eg. text).","description_kind":"markdown","computed":true},"uid":{"type":"string","description":"The unique identifier (UID) of the library panel.","description_kind":"markdown","optional":true},"updated":{"type":"string","description":"Timestamp when the library panel was last modified.","description_kind":"markdown","computed":true},"version":{"type":"number","description":"Version of the library panel.","description_kind":"markdown","computed":true}},"description":"Data source for retrieving a single library panel by name or uid.","description_kind":"markdown"}},"grafana_library_panels":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","computed":true},"org_id":{"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.","description_kind":"plain","optional":true,"computed":true},"panels":{"type":["set",["object",{"description":"string","folder_uid":"string","model_json":"string","name":"string","uid":"string"}]],"description_kind":"plain","computed":true}},"description_kind":"plain"}},"grafana_oncall_escalation_chain":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The escalation chain name.","description_kind":"markdown","required":true}},"description":"\n* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/escalation_chains/)\n","description_kind":"markdown"}},"grafana_oncall_integration":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The integration ID.","description_kind":"markdown","required":true},"link":{"type":"string","description":"The link for the integration.","description_kind":"markdown","computed":true},"name":{"type":"string","description":"The integration name.","description_kind":"markdown","computed":true}},"description":"\n* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/integrations/)\n","description_kind":"markdown"}},"grafana_oncall_label":{"version":0,"block":{"attributes":{"id":{"type":"string","description":"The ID of the label.","description_kind":"plain","computed":true},"key":{"type":"string","description":"The key for the label.","description_kind":"plain","required":true},"value":{"type":"string","description":"The value of the label.","description_kind":"plain","required":true}},"description":"* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/users/)","description_kind":"markdown"}},"grafana_oncall_outgoing_webhook":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The outgoing webhook name.","description_kind":"markdown","required":true}},"description":"\n* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/outgoing_webhooks/)\n","description_kind":"markdown"}},"grafana_oncall_schedule":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The schedule name.","description_kind":"markdown","required":true},"type":{"type":"string","description":"The schedule type.","description_kind":"markdown","computed":true}},"description":"\n* [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","description_kind":"markdown"}},"grafana_oncall_slack_channel":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The Slack channel name.","description_kind":"markdown","required":true},"slack_id":{"type":"string","description":"The Slack ID of the channel.","description_kind":"markdown","computed":true}},"description":"\n* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/slack_channels/)\n","description_kind":"markdown"}},"grafana_oncall_team":{"version":0,"block":{"attributes":{"avatar_url":{"type":"string","description_kind":"plain","computed":true},"email":{"type":"string","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The team name.","description_kind":"markdown","required":true}},"description_kind":"plain"}},"grafana_oncall_user":{"version":0,"block":{"attributes":{"email":{"type":"string","description":"The email of the user.","description_kind":"plain","computed":true},"id":{"type":"string","description":"The ID of the user.","description_kind":"plain","computed":true},"role":{"type":"string","description":"The role of the user.","description_kind":"plain","computed":true},"username":{"type":"string","description":"The username of the user.","description_kind":"plain","required":true}},"description":"* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/users/)","description_kind":"markdown"}},"grafana_oncall_user_group":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"slack_handle":{"type":"string","description_kind":"plain","required":true},"slack_id":{"type":"string","description_kind":"plain","computed":true}},"description":"\n* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/user_groups/)\n","description_kind":"markdown"}},"grafana_oncall_users":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","computed":true},"users":{"type":["list",["object",{"email":"string","id":"string","role":"string","username":"string"}]],"description_kind":"plain","computed":true}},"description":"* [HTTP API](https://grafana.com/docs/oncall/latest/oncall-api-reference/users/)","description_kind":"markdown"}},"grafana_organization":{"version":0,"block":{"attributes":{"admins":{"type":["set","string"],"description":"A list of email addresses corresponding to users given admin access to the organization.","description_kind":"markdown","computed":true},"editors":{"type":["set","string"],"description":"A list of email addresses corresponding to users given editor access to the organization.","description_kind":"markdown","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"The name of the Organization.","description_kind":"markdown","required":true},"viewers":{"type":["set","string"],"description":"A list of email addresses corresponding to users given viewer access to the organization.","description_kind":"markdown","computed":true}},"description":"\n* [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","description_kind":"markdown"}},"grafana_organization_preferences":{"version":0,"block":{"attributes":{"home_dashboard_uid":{"type":"string","description":"The Organization home dashboard UID. This is only available in Grafana 9.0+.","description_kind":"markdown","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"theme":{"type":"string","description":"The Organization theme. Available values are `light`, `dark`, `system`, or an empty string for the default.","description_kind":"markdown","computed":true},"timezone":{"type":"string","description":"The Organization timezone. Available values are `utc`, `browser`, or an empty string for the default.","description_kind":"markdown","computed":true},"week_start":{"type":"string","description":"The Organization week start day. Available values are `sunday`, `monday`, `saturday`, or an empty string for the default.","description_kind":"markdown","computed":true}},"description":"\n* [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","description_kind":"markdown"}},"grafana_organization_user":{"version":0,"block":{"attributes":{"email":{"type":"string","description":"The email address of the Grafana user. Defaults to ``.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"login":{"type":"string","description":"The username of the Grafana user. Defaults to ``.","description_kind":"markdown","optional":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"user_id":{"type":"number","description":"The numerical ID of the Grafana user.","description_kind":"markdown","computed":true}},"description":"\n* [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","description_kind":"markdown"}},"grafana_role":{"version":0,"block":{"attributes":{"description":{"type":"string","description":"Description of the role.","description_kind":"markdown","computed":true},"display_name":{"type":"string","description":"Display name of the role. Available with Grafana 8.5+.","description_kind":"markdown","computed":true},"global":{"type":"bool","description":"Boolean to state whether the role is available across all organizations or not.","description_kind":"markdown","computed":true},"group":{"type":"string","description":"Group of the role. Available with Grafana 8.5+.","description_kind":"markdown","computed":true},"hidden":{"type":"bool","description":"Boolean to state whether the role should be visible in the Grafana UI or not. Available with Grafana 8.5+.","description_kind":"markdown","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Name of the role","description_kind":"markdown","required":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","computed":true},"permissions":{"type":["set",["object",{"action":"string","scope":"string"}]],"description":"Specific set of actions granted by the role.","description_kind":"markdown","computed":true},"uid":{"type":"string","description":"Unique identifier of the role. Used for assignments.","description_kind":"markdown","computed":true},"version":{"type":"number","description":"Version of the role. A role is updated only on version increase. This field or `auto_increment_version` should be set.","description_kind":"markdown","computed":true}},"description":"\n**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","description_kind":"markdown"}},"grafana_service_account":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"is_disabled":{"type":"bool","description":"The disabled status for the service account.","description_kind":"markdown","computed":true},"name":{"type":"string","description":"The name of the Service Account.","description_kind":"markdown","required":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"role":{"type":"string","description":"The basic role of the service account in the organization.","description_kind":"markdown","computed":true}},"description":"\n\t\t* [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","description_kind":"markdown"}},"grafana_slos":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"slos":{"type":["list",["object",{"alerting":["list",["object",{"advanced_options":["list",["object",{"min_failures":"number"}]],"annotation":["list",["object",{"key":"string","value":"string"}]],"fastburn":["list",["object",{"annotation":["list",["object",{"key":"string","value":"string"}]],"label":["list",["object",{"key":"string","value":"string"}]]}]],"label":["list",["object",{"key":"string","value":"string"}]],"slowburn":["list",["object",{"annotation":["list",["object",{"key":"string","value":"string"}]],"label":["list",["object",{"key":"string","value":"string"}]]}]]}]],"description":"string","destination_datasource":["list",["object",{"uid":"string"}]],"folder_uid":"string","label":["list",["object",{"key":"string","value":"string"}]],"name":"string","objectives":["list",["object",{"value":"number","window":"string"}]],"query":["list",["object",{"freeform":["list",["object",{"query":"string"}]],"grafana_queries":["list",["object",{"grafana_queries":"string"}]],"ratio":["list",["object",{"group_by_labels":["list","string"],"success_metric":"string","total_metric":"string"}]],"type":"string"}]],"search_expression":"string","uuid":"string"}]],"description":"Returns a list of all SLOs\"","description_kind":"markdown","computed":true}},"description":"\nDatasource 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\t\t\t\t","description_kind":"markdown"}},"grafana_synthetic_monitoring_probe":{"version":0,"block":{"attributes":{"disable_browser_checks":{"type":"bool","description":"Disables browser checks for this probe.","description_kind":"markdown","computed":true},"disable_scripted_checks":{"type":"bool","description":"Disables scripted checks for this probe.","description_kind":"markdown","computed":true},"id":{"type":"string","description":"The ID of the probe.","description_kind":"markdown","computed":true},"labels":{"type":["map","string"],"description":"Custom labels to be included with collected metrics and logs.","description_kind":"markdown","computed":true},"latitude":{"type":"number","description":"Latitude coordinates.","description_kind":"markdown","computed":true},"longitude":{"type":"number","description":"Longitude coordinates.","description_kind":"markdown","computed":true},"name":{"type":"string","description":"Name of the probe.","description_kind":"markdown","required":true},"public":{"type":"bool","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 `true`.","description_kind":"markdown","computed":true},"region":{"type":"string","description":"Region of the probe.","description_kind":"markdown","computed":true},"tenant_id":{"type":"number","description":"The tenant ID of the probe.","description_kind":"markdown","computed":true}},"description":"Data source for retrieving a single probe by name.","description_kind":"markdown"}},"grafana_synthetic_monitoring_probes":{"version":0,"block":{"attributes":{"filter_deprecated":{"type":"bool","description":"If true, only probes that are not deprecated will be returned. Defaults to `true`.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"probes":{"type":["map","number"],"description":"Map of probes with their names as keys and IDs as values.","description_kind":"markdown","computed":true}},"description":"Data source for retrieving all probes.","description_kind":"markdown"}},"grafana_team":{"version":0,"block":{"attributes":{"email":{"type":"string","description":"An email address for the team.","description_kind":"markdown","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"members":{"type":["set","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.","description_kind":"markdown","computed":true},"name":{"type":"string","description":"The name of the Grafana team","description_kind":"markdown","required":true},"org_id":{"type":"string","description":"The Organization ID. If not set, the Org ID defined in the provider block will be used.","description_kind":"markdown","optional":true},"preferences":{"type":["list",["object",{"home_dashboard_uid":"string","theme":"string","timezone":"string","week_start":"string"}]],"description_kind":"plain","computed":true},"read_team_sync":{"type":"bool","description":"Whether to read the team sync settings. This is only available in Grafana Enterprise. Defaults to `false`.","description_kind":"markdown","optional":true},"team_id":{"type":"number","description":"The team id assigned to this team by Grafana.","description_kind":"markdown","computed":true},"team_sync":{"type":["list",["object",{"groups":["set","string"]}]],"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/)","description_kind":"markdown","computed":true},"team_uid":{"type":"string","description":"The team uid assigned to this team by Grafana.","description_kind":"markdown","computed":true}},"description":"\n* [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","description_kind":"markdown"}},"grafana_user":{"version":0,"block":{"attributes":{"email":{"type":"string","description":"The email address of the Grafana user. Defaults to ``.","description_kind":"markdown","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"is_admin":{"type":"bool","description":"Whether the user is an admin.","description_kind":"markdown","computed":true},"login":{"type":"string","description":"The username for the Grafana user. Defaults to ``.","description_kind":"markdown","optional":true},"name":{"type":"string","description":"The display name for the Grafana user.","description_kind":"markdown","computed":true},"user_id":{"type":"number","description":"The numerical ID of the Grafana user. Defaults to `-1`.","description_kind":"markdown","optional":true}},"description":"\n* [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","description_kind":"markdown"}},"grafana_users":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"users":{"type":["set",["object",{"email":"string","id":"number","is_admin":"bool","login":"string","name":"string"}]],"description":"The Grafana instance's users.","description_kind":"markdown","computed":true}},"description":"\n* [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\t\t","description_kind":"markdown"}}}}}}



Test patch:
diff --git a/internal/resources/asserts/resource_custom_model_rules_test.go b/internal/resources/asserts/resource_custom_model_rules_test.go
new file mode 100644
index 00000000..9764c662
--- /dev/null
+++ b/internal/resources/asserts/resource_custom_model_rules_test.go
@@ -0,0 +1,335 @@
+package asserts_test
+
+import (
+	"context"
+	"fmt"
+	"regexp"
+	"strings"
+	"testing"
+
+	"github.com/grafana/terraform-provider-grafana/v4/internal/common"
+	"github.com/grafana/terraform-provider-grafana/v4/internal/testutils"
+	"github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
+	"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
+	"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
+)
+
+func TestAccAssertsCustomModelRules_basic(t *testing.T) {
+	testutils.CheckCloudInstanceTestsEnabled(t)
+
+	stackID := testutils.Provider.Meta().(*common.Client).GrafanaStackID
+	rName := fmt.Sprintf("test-acc-cmr-%s", acctest.RandString(8))
+
+	resource.ParallelTest(t, resource.TestCase{
+		ProtoV5ProviderFactories: testutils.ProtoV5ProviderFactories,
+		CheckDestroy:             testAccAssertsCustomModelRulesCheckDestroy,
+		Steps: []resource.TestStep{
+			{
+				Config: testAccAssertsCustomModelRulesConfig(stackID, rName),
+				Check: resource.ComposeTestCheckFunc(
+					testAccAssertsCustomModelRulesCheckExists("grafana_asserts_custom_model_rules.test", stackID, rName),
+					resource.TestCheckResourceAttr("grafana_asserts_custom_model_rules.test", "name", rName),
+				),
+			},
+			{
+				// Test import
+				ResourceName:            "grafana_asserts_custom_model_rules.test",
+				ImportState:             true,
+				ImportStateVerify:       true,
+				ImportStateVerifyIgnore: []string{"rules"},
+			},
+			{
+				// Test update
+				Config: testAccAssertsCustomModelRulesConfigUpdated(stackID, rName),
+				Check: resource.ComposeTestCheckFunc(
+					testAccAssertsCustomModelRulesCheckExists("grafana_asserts_custom_model_rules.test", stackID, rName),
+					resource.TestCheckResourceAttr("grafana_asserts_custom_model_rules.test", "name", rName),
+				),
+			},
+		},
+	})
+}
+
+func testAccAssertsCustomModelRulesCheckExists(rn string, stackID int64, name string) resource.TestCheckFunc {
+	return func(s *terraform.State) error {
+		rs, ok := s.RootModule().Resources[rn]
+		if !ok {
+			return fmt.Errorf("resource not found: %s\n %#v", rn, s.RootModule().Resources)
+		}
+
+		if rs.Primary.ID == "" {
+			return fmt.Errorf("resource id not set")
+		}
+
+		client := testutils.Provider.Meta().(*common.Client).AssertsAPIClient
+		ctx := context.Background()
+
+		_, _, err := client.CustomModelRulesConfigurationAPI.GetModelRules(ctx, name).XScopeOrgID(fmt.Sprintf("%d", stackID)).Execute()
+		if err != nil {
+			return fmt.Errorf("error getting custom model rules: %s", err)
+		}
+		return nil
+	}
+}
+
+func testAccAssertsCustomModelRulesCheckDestroy(s *terraform.State) error {
+	client := testutils.Provider.Meta().(*common.Client).AssertsAPIClient
+	ctx := context.Background()
+
+	for _, rs := range s.RootModule().Resources {
+		if rs.Type != "grafana_asserts_custom_model_rules" {
+			continue
+		}
+
+		name := rs.Primary.ID
+		stackID := fmt.Sprintf("%d", testutils.Provider.Meta().(*common.Client).GrafanaStackID)
+
+		_, _, err := client.CustomModelRulesConfigurationAPI.GetModelRules(ctx, name).XScopeOrgID(stackID).Execute()
+		if err != nil {
+			if strings.Contains(err.Error(), "not found") || strings.Contains(err.Error(), "404") {
+				continue
+			}
+			return fmt.Errorf("error checking custom model rules destruction: %s", err)
+		}
+		return fmt.Errorf("custom model rules %s still exists", name)
+	}
+
+	return nil
+}
+
+func testAccAssertsCustomModelRulesConfig(stackID int64, name string) string {
+	return fmt.Sprintf(`
+resource "grafana_asserts_custom_model_rules" "test" {
+  name = "%s"
+  rules {
+    entity {
+      type = "Service"
+      name = "Service"
+      defined_by {
+        query = "up{job!=''}"
+      }
+    }
+  }
+}
+`, name)
+}
+
+func testAccAssertsCustomModelRulesConfigUpdated(stackID int64, name string) string {
+	return fmt.Sprintf(`
+resource "grafana_asserts_custom_model_rules" "test" {
+  name = "%s"
+  rules {
+    entity {
+      type = "Service"
+      name = "Service"
+      defined_by {
+        query = "up{job!=''}"
+      }
+    }
+    entity {
+      type = "Pod"
+      name = "Pod"
+      defined_by {
+        query = "up{pod!=''}"
+      }
+    }
+  }
+}
+`, name)
+}
+
+// TestAccAssertsCustomModelRules_eventualConsistencyStress tests multiple resources created simultaneously
+// to verify the retry logic handles eventual consistency properly
+func TestAccAssertsCustomModelRules_eventualConsistencyStress(t *testing.T) {
+	testutils.CheckCloudInstanceTestsEnabled(t)
+	testutils.CheckStressTestsEnabled(t)
+
+	stackID := testutils.Provider.Meta().(*common.Client).GrafanaStackID
+	baseName := fmt.Sprintf("stress-cmr-%s", acctest.RandString(8))
+
+	resource.Test(t, resource.TestCase{
+		ProtoV5ProviderFactories: testutils.ProtoV5ProviderFactories,
+		CheckDestroy:             testAccAssertsCustomModelRulesCheckDestroy,
+		Steps: []resource.TestStep{
+			{
+				Config: testAccAssertsCustomModelRulesStressConfig(stackID, baseName),
+				// Creating multiple resources concurrently can trigger optimistic locking conflicts
+				// in the backing store. We expect the provider to retry, but the apply may still
+				// ultimately fail in stress mode; treat that as expected to validate behavior.
+				ExpectError: regexp.MustCompile(`giving up after.*attempt`),
+			},
+		},
+	})
+}
+
+func testAccAssertsCustomModelRulesStressConfig(stackID int64, baseName string) string {
+	return fmt.Sprintf(`
+resource "grafana_asserts_custom_model_rules" "test1" {
+  name = "%s-1"
+  rules {
+    entity {
+      type = "Service"
+      name = "Service"
+      defined_by {
+        query = "up{job!=''}"
+      }
+    }
+  }
+}
+
+resource "grafana_asserts_custom_model_rules" "test2" {
+  name = "%s-2"
+  rules {
+    entity {
+      type = "Pod"
+      name = "Pod"
+      defined_by {
+        query = "up{pod!=''}"
+      }
+    }
+  }
+}
+
+resource "grafana_asserts_custom_model_rules" "test3" {
+  name = "%s-3"
+  rules {
+    entity {
+      type = "Namespace"
+      name = "Namespace"
+      defined_by {
+        query = "up{namespace!=''}"
+      }
+    }
+  }
+}
+
+`, baseName, baseName, baseName)
+}
+
+// TestAccAssertsCustomModelRules_complex tests custom model rules with advanced features
+// including scope, lookup, enrichedBy, disabled queries, and labelValues/literals
+func TestAccAssertsCustomModelRules_complex(t *testing.T) {
+	testutils.CheckCloudInstanceTestsEnabled(t)
+
+	stackID := testutils.Provider.Meta().(*common.Client).GrafanaStackID
+	rName := fmt.Sprintf("test-acc-cmr-complex-%s", acctest.RandString(8))
+
+	resource.ParallelTest(t, resource.TestCase{
+		ProtoV5ProviderFactories: testutils.ProtoV5ProviderFactories,
+		CheckDestroy:             testAccAssertsCustomModelRulesCheckDestroy,
+		Steps: []resource.TestStep{
+			{
+				Config: testAccAssertsCustomModelRulesComplexConfig(stackID, rName),
+				Check: resource.ComposeTestCheckFunc(
+					testAccAssertsCustomModelRulesCheckExists("grafana_asserts_custom_model_rules.test", stackID, rName),
+					resource.TestCheckResourceAttr("grafana_asserts_custom_model_rules.test", "name", rName),
+				),
+			},
+		},
+	})
+}
+
+func testAccAssertsCustomModelRulesComplexConfig(stackID int64, name string) string {
+	return fmt.Sprintf(`
+resource "grafana_asserts_custom_model_rules" "test" {
+  name = "%s"
+  rules {
+    entity {
+      type = "Service"
+      name = "workload | service | job"
+      scope = {
+        namespace = "namespace"
+        env       = "asserts_env"
+        site      = "asserts_site"
+      }
+      lookup = {
+        workload   = "workload | deployment | statefulset | daemonset | replicaset"
+        service    = "service"
+        job        = "job"
+        proxy_job  = "job"
+      }
+      defined_by {
+        query = "group by (cluster, workload, workload_type, service, job, container, namespace, asserts_env, asserts_site) (group by (cluster, service, job, container, pod, namespace, asserts_env, asserts_site) (up {asserts_env!=\"\", pod!=\"\", service != \"\", container!=\"istio-proxy\", namespace!=\"AWS/ECS\"}) * on (pod, namespace, asserts_env, asserts_site) group_left(workload, workload_type) group by (pod, workload, workload_type, namespace, asserts_env, asserts_site) (asserts:mixin_pod_workload{workload_type!~\"job|cronjob\"}))"
+        disabled = true
+      }
+      defined_by {
+        query = "group by (cluster, workload, workload_type, service, job, container, namespace, asserts_env, asserts_site) (group by (cluster, service, job, container, pod, namespace, asserts_env, asserts_site) (up {asserts_env!=\"\", pod!=\"\", container!=\"istio-proxy\", namespace!=\"AWS/ECS\"}) * on (pod, namespace, asserts_env, asserts_site) group_left(workload, workload_type) group by (pod, workload, workload_type, namespace, asserts_env, asserts_site) (asserts:mixin_pod_workload{workload_type!~\"job|cronjob\"}))"
+        label_values = {
+          job           = "job"
+          service       = "service"
+          workload      = "workload"
+          workload_type = "workload_type"
+          container     = "container"
+          cluster       = "cluster"
+        }
+        literals = {
+          _entity_source_1 = "up_with_pod"
+        }
+      }
+      defined_by {
+        query = "group by (cluster, namespace, workload, workload_type, asserts_env, asserts_site) ((group without() (kube_pod_info{asserts_env!=\"\", created_by_kind!~\"Job|TaskRun\"}) * on (pod, namespace, asserts_env, asserts_site) group_left(workload, workload_type) group by (pod, workload, workload_type,  namespace, asserts_env, asserts_site) (asserts:mixin_pod_workload{workload_type!~\"job|cronjob\"})) unless on (pod,  namespace, asserts_env, asserts_site) group by (pod,  namespace, asserts_env, asserts_site) (up {pod !=\"\", service != \"\", container!=\"istio-proxy\"}))"
+        disabled = true
+      }
+      defined_by {
+        query = "group by (cluster, namespace, workload, workload_type, asserts_env, asserts_site) ((kube_pod_info{asserts_env!=\"\", created_by_kind!~\"Job|TaskRun\"} * on (pod, namespace, asserts_env, asserts_site) group_left(workload, workload_type) group by (pod, workload, workload_type,  namespace, asserts_env, asserts_site) (asserts:mixin_pod_workload{workload_type!~\"job|cronjob\"})) unless on (pod,  namespace, asserts_env, asserts_site) group by (pod,  namespace, asserts_env, asserts_site) (up {pod !=\"\", container!=\"istio-proxy\"}))"
+        label_values = {
+          workload      = "workload"
+          workload_type = "workload_type"
+          cluster       = "cluster"
+        }
+        literals = {
+          _entity_source_3 = "pod_without_up"
+        }
+      }
+    }
+  }
+}
+`, name)
+}
+
+// TestAccAssertsCustomModelRules_advancedFeatures tests custom model rules with some advanced features
+// but with simpler configuration to ensure basic functionality works
+func TestAccAssertsCustomModelRules_advancedFeatures(t *testing.T) {
+	testutils.CheckCloudInstanceTestsEnabled(t)
+
+	stackID := testutils.Provider.Meta().(*common.Client).GrafanaStackID
+	rName := fmt.Sprintf("test-acc-cmr-advanced-%s", acctest.RandString(8))
+
+	resource.ParallelTest(t, resource.TestCase{
+		ProtoV5ProviderFactories: testutils.ProtoV5ProviderFactories,
+		CheckDestroy:             testAccAssertsCustomModelRulesCheckDestroy,
+		Steps: []resource.TestStep{
+			{
+				Config: testAccAssertsCustomModelRulesAdvancedConfig(stackID, rName),
+				Check: resource.ComposeTestCheckFunc(
+					testAccAssertsCustomModelRulesCheckExists("grafana_asserts_custom_model_rules.test", stackID, rName),
+					resource.TestCheckResourceAttr("grafana_asserts_custom_model_rules.test", "name", rName),
+				),
+			},
+		},
+	})
+}
+
+func testAccAssertsCustomModelRulesAdvancedConfig(stackID int64, name string) string {
+	return fmt.Sprintf(`
+resource "grafana_asserts_custom_model_rules" "test" {
+  name = "%s"
+  rules {
+    entity {
+      type = "Service"
+      name = "test-service"
+      defined_by {
+        query = "up{job=\"test\"}"
+        label_values = {
+          service = "service"
+          job     = "job"
+        }
+        literals = {
+          _source = "test"
+        }
+      }
+    }
+  }
+}
+`, name)
+}
diff --git a/internal/resources/asserts/resource_disabled_alert_config_test.go b/internal/resources/asserts/resource_disabled_alert_config_test.go
index f09ac548..efd1a85e 100644
--- a/internal/resources/asserts/resource_disabled_alert_config_test.go
+++ b/internal/resources/asserts/resource_disabled_alert_config_test.go
@@ -89,7 +89,7 @@ func testAccAssertsDisabledAlertConfigCheckExists(rn string, stackID int64, name
 		ctx := context.Background()
 
 		// Get all disabled alert configs and find ours
-		request := client.DisabledAlertConfigControllerAPI.GetAllDisabledAlertConfigs(ctx).
+		request := client.AlertConfigurationAPI.GetAllDisabledAlertConfigs(ctx).
 			XScopeOrgID(fmt.Sprintf("%d", stackID))
 
 		disabledAlertConfigs, _, err := request.Execute()
@@ -124,7 +124,7 @@ func testAccAssertsDisabledAlertConfigCheckDestroy(s *terraform.State) error {
 
 		for {
 			// Get all disabled alert configs
-			request := client.DisabledAlertConfigControllerAPI.GetAllDisabledAlertConfigs(ctx).
+			request := client.AlertConfigurationAPI.GetAllDisabledAlertConfigs(ctx).
 				XScopeOrgID(stackID)
 
 			disabledAlertConfigs, _, err := request.Execute()
diff --git a/internal/resources/asserts/resource_log_config_test.go b/internal/resources/asserts/resource_log_config_test.go
new file mode 100644
index 00000000..ea410fe0
--- /dev/null
+++ b/internal/resources/asserts/resource_log_config_test.go
@@ -0,0 +1,301 @@
+package asserts_test
+
+import (
+	"context"
+	"fmt"
+	"regexp"
+	"testing"
+	"time"
+
+	"github.com/grafana/terraform-provider-grafana/v4/internal/common"
+	"github.com/grafana/terraform-provider-grafana/v4/internal/testutils"
+	"github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
+	"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
+	"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
+)
+
+func TestAccAssertsLogConfig_basic(t *testing.T) {
+	testutils.CheckCloudInstanceTestsEnabled(t)
+
+	resource.ParallelTest(t, resource.TestCase{
+		ProtoV5ProviderFactories: testutils.ProtoV5ProviderFactories,
+		CheckDestroy:             testAccAssertsLogConfigCheckDestroy,
+		Steps: []resource.TestStep{
+			{
+				Config: testAccAssertsLogConfigConfig,
+				Check: resource.ComposeTestCheckFunc(
+					resource.TestCheckResourceAttr("grafana_asserts_log_config.test", "name", "test-basic"),
+					resource.TestCheckResourceAttr("grafana_asserts_log_config.test", "priority", "1000"),
+					resource.TestCheckResourceAttr("grafana_asserts_log_config.test", "default_config", "false"),
+					resource.TestCheckResourceAttr("grafana_asserts_log_config.test", "data_source_uid", "grafanacloud-logs"),
+					resource.TestCheckResourceAttr("grafana_asserts_log_config.test", "error_label", "error"),
+					// match rules
+					resource.TestCheckResourceAttr("grafana_asserts_log_config.test", "match.0.property", "asserts_entity_type"),
+					resource.TestCheckResourceAttr("grafana_asserts_log_config.test", "match.0.op", "EQUALS"),
+					resource.TestCheckResourceAttr("grafana_asserts_log_config.test", "match.0.values.0", "Service"),
+					// mappings
+					resource.TestCheckResourceAttr("grafana_asserts_log_config.test", "entity_property_to_log_label_mapping.otel_namespace", "service_namespace"),
+					resource.TestCheckResourceAttr("grafana_asserts_log_config.test", "entity_property_to_log_label_mapping.otel_service", "service_name"),
+					// filters
+					resource.TestCheckResourceAttr("grafana_asserts_log_config.test", "filter_by_span_id", "true"),
+					resource.TestCheckResourceAttr("grafana_asserts_log_config.test", "filter_by_trace_id", "true"),
+				),
+			},
+			{
+				ResourceName:      "grafana_asserts_log_config.test",
+				ImportState:       true,
+				ImportStateVerify: true,
+			},
+		},
+	})
+}
+
+func TestAccAssertsLogConfig_update(t *testing.T) {
+	testutils.CheckCloudInstanceTestsEnabled(t)
+
+	rName := fmt.Sprintf("test-%s", acctest.RandString(8))
+
+	resource.ParallelTest(t, resource.TestCase{
+		ProtoV5ProviderFactories: testutils.ProtoV5ProviderFactories,
+		CheckDestroy:             testAccAssertsLogConfigCheckDestroy,
+		Steps: []resource.TestStep{
+			{
+				Config: testAccAssertsLogConfigConfigNamed(rName, false),
+				Check: resource.ComposeTestCheckFunc(
+					resource.TestCheckResourceAttr("grafana_asserts_log_config.test", "name", rName),
+					resource.TestCheckResourceAttr("grafana_asserts_log_config.test", "priority", "1001"),
+					resource.TestCheckResourceAttr("grafana_asserts_log_config.test", "default_config", "false"),
+				),
+			},
+			{
+				Config: testAccAssertsLogConfigConfigNamedUpdate(rName),
+				Check: resource.ComposeTestCheckFunc(
+					resource.TestCheckResourceAttr("grafana_asserts_log_config.test", "name", rName),
+					resource.TestCheckResourceAttr("grafana_asserts_log_config.test", "priority", "1002"),
+					resource.TestCheckResourceAttr("grafana_asserts_log_config.test", "default_config", "false"),
+				),
+			},
+		},
+	})
+}
+
+func TestAccAssertsLogConfig_fullFields(t *testing.T) {
+	testutils.CheckCloudInstanceTestsEnabled(t)
+
+	rName := fmt.Sprintf("full-%s", acctest.RandString(8))
+
+	resource.ParallelTest(t, resource.TestCase{
+		ProtoV5ProviderFactories: testutils.ProtoV5ProviderFactories,
+		CheckDestroy:             testAccAssertsLogConfigCheckDestroy,
+		Steps: []resource.TestStep{
+			{
+				Config: testAccAssertsLogConfigConfigFullNamed(rName),
+				Check: resource.ComposeTestCheckFunc(
+					resource.TestCheckResourceAttr("grafana_asserts_log_config.full", "name", rName),
+					resource.TestCheckResourceAttr("grafana_asserts_log_config.full", "priority", "1002"),
+					resource.TestCheckResourceAttr("grafana_asserts_log_config.full", "default_config", "false"),
+					resource.TestCheckResourceAttr("grafana_asserts_log_config.full", "data_source_uid", "loki-uid-456"),
+					resource.TestCheckResourceAttr("grafana_asserts_log_config.full", "error_label", "error"),
+					// match rules
+					resource.TestCheckResourceAttr("grafana_asserts_log_config.full", "match.0.property", "service"),
+					resource.TestCheckResourceAttr("grafana_asserts_log_config.full", "match.0.op", "EQUALS"),
+					resource.TestCheckResourceAttr("grafana_asserts_log_config.full", "match.0.values.0", "api"),
+					resource.TestCheckResourceAttr("grafana_asserts_log_config.full", "match.0.values.1", "web"),
+					resource.TestCheckResourceAttr("grafana_asserts_log_config.full", "match.1.property", "environment"),
+					resource.TestCheckResourceAttr("grafana_asserts_log_config.full", "match.1.op", "CONTAINS"),
+					resource.TestCheckResourceAttr("grafana_asserts_log_config.full", "match.1.values.0", "prod"),
+					// mappings
+					resource.TestCheckResourceAttr("grafana_asserts_log_config.full", "entity_property_to_log_label_mapping.service", "service_name"),
+					resource.TestCheckResourceAttr("grafana_asserts_log_config.full", "entity_property_to_log_label_mapping.environment", "env"),
+					// filters
+					resource.TestCheckResourceAttr("grafana_asserts_log_config.full", "filter_by_span_id", "true"),
+					resource.TestCheckResourceAttr("grafana_asserts_log_config.full", "filter_by_trace_id", "true"),
+				),
+			},
+		},
+	})
+}
+
+func TestAccAssertsLogConfig_optimisticLocking(t *testing.T) {
+	testutils.CheckCloudInstanceTestsEnabled(t)
+
+	baseName := fmt.Sprintf("lock-%s", acctest.RandString(8))
+
+	resource.ParallelTest(t, resource.TestCase{
+		ProtoV5ProviderFactories: testutils.ProtoV5ProviderFactories,
+		CheckDestroy:             testAccAssertsLogConfigCheckDestroy,
+		Steps: []resource.TestStep{
+			{
+				Config: testAccAssertsLogConfigOptimisticLockingConfig(baseName),
+				// Expect an apply error due to conflicting concurrent upserts against
+				// the tenant log config (optimistic locking). Terraform will retry
+				// but ultimately one apply may fail; that is acceptable and expected.
+				ExpectError: regexp.MustCompile(`failed to create log configuration.*giving up after.*attempt`),
+			},
+		},
+	})
+}
+
+func testAccAssertsLogConfigCheckDestroy(s *terraform.State) error {
+	client := testutils.Provider.Meta().(*common.Client)
+	if client.AssertsAPIClient == nil {
+		return fmt.Errorf("client not configured for the Asserts API")
+	}
+
+	stackID := client.GrafanaStackID
+	if stackID == 0 {
+		return fmt.Errorf("stack_id must be set in provider configuration for Asserts resources")
+	}
+
+	deadline := time.Now().Add(60 * time.Second)
+	for _, rs := range s.RootModule().Resources {
+		if rs.Type != "grafana_asserts_log_config" {
+			continue
+		}
+
+		name := rs.Primary.ID
+		for {
+			request := client.AssertsAPIClient.LogDrilldownConfigControllerAPI.GetTenantLogConfig(context.Background()).
+				XScopeOrgID(fmt.Sprintf("%d", stackID))
+
+			tenantConfig, _, err := request.Execute()
+			if err != nil {
+				if common.IsNotFoundError(err) {
+					break
+				}
+				return fmt.Errorf("error checking log config destruction: %s", err)
+			}
+
+			found := false
+			for _, config := range tenantConfig.GetLogDrilldownConfigs() {
+				if config.GetName() == name {
+					found = true
+					break
+				}
+			}
+
+			if !found {
+				break
+			}
+
+			if time.Now().After(deadline) {
+				return fmt.Errorf("log config %s still exists", name)
+			}
+			time.Sleep(2 * time.Second)
+		}
+	}
+
+	return nil
+}
+
+const testAccAssertsLogConfigConfig = `
+resource "grafana_asserts_log_config" "test" {
+  name            = "test-basic"
+  priority        = 1000
+  default_config  = false
+  data_source_uid = "grafanacloud-logs"
+  error_label     = "error"
+  
+  match {
+    property = "asserts_entity_type"
+    op       = "EQUALS"
+    values   = ["Service"]
+  }
+  
+  entity_property_to_log_label_mapping = {
+    "otel_namespace" = "service_namespace"
+    "otel_service"   = "service_name"
+  }
+  
+  filter_by_span_id  = true
+  filter_by_trace_id = true
+}
+`
+
+func testAccAssertsLogConfigConfigNamed(name string, defaultCfg bool) string {
+	defaultVal := "false"
+	if defaultCfg {
+		defaultVal = "true"
+	}
+	return fmt.Sprintf(`
+resource "grafana_asserts_log_config" "test" {
+  name            = "%s"
+  priority        = 1001
+  default_config  = %s
+  data_source_uid = "grafanacloud-logs"
+  
+  match {
+    property = "otel_service"
+    op       = "IS_NOT_NULL"
+    values   = []
+  }
+}
+`, name, defaultVal)
+}
+
+func testAccAssertsLogConfigConfigNamedUpdate(name string) string {
+	return fmt.Sprintf(`
+resource "grafana_asserts_log_config" "test" {
+  name            = "%s"
+  priority        = 1002
+  default_config  = false
+  data_source_uid = "grafanacloud-logs"
+  
+  match {
+    property = "otel_service"
+    op       = "IS_NOT_NULL"
+    values   = []
+  }
+}
+`, name)
+}
+
+func testAccAssertsLogConfigConfigFullNamed(name string) string {
+	return fmt.Sprintf(`
+resource "grafana_asserts_log_config" "full" {
+  name            = "%s"
+  priority        = 1002
+  default_config  = false
+  data_source_uid = "loki-uid-456"
+  error_label     = "error"
+  
+  match {
+    property = "service"
+    op       = "EQUALS"
+    values   = ["api", "web"]
+  }
+  
+  match {
+    property = "environment"
+    op       = "CONTAINS"
+    values   = ["prod"]
+  }
+  
+  entity_property_to_log_label_mapping = {
+    "service"     = "service_name"
+    "environment" = "env"
+  }
+  
+  filter_by_span_id  = true
+  filter_by_trace_id = true
+}
+`, name)
+}
+
+func testAccAssertsLogConfigOptimisticLockingConfig(baseName string) string {
+	return fmt.Sprintf(`
+resource "grafana_asserts_log_config" "lock1" {
+  name            = "%s-1"
+  priority        = 3001
+  default_config  = false
+  data_source_uid = "loki-uid-lock1"
+}
+
+resource "grafana_asserts_log_config" "lock2" {
+  name            = "%s-2"
+  priority        = 3002
+  default_config  = false
+  data_source_uid = "loki-uid-lock2"
+}
+`, baseName, baseName)
+}
diff --git a/internal/resources/cloudprovider/resource_aws_resource_metadata_scrape_job_test.go b/internal/resources/cloudprovider/resource_aws_resource_metadata_scrape_job_test.go
index 196b5d59..865b43fe 100644
--- a/internal/resources/cloudprovider/resource_aws_resource_metadata_scrape_job_test.go
+++ b/internal/resources/cloudprovider/resource_aws_resource_metadata_scrape_job_test.go
@@ -38,6 +38,9 @@ func TestAccResourceAWSResourceMetadataScrapeJob(t *testing.T) {
 
 	testCfg := makeTestConfig(t)
 
+	// Pre-test cleanup: ensure no existing jobs for this AWS account remain in the stack
+	cleanupAWSJobsForAccount(t, testCfg.stackID, testCfg.accountID)
+
 	jobName := "test-job" + acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum)
 
 	var gotJob cloudproviderapi.AWSResourceMetadataScrapeJobResponse
@@ -146,6 +149,41 @@ func TestAccResourceAWSResourceMetadataScrapeJob(t *testing.T) {
 	})
 }
 
+// cleanupAWSJobsForAccount removes any existing CloudWatch or Resource Metadata jobs that
+// reference the given AWS account in the specified stack. This avoids 409 conflicts during tests.
+func cleanupAWSJobsForAccount(t *testing.T, stackID string, accountID string) {
+	t.Helper()
+
+	ctx := context.Background()
+	client := testutils.Provider.Meta().(*common.Client).CloudProviderAPI
+
+	// Delete CloudWatch jobs for this account
+	if cwJobs, err := client.ListAWSCloudWatchScrapeJobs(ctx, stackID); err != nil {
+		t.Logf("warning: failed listing CloudWatch jobs for cleanup: %v", err)
+	} else {
+		for _, j := range cwJobs {
+			if j.AWSAccountResourceID == accountID {
+				if err := client.DeleteAWSCloudWatchScrapeJob(ctx, stackID, j.Name); err != nil {
+					t.Logf("warning: failed deleting CloudWatch job %q: %v", j.Name, err)
+				}
+			}
+		}
+	}
+
+	// Delete Resource Metadata jobs for this account
+	if rmJobs, err := client.ListAWSResourceMetadataScrapeJobs(ctx, stackID); err != nil {
+		t.Logf("warning: failed listing Resource Metadata jobs for cleanup: %v", err)
+	} else {
+		for _, j := range rmJobs {
+			if j.AWSAccountResourceID == accountID {
+				if err := client.DeleteAWSResourceMetadataScrapeJob(ctx, stackID, j.Name); err != nil {
+					t.Logf("warning: failed deleting Resource Metadata job %q: %v", j.Name, err)
+				}
+			}
+		}
+	}
+}
+
 func checkAWSResourceMetadataScrapeJobResourceExists(rn string, stackID string, job *cloudproviderapi.AWSResourceMetadataScrapeJobResponse) resource.TestCheckFunc {
 	return func(s *terraform.State) error {
 		rs, ok := s.RootModule().Resources[rn]
diff --git a/internal/resources/slo/resource_slo_test.go b/internal/resources/slo/resource_slo_test.go
index 3c8ac772..49325891 100644
--- a/internal/resources/slo/resource_slo_test.go
+++ b/internal/resources/slo/resource_slo_test.go
@@ -661,3 +661,63 @@ func createGrafanaQuery(useDefault bool, input []map[string]any) string {
 	output, _ := json.Marshal(input)
 	return string(output)
 }
+
+func TestAccResourceSloWithCustomUUID(t *testing.T) {
+	testutils.CheckCloudInstanceTestsEnabled(t)
+	customUUID := "mycustomuuid"
+
+	var slo slo.SloV00Slo
+	resource.Test(t, resource.TestCase{
+		ProtoV5ProviderFactories: testutils.ProtoV5ProviderFactories,
+		CheckDestroy:             testAccSloCheckDestroy(&slo),
+		Steps: []resource.TestStep{
+			{
+				// Test creating SLO with custom UUID
+				Config: testAccSloWithCustomUUID(customUUID),
+				Check: resource.ComposeTestCheckFunc(
+					testAccSloCheckExists("grafana_slo.custom_uuid_test", &slo),
+					resource.TestCheckResourceAttr("grafana_slo.custom_uuid_test", "uuid", customUUID),
+					resource.TestCheckResourceAttr("grafana_slo.custom_uuid_test", "id", customUUID),
+					resource.TestCheckResourceAttr("grafana_slo.custom_uuid_test", "description", "Custom UUID Test Description"),
+				),
+			},
+			{
+				// Test importing SLO with custom UUID
+				ResourceName:      "grafana_slo.custom_uuid_test",
+				ImportState:       true,
+				ImportStateVerify: true,
+			},
+		},
+	})
+}
+
+func testAccSloWithCustomUUID(uuid string) string {
+	return fmt.Sprintf(`
+resource "grafana_slo" "custom_uuid_test" {
+  name        = "mycustomuuid"
+  description = "Custom UUID Test Description"
+  uuid        = "%s"
+  
+  query {
+    freeform {
+      query = "sum(rate(apiserver_request_total{code!=\"500\"}[$__rate_interval])) / sum(rate(apiserver_request_total[$__rate_interval]))"
+    }
+    type = "freeform"
+  }
+  
+  objectives {
+    value  = 0.995
+    window = "30d"
+  }
+  
+  destination_datasource {
+    uid = "grafanacloud-prom"
+  }
+  
+  label {
+    key   = "test"
+    value = "custom-uuid"
+  }
+}
+`, uuid)
+}
diff --git a/internal/resources/syntheticmonitoring/resource_check_alerts_test.go b/internal/resources/syntheticmonitoring/resource_check_alerts_test.go
index 55a10c05..843673d7 100644
--- a/internal/resources/syntheticmonitoring/resource_check_alerts_test.go
+++ b/internal/resources/syntheticmonitoring/resource_check_alerts_test.go
@@ -26,15 +26,24 @@ func TestAccResourceCheckAlerts(t *testing.T) {
 				Check: resource.ComposeTestCheckFunc(
 					resource.TestCheckResourceAttrSet("grafana_synthetic_monitoring_check_alerts.main", "id"),
 					resource.TestCheckResourceAttrSet("grafana_synthetic_monitoring_check_alerts.main", "check_id"),
-					resource.TestCheckResourceAttr("grafana_synthetic_monitoring_check_alerts.main", "alerts.0.name", "HTTPRequestDurationTooHighAvg"),
-					resource.TestCheckResourceAttr("grafana_synthetic_monitoring_check_alerts.main", "alerts.0.threshold", "5000"),
-					resource.TestCheckResourceAttr("grafana_synthetic_monitoring_check_alerts.main", "alerts.0.period", "10m"),
-					resource.TestCheckResourceAttr("grafana_synthetic_monitoring_check_alerts.main", "alerts.1.name", "ProbeFailedExecutionsTooHigh"),
-					resource.TestCheckResourceAttr("grafana_synthetic_monitoring_check_alerts.main", "alerts.1.threshold", "1"),
-					resource.TestCheckResourceAttr("grafana_synthetic_monitoring_check_alerts.main", "alerts.1.period", "15m"),
-					resource.TestCheckResourceAttr("grafana_synthetic_monitoring_check_alerts.main", "alerts.2.name", "TLSTargetCertificateCloseToExpiring"),
-					resource.TestCheckResourceAttr("grafana_synthetic_monitoring_check_alerts.main", "alerts.2.threshold", "14"),
-					resource.TestCheckResourceAttr("grafana_synthetic_monitoring_check_alerts.main", "alerts.2.period", ""),
+					resource.TestCheckTypeSetElemNestedAttrs("grafana_synthetic_monitoring_check_alerts.main", "alerts.*", map[string]string{
+						"name":        "ProbeFailedExecutionsTooHigh",
+						"threshold":   "1",
+						"period":      "15m",
+						"runbook_url": "",
+					}),
+					resource.TestCheckTypeSetElemNestedAttrs("grafana_synthetic_monitoring_check_alerts.main", "alerts.*", map[string]string{
+						"name":        "TLSTargetCertificateCloseToExpiring",
+						"threshold":   "14",
+						"period":      "",
+						"runbook_url": "",
+					}),
+					resource.TestCheckTypeSetElemNestedAttrs("grafana_synthetic_monitoring_check_alerts.main", "alerts.*", map[string]string{
+						"name":        "HTTPRequestDurationTooHighAvg",
+						"threshold":   "5000",
+						"period":      "10m",
+						"runbook_url": "https://wiki.company.com/runbooks/http-duration",
+					}),
 				),
 			},
 			{
@@ -44,12 +53,18 @@ func TestAccResourceCheckAlerts(t *testing.T) {
 				Check: resource.ComposeTestCheckFunc(
 					resource.TestCheckResourceAttrSet("grafana_synthetic_monitoring_check_alerts.main", "id"),
 					resource.TestCheckResourceAttrSet("grafana_synthetic_monitoring_check_alerts.main", "check_id"),
-					resource.TestCheckResourceAttr("grafana_synthetic_monitoring_check_alerts.main", "alerts.0.name", "ProbeFailedExecutionsTooHigh"),
-					resource.TestCheckResourceAttr("grafana_synthetic_monitoring_check_alerts.main", "alerts.0.threshold", "2"),
-					resource.TestCheckResourceAttr("grafana_synthetic_monitoring_check_alerts.main", "alerts.0.period", "10m"),
-					resource.TestCheckResourceAttr("grafana_synthetic_monitoring_check_alerts.main", "alerts.1.name", "TLSTargetCertificateCloseToExpiring"),
-					resource.TestCheckResourceAttr("grafana_synthetic_monitoring_check_alerts.main", "alerts.1.threshold", "7"),
-					resource.TestCheckResourceAttr("grafana_synthetic_monitoring_check_alerts.main", "alerts.1.period", ""),
+					resource.TestCheckTypeSetElemNestedAttrs("grafana_synthetic_monitoring_check_alerts.main", "alerts.*", map[string]string{
+						"name":        "ProbeFailedExecutionsTooHigh",
+						"threshold":   "2",
+						"period":      "10m",
+						"runbook_url": "",
+					}),
+					resource.TestCheckTypeSetElemNestedAttrs("grafana_synthetic_monitoring_check_alerts.main", "alerts.*", map[string]string{
+						"name":        "TLSTargetCertificateCloseToExpiring",
+						"threshold":   "7",
+						"period":      "",
+						"runbook_url": "",
+					}),
 				),
 			},
 		},
@@ -98,5 +113,6 @@ resource "grafana_synthetic_monitoring_check_alerts" "main" {
 		name = "InvalidAlertName"
 		threshold = 0.5
 		period = ""
+		runbook_url = ""
 	}]
 }`