apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.21.0
  name: grafanaalertrulegroups.grafana.integreatly.org
spec:
  group: grafana.integreatly.org
  names:
    categories:
      - grafana-operator
    kind: GrafanaAlertRuleGroup
    listKind: GrafanaAlertRuleGroupList
    plural: grafanaalertrulegroups
    singular: grafanaalertrulegroup
  scope: Namespaced
  versions:
    - additionalPrinterColumns:
        - format: date-time
          jsonPath: .status.lastResync
          name: Last resync
          type: date
        - jsonPath: .metadata.creationTimestamp
          name: Age
          type: date
      name: v1beta1
      schema:
        openAPIV3Schema:
          description: GrafanaAlertRuleGroup is the Schema for the grafanaalertrulegroups API
          properties:
            apiVersion:
              description: |-
                APIVersion defines the versioned schema of this representation of an object.
                Servers should convert recognized schemas to the latest internal value, and
                may reject unrecognized values.
                More 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.
                Servers may infer this from the endpoint the client submits requests to.
                Cannot be updated.
                In CamelCase.
                More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
              type: string
            metadata:
              type: object
            spec:
              description: GrafanaAlertRuleGroupSpec defines the desired state of GrafanaAlertRuleGroup
              properties:
                allowCrossNamespaceImport:
                  default: false
                  description: Allow the Operator to match this resource with Grafanas outside the current namespace
                  type: boolean
                editable:
                  description: Whether to enable or disable editing of the alert rule group in Grafana UI
                  type: boolean
                  x-kubernetes-validations:
                    - message: Value is immutable
                      rule: self == oldSelf
                folderRef:
                  description: Match GrafanaFolders CRs to infer the uid
                  type: string
                  x-kubernetes-validations:
                    - message: Value is immutable
                      rule: self == oldSelf
                folderUID:
                  description: |-
                    UID of the folder containing this rule group
                    Overrides the FolderSelector
                  type: string
                  x-kubernetes-validations:
                    - message: Value is immutable
                      rule: self == oldSelf
                instanceSelector:
                  description: Selects Grafana instances for import
                  properties:
                    matchExpressions:
                      description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
                      items:
                        description: |-
                          A label selector requirement is a selector that contains values, a key, and an operator that
                          relates the key and values.
                        properties:
                          key:
                            description: key is the label key that the selector applies to.
                            type: string
                          operator:
                            description: |-
                              operator represents a key's relationship to a set of values.
                              Valid operators are In, NotIn, Exists and DoesNotExist.
                            type: string
                          values:
                            description: |-
                              values is an array of string values. If the operator is In or NotIn,
                              the values array must be non-empty. If the operator is Exists or DoesNotExist,
                              the values array must be empty. This array is replaced during a strategic
                              merge patch.
                            items:
                              type: string
                            type: array
                            x-kubernetes-list-type: atomic
                        required:
                          - key
                          - operator
                        type: object
                      type: array
                      x-kubernetes-list-type: atomic
                    matchLabels:
                      additionalProperties:
                        type: string
                      description: |-
                        matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
                        map is equivalent to an element of matchExpressions, whose key field is "key", the
                        operator is "In", and the values array contains only "value". The requirements are ANDed.
                      type: object
                  type: object
                  x-kubernetes-map-type: atomic
                  x-kubernetes-validations:
                    - message: spec.instanceSelector is immutable
                      rule: self == oldSelf
                interval:
                  format: duration
                  pattern: ^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$
                  type: string
                name:
                  description: Name of the alert rule group. If not specified, the resource name will be used.
                  type: string
                resyncPeriod:
                  description: How often the resource is synced, defaults to 10m0s if not set
                  pattern: ^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$
                  type: string
                rules:
                  items:
                    description: AlertRule defines a specific rule to be evaluated. It is based on the upstream model with some k8s specific type mappings
                    properties:
                      annotations:
                        additionalProperties:
                          type: string
                        type: object
                      condition:
                        type: string
                      dashboardUid:
                        description: 'Deprecated: The field is not used, use rules[].annotations.__dashboardUid__'
                        type: string
                      data:
                        items:
                          properties:
                            datasourceUid:
                              description: Grafana data source unique identifier; it should be '__expr__' for a Server Side Expression operation.
                              type: string
                            model:
                              description: JSON is the raw JSON query and includes the above properties as well as custom properties.
                              x-kubernetes-preserve-unknown-fields: true
                            queryType:
                              description: |-
                                QueryType is an optional identifier for the type of query.
                                It can be used to distinguish different types of queries.
                              type: string
                            refId:
                              description: RefID is the unique identifier of the query, set by the frontend call.
                              type: string
                            relativeTimeRange:
                              description: relative time range
                              properties:
                                from:
                                  description: from
                                  format: int64
                                  type: integer
                                to:
                                  description: to
                                  format: int64
                                  type: integer
                              type: object
                          type: object
                        type: array
                      execErrState:
                        enum:
                          - OK
                          - Alerting
                          - Error
                          - KeepLast
                        type: string
                      for:
                        default: 0s
                        pattern: ^([0-9]+(\.[0-9]+)?(s|m|h|d|w))+$
                        type: string
                      isPaused:
                        type: boolean
                      keepFiringFor:
                        format: duration
                        pattern: ^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$
                        type: string
                      labels:
                        additionalProperties:
                          type: string
                        type: object
                      missingSeriesEvalsToResolve:
                        description: The number of missing series evaluations that must occur before the rule is considered to be resolved.
                        format: int64
                        type: integer
                      noDataState:
                        enum:
                          - Alerting
                          - NoData
                          - OK
                          - KeepLast
                        type: string
                      notificationSettings:
                        properties:
                          active_time_intervals:
                            description: ActiveTimeIntervals defines the time intervals during which notifications should NOT be muted.
                            items:
                              type: string
                            type: array
                          group_by:
                            description: GroupBy defines the labels by which incoming alerts are grouped together.
                            items:
                              type: string
                            type: array
                          group_interval:
                            description: |-
                              GroupInterval defines how long to wait before sending a notification about new alerts added
                              to a group for which an initial notification has already been sent. (e.g. 5m)
                            type: string
                          group_wait:
                            description: GroupWait defines how long to initially wait to send a notification for a group of alerts. (e.g. 30s)
                            type: string
                          mute_time_intervals:
                            description: |-
                              MuteTimeIntervals defines the time intervals during which notifications should be muted.
                              These must match the name of a mute time interval defined in the Alertmanager configuration.
                            items:
                              type: string
                            type: array
                          receiver:
                            description: Receiver is the name of the receiver to send notifications to.
                            minLength: 1
                            type: string
                          repeat_interval:
                            description: |-
                              RepeatInterval defines how long to wait before sending a notification again if it has already
                              been sent successfully for an alert. (e.g. 4h)
                              Should not be less than GroupInterval.
                            type: string
                        required:
                          - receiver
                        type: object
                      panelId:
                        description: 'Deprecated: The field is not used, use rules[].annotations.__panelId__'
                        type: integer
                      record:
                        properties:
                          from:
                            type: string
                          metric:
                            type: string
                          targetDatasourceUid:
                            type: string
                        required:
                          - from
                          - metric
                        type: object
                      title:
                        example: Always firing
                        maxLength: 190
                        minLength: 1
                        type: string
                      uid:
                        description: UID of the alert rule. Can be any string consisting of alphanumeric characters, - and _ with a maximum length of 40
                        maxLength: 40
                        pattern: ^[a-zA-Z0-9-_]+$
                        type: string
                    required:
                      - condition
                      - data
                      - execErrState
                      - for
                      - noDataState
                      - title
                      - uid
                    type: object
                  minItems: 1
                  type: array
                suspend:
                  description: Suspend pauses synchronizing attempts and tells the operator to ignore changes
                  type: boolean
              required:
                - instanceSelector
                - interval
                - rules
              type: object
              x-kubernetes-validations:
                - message: Only one of FolderUID or FolderRef can be set and one must be defined
                  rule: (has(self.folderUID) && !(has(self.folderRef))) || (has(self.folderRef) && !(has(self.folderUID)))
                - message: spec.editable is immutable
                  rule: ((!has(oldSelf.editable) && !has(self.editable)) || (has(oldSelf.editable) && has(self.editable)))
                - message: spec.folderUID is immutable
                  rule: ((!has(oldSelf.folderUID) && !has(self.folderUID)) || (has(oldSelf.folderUID) && has(self.folderUID)))
                - message: spec.folderRef is immutable
                  rule: ((!has(oldSelf.folderRef) && !has(self.folderRef)) || (has(oldSelf.folderRef) && has(self.folderRef)))
                - message: disabling spec.allowCrossNamespaceImport requires a recreate to ensure desired state
                  rule: '!oldSelf.allowCrossNamespaceImport || (oldSelf.allowCrossNamespaceImport && self.allowCrossNamespaceImport)'
            status:
              description: The most recent observed state of a Grafana resource
              properties:
                conditions:
                  description: Results when synchronizing resource with Grafana instances
                  items:
                    description: Condition contains details for one aspect of the current state of this API Resource.
                    properties:
                      lastTransitionTime:
                        description: |-
                          lastTransitionTime is the last time the condition transitioned from one status to another.
                          This should be when the underlying condition changed.  If that is not known, then using the time when the API field changed is acceptable.
                        format: date-time
                        type: string
                      message:
                        description: |-
                          message is a human readable message indicating details about the transition.
                          This may be an empty string.
                        maxLength: 32768
                        type: string
                      observedGeneration:
                        description: |-
                          observedGeneration represents the .metadata.generation that the condition was set based upon.
                          For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
                          with respect to the current state of the instance.
                        format: int64
                        minimum: 0
                        type: integer
                      reason:
                        description: |-
                          reason contains a programmatic identifier indicating the reason for the condition's last transition.
                          Producers of specific condition types may define expected values and meanings for this field,
                          and whether the values are considered a guaranteed API.
                          The value should be a CamelCase string.
                          This field may not be empty.
                        maxLength: 1024
                        minLength: 1
                        pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
                        type: string
                      status:
                        description: status of the condition, one of True, False, Unknown.
                        enum:
                          - "True"
                          - "False"
                          - Unknown
                        type: string
                      type:
                        description: type of condition in CamelCase or in foo.example.com/CamelCase.
                        maxLength: 316
                        pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
                        type: string
                    required:
                      - lastTransitionTime
                      - message
                      - reason
                      - status
                      - type
                    type: object
                  type: array
                lastResync:
                  description: Last time the resource was synchronized with Grafana instances
                  format: date-time
                  type: string
              type: object
          required:
            - spec
          type: object
      served: true
      storage: true
      subresources:
        status: {}
