{
  "description": "ClusterNodeMonitoring defines monitoring for a set of nodes.",
  "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": "Specification of desired node selection for target discovery by\nPrometheus.",
      "properties": {
        "endpoints": {
          "description": "The endpoints to scrape on the selected nodes.",
          "items": {
            "description": "ScrapeNodeEndpoint specifies a Prometheus metrics endpoint on a node to scrape.\nIt 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.",
                "pattern": "^((([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?|0)$",
                "type": "string"
              },
              "metricRelabeling": {
                "description": "Relabeling rules for metrics scraped from this endpoint. Relabeling rules that\noverride protected target labels (project_id, location, cluster, namespace, job,\ninstance, or __address__) are not permitted. The labelmap action is not permitted\nin general.",
                "items": {
                  "description": "RelabelingRule defines a single Prometheus relabeling rule.",
                  "properties": {
                    "action": {
                      "description": "Action to perform based on regex matching. Defaults to 'replace'.",
                      "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 '(.*)'.",
                      "type": "string"
                    },
                    "replacement": {
                      "description": "Replacement value against which a regex replace is performed if the\nregular 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\nusing the configured separator and matched against the configured regular expression\nfor the replace, keep, and drop actions.",
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "targetLabel": {
                      "description": "Label to which the resulting value is written in a replace action.\nIt is mandatory for replace actions. Regex capture groups are available.",
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "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.",
                "type": "string"
              },
              "timeout": {
                "description": "Timeout for metrics scrapes. Must be a valid Prometheus duration.\nMust not be larger then the scrape interval.",
                "type": "string"
              },
              "tls": {
                "description": "TLS configures the scrape request's TLS settings.",
                "properties": {
                  "insecureSkipVerify": {
                    "description": "InsecureSkipVerify disables target certificate validation.",
                    "type": "boolean"
                  }
                },
                "type": "object",
                "additionalProperties": false
              }
            },
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "limits": {
          "description": "Limits to apply at scrape time.",
          "properties": {
            "labelNameLength": {
              "description": "Maximum label name length.\nUses Prometheus default if left unspecified.",
              "format": "int64",
              "type": "integer"
            },
            "labelValueLength": {
              "description": "Maximum label value length.\nUses Prometheus default if left unspecified.",
              "format": "int64",
              "type": "integer"
            },
            "labels": {
              "description": "Maximum number of labels accepted for a single sample.\nUses Prometheus default if left unspecified.",
              "format": "int64",
              "type": "integer"
            },
            "samples": {
              "description": "Maximum number of samples accepted within a single scrape.\nUses Prometheus default if left unspecified.",
              "format": "int64",
              "type": "integer"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "selector": {
          "description": "Label selector that specifies which nodes are selected for this monitoring\nconfiguration. 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\nrelates 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.\nValid 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,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. This array is replaced during a strategic\nmerge patch.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "atomic"
                  }
                },
                "required": [
                  "key",
                  "operator"
                ],
                "type": "object",
                "additionalProperties": false
              },
              "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\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.",
              "type": "object"
            }
          },
          "type": "object",
          "x-kubernetes-map-type": "atomic",
          "additionalProperties": false
        }
      },
      "required": [
        "endpoints"
      ],
      "type": "object",
      "additionalProperties": false
    },
    "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",
            "additionalProperties": false
          },
          "type": "array"
        },
        "observedGeneration": {
          "description": "The generation observed by the controller.",
          "format": "int64",
          "type": "integer"
        }
      },
      "type": "object",
      "additionalProperties": false
    }
  },
  "required": [
    "spec"
  ],
  "type": "object"
}
