# Copyright 2022 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    controller-gen.kubebuilder.io/version: v0.17.1-0.20250103184936-50893dee96da
  name: clusternodemonitorings.monitoring.googleapis.com
spec:
  group: monitoring.googleapis.com
  names:
    kind: ClusterNodeMonitoring
    listKind: ClusterNodeMonitoringList
    plural: clusternodemonitorings
    singular: clusternodemonitoring
  scope: Cluster
  versions:
  - name: v1
    schema:
      openAPIV3Schema:
        description: ClusterNodeMonitoring defines monitoring for a set of nodes.
        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: |-
              Specification of desired node selection for target discovery by
              Prometheus.
            properties:
              endpoints:
                description: The endpoints to scrape on the selected nodes.
                items:
                  description: |-
                    ScrapeNodeEndpoint specifies a Prometheus metrics endpoint on a node to scrape.
                    It contains all the fields used in the ScrapeEndpoint except for port and HTTPClientConfig.
                  properties:
                    interval:
                      default: 1m
                      description: Interval at which to scrape metrics. Must be a
                        valid Prometheus duration.
                      format: duration
                      type: string
                    metricRelabeling:
                      description: |-
                        Relabeling rules for metrics scraped from this endpoint. Relabeling rules that
                        override protected target labels (project_id, location, cluster, namespace, job,
                        instance, or __address__) are not permitted. The labelmap action is not permitted
                        in general.
                      items:
                        description: RelabelingRule defines a single Prometheus relabeling
                          rule.
                        properties:
                          action:
                            description: Action to perform based on regex matching.
                              Defaults to 'replace'.
                            enum:
                            - replace
                            - lowercase
                            - uppercase
                            - keep
                            - drop
                            - keepequal
                            - dropequal
                            - hashmod
                            - labeldrop
                            - labelkeep
                            type: string
                          modulus:
                            description: Modulus to take of the hash of the source
                              label values.
                            format: int64
                            type: integer
                          regex:
                            description: Regular expression against which the extracted
                              value is matched. Defaults to '(.*)'.
                            maxLength: 10000
                            type: string
                          replacement:
                            description: |-
                              Replacement value against which a regex replace is performed if the
                              regular expression matches. Regex capture groups are available. Defaults to '$1'.
                            type: string
                          separator:
                            description: Separator placed between concatenated source
                              label values. Defaults to ';'.
                            type: string
                          sourceLabels:
                            description: |-
                              The source labels select values from existing labels. Their content is concatenated
                              using the configured separator and matched against the configured regular expression
                              for the replace, keep, and drop actions.
                            items:
                              pattern: ^[a-zA-Z_][a-zA-Z0-9_]*$
                              type: string
                            maxItems: 100
                            type: array
                          targetLabel:
                            description: |-
                              Label to which the resulting value is written in a replace action.
                              It is mandatory for replace actions. Regex capture groups are available.
                            pattern: ^[a-zA-Z_][a-zA-Z0-9_]*$
                            type: string
                            x-kubernetes-validations:
                            - messageExpression: '''cannot relabel onto protected
                                label "%s"''.format([self])'
                              rule: self != 'project_id' && self != 'location' &&
                                self != 'cluster' && self != 'namespace' && self !=
                                'job' && self != 'instance' && self != 'top_level_controller'
                                && self != 'top_level_controller_type' && self !=
                                '__address__'
                        type: object
                        x-kubernetes-validations:
                        - rule: '!has(self.action) ||  self.action != ''labeldrop''
                            || has(self.regex)'
                      maxItems: 250
                      type: array
                    params:
                      additionalProperties:
                        items:
                          type: string
                        type: array
                      description: HTTP GET params to use when scraping.
                      type: object
                    path:
                      description: HTTP path to scrape metrics from. Defaults to "/metrics".
                      type: string
                    scheme:
                      description: Protocol scheme to use to scrape.
                      enum:
                      - http
                      - https
                      type: string
                    timeout:
                      description: |-
                        Timeout for metrics scrapes. Must be a valid Prometheus duration.
                        Must not be larger then the scrape interval.
                      format: duration
                      type: string
                    tls:
                      description: TLS configures the scrape request's TLS settings.
                      properties:
                        insecureSkipVerify:
                          description: InsecureSkipVerify disables target certificate
                            validation.
                          type: boolean
                      type: object
                  required:
                  - interval
                  type: object
                  x-kubernetes-validations:
                  - messageExpression: '''scrape timeout (%s) must not be greater
                      than scrape interval (%s)''.format([self.timeout, self.interval])'
                    rule: '!has(self.timeout) || self.timeout <= self.interval'
                maxItems: 10
                minItems: 1
                type: array
              limits:
                description: Limits to apply at scrape time.
                properties:
                  labelNameLength:
                    description: |-
                      Maximum label name length.
                      Uses Prometheus default if left unspecified.
                    format: int64
                    type: integer
                  labelValueLength:
                    description: |-
                      Maximum label value length.
                      Uses Prometheus default if left unspecified.
                    format: int64
                    type: integer
                  labels:
                    description: |-
                      Maximum number of labels accepted for a single sample.
                      Uses Prometheus default if left unspecified.
                    format: int64
                    type: integer
                  samples:
                    description: |-
                      Maximum number of samples accepted within a single scrape.
                      Uses Prometheus default if left unspecified.
                    format: int64
                    type: integer
                type: object
              selector:
                description: |-
                  Label selector that specifies which nodes are selected for this monitoring
                  configuration. If left empty all nodes are selected.
                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
            required:
            - endpoints
            type: object
          status:
            description: Most recently observed status of the resource.
            properties:
              conditions:
                description: Represents the latest available observations of a podmonitor's
                  current state.
                items:
                  description: MonitoringCondition describes the condition of a PodMonitoring.
                  properties:
                    lastTransitionTime:
                      description: Last time the condition transitioned from one status
                        to another.
                      format: date-time
                      type: string
                    lastUpdateTime:
                      description: The last time this condition was updated.
                      format: date-time
                      type: string
                    message:
                      description: A human-readable message indicating details about
                        the transition.
                      type: string
                    reason:
                      description: The reason for the condition's last transition.
                      type: string
                    status:
                      description: Status of the condition, one of True, False, Unknown.
                      type: string
                    type:
                      description: MonitoringConditionType is the type of MonitoringCondition.
                      type: string
                  required:
                  - status
                  - type
                  type: object
                type: array
              observedGeneration:
                description: The generation observed by the controller.
                format: int64
                type: integer
            type: object
        required:
        - spec
        type: object
    served: true
    storage: true
    subresources:
      status: {}
