// Copyright (c) 2023 Volvo Car Corporation
// SPDX-License-Identifier: Apache-2.0

// Code generated by lingon. EDIT AS MUCH AS YOU LIKE.

package vmcrd

import (
	apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

var VmauthsOperatorVictoriametricsComCRD = &apiextensionsv1.CustomResourceDefinition{
	ObjectMeta: metav1.ObjectMeta{
		Annotations: map[string]string{"controller-gen.kubebuilder.io/version": "v0.10.0"},
		Name:        "vmauths.operator.victoriametrics.com",
	},
	Spec: apiextensionsv1.CustomResourceDefinitionSpec{
		Group: "operator.victoriametrics.com",
		Names: apiextensionsv1.CustomResourceDefinitionNames{
			Kind:     "VMAuth",
			ListKind: "VMAuthList",
			Plural:   "vmauths",
			Singular: "vmauth",
		},
		Scope: apiextensionsv1.ResourceScope("Namespaced"),
		Versions: []apiextensionsv1.CustomResourceDefinitionVersion{{
			Name: "v1beta1",
			Schema: &apiextensionsv1.CustomResourceValidation{OpenAPIV3Schema: &apiextensionsv1.JSONSchemaProps{
				Description: "VMAuth is the Schema for the vmauths API",
				Properties: map[string]apiextensionsv1.JSONSchemaProps{
					"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: "VMAuthSpec defines the desired state of VMAuth",
						Properties: map[string]apiextensionsv1.JSONSchemaProps{
							"-": {
								Description: "ParsingError contents error with context if operator was failed to parse json object from kubernetes api server",
								Type:        "string",
							},
							"affinity": {
								Description:            "Affinity If specified, the pod's scheduling constraints.",
								Type:                   "object",
								XPreserveUnknownFields: P(true),
							},
							"configMaps": {
								Description: "ConfigMaps is a list of ConfigMaps in the same namespace as the VMAuth object, which shall be mounted into the VMAuth Pods.",
								Items:       &apiextensionsv1.JSONSchemaPropsOrArray{Schema: &apiextensionsv1.JSONSchemaProps{Type: "string"}},
								Type:        "array",
							},
							"containers": {
								Description: "Containers property allows to inject additions sidecars or to patch existing containers. It can be useful for proxies, backup, etc.",
								Items: &apiextensionsv1.JSONSchemaPropsOrArray{Schema: &apiextensionsv1.JSONSchemaProps{
									Description:            "A single application container that you want to run within a pod.",
									Required:               []string{"name"},
									Type:                   "object",
									XPreserveUnknownFields: P(true),
								}},
								Type: "array",
							},
							"dnsConfig": {
								Description: "Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.",
								Items:       &apiextensionsv1.JSONSchemaPropsOrArray{Schema: &apiextensionsv1.JSONSchemaProps{XPreserveUnknownFields: P(true)}},
								Properties: map[string]apiextensionsv1.JSONSchemaProps{
									"nameservers": {
										Description: "A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.",
										Items:       &apiextensionsv1.JSONSchemaPropsOrArray{Schema: &apiextensionsv1.JSONSchemaProps{Type: "string"}},
										Type:        "array",
									},
									"options": {
										Description: "A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.",
										Items: &apiextensionsv1.JSONSchemaPropsOrArray{Schema: &apiextensionsv1.JSONSchemaProps{
											Description: "PodDNSConfigOption defines DNS resolver options of a pod.",
											Properties: map[string]apiextensionsv1.JSONSchemaProps{
												"name": {
													Description: "Required.",
													Type:        "string",
												},
												"value": {Type: "string"},
											},
											Type: "object",
										}},
										Type: "array",
									},
									"searches": {
										Description: "A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.",
										Items:       &apiextensionsv1.JSONSchemaPropsOrArray{Schema: &apiextensionsv1.JSONSchemaProps{Type: "string"}},
										Type:        "array",
									},
								},
								Type: "object",
							},
							"dnsPolicy": {
								Description: "DNSPolicy sets DNS policy for the pod",
								Type:        "string",
							},
							"extraArgs": {
								AdditionalProperties: &apiextensionsv1.JSONSchemaPropsOrBool{
									Allows: true,
									Schema: &apiextensionsv1.JSONSchemaProps{Type: "string"},
								},
								Description: "ExtraArgs that will be passed to  VMAuth pod for example remoteWrite.tmpDataPath: /tmp",
								Type:        "object",
							},
							"extraEnvs": {
								Description: "ExtraEnvs that will be added to VMAuth pod",
								Items: &apiextensionsv1.JSONSchemaPropsOrArray{Schema: &apiextensionsv1.JSONSchemaProps{
									Description: "EnvVar represents an environment variable present in a Container.",
									Properties: map[string]apiextensionsv1.JSONSchemaProps{
										"name": {
											Description: "Name of the environment variable. Must be a C_IDENTIFIER.",
											Type:        "string",
										},
										"value": {
											Description: "Variable references $(VAR_NAME) are expanded using the previously defined environment variables in the container and any service environment variables. If a variable cannot be resolved, the reference in the input string will be unchanged. Double $$ are reduced to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. \"$$(VAR_NAME)\" will produce the string literal \"$(VAR_NAME)\". Escaped references will never be expanded, regardless of whether the variable exists or not. Defaults to \"\".",
											Type:        "string",
										},
									},
									Required:               []string{"name"},
									Type:                   "object",
									XPreserveUnknownFields: P(true),
								}},
								Type: "array",
							},
							"hostAliases": {
								Description: "HostAliases provides mapping for ip and hostname, that would be propagated to pod, cannot be used with HostNetwork.",
								Items: &apiextensionsv1.JSONSchemaPropsOrArray{Schema: &apiextensionsv1.JSONSchemaProps{
									Description: "HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the pod's hosts file.",
									Properties: map[string]apiextensionsv1.JSONSchemaProps{
										"hostnames": {
											Description: "Hostnames for the above IP address.",
											Items:       &apiextensionsv1.JSONSchemaPropsOrArray{Schema: &apiextensionsv1.JSONSchemaProps{Type: "string"}},
											Type:        "array",
										},
										"ip": {
											Description: "IP address of the host file entry.",
											Type:        "string",
										},
									},
									Type: "object",
								}},
								Type: "array",
							},
							"hostNetwork": {
								Description: "HostNetwork controls whether the pod may use the node network namespace",
								Type:        "boolean",
							},
							"image": {
								Description: "Image - docker image settings for VMAuth if no specified operator uses default config version",
								Properties: map[string]apiextensionsv1.JSONSchemaProps{
									"pullPolicy": {
										Description: "PullPolicy describes how to pull docker image",
										Type:        "string",
									},
									"repository": {
										Description: "Repository contains name of docker image + it's repository if needed",
										Type:        "string",
									},
									"tag": {
										Description: "Tag contains desired docker image version",
										Type:        "string",
									},
								},
								Type: "object",
							},
							"imagePullSecrets": {
								Description: "ImagePullSecrets An optional list of references to secrets in the same namespace to use for pulling images from registries see http://kubernetes.io/docs/user-guide/images#specifying-imagepullsecrets-on-a-pod",
								Items: &apiextensionsv1.JSONSchemaPropsOrArray{Schema: &apiextensionsv1.JSONSchemaProps{
									Description: "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.",
									Properties: map[string]apiextensionsv1.JSONSchemaProps{"name": {
										Description: "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?",
										Type:        "string",
									}},
									Type:     "object",
									XMapType: P("atomic"),
								}},
								Type: "array",
							},
							"ingress": {
								Description: "Ingress enables ingress configuration for VMAuth.",
								Properties: map[string]apiextensionsv1.JSONSchemaProps{
									"annotations": {
										AdditionalProperties: &apiextensionsv1.JSONSchemaPropsOrBool{
											Allows: true,
											Schema: &apiextensionsv1.JSONSchemaProps{Type: "string"},
										},
										Description: "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations",
										Type:        "object",
									},
									"class_name": {
										Description: "ClassName defines ingress class name for VMAuth",
										Type:        "string",
									},
									"extraRules": {
										Description: "ExtraRules - additional rules for ingress, must be checked for correctness by user.",
										Items: &apiextensionsv1.JSONSchemaPropsOrArray{Schema: &apiextensionsv1.JSONSchemaProps{
											Description: "IngressRule represents the rules mapping the paths under a specified host to the related backend services. Incoming requests are first evaluated for a host match, then routed to the backend associated with the matching IngressRuleValue.",
											Properties: map[string]apiextensionsv1.JSONSchemaProps{
												"host": {
													Description: `
Host is the fully qualified domain name of a network host, as defined by RFC 3986. Note the following deviations from the "host" part of the URI as defined in RFC 3986: 1. IPs are not allowed. Currently an IngressRuleValue can only apply to the IP in the Spec of the parent Ingress. 2. The ":" delimiter is not respected because ports are not allowed. Currently the port of an Ingress is implicitly :80 for http and :443 for https. Both these may change in the future. Incoming requests are matched against the host before the IngressRuleValue. If the host is unspecified, the Ingress routes all traffic based on the specified IngressRuleValue. 
 Host can be "precise" which is a domain name without the terminating dot of a network host (e.g. "foo.bar.com") or "wildcard", which is a domain name prefixed with a single wildcard label (e.g. "*.foo.com"). The wildcard character '*' must appear by itself as the first DNS label and matches only a single label. You cannot have a wildcard label by itself (e.g. Host == "*"). Requests will be matched against the Host field in the following way: 1. If Host is precise, the request matches this rule if the http host header is equal to Host. 2. If Host is a wildcard, then the request matches this rule if the http host header is to equal to the suffix (removing the first label) of the wildcard rule.
`,
													Type: "string",
												},
												"http": {
													Description: "HTTPIngressRuleValue is a list of http selectors pointing to backends. In the example: http://<host>/<path>?<searchpart> -> backend where where parts of the url correspond to RFC 3986, this resource will be used to match against everything after the last '/' and before the first '?' or '#'.",
													Properties: map[string]apiextensionsv1.JSONSchemaProps{"paths": {
														Description: "A collection of paths that map requests to backends.",
														Items: &apiextensionsv1.JSONSchemaPropsOrArray{Schema: &apiextensionsv1.JSONSchemaProps{
															Description: "HTTPIngressPath associates a path with a backend. Incoming urls matching the path are forwarded to the backend.",
															Properties: map[string]apiextensionsv1.JSONSchemaProps{
																"backend": {
																	Description: "Backend defines the referenced service endpoint to which the traffic will be forwarded to.",
																	Properties: map[string]apiextensionsv1.JSONSchemaProps{
																		"resource": {
																			Description: "Resource is an ObjectRef to another Kubernetes resource in the namespace of the Ingress object. If resource is specified, a service.Name and service.Port must not be specified. This is a mutually exclusive setting with \"Service\".",
																			Properties: map[string]apiextensionsv1.JSONSchemaProps{
																				"apiGroup": {
																					Description: "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.",
																					Type:        "string",
																				},
																				"kind": {
																					Description: "Kind is the type of resource being referenced",
																					Type:        "string",
																				},
																				"name": {
																					Description: "Name is the name of resource being referenced",
																					Type:        "string",
																				},
																			},
																			Required: []string{"kind", "name"},
																			Type:     "object",
																			XMapType: P("atomic"),
																		},
																		"service": {
																			Description: "Service references a Service as a Backend. This is a mutually exclusive setting with \"Resource\".",
																			Properties: map[string]apiextensionsv1.JSONSchemaProps{
																				"name": {
																					Description: "Name is the referenced service. The service must exist in the same namespace as the Ingress object.",
																					Type:        "string",
																				},
																				"port": {
																					Description: "Port of the referenced service. A port name or port number is required for a IngressServiceBackend.",
																					Properties: map[string]apiextensionsv1.JSONSchemaProps{
																						"name": {
																							Description: "Name is the name of the port on the Service. This is a mutually exclusive setting with \"Number\".",
																							Type:        "string",
																						},
																						"number": {
																							Description: "Number is the numerical port number (e.g. 80) on the Service. This is a mutually exclusive setting with \"Name\".",
																							Format:      "int32",
																							Type:        "integer",
																						},
																					},
																					Type: "object",
																				},
																			},
																			Required: []string{"name"},
																			Type:     "object",
																		},
																	},
																	Type: "object",
																},
																"path": {
																	Description: "Path is matched against the path of an incoming request. Currently it can contain characters disallowed from the conventional \"path\" part of a URL as defined by RFC 3986. Paths must begin with a '/' and must be present when using PathType with value \"Exact\" or \"Prefix\".",
																	Type:        "string",
																},
																"pathType": {
																	Description: "PathType determines the interpretation of the Path matching. PathType can be one of the following values: * Exact: Matches the URL path exactly. * Prefix: Matches based on a URL path prefix split by '/'. Matching is done on a path element by element basis. A path element refers is the list of labels in the path split by the '/' separator. A request is a match for path p if every p is an element-wise prefix of p of the request path. Note that if the last element of the path is a substring of the last element in request path, it is not a match (e.g. /foo/bar matches /foo/bar/baz, but does not match /foo/barbaz). * ImplementationSpecific: Interpretation of the Path matching is up to the IngressClass. Implementations can treat this as a separate PathType or treat it identically to Prefix or Exact path types. Implementations are required to support all path types.",
																	Type:        "string",
																},
															},
															Required: []string{"backend", "pathType"},
															Type:     "object",
														}},
														Type:      "array",
														XListType: P("atomic"),
													}},
													Required: []string{"paths"},
													Type:     "object",
												},
											},
											Type: "object",
										}},
										Type: "array",
									},
									"extraTls": {
										Description: "ExtraTLS - additional TLS configuration for ingress must be checked for correctness by user.",
										Items: &apiextensionsv1.JSONSchemaPropsOrArray{Schema: &apiextensionsv1.JSONSchemaProps{
											Description: "IngressTLS describes the transport layer security associated with an Ingress.",
											Properties: map[string]apiextensionsv1.JSONSchemaProps{
												"hosts": {
													Description: "Hosts are a list of hosts included in the TLS certificate. The values in this list must match the name/s used in the tlsSecret. Defaults to the wildcard host setting for the loadbalancer controller fulfilling this Ingress, if left unspecified.",
													Items:       &apiextensionsv1.JSONSchemaPropsOrArray{Schema: &apiextensionsv1.JSONSchemaProps{Type: "string"}},
													Type:        "array",
													XListType:   P("atomic"),
												},
												"secretName": {
													Description: "SecretName is the name of the secret used to terminate TLS traffic on port 443. Field is left optional to allow TLS routing based on SNI hostname alone. If the SNI host in a listener conflicts with the \"Host\" header field used by an IngressRule, the SNI host is used for termination and value of the Host header is used for routing.",
													Type:        "string",
												},
											},
											Type: "object",
										}},
										Type: "array",
									},
									"host": {
										Description: "Host defines ingress host parameter for default rule It will be used, only if TlsHosts is empty",
										Type:        "string",
									},
									"labels": {
										AdditionalProperties: &apiextensionsv1.JSONSchemaPropsOrBool{
											Allows: true,
											Schema: &apiextensionsv1.JSONSchemaProps{Type: "string"},
										},
										Description: "Labels Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels",
										Type:        "object",
									},
									"name": {
										Description: "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names",
										Type:        "string",
									},
									"tlsHosts": {
										Description: "TlsHosts configures TLS access for ingress, tlsSecretName must be defined for it.",
										Items:       &apiextensionsv1.JSONSchemaPropsOrArray{Schema: &apiextensionsv1.JSONSchemaProps{Type: "string"}},
										Type:        "array",
									},
									"tlsSecretName": {
										Description: "TlsSecretName defines secretname at the VMAuth namespace with cert and key https://kubernetes.io/docs/concepts/services-networking/ingress/#tls",
										Type:        "string",
									},
								},
								Type: "object",
							},
							"initContainers": {
								Description: "InitContainers allows adding initContainers to the pod definition. Those can be used to e.g. fetch secrets for injection into the vmSingle configuration from external sources. Any errors during the execution of an initContainer will lead to a restart of the Pod. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ Using initContainers for any use case other then secret fetching is entirely outside the scope of what the maintainers will support and by doing so, you accept that this behaviour may break at any time without notice.",
								Items: &apiextensionsv1.JSONSchemaPropsOrArray{Schema: &apiextensionsv1.JSONSchemaProps{
									Description:            "A single application container that you want to run within a pod.",
									Required:               []string{"name"},
									Type:                   "object",
									XPreserveUnknownFields: P(true),
								}},
								Type: "array",
							},
							"livenessProbe": {
								Description:            "LivenessProbe that will be added CRD pod",
								Type:                   "object",
								XPreserveUnknownFields: P(true),
							},
							"logFormat": {
								Description: "LogFormat for VMAuth to be configured with.",
								Enum:        []apiextensionsv1.JSON{{Raw: []byte("\"default\"")}, {Raw: []byte("\"json\"")}},
								Type:        "string",
							},
							"logLevel": {
								Description: "LogLevel for victoria metrics single to be configured with.",
								Enum:        []apiextensionsv1.JSON{{Raw: []byte("\"INFO\"")}, {Raw: []byte("\"WARN\"")}, {Raw: []byte("\"ERROR\"")}, {Raw: []byte("\"FATAL\"")}, {Raw: []byte("\"PANIC\"")}},
								Type:        "string",
							},
							"nodeSelector": {
								AdditionalProperties: &apiextensionsv1.JSONSchemaPropsOrBool{
									Allows: true,
									Schema: &apiextensionsv1.JSONSchemaProps{Type: "string"},
								},
								Description: "NodeSelector Define which Nodes the Pods are scheduled on.",
								Type:        "object",
							},
							"podDisruptionBudget": {
								Description: "PodDisruptionBudget created by operator",
								Properties: map[string]apiextensionsv1.JSONSchemaProps{
									"maxUnavailable": {
										AnyOf:        []apiextensionsv1.JSONSchemaProps{{Type: "integer"}, {Type: "string"}},
										Description:  "An eviction is allowed if at most \"maxUnavailable\" pods selected by \"selector\" are unavailable after the eviction, i.e. even in absence of the evicted pod. For example, one can prevent all voluntary evictions by specifying 0. This is a mutually exclusive setting with \"minAvailable\".",
										XIntOrString: true,
									},
									"minAvailable": {
										AnyOf:        []apiextensionsv1.JSONSchemaProps{{Type: "integer"}, {Type: "string"}},
										Description:  "An eviction is allowed if at least \"minAvailable\" pods selected by \"selector\" will still be available after the eviction, i.e. even in the absence of the evicted pod.  So for example you can prevent all voluntary evictions by specifying \"100%\".",
										XIntOrString: true,
									},
									"selectorLabels": {
										AdditionalProperties: &apiextensionsv1.JSONSchemaPropsOrBool{
											Allows: true,
											Schema: &apiextensionsv1.JSONSchemaProps{Type: "string"},
										},
										Description: "replaces default labels selector generated by operator it's useful when you need to create custom budget",
										Type:        "object",
									},
								},
								Type: "object",
							},
							"podMetadata": {
								Description: "PodMetadata configures Labels and Annotations which are propagated to the VMAuth pods.",
								Properties: map[string]apiextensionsv1.JSONSchemaProps{
									"annotations": {
										AdditionalProperties: &apiextensionsv1.JSONSchemaPropsOrBool{
											Allows: true,
											Schema: &apiextensionsv1.JSONSchemaProps{Type: "string"},
										},
										Description: "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations",
										Type:        "object",
									},
									"labels": {
										AdditionalProperties: &apiextensionsv1.JSONSchemaPropsOrBool{
											Allows: true,
											Schema: &apiextensionsv1.JSONSchemaProps{Type: "string"},
										},
										Description: "Labels Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels",
										Type:        "object",
									},
									"name": {
										Description: "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names",
										Type:        "string",
									},
								},
								Type: "object",
							},
							"podSecurityPolicyName": {
								Description: "PodSecurityPolicyName - defines name for podSecurityPolicy in case of empty value, prefixedName will be used.",
								Type:        "string",
							},
							"port": {
								Description: "Port listen port",
								Type:        "string",
							},
							"priorityClassName": {
								Description: "PriorityClassName assigned to the Pods",
								Type:        "string",
							},
							"readinessGates": {
								Description: "ReadinessGates defines pod readiness gates",
								Items: &apiextensionsv1.JSONSchemaPropsOrArray{Schema: &apiextensionsv1.JSONSchemaProps{
									Description: "PodReadinessGate contains the reference to a pod condition",
									Properties: map[string]apiextensionsv1.JSONSchemaProps{"conditionType": {
										Description: "ConditionType refers to a condition in the pod's condition list with matching type.",
										Type:        "string",
									}},
									Required: []string{"conditionType"},
									Type:     "object",
								}},
								Type: "array",
							},
							"readinessProbe": {
								Description:            "ReadinessProbe that will be added CRD pod",
								Type:                   "object",
								XPreserveUnknownFields: P(true),
							},
							"replicaCount": {
								Description: "ReplicaCount is the expected size of the VMAuth",
								Format:      "int32",
								Type:        "integer",
							},
							"resources": {
								Description: "Resources container resource request and limits, https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ if not defined default resources from operator config will be used",
								Properties: map[string]apiextensionsv1.JSONSchemaProps{
									"limits": {
										AdditionalProperties: &apiextensionsv1.JSONSchemaPropsOrBool{
											Allows: true,
											Schema: &apiextensionsv1.JSONSchemaProps{
												AnyOf:        []apiextensionsv1.JSONSchemaProps{{Type: "integer"}, {Type: "string"}},
												Pattern:      "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$",
												XIntOrString: true,
											},
										},
										Description: "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/",
										Type:        "object",
									},
									"requests": {
										AdditionalProperties: &apiextensionsv1.JSONSchemaPropsOrBool{
											Allows: true,
											Schema: &apiextensionsv1.JSONSchemaProps{
												AnyOf:        []apiextensionsv1.JSONSchemaProps{{Type: "integer"}, {Type: "string"}},
												Pattern:      "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$",
												XIntOrString: true,
											},
										},
										Description: "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/",
										Type:        "object",
									},
								},
								Type: "object",
							},
							"runtimeClassName": {
								Description: "RuntimeClassName - defines runtime class for kubernetes pod. https://kubernetes.io/docs/concepts/containers/runtime-class/",
								Type:        "string",
							},
							"schedulerName": {
								Description: "SchedulerName - defines kubernetes scheduler name",
								Type:        "string",
							},
							"secrets": {
								Description: "Secrets is a list of Secrets in the same namespace as the VMAuth object, which shall be mounted into the VMAuth Pods.",
								Items:       &apiextensionsv1.JSONSchemaPropsOrArray{Schema: &apiextensionsv1.JSONSchemaProps{Type: "string"}},
								Type:        "array",
							},
							"securityContext": {
								Description:            "SecurityContext holds pod-level security attributes and common container settings. This defaults to the default PodSecurityContext.",
								Type:                   "object",
								XPreserveUnknownFields: P(true),
							},
							"selectAllByDefault": {
								Description: "SelectAllByDefault changes default behavior for empty CRD selectors, such userSelector. with selectAllByDefault: true and empty userSelector and userNamespaceSelector Operator selects all exist users with selectAllByDefault: false - selects nothing",
								Type:        "boolean",
							},
							"serviceAccountName": {
								Description: "ServiceAccountName is the name of the ServiceAccount to use to run the VMAuth Pods.",
								Type:        "string",
							},
							"serviceScrapeSpec": {
								Description:            "ServiceScrapeSpec that will be added to vmselect VMServiceScrape spec",
								Required:               []string{"endpoints"},
								Type:                   "object",
								XPreserveUnknownFields: P(true),
							},
							"serviceSpec": {
								Description: "ServiceSpec that will be added to vmsingle service spec",
								Properties: map[string]apiextensionsv1.JSONSchemaProps{
									"metadata": {
										Description: "EmbeddedObjectMetadata defines objectMeta for additional service.",
										Properties: map[string]apiextensionsv1.JSONSchemaProps{
											"annotations": {
												AdditionalProperties: &apiextensionsv1.JSONSchemaPropsOrBool{
													Allows: true,
													Schema: &apiextensionsv1.JSONSchemaProps{Type: "string"},
												},
												Description: "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations",
												Type:        "object",
											},
											"labels": {
												AdditionalProperties: &apiextensionsv1.JSONSchemaPropsOrBool{
													Allows: true,
													Schema: &apiextensionsv1.JSONSchemaProps{Type: "string"},
												},
												Description: "Labels Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels",
												Type:        "object",
											},
											"name": {
												Description: "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names",
												Type:        "string",
											},
										},
										Type: "object",
									},
									"spec": {
										Description:            "ServiceSpec describes the attributes that a user creates on a service. More info: https://kubernetes.io/docs/concepts/services-networking/service/",
										Type:                   "object",
										XPreserveUnknownFields: P(true),
									},
								},
								Required: []string{"spec"},
								Type:     "object",
							},
							"startupProbe": {
								Description:            "StartupProbe that will be added to CRD pod",
								Type:                   "object",
								XPreserveUnknownFields: P(true),
							},
							"terminationGracePeriodSeconds": {
								Description: "TerminationGracePeriodSeconds period for container graceful termination",
								Format:      "int64",
								Type:        "integer",
							},
							"tolerations": {
								Description: "Tolerations If specified, the pod's tolerations.",
								Items: &apiextensionsv1.JSONSchemaPropsOrArray{Schema: &apiextensionsv1.JSONSchemaProps{
									Description: "The pod this Toleration is attached to tolerates any taint that matches the triple <key,value,effect> using the matching operator <operator>.",
									Properties: map[string]apiextensionsv1.JSONSchemaProps{
										"effect": {
											Description: "Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.",
											Type:        "string",
										},
										"key": {
											Description: "Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.",
											Type:        "string",
										},
										"operator": {
											Description: "Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.",
											Type:        "string",
										},
										"tolerationSeconds": {
											Description: "TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.",
											Format:      "int64",
											Type:        "integer",
										},
										"value": {
											Description: "Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.",
											Type:        "string",
										},
									},
									Type: "object",
								}},
								Type: "array",
							},
							"topologySpreadConstraints": {
								Description: "TopologySpreadConstraints embedded kubernetes pod configuration option, controls how pods are spread across your cluster among failure-domains such as regions, zones, nodes, and other user-defined topology domains https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/",
								Items: &apiextensionsv1.JSONSchemaPropsOrArray{Schema: &apiextensionsv1.JSONSchemaProps{
									Description:            "TopologySpreadConstraint specifies how to spread matching pods among the given topology.",
									Required:               []string{"maxSkew", "topologyKey", "whenUnsatisfiable"},
									Type:                   "object",
									XPreserveUnknownFields: P(true),
								}},
								Type: "array",
							},
							"unauthorizedAccessConfig": {
								Description: "UnauthorizedAccessConfig configures access for un authorized users",
								Items: &apiextensionsv1.JSONSchemaPropsOrArray{Schema: &apiextensionsv1.JSONSchemaProps{
									Description: "VMAuthUnauthorizedPath defines url_map for unauthorized access",
									Properties: map[string]apiextensionsv1.JSONSchemaProps{
										"ip_filters": {
											Description: "IPFilters defines filter for src ip address enterprise only",
											Properties: map[string]apiextensionsv1.JSONSchemaProps{
												"allow_list": {
													Items: &apiextensionsv1.JSONSchemaPropsOrArray{Schema: &apiextensionsv1.JSONSchemaProps{Type: "string"}},
													Type:  "array",
												},
												"deny_list": {
													Items: &apiextensionsv1.JSONSchemaPropsOrArray{Schema: &apiextensionsv1.JSONSchemaProps{Type: "string"}},
													Type:  "array",
												},
											},
											Type: "object",
										},
										"src_paths": {
											Description: "Paths src request paths",
											Items:       &apiextensionsv1.JSONSchemaPropsOrArray{Schema: &apiextensionsv1.JSONSchemaProps{Type: "string"}},
											Type:        "array",
										},
										"url_prefix": {
											Description: "URLs defines url_prefix for dst routing",
											Items:       &apiextensionsv1.JSONSchemaPropsOrArray{Schema: &apiextensionsv1.JSONSchemaProps{Type: "string"}},
											Type:        "array",
										},
									},
									Type: "object",
								}},
								Type: "array",
							},
							"userNamespaceSelector": {
								Description: "UserNamespaceSelector Namespaces to be selected for  VMAuth discovery. Works in combination with Selector. NamespaceSelector nil - only objects at VMAuth namespace. Selector nil - only objects at NamespaceSelector namespaces. If both nil - behaviour controlled by selectAllByDefault",
								Properties: map[string]apiextensionsv1.JSONSchemaProps{
									"matchExpressions": {
										Description: "matchExpressions is a list of label selector requirements. The requirements are ANDed.",
										Items: &apiextensionsv1.JSONSchemaPropsOrArray{Schema: &apiextensionsv1.JSONSchemaProps{
											Description: "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.",
											Properties: map[string]apiextensionsv1.JSONSchemaProps{
												"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:       &apiextensionsv1.JSONSchemaPropsOrArray{Schema: &apiextensionsv1.JSONSchemaProps{Type: "string"}},
													Type:        "array",
												},
											},
											Required: []string{"key", "operator"},
											Type:     "object",
										}},
										Type: "array",
									},
									"matchLabels": {
										AdditionalProperties: &apiextensionsv1.JSONSchemaPropsOrBool{
											Allows: true,
											Schema: &apiextensionsv1.JSONSchemaProps{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",
								XMapType: P("atomic"),
							},
							"userSelector": {
								Description: "UserSelector defines VMUser to be selected for config file generation. Works in combination with NamespaceSelector. NamespaceSelector nil - only objects at VMAuth namespace. If both nil - behaviour controlled by selectAllByDefault",
								Properties: map[string]apiextensionsv1.JSONSchemaProps{
									"matchExpressions": {
										Description: "matchExpressions is a list of label selector requirements. The requirements are ANDed.",
										Items: &apiextensionsv1.JSONSchemaPropsOrArray{Schema: &apiextensionsv1.JSONSchemaProps{
											Description: "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.",
											Properties: map[string]apiextensionsv1.JSONSchemaProps{
												"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:       &apiextensionsv1.JSONSchemaPropsOrArray{Schema: &apiextensionsv1.JSONSchemaProps{Type: "string"}},
													Type:        "array",
												},
											},
											Required: []string{"key", "operator"},
											Type:     "object",
										}},
										Type: "array",
									},
									"matchLabels": {
										AdditionalProperties: &apiextensionsv1.JSONSchemaPropsOrBool{
											Allows: true,
											Schema: &apiextensionsv1.JSONSchemaProps{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",
								XMapType: P("atomic"),
							},
							"volumeMounts": {
								Description: "VolumeMounts allows configuration of additional VolumeMounts on the output Deployment definition. VolumeMounts specified will be appended to other VolumeMounts in the VMAuth container, that are generated as a result of StorageSpec objects.",
								Items: &apiextensionsv1.JSONSchemaPropsOrArray{Schema: &apiextensionsv1.JSONSchemaProps{
									Description: "VolumeMount describes a mounting of a Volume within a container.",
									Properties: map[string]apiextensionsv1.JSONSchemaProps{
										"mountPath": {
											Description: "Path within the container at which the volume should be mounted.  Must not contain ':'.",
											Type:        "string",
										},
										"mountPropagation": {
											Description: "mountPropagation determines how mounts are propagated from the host to container and the other way around. When not set, MountPropagationNone is used. This field is beta in 1.10.",
											Type:        "string",
										},
										"name": {
											Description: "This must match the Name of a Volume.",
											Type:        "string",
										},
										"readOnly": {
											Description: "Mounted read-only if true, read-write otherwise (false or unspecified). Defaults to false.",
											Type:        "boolean",
										},
										"subPath": {
											Description: "Path within the volume from which the container's volume should be mounted. Defaults to \"\" (volume's root).",
											Type:        "string",
										},
										"subPathExpr": {
											Description: "Expanded path within the volume from which the container's volume should be mounted. Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. Defaults to \"\" (volume's root). SubPathExpr and SubPath are mutually exclusive.",
											Type:        "string",
										},
									},
									Required: []string{"mountPath", "name"},
									Type:     "object",
								}},
								Type: "array",
							},
							"volumes": {
								Description: "Volumes allows configuration of additional volumes on the output deploy definition. Volumes specified will be appended to other volumes that are generated as a result of StorageSpec objects.",
								Items: &apiextensionsv1.JSONSchemaPropsOrArray{Schema: &apiextensionsv1.JSONSchemaProps{
									Description:            "Volume represents a named volume in a pod that may be accessed by any container in the pod.",
									Required:               []string{"name"},
									Type:                   "object",
									XPreserveUnknownFields: P(true),
								}},
								Type: "array",
							},
						},
						Type: "object",
					},
					"status": {
						Description: "VMAuthStatus defines the observed state of VMAuth",
						Type:        "object",
					},
				},
				Type: "object",
			}},
			Served:       true,
			Storage:      true,
			Subresources: &apiextensionsv1.CustomResourceSubresources{},
		}},
	},
	TypeMeta: metav1.TypeMeta{
		APIVersion: "apiextensions.k8s.io/v1",
		Kind:       "CustomResourceDefinition",
	},
}
