{
  "description": "The `PrometheusRule` custom resource definition (CRD) defines [alerting](https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/) and [recording](https://prometheus.io/docs/prometheus/latest/configuration/recording_rules/) rules to be evaluated by `Prometheus` or `ThanosRuler` objects.\n\n`Prometheus` and `ThanosRuler` objects select `PrometheusRule` objects using label and namespace selectors.",
  "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": "spec defines the specification of desired alerting rule definitions for Prometheus.",
      "properties": {
        "groups": {
          "description": "groups defines the content of Prometheus rule file",
          "items": {
            "description": "RuleGroup is a list of sequentially evaluated recording and alerting rules.",
            "properties": {
              "interval": {
                "description": "interval defines how often rules in the group are evaluated.",
                "pattern": "^(0|(([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?)$",
                "type": "string"
              },
              "labels": {
                "additionalProperties": {
                  "type": "string"
                },
                "description": "labels define the labels to add or overwrite before storing the result for its rules.\nThe labels defined at the rule level take precedence.\n\nIt requires Prometheus >= 3.0.0.\nThe field is ignored for Thanos Ruler.",
                "type": "object"
              },
              "limit": {
                "description": "limit defines the number of alerts an alerting rule and series a recording\nrule can produce.\nLimit is supported starting with Prometheus >= 2.31 and Thanos Ruler >= 0.24.",
                "type": "integer"
              },
              "name": {
                "description": "name defines the name of the rule group.",
                "minLength": 1,
                "type": "string"
              },
              "partial_response_strategy": {
                "description": "partial_response_strategy is only used by ThanosRuler and will\nbe ignored by Prometheus instances.\nMore info: https://github.com/thanos-io/thanos/blob/main/docs/components/rule.md#partial-response",
                "pattern": "^(?i)(abort|warn)?$",
                "type": "string"
              },
              "query_offset": {
                "description": "query_offset defines the offset the rule evaluation timestamp of this particular group by the specified duration into the past.\n\nIt requires Prometheus >= v2.53.0.\nIt is not supported for ThanosRuler.",
                "pattern": "^(0|(([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?)$",
                "type": "string"
              },
              "rules": {
                "description": "rules defines the list of alerting and recording rules.",
                "items": {
                  "description": "Rule describes an alerting or recording rule\nSee Prometheus documentation: [alerting](https://www.prometheus.io/docs/prometheus/latest/configuration/alerting_rules/) or [recording](https://www.prometheus.io/docs/prometheus/latest/configuration/recording_rules/#recording-rules) rule",
                  "properties": {
                    "alert": {
                      "description": "alert defines the name of the alert. Must be a valid label value.\nOnly one of `record` and `alert` must be set.",
                      "type": "string"
                    },
                    "annotations": {
                      "additionalProperties": {
                        "type": "string"
                      },
                      "description": "annotations defines annotations to add to each alert.\nOnly valid for alerting rules.",
                      "type": "object"
                    },
                    "expr": {
                      "anyOf": [
                        {
                          "type": "integer"
                        },
                        {
                          "type": "string"
                        }
                      ],
                      "description": "expr defines the PromQL expression to evaluate.",
                      "x-kubernetes-int-or-string": true
                    },
                    "for": {
                      "description": "for defines how alerts are considered firing once they have been returned for this long.",
                      "pattern": "^(0|(([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?)$",
                      "type": "string"
                    },
                    "keep_firing_for": {
                      "description": "keep_firing_for defines how long an alert will continue firing after the condition that triggered it has cleared.",
                      "minLength": 1,
                      "pattern": "^(0|(([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?)$",
                      "type": "string"
                    },
                    "labels": {
                      "additionalProperties": {
                        "type": "string"
                      },
                      "description": "labels defines labels to add or overwrite.",
                      "type": "object"
                    },
                    "record": {
                      "description": "record defines the name of the time series to output to. Must be a valid metric name.\nOnly one of `record` and `alert` must be set.",
                      "type": "string"
                    }
                  },
                  "required": [
                    "expr"
                  ],
                  "type": "object",
                  "additionalProperties": false
                },
                "type": "array"
              }
            },
            "required": [
              "name"
            ],
            "type": "object",
            "additionalProperties": false
          },
          "type": "array",
          "x-kubernetes-list-map-keys": [
            "name"
          ],
          "x-kubernetes-list-type": "map"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "status": {
      "description": "status defines the status subresource. It is under active development and is updated only when the\n\"StatusForConfigurationResources\" feature gate is enabled.\n\nMost recent observed status of the PrometheusRule. Read-only.\nMore info:\nhttps://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#spec-and-status",
      "properties": {
        "bindings": {
          "description": "bindings defines the list of workload resources (Prometheus, PrometheusAgent, ThanosRuler or Alertmanager) which select the configuration resource.",
          "items": {
            "description": "WorkloadBinding is a link between a configuration resource and a workload resource.",
            "properties": {
              "conditions": {
                "description": "conditions defines the current state of the configuration resource when bound to the referenced Workload object.",
                "items": {
                  "description": "ConfigResourceCondition describes the status of configuration resources linked to Prometheus, PrometheusAgent, Alertmanager or ThanosRuler.",
                  "properties": {
                    "lastTransitionTime": {
                      "description": "lastTransitionTime defines the time of the last update to the current status property.",
                      "format": "date-time",
                      "type": "string"
                    },
                    "message": {
                      "description": "message defines the human-readable message indicating details for the condition's last transition.",
                      "type": "string"
                    },
                    "observedGeneration": {
                      "description": "observedGeneration defines the .metadata.generation that the\ncondition was set based upon. For instance, if `.metadata.generation` is\ncurrently 12, but the `.status.conditions[].observedGeneration` is 9, the\ncondition is out of date with respect to the current state of the object.",
                      "format": "int64",
                      "type": "integer"
                    },
                    "reason": {
                      "description": "reason for the condition's last transition.",
                      "type": "string"
                    },
                    "status": {
                      "description": "status of the condition.",
                      "minLength": 1,
                      "type": "string"
                    },
                    "type": {
                      "description": "type of the condition being reported.\nCurrently, only \"Accepted\" is supported.",
                      "enum": [
                        "Accepted"
                      ],
                      "minLength": 1,
                      "type": "string"
                    }
                  },
                  "required": [
                    "lastTransitionTime",
                    "status",
                    "type"
                  ],
                  "type": "object",
                  "additionalProperties": false
                },
                "type": "array",
                "x-kubernetes-list-map-keys": [
                  "type"
                ],
                "x-kubernetes-list-type": "map"
              },
              "group": {
                "description": "group defines the group of the referenced resource.",
                "enum": [
                  "monitoring.coreos.com"
                ],
                "type": "string"
              },
              "name": {
                "description": "name defines the name of the referenced object.",
                "minLength": 1,
                "type": "string"
              },
              "namespace": {
                "description": "namespace defines the namespace of the referenced object.",
                "minLength": 1,
                "type": "string"
              },
              "resource": {
                "description": "resource defines the type of resource being referenced (e.g. Prometheus, PrometheusAgent, ThanosRuler or Alertmanager).",
                "enum": [
                  "prometheuses",
                  "prometheusagents",
                  "thanosrulers",
                  "alertmanagers"
                ],
                "type": "string"
              }
            },
            "required": [
              "group",
              "name",
              "namespace",
              "resource"
            ],
            "type": "object",
            "additionalProperties": false
          },
          "type": "array",
          "x-kubernetes-list-map-keys": [
            "group",
            "resource",
            "name",
            "namespace"
          ],
          "x-kubernetes-list-type": "map"
        }
      },
      "type": "object",
      "additionalProperties": false
    }
  },
  "required": [
    "spec"
  ],
  "type": "object"
}
