{
  "description": "Stack is the Schema for the Stacks API. Manages the Asserts Stack configuration. This resource configures the Asserts stack with the required API tokens for integration with Grafana Cloud services. It performs the full onboarding flow: Provisions API tokensConfigures datasets (auto-detected or manually specified)Enables the stack By default, datasets are auto-configured based on detected metrics. To manually configure datasets (e.g., when using non-standard label names), use the dataset block. The cloud_access_policy_token is used internally for GCom API access, Mimir metrics authentication, and assertion detector webhook authentication. Create a Cloud Access Policy with the following scopes: stacks:read, metrics:read, metrics:write. The grafana_token is a Grafana Service Account token used for installing dashboards and Grafana Managed Alerts.",
  "properties": {
    "apiVersion": {
      "description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
      "type": "string"
    },
    "kind": {
      "description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
      "type": "string"
    },
    "metadata": {
      "type": "object"
    },
    "spec": {
      "description": "StackSpec defines the desired state of Stack",
      "properties": {
        "forProvider": {
          "properties": {
            "cloudAccessPolicyTokenSecretRef": {
              "description": "(String, Sensitive) A Grafana Cloud Access Policy token with the following scopes: stacks:read, metrics:read, metrics:write. This token is used for GCom API access, Mimir authentication, and assertion detector webhook authentication.\nA Grafana Cloud Access Policy token with the following scopes: `stacks:read`, `metrics:read`, `metrics:write`. This token is used for GCom API access, Mimir authentication, and assertion detector webhook authentication.",
              "properties": {
                "key": {
                  "type": "string"
                },
                "name": {
                  "description": "Name of the secret.",
                  "type": "string"
                }
              },
              "required": [
                "key",
                "name"
              ],
              "type": "object",
              "additionalProperties": false
            },
            "dataset": {
              "description": "detection. Use this when your metrics use non-standard label names (e.g., a custom environment label). (see below for nested schema)\nManual dataset configuration. When specified, datasets are configured manually instead of using auto-detection. Use this when your metrics use non-standard label names (e.g., a custom environment label).",
              "items": {
                "properties": {
                  "disabledVendors": {
                    "description": "(List of String) List of vendors to disable for this dataset.\nList of vendors to disable for this dataset.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "filterGroup": {
                    "description": "(Block List) Filter groups for this dataset. Use when you need custom label mappings. (see below for nested schema)\nFilter groups for this dataset. Use when you need custom label mappings.",
                    "items": {
                      "properties": {
                        "envLabel": {
                          "description": "(String) The metric label name used for environment (e.g., env, environment, deployment_environment). Defaults to standard labels if not set.\nThe metric label name used for environment (e.g., `env`, `environment`, `deployment_environment`). Defaults to standard labels if not set.",
                          "type": "string"
                        },
                        "envLabelValues": {
                          "description": "(List of String) Specific values of the environment label to match.\nSpecific values of the environment label to match.",
                          "items": {
                            "type": "string"
                          },
                          "type": "array"
                        },
                        "envName": {
                          "description": "(String) A friendly name for the environment.\nA friendly name for the environment.",
                          "type": "string"
                        },
                        "filter": {
                          "description": "(Block List) Additional metric filters. (see below for nested schema)\nAdditional metric filters.",
                          "items": {
                            "properties": {
                              "name": {
                                "description": "(String) The label name to filter on.\nThe label name to filter on.",
                                "type": "string"
                              },
                              "operator": {
                                "description": "(String) The filter operator (e.g., =, !=, =~, !~).\nThe filter operator (e.g., `=`, `!=`, `=~`, `!~`).",
                                "type": "string"
                              },
                              "values": {
                                "description": "(List of String) The values to match.\nThe values to match.",
                                "items": {
                                  "type": "string"
                                },
                                "type": "array"
                              }
                            },
                            "type": "object",
                            "additionalProperties": false
                          },
                          "type": "array"
                        },
                        "siteLabel": {
                          "description": "(String) The metric label name used for site/cluster.\nThe metric label name used for site/cluster.",
                          "type": "string"
                        },
                        "siteLabelValues": {
                          "description": "(List of String) Specific values of the site label to match.\nSpecific values of the site label to match.",
                          "items": {
                            "type": "string"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "type": {
                    "description": "(String) The dataset type. Available types: kubernetes, otel (App O11y), prometheus, aws. Note: kubernetes requires K8s Monitoring to be enabled, and otel requires Application Observability to be enabled on the stack.\nThe dataset type. Available types: `kubernetes`, `otel` (App O11y), `prometheus`, `aws`. Note: `kubernetes` requires K8s Monitoring to be enabled, and `otel` requires Application Observability to be enabled on the stack.",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "grafanaTokenSecretRef": {
              "description": "(String, Sensitive) A Grafana Service Account token for installing dashboards and Grafana Managed Alerts. Required permissions: dashboards:create, dashboards:write, dashboards:read, folders:create, folders:write, folders:read, folders:delete, datasources:read, datasources:query, alert.provisioning:write, alert.notifications.provisioning:write, alert.notifications:write, alert.rules:read, alert.rules:create, alert.rules:delete. Create using grafana_cloud_stack_service_account_token resource.\nA Grafana Service Account token for installing dashboards and Grafana Managed Alerts. Required permissions: `dashboards:create`, `dashboards:write`, `dashboards:read`, `folders:create`, `folders:write`, `folders:read`, `folders:delete`, `datasources:read`, `datasources:query`, `alert.provisioning:write`, `alert.notifications.provisioning:write`, `alert.notifications:write`, `alert.rules:read`, `alert.rules:create`, `alert.rules:delete`. Create using `grafana_cloud_stack_service_account_token` resource.",
              "properties": {
                "key": {
                  "type": "string"
                },
                "name": {
                  "description": "Name of the secret.",
                  "type": "string"
                }
              },
              "required": [
                "key",
                "name"
              ],
              "type": "object",
              "additionalProperties": false
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "initProvider": {
          "description": "THIS IS A BETA FIELD. It will be honored\nunless the Management Policies feature flag is disabled.\nInitProvider holds the same fields as ForProvider, with the exception\nof Identifier and other resource reference fields. The fields that are\nin InitProvider are merged into ForProvider when the resource is created.\nThe same fields are also added to the terraform ignore_changes hook, to\navoid updating them after creation. This is useful for fields that are\nrequired on creation, but we do not desire to update them after creation,\nfor example because of an external controller is managing them, like an\nautoscaler.",
          "properties": {
            "cloudAccessPolicyTokenSecretRef": {
              "description": "(String, Sensitive) A Grafana Cloud Access Policy token with the following scopes: stacks:read, metrics:read, metrics:write. This token is used for GCom API access, Mimir authentication, and assertion detector webhook authentication.\nA Grafana Cloud Access Policy token with the following scopes: `stacks:read`, `metrics:read`, `metrics:write`. This token is used for GCom API access, Mimir authentication, and assertion detector webhook authentication.",
              "properties": {
                "key": {
                  "type": "string"
                },
                "name": {
                  "description": "Name of the secret.",
                  "type": "string"
                }
              },
              "required": [
                "key",
                "name"
              ],
              "type": "object",
              "additionalProperties": false
            },
            "dataset": {
              "description": "detection. Use this when your metrics use non-standard label names (e.g., a custom environment label). (see below for nested schema)\nManual dataset configuration. When specified, datasets are configured manually instead of using auto-detection. Use this when your metrics use non-standard label names (e.g., a custom environment label).",
              "items": {
                "properties": {
                  "disabledVendors": {
                    "description": "(List of String) List of vendors to disable for this dataset.\nList of vendors to disable for this dataset.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "filterGroup": {
                    "description": "(Block List) Filter groups for this dataset. Use when you need custom label mappings. (see below for nested schema)\nFilter groups for this dataset. Use when you need custom label mappings.",
                    "items": {
                      "properties": {
                        "envLabel": {
                          "description": "(String) The metric label name used for environment (e.g., env, environment, deployment_environment). Defaults to standard labels if not set.\nThe metric label name used for environment (e.g., `env`, `environment`, `deployment_environment`). Defaults to standard labels if not set.",
                          "type": "string"
                        },
                        "envLabelValues": {
                          "description": "(List of String) Specific values of the environment label to match.\nSpecific values of the environment label to match.",
                          "items": {
                            "type": "string"
                          },
                          "type": "array"
                        },
                        "envName": {
                          "description": "(String) A friendly name for the environment.\nA friendly name for the environment.",
                          "type": "string"
                        },
                        "filter": {
                          "description": "(Block List) Additional metric filters. (see below for nested schema)\nAdditional metric filters.",
                          "items": {
                            "properties": {
                              "name": {
                                "description": "(String) The label name to filter on.\nThe label name to filter on.",
                                "type": "string"
                              },
                              "operator": {
                                "description": "(String) The filter operator (e.g., =, !=, =~, !~).\nThe filter operator (e.g., `=`, `!=`, `=~`, `!~`).",
                                "type": "string"
                              },
                              "values": {
                                "description": "(List of String) The values to match.\nThe values to match.",
                                "items": {
                                  "type": "string"
                                },
                                "type": "array"
                              }
                            },
                            "type": "object",
                            "additionalProperties": false
                          },
                          "type": "array"
                        },
                        "siteLabel": {
                          "description": "(String) The metric label name used for site/cluster.\nThe metric label name used for site/cluster.",
                          "type": "string"
                        },
                        "siteLabelValues": {
                          "description": "(List of String) Specific values of the site label to match.\nSpecific values of the site label to match.",
                          "items": {
                            "type": "string"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "type": {
                    "description": "(String) The dataset type. Available types: kubernetes, otel (App O11y), prometheus, aws. Note: kubernetes requires K8s Monitoring to be enabled, and otel requires Application Observability to be enabled on the stack.\nThe dataset type. Available types: `kubernetes`, `otel` (App O11y), `prometheus`, `aws`. Note: `kubernetes` requires K8s Monitoring to be enabled, and `otel` requires Application Observability to be enabled on the stack.",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "grafanaTokenSecretRef": {
              "description": "(String, Sensitive) A Grafana Service Account token for installing dashboards and Grafana Managed Alerts. Required permissions: dashboards:create, dashboards:write, dashboards:read, folders:create, folders:write, folders:read, folders:delete, datasources:read, datasources:query, alert.provisioning:write, alert.notifications.provisioning:write, alert.notifications:write, alert.rules:read, alert.rules:create, alert.rules:delete. Create using grafana_cloud_stack_service_account_token resource.\nA Grafana Service Account token for installing dashboards and Grafana Managed Alerts. Required permissions: `dashboards:create`, `dashboards:write`, `dashboards:read`, `folders:create`, `folders:write`, `folders:read`, `folders:delete`, `datasources:read`, `datasources:query`, `alert.provisioning:write`, `alert.notifications.provisioning:write`, `alert.notifications:write`, `alert.rules:read`, `alert.rules:create`, `alert.rules:delete`. Create using `grafana_cloud_stack_service_account_token` resource.",
              "properties": {
                "key": {
                  "type": "string"
                },
                "name": {
                  "description": "Name of the secret.",
                  "type": "string"
                }
              },
              "required": [
                "key",
                "name"
              ],
              "type": "object",
              "additionalProperties": false
            }
          },
          "required": [
            "cloudAccessPolicyTokenSecretRef"
          ],
          "type": "object",
          "additionalProperties": false
        },
        "managementPolicies": {
          "default": [
            "*"
          ],
          "description": "THIS IS A BETA FIELD. It is on by default but can be opted out\nthrough a Crossplane feature flag.\nManagementPolicies specify the array of actions Crossplane is allowed to\ntake on the managed and external resources.\nSee the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223\nand this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md",
          "items": {
            "description": "A ManagementAction represents an action that the Crossplane controllers\ncan take on an external resource.",
            "enum": [
              "Observe",
              "Create",
              "Update",
              "Delete",
              "LateInitialize",
              "*"
            ],
            "type": "string"
          },
          "type": "array"
        },
        "providerConfigRef": {
          "default": {
            "kind": "ClusterProviderConfig",
            "name": "default"
          },
          "description": "ProviderConfigReference specifies how the provider that will be used to\ncreate, observe, update, and delete this managed resource should be\nconfigured.",
          "properties": {
            "kind": {
              "description": "Kind of the referenced object.",
              "type": "string"
            },
            "name": {
              "description": "Name of the referenced object.",
              "type": "string"
            }
          },
          "required": [
            "kind",
            "name"
          ],
          "type": "object",
          "additionalProperties": false
        },
        "writeConnectionSecretToRef": {
          "description": "WriteConnectionSecretToReference specifies the namespace and name of a\nSecret to which any connection details for this managed resource should\nbe written. Connection details frequently include the endpoint, username,\nand password required to connect to the managed resource.",
          "properties": {
            "name": {
              "description": "Name of the secret.",
              "type": "string"
            }
          },
          "required": [
            "name"
          ],
          "type": "object",
          "additionalProperties": false
        }
      },
      "required": [
        "forProvider"
      ],
      "type": "object",
      "x-kubernetes-validations": [
        {
          "message": "spec.forProvider.cloudAccessPolicyTokenSecretRef is a required parameter",
          "rule": "!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.cloudAccessPolicyTokenSecretRef)"
        }
      ],
      "additionalProperties": false
    },
    "status": {
      "description": "StackStatus defines the observed state of Stack.",
      "properties": {
        "atProvider": {
          "properties": {
            "dataset": {
              "description": "detection. Use this when your metrics use non-standard label names (e.g., a custom environment label). (see below for nested schema)\nManual dataset configuration. When specified, datasets are configured manually instead of using auto-detection. Use this when your metrics use non-standard label names (e.g., a custom environment label).",
              "items": {
                "properties": {
                  "disabledVendors": {
                    "description": "(List of String) List of vendors to disable for this dataset.\nList of vendors to disable for this dataset.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "filterGroup": {
                    "description": "(Block List) Filter groups for this dataset. Use when you need custom label mappings. (see below for nested schema)\nFilter groups for this dataset. Use when you need custom label mappings.",
                    "items": {
                      "properties": {
                        "envLabel": {
                          "description": "(String) The metric label name used for environment (e.g., env, environment, deployment_environment). Defaults to standard labels if not set.\nThe metric label name used for environment (e.g., `env`, `environment`, `deployment_environment`). Defaults to standard labels if not set.",
                          "type": "string"
                        },
                        "envLabelValues": {
                          "description": "(List of String) Specific values of the environment label to match.\nSpecific values of the environment label to match.",
                          "items": {
                            "type": "string"
                          },
                          "type": "array"
                        },
                        "envName": {
                          "description": "(String) A friendly name for the environment.\nA friendly name for the environment.",
                          "type": "string"
                        },
                        "filter": {
                          "description": "(Block List) Additional metric filters. (see below for nested schema)\nAdditional metric filters.",
                          "items": {
                            "properties": {
                              "name": {
                                "description": "(String) The label name to filter on.\nThe label name to filter on.",
                                "type": "string"
                              },
                              "operator": {
                                "description": "(String) The filter operator (e.g., =, !=, =~, !~).\nThe filter operator (e.g., `=`, `!=`, `=~`, `!~`).",
                                "type": "string"
                              },
                              "values": {
                                "description": "(List of String) The values to match.\nThe values to match.",
                                "items": {
                                  "type": "string"
                                },
                                "type": "array"
                              }
                            },
                            "type": "object",
                            "additionalProperties": false
                          },
                          "type": "array"
                        },
                        "siteLabel": {
                          "description": "(String) The metric label name used for site/cluster.\nThe metric label name used for site/cluster.",
                          "type": "string"
                        },
                        "siteLabelValues": {
                          "description": "(List of String) Specific values of the site label to match.\nSpecific values of the site label to match.",
                          "items": {
                            "type": "string"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "type": {
                    "description": "(String) The dataset type. Available types: kubernetes, otel (App O11y), prometheus, aws. Note: kubernetes requires K8s Monitoring to be enabled, and otel requires Application Observability to be enabled on the stack.\nThe dataset type. Available types: `kubernetes`, `otel` (App O11y), `prometheus`, `aws`. Note: `kubernetes` requires K8s Monitoring to be enabled, and `otel` requires Application Observability to be enabled on the stack.",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "enabled": {
              "description": "(Boolean) Whether the stack is currently enabled.\nWhether the stack is currently enabled.",
              "type": "boolean"
            },
            "id": {
              "description": "(String) The ID of this resource.",
              "type": "string"
            },
            "status": {
              "description": "(String) Current onboarding status of the stack.\nCurrent onboarding status of the stack.",
              "type": "string"
            },
            "version": {
              "description": "(Number) Configuration version number.\nConfiguration version number.",
              "type": "number"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "conditions": {
          "description": "Conditions of the resource.",
          "items": {
            "description": "A Condition that may apply to a resource.",
            "properties": {
              "lastTransitionTime": {
                "description": "LastTransitionTime is the last time this condition transitioned from one\nstatus to another.",
                "format": "date-time",
                "type": "string"
              },
              "message": {
                "description": "A Message containing details about this condition's last transition from\none status to another, if any.",
                "type": "string"
              },
              "observedGeneration": {
                "description": "ObservedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
                "format": "int64",
                "type": "integer"
              },
              "reason": {
                "description": "A Reason for this condition's last transition from one status to another.",
                "type": "string"
              },
              "status": {
                "description": "Status of this condition; is it currently True, False, or Unknown?",
                "type": "string"
              },
              "type": {
                "description": "Type of this condition. At most one of each condition type may apply to\na resource at any point in time.",
                "type": "string"
              }
            },
            "required": [
              "lastTransitionTime",
              "reason",
              "status",
              "type"
            ],
            "type": "object",
            "additionalProperties": false
          },
          "type": "array",
          "x-kubernetes-list-map-keys": [
            "type"
          ],
          "x-kubernetes-list-type": "map"
        },
        "observedGeneration": {
          "description": "ObservedGeneration is the latest metadata.generation\nwhich resulted in either a ready state, or stalled due to error\nit can not recover from without human intervention.",
          "format": "int64",
          "type": "integer"
        }
      },
      "type": "object",
      "additionalProperties": false
    }
  },
  "required": [
    "spec"
  ],
  "type": "object"
}
