{
  "description": "Techsupport is the Schema for the techsupport API",
  "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": "TechsupportSpec defines the desired state of Techsupport",
      "properties": {
        "deliveryMethods": {
          "description": "Notification is a list of delivery mechanisms.",
          "items": {
            "properties": {
              "name": {
                "description": "Name of the delivery mechanism.\nMust be a DNS_LABEL and unique within the TechsupportSpec.",
                "type": "string"
              },
              "secretRef": {
                "description": "SecretRef is a reference to a delivery mechanism-specific Secret\nthat holds the details for the delivery.",
                "properties": {
                  "name": {
                    "description": "name is unique within a namespace to reference a secret resource.",
                    "type": "string"
                  },
                  "namespace": {
                    "description": "namespace defines the space within which the secret name must be unique.",
                    "type": "string"
                  }
                },
                "type": "object",
                "x-kubernetes-map-type": "atomic",
                "additionalProperties": false
              },
              "type": {
                "description": "DeliveryType specifies the type of notification",
                "enum": [
                  "Slack",
                  "Webex",
                  "Discord",
                  "Telegram",
                  "SMTP",
                  "SFTP"
                ],
                "type": "string"
              }
            },
            "required": [
              "name",
              "type"
            ],
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "fromManaged": {
          "description": "FromManaged specifies which resources and logs to collect from\nmatching managed cluster.",
          "properties": {
            "clusterRefs": {
              "description": "ClusterRefs identifies clusters to collect techsupport from.",
              "items": {
                "description": "ObjectReference contains enough information to let you inspect or modify the referred object.",
                "properties": {
                  "apiVersion": {
                    "description": "API version of the referent.",
                    "type": "string"
                  },
                  "fieldPath": {
                    "description": "If referring to a piece of an object instead of an entire object, this string\nshould contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].\nFor example, if the object reference is to a container within a pod, this would take on a value like:\n\"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered\nthe event) or if no container name is specified \"spec.containers[2]\" (container with\nindex 2 in this pod). This syntax is chosen only to have some well-defined way of\nreferencing a part of an object.",
                    "type": "string"
                  },
                  "kind": {
                    "description": "Kind of the referent.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
                    "type": "string"
                  },
                  "name": {
                    "description": "Name of the referent.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
                    "type": "string"
                  },
                  "namespace": {
                    "description": "Namespace of the referent.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/",
                    "type": "string"
                  },
                  "resourceVersion": {
                    "description": "Specific resourceVersion to which this reference is made, if any.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency",
                    "type": "string"
                  },
                  "uid": {
                    "description": "UID of the referent.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids",
                    "type": "string"
                  }
                },
                "type": "object",
                "x-kubernetes-map-type": "atomic",
                "additionalProperties": false
              },
              "type": "array"
            },
            "clusterSelector": {
              "description": "ClusterSelector identifies clusters to collect techsupport from.",
              "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
            },
            "events": {
              "description": "Events indicates what events to collect",
              "items": {
                "properties": {
                  "namespace": {
                    "description": "Namespace of the events.\nAn empty string \"\" indicates all namespaces.",
                    "type": "string"
                  },
                  "type": {
                    "description": "Type filters events based on the type of the events (Normal, Warning),",
                    "enum": [
                      "Normal",
                      "Warning"
                    ],
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "logs": {
              "description": "Logs indicates what pods' log to collect",
              "items": {
                "description": "LogFilter allows to select which logs to collect",
                "properties": {
                  "labelFilters": {
                    "description": "LabelFilters allows to filter pods based on current labels.",
                    "items": {
                      "properties": {
                        "key": {
                          "description": "Key is the label key",
                          "type": "string"
                        },
                        "operation": {
                          "description": "Operation is the comparison operation",
                          "enum": [
                            "Equal",
                            "Different",
                            "Has",
                            "DoesNotHave"
                          ],
                          "type": "string"
                        },
                        "value": {
                          "description": "Value is the label value",
                          "type": "string"
                        }
                      },
                      "required": [
                        "key",
                        "operation"
                      ],
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "name": {
                    "description": "Name of the pods deployed in the Cluster.",
                    "type": "string"
                  },
                  "namespace": {
                    "description": "Namespace of the pods deployed in the Cluster.\nAn empty string \"\" indicates all namespaces.",
                    "type": "string"
                  },
                  "sinceSeconds": {
                    "description": "A relative time in seconds before the current time from which to collect logs.\nIf this value precedes the time a pod was started, only logs since the pod\nstart will be returned.",
                    "format": "int64",
                    "type": "integer"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "resources": {
              "description": "Resources indicates what resorces to collect",
              "items": {
                "description": "ResourceSelector defines what resources are a match",
                "properties": {
                  "evaluate": {
                    "description": "Evaluate contains a function \"evaluate\" in lua language.\nThe function will be passed one of the object selected based on\nabove criteria.\nMust return struct with field \"matching\" representing whether\nobject is a match and an optional \"message\" field.",
                    "type": "string"
                  },
                  "evaluateCEL": {
                    "description": "EvaluateCEL contains a list of named CEL (Common Expression Language) rules.\nEach rule will be evaluated in order against each object selected based on\nthe criteria defined above. Each rule's expression must return a boolean value\nindicating whether the object is a match.\n\nEvaluation stops at the first rule that returns true; subsequent\nrules will not be evaluated.",
                    "items": {
                      "description": "CELRule defines a named CEL rule used in EvaluateCEL.",
                      "properties": {
                        "name": {
                          "description": "Name is a human-readable identifier for the rule.",
                          "type": "string"
                        },
                        "rule": {
                          "description": "Rule is the CEL (Common Expression Language) expression to evaluate.\nIt must return a bool",
                          "type": "string"
                        }
                      },
                      "required": [
                        "name",
                        "rule"
                      ],
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "group": {
                    "description": "Group of the resource deployed in the Cluster.",
                    "type": "string"
                  },
                  "kind": {
                    "description": "Kind of the resource deployed in the Cluster.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "labelFilters": {
                    "description": "LabelFilters allows to filter resources based on current labels.",
                    "items": {
                      "properties": {
                        "key": {
                          "description": "Key is the label key",
                          "type": "string"
                        },
                        "operation": {
                          "description": "Operation is the comparison operation",
                          "enum": [
                            "Equal",
                            "Different",
                            "Has",
                            "DoesNotHave"
                          ],
                          "type": "string"
                        },
                        "value": {
                          "description": "Value is the label value",
                          "type": "string"
                        }
                      },
                      "required": [
                        "key",
                        "operation"
                      ],
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "name": {
                    "description": "Name of the resource deployed in the  Cluster.",
                    "type": "string"
                  },
                  "namespace": {
                    "description": "Namespace of the resource deployed in the  Cluster.\nEmpty for resources scoped at cluster level.\nFor namespaced resources, an empty string \"\" indicates all namespaces.",
                    "type": "string"
                  },
                  "selector": {
                    "description": "Selector is a standard Kubernetes label selector. Resources are selected\nif their labels match the selector. This field uses the standard\nKubernetes label matching syntax (e.g., {\"environment\": \"production\"}).\nIf both LabelFilters and Selector are specified, the requirements from\nboth are logically ANDed.",
                    "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
                  },
                  "version": {
                    "description": "Version of the resource deployed in the Cluster.",
                    "type": "string"
                  }
                },
                "required": [
                  "group",
                  "kind",
                  "version"
                ],
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "fromManagement": {
          "description": "FromManagement identifies which resources and logs to collect\nfrom the management cluster",
          "properties": {
            "events": {
              "description": "Events indicates what events to collect",
              "items": {
                "properties": {
                  "namespace": {
                    "description": "Namespace of the events.\nAn empty string \"\" indicates all namespaces.",
                    "type": "string"
                  },
                  "type": {
                    "description": "Type filters events based on the type of the events (Normal, Warning),",
                    "enum": [
                      "Normal",
                      "Warning"
                    ],
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "logs": {
              "description": "Logs indicates what pods' log to collect",
              "items": {
                "description": "LogFilter allows to select which logs to collect",
                "properties": {
                  "labelFilters": {
                    "description": "LabelFilters allows to filter pods based on current labels.",
                    "items": {
                      "properties": {
                        "key": {
                          "description": "Key is the label key",
                          "type": "string"
                        },
                        "operation": {
                          "description": "Operation is the comparison operation",
                          "enum": [
                            "Equal",
                            "Different",
                            "Has",
                            "DoesNotHave"
                          ],
                          "type": "string"
                        },
                        "value": {
                          "description": "Value is the label value",
                          "type": "string"
                        }
                      },
                      "required": [
                        "key",
                        "operation"
                      ],
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "name": {
                    "description": "Name of the pods deployed in the Cluster.",
                    "type": "string"
                  },
                  "namespace": {
                    "description": "Namespace of the pods deployed in the Cluster.\nAn empty string \"\" indicates all namespaces.",
                    "type": "string"
                  },
                  "sinceSeconds": {
                    "description": "A relative time in seconds before the current time from which to collect logs.\nIf this value precedes the time a pod was started, only logs since the pod\nstart will be returned.",
                    "format": "int64",
                    "type": "integer"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "resources": {
              "description": "Resources indicates what resorces to collect",
              "items": {
                "description": "ResourceSelector defines what resources are a match",
                "properties": {
                  "evaluate": {
                    "description": "Evaluate contains a function \"evaluate\" in lua language.\nThe function will be passed one of the object selected based on\nabove criteria.\nMust return struct with field \"matching\" representing whether\nobject is a match and an optional \"message\" field.",
                    "type": "string"
                  },
                  "evaluateCEL": {
                    "description": "EvaluateCEL contains a list of named CEL (Common Expression Language) rules.\nEach rule will be evaluated in order against each object selected based on\nthe criteria defined above. Each rule's expression must return a boolean value\nindicating whether the object is a match.\n\nEvaluation stops at the first rule that returns true; subsequent\nrules will not be evaluated.",
                    "items": {
                      "description": "CELRule defines a named CEL rule used in EvaluateCEL.",
                      "properties": {
                        "name": {
                          "description": "Name is a human-readable identifier for the rule.",
                          "type": "string"
                        },
                        "rule": {
                          "description": "Rule is the CEL (Common Expression Language) expression to evaluate.\nIt must return a bool",
                          "type": "string"
                        }
                      },
                      "required": [
                        "name",
                        "rule"
                      ],
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "group": {
                    "description": "Group of the resource deployed in the Cluster.",
                    "type": "string"
                  },
                  "kind": {
                    "description": "Kind of the resource deployed in the Cluster.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "labelFilters": {
                    "description": "LabelFilters allows to filter resources based on current labels.",
                    "items": {
                      "properties": {
                        "key": {
                          "description": "Key is the label key",
                          "type": "string"
                        },
                        "operation": {
                          "description": "Operation is the comparison operation",
                          "enum": [
                            "Equal",
                            "Different",
                            "Has",
                            "DoesNotHave"
                          ],
                          "type": "string"
                        },
                        "value": {
                          "description": "Value is the label value",
                          "type": "string"
                        }
                      },
                      "required": [
                        "key",
                        "operation"
                      ],
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "name": {
                    "description": "Name of the resource deployed in the  Cluster.",
                    "type": "string"
                  },
                  "namespace": {
                    "description": "Namespace of the resource deployed in the  Cluster.\nEmpty for resources scoped at cluster level.\nFor namespaced resources, an empty string \"\" indicates all namespaces.",
                    "type": "string"
                  },
                  "selector": {
                    "description": "Selector is a standard Kubernetes label selector. Resources are selected\nif their labels match the selector. This field uses the standard\nKubernetes label matching syntax (e.g., {\"environment\": \"production\"}).\nIf both LabelFilters and Selector are specified, the requirements from\nboth are logically ANDed.",
                    "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
                  },
                  "version": {
                    "description": "Version of the resource deployed in the Cluster.",
                    "type": "string"
                  }
                },
                "required": [
                  "group",
                  "kind",
                  "version"
                ],
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "onDemand": {
          "description": "OnDemand indicates if tech support should be collected immediately.",
          "type": "boolean"
        },
        "schedulingConfig": {
          "description": "SchedulingConfig defines a schedule options for recurring tech support\ncollections.",
          "properties": {
            "schedule": {
              "description": "Schedule in Cron format, see https://en.wikipedia.org/wiki/Cron.",
              "type": "string"
            },
            "startingDeadlineSeconds": {
              "description": "Optional deadline in seconds for starting the job if it misses scheduled\ntime for any reason.  Missed jobs executions will be counted as failed ones.",
              "format": "int64",
              "type": "integer"
            }
          },
          "required": [
            "schedule"
          ],
          "type": "object",
          "additionalProperties": false
        }
      },
      "required": [
        "deliveryMethods"
      ],
      "type": "object",
      "additionalProperties": false
    },
    "status": {
      "description": "TechsupportStatus defines the observed state of Techsupport",
      "properties": {
        "failureMessage": {
          "description": "FailureMessage provides more information about the error, if\nany occurred",
          "type": "string"
        },
        "hash": {
          "description": "Hash represents of a unique value for techsupport Spec at a fixed point in\ntime",
          "format": "byte",
          "type": "string"
        },
        "lastRunStatus": {
          "description": "Status indicates what happened to last techsupport collection.",
          "enum": [
            "Collected",
            "InProgress",
            "Failed"
          ],
          "type": "string"
        },
        "lastRunTime": {
          "description": "Information when was the last time a techsupport was successfully scheduled.",
          "format": "date-time",
          "type": "string"
        },
        "nextScheduleTime": {
          "description": "Information when next techsupport is scheduled",
          "format": "date-time",
          "type": "string"
        }
      },
      "type": "object",
      "additionalProperties": false
    }
  },
  "type": "object"
}
