From bdffc554bbfd08aa3d6ed3ccc4ff07e3a02ba5d3 Mon Sep 17 00:00:00 2001 From: Mateus Oliveira Date: Fri, 5 Jan 2024 11:05:37 -0300 Subject: [PATCH] feat: Nullable logic in code Signed-off-by: Mateus Oliveira --- Makefile | 48 - api/v1alpha1/oadp_types.go | 18 +- api/v1alpha1/zz_generated.deepcopy.go | 29 + ...enshift.io_dataprotectionapplications.yaml | 2178 +++++++++------- ...enshift.io_dataprotectionapplications.yaml | 2180 ++++++++++------- controllers/nodeagent_test.go | 10 +- controllers/validator_test.go | 6 +- controllers/velero_test.go | 14 +- go.mod | 2 +- tests/e2e/dpa_deployment_suite_test.go | 2 +- 10 files changed, 2607 insertions(+), 1880 deletions(-) diff --git a/Makefile b/Makefile index 32490ed599..d833de0479 100644 --- a/Makefile +++ b/Makefile @@ -149,9 +149,6 @@ manifests: controller-gen ## Generate WebhookConfiguration, ClusterRole and Cust # Commenting out default which overwrites scoped config/rbac/role.yaml # GOFLAGS="-mod=mod" $(CONTROLLER_GEN) $(CRD_OPTIONS) rbac:roleName=manager-role webhook paths="./..." output:crd:artifacts:config=config/crd/bases GOFLAGS="-mod=mod" $(CONTROLLER_GEN) $(CRD_OPTIONS) webhook paths="./..." output:crd:artifacts:config=config/crd/bases - # run make nullables to generate nullable fields after all manifest changesin dependent targets. - # It's not included here because `test` and `bundle` target have different yaml styes. - # To keep dpa CRD the same, nullables have been added to test and bundle target separately. generate: controller-gen ## Generate code containing DeepCopy, DeepCopyInto, and DeepCopyObject method implementations. GOFLAGS="-mod=mod" $(CONTROLLER_GEN) object:headerFile="hack/boilerplate.go.txt" paths="./..." @@ -291,11 +288,6 @@ rm -rf $$TMP_DIR ;\ } endef -YQ = $(shell pwd)/bin/yq -yq: ## Download yq locally if necessary. - # 4.28.1 is latest with go 1.17 go.mod - $(call go-install-tool,$(YQ),github.com/mikefarah/yq/v4@v4.28.1) - OPERATOR_SDK = $(shell pwd)/bin/operator-sdk operator-sdk: # Download operator-sdk locally if does not exist @@ -310,51 +302,11 @@ bundle: manifests kustomize operator-sdk ## Generate bundle manifests and metada GOFLAGS="-mod=mod" $(OPERATOR_SDK) generate kustomize manifests -q cd config/manager && GOFLAGS="-mod=mod" $(KUSTOMIZE) edit set image controller=$(IMG) GOFLAGS="-mod=mod" $(KUSTOMIZE) build config/manifests | GOFLAGS="-mod=mod" $(OPERATOR_SDK) generate bundle -q --extra-service-accounts "velero" --overwrite --version $(VERSION) $(BUNDLE_METADATA_OPTS) - @make nullables # Copy updated bundle.Dockerfile to CI's Dockerfile.bundle # TODO: update CI to use generated one cp bundle.Dockerfile build/Dockerfile.bundle GOFLAGS="-mod=mod" $(OPERATOR_SDK) bundle validate ./bundle -.PHONY: nullables -nullables: - @make nullable-crds-bundle nullable-crds-config # patch nullables in CRDs - -.PHONY: nullable-crds-bundle -nullable-crds-bundle: DPA_SPEC_CONFIG_PROP = .spec.versions.0.schema.openAPIV3Schema.properties.spec.properties.configuration.properties -nullable-crds-bundle: PROP_RESOURCE_ALLOC = properties.podConfig.properties.resourceAllocations -nullable-crds-bundle: VELERO_RESOURCE_ALLOC = $(DPA_SPEC_CONFIG_PROP).velero.$(PROP_RESOURCE_ALLOC) -nullable-crds-bundle: RESTIC_RESOURCE_ALLOC = $(DPA_SPEC_CONFIG_PROP).restic.$(PROP_RESOURCE_ALLOC) -nullable-crds-bundle: DPA_CRD_YAML ?= bundle/manifests/oadp.openshift.io_dataprotectionapplications.yaml -nullable-crds-bundle: yq -# Velero CRD - @$(YQ) '$(VELERO_RESOURCE_ALLOC).nullable = true' $(DPA_CRD_YAML) > $(DPA_CRD_YAML).yqresult - @mv $(DPA_CRD_YAML).yqresult $(DPA_CRD_YAML) - @$(YQ) '$(VELERO_RESOURCE_ALLOC).properties.limits.nullable = true' $(DPA_CRD_YAML) > $(DPA_CRD_YAML).yqresult - @mv $(DPA_CRD_YAML).yqresult $(DPA_CRD_YAML) - @$(YQ) '$(VELERO_RESOURCE_ALLOC).properties.limits.additionalProperties.nullable = true' $(DPA_CRD_YAML) > $(DPA_CRD_YAML).yqresult - @mv $(DPA_CRD_YAML).yqresult $(DPA_CRD_YAML) - @$(YQ) '$(VELERO_RESOURCE_ALLOC).properties.requests.nullable = true' $(DPA_CRD_YAML) > $(DPA_CRD_YAML).yqresult - @mv $(DPA_CRD_YAML).yqresult $(DPA_CRD_YAML) - @$(YQ) '$(VELERO_RESOURCE_ALLOC).properties.requests.additionalProperties.nullable = true' $(DPA_CRD_YAML) > $(DPA_CRD_YAML).yqresult - @mv $(DPA_CRD_YAML).yqresult $(DPA_CRD_YAML) -# Restic CRD - @$(YQ) '$(RESTIC_RESOURCE_ALLOC).nullable = true' $(DPA_CRD_YAML) > $(DPA_CRD_YAML).yqresult - @mv $(DPA_CRD_YAML).yqresult $(DPA_CRD_YAML) - @$(YQ) '$(RESTIC_RESOURCE_ALLOC).properties.limits.nullable = true' $(DPA_CRD_YAML) > $(DPA_CRD_YAML).yqresult - @mv $(DPA_CRD_YAML).yqresult $(DPA_CRD_YAML) - @$(YQ) '$(RESTIC_RESOURCE_ALLOC).properties.limits.additionalProperties.nullable = true' $(DPA_CRD_YAML) > $(DPA_CRD_YAML).yqresult - @mv $(DPA_CRD_YAML).yqresult $(DPA_CRD_YAML) - @$(YQ) '$(RESTIC_RESOURCE_ALLOC).properties.requests.nullable = true' $(DPA_CRD_YAML) > $(DPA_CRD_YAML).yqresult - @mv $(DPA_CRD_YAML).yqresult $(DPA_CRD_YAML) - @$(YQ) '$(RESTIC_RESOURCE_ALLOC).properties.requests.additionalProperties.nullable = true' $(DPA_CRD_YAML) > $(DPA_CRD_YAML).yqresult - @mv $(DPA_CRD_YAML).yqresult $(DPA_CRD_YAML) - -.PHONY: nullable-crds-config -nullable-crds-config: DPA_CRD_YAML ?= config/crd/bases/oadp.openshift.io_dataprotectionapplications.yaml -nullable-crds-config: - @ DPA_CRD_YAML=$(DPA_CRD_YAML) make nullable-crds-bundle - .PHONY: bundle-build bundle-build: ## Build the bundle image. docker build -f bundle.Dockerfile -t $(BUNDLE_IMG) . $(DOCKER_BUILD_ARGS) diff --git a/api/v1alpha1/oadp_types.go b/api/v1alpha1/oadp_types.go index 2e9f5ce22f..876fcccda4 100644 --- a/api/v1alpha1/oadp_types.go +++ b/api/v1alpha1/oadp_types.go @@ -101,6 +101,22 @@ type VeleroConfig struct { Args *server.Args `json:"args,omitempty"` } +// Copy of corev1.ResourceRequirements with nullable +type OADPResourceRequirements struct { + // Limits describes the maximum amount of compute resources allowed. + // More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ + // +optional + // +nullable + Limits corev1.ResourceList `json:"limits,omitempty" protobuf:"bytes,1,rep,name=limits,casttype=ResourceList,castkey=ResourceName"` + // 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/ + // +optional + // +nullable + Requests corev1.ResourceList `json:"requests,omitempty" protobuf:"bytes,2,rep,name=requests,casttype=ResourceList,castkey=ResourceName"` +} + // PodConfig defines the pod configuration options type PodConfig struct { // labels to add to pods @@ -115,7 +131,7 @@ type PodConfig struct { // resourceAllocations defines the CPU and Memory resource allocations for the Pod // +optional // +nullable - ResourceAllocations corev1.ResourceRequirements `json:"resourceAllocations,omitempty"` + ResourceAllocations OADPResourceRequirements `json:"resourceAllocations,omitempty"` // env defines the list of environment variables to be supplied to podSpec // +optional Env []corev1.EnvVar `json:"env,omitempty"` diff --git a/api/v1alpha1/zz_generated.deepcopy.go b/api/v1alpha1/zz_generated.deepcopy.go index 006b19132a..8e3326c111 100644 --- a/api/v1alpha1/zz_generated.deepcopy.go +++ b/api/v1alpha1/zz_generated.deepcopy.go @@ -444,6 +444,35 @@ func (in *NodeAgentConfig) DeepCopy() *NodeAgentConfig { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OADPResourceRequirements) DeepCopyInto(out *OADPResourceRequirements) { + *out = *in + if in.Limits != nil { + in, out := &in.Limits, &out.Limits + *out = make(v1.ResourceList, len(*in)) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } + if in.Requests != nil { + in, out := &in.Requests, &out.Requests + *out = make(v1.ResourceList, len(*in)) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OADPResourceRequirements. +func (in *OADPResourceRequirements) DeepCopy() *OADPResourceRequirements { + if in == nil { + return nil + } + out := new(OADPResourceRequirements) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *PodConfig) DeepCopyInto(out *PodConfig) { *out = *in diff --git a/bundle/manifests/oadp.openshift.io_dataprotectionapplications.yaml b/bundle/manifests/oadp.openshift.io_dataprotectionapplications.yaml index 4698e052f9..89783f15b4 100644 --- a/bundle/manifests/oadp.openshift.io_dataprotectionapplications.yaml +++ b/bundle/manifests/oadp.openshift.io_dataprotectionapplications.yaml @@ -12,959 +12,1323 @@ spec: listKind: DataProtectionApplicationList plural: dataprotectionapplications shortNames: - - dpa + - dpa singular: dataprotectionapplication scope: Namespaced versions: - - name: v1alpha1 - schema: - openAPIV3Schema: - description: DataProtectionApplication is the Schema for the dpa API - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - description: DataProtectionApplicationSpec defines the desired state of Velero - properties: - backupImages: - description: backupImages is used to specify whether you want to deploy a registry for enabling backup and restore of images - type: boolean - backupLocations: - description: backupLocations defines the list of desired configuration to use for BackupStorageLocations - items: - description: BackupLocation defines the configuration for the DPA backup storage - properties: - bucket: - description: CloudStorageLocation defines BackupStorageLocation using bucket referenced by CloudStorage CR. - properties: - backupSyncPeriod: - description: backupSyncPeriod defines how frequently to sync backup API objects from object storage. A value of 0 disables sync. - nullable: true + - name: v1alpha1 + schema: + openAPIV3Schema: + description: DataProtectionApplication is the Schema for the dpa API + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: DataProtectionApplicationSpec defines the desired state of + Velero + properties: + backupImages: + description: backupImages is used to specify whether you want to deploy + a registry for enabling backup and restore of images + type: boolean + backupLocations: + description: backupLocations defines the list of desired configuration + to use for BackupStorageLocations + items: + description: BackupLocation defines the configuration for the DPA + backup storage + properties: + bucket: + description: CloudStorageLocation defines BackupStorageLocation + using bucket referenced by CloudStorage CR. + properties: + backupSyncPeriod: + description: backupSyncPeriod defines how frequently to + sync backup API objects from object storage. A value of + 0 disables sync. + nullable: true + type: string + caCert: + description: CACert defines a CA bundle to use when verifying + TLS connections to the provider. + format: byte + type: string + cloudStorageRef: + description: LocalObjectReference contains enough information + to let you locate the referenced object inside the same + namespace. + properties: + 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 + config: + additionalProperties: type: string - caCert: - description: CACert defines a CA bundle to use when verifying TLS connections to the provider. - format: byte + description: config is for provider-specific configuration + fields. + type: object + credential: + description: credential contains the credential information + intended to be used with this location + properties: + key: + description: The key of the secret to select from. Must + be a valid secret key. + type: string + 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 + optional: + description: Specify whether the Secret or its key must + be defined + type: boolean + required: + - key + type: object + default: + description: default indicates this location is the default + backup storage location. + type: boolean + prefix: + description: Prefix is the path inside a bucket to use for + Velero storage. Optional. + type: string + required: + - cloudStorageRef + type: object + name: + type: string + velero: + description: BackupStorageLocationSpec defines the desired state + of a Velero BackupStorageLocation + properties: + accessMode: + description: AccessMode defines the permissions for the + backup storage location. + enum: + - ReadOnly + - ReadWrite + type: string + backupSyncPeriod: + description: BackupSyncPeriod defines how frequently to + sync backup API objects from object storage. A value of + 0 disables sync. + nullable: true + type: string + config: + additionalProperties: type: string - cloudStorageRef: - description: LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace. - properties: - 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 + description: Config is for provider-specific configuration + fields. + type: object + credential: + description: Credential contains the credential information + intended to be used with this location + properties: + key: + description: The key of the secret to select from. Must + be a valid secret key. + type: string + 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 + optional: + description: Specify whether the Secret or its key must + be defined + type: boolean + required: + - key + type: object + default: + description: Default indicates this location is the default + backup storage location. + type: boolean + objectStorage: + description: ObjectStorageLocation specifies the settings + necessary to connect to a provider's object storage. + properties: + bucket: + description: Bucket is the bucket to use for object + storage. + type: string + caCert: + description: CACert defines a CA bundle to use when + verifying TLS connections to the provider. + format: byte + type: string + prefix: + description: Prefix is the path inside a bucket to use + for Velero storage. Optional. + type: string + required: + - bucket + type: object + provider: + description: Provider is the provider of the backup storage. + type: string + validationFrequency: + description: ValidationFrequency defines how frequently + to validate the corresponding object storage. A value + of 0 disables validation. + nullable: true + type: string + required: + - objectStorage + - provider + type: object + type: object + type: array + configuration: + description: configuration is used to configure the data protection + application's server config + properties: + nodeAgent: + description: NodeAgent is needed to allow selection between kopia + or restic + properties: + enable: + description: enable defines a boolean pointer whether we want + the daemonset to exist or not + type: boolean + podConfig: + description: Pod specific configuration + properties: + env: + description: env defines the list of environment variables + to be supplied to podSpec + items: + description: EnvVar represents an environment variable + present in a Container. + properties: + 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 + valueFrom: + description: Source for the environment variable's + value. Cannot be used if value is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + 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 + optional: + description: Specify whether the ConfigMap + or its key must be defined + type: boolean + required: + - key + type: object + fieldRef: + description: 'Selects a field of the pod: supports + metadata.name, metadata.namespace, `metadata.labels['''']`, + `metadata.annotations['''']`, spec.nodeName, + spec.serviceAccountName, status.hostIP, status.podIP, + status.podIPs.' + properties: + apiVersion: + description: Version of the schema the FieldPath + is written in terms of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to select + in the specified API version. + type: string + required: + - fieldPath + type: object + resourceFieldRef: + description: 'Selects a resource of the container: + only resources limits and requests (limits.cpu, + limits.memory, limits.ephemeral-storage, requests.cpu, + requests.memory and requests.ephemeral-storage) + are currently supported.' + properties: + containerName: + description: 'Container name: required for + volumes, optional for env vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output format + of the exposed resources, defaults to + "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource to select' + type: string + required: + - resource + type: object + secretKeyRef: + description: Selects a key of a secret in the + pod's namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + 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 + optional: + description: Specify whether the Secret + or its key must be defined + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + labels: + additionalProperties: + type: string + description: labels to add to pods type: object - config: + nodeSelector: additionalProperties: type: string - description: config is for provider-specific configuration fields. + description: nodeSelector defines the nodeSelector to + be supplied to podSpec type: object - credential: - description: credential contains the credential information intended to be used with this location + resourceAllocations: + description: resourceAllocations defines the CPU and Memory + resource allocations for the Pod + nullable: true properties: - key: - description: The key of the secret to select from. Must be a valid secret key. - type: string - 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 - optional: - description: Specify whether the Secret or its key must be defined - type: boolean - required: - - key + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum amount + of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + nullable: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: 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/' + nullable: true + type: object type: object - default: - description: default indicates this location is the default backup storage location. - type: boolean - prefix: - description: Prefix is the path inside a bucket to use for Velero storage. Optional. - type: string - required: - - cloudStorageRef + tolerations: + description: tolerations defines the list of tolerations + to be applied to daemonset + items: + description: The pod this Toleration is attached to + tolerates any taint that matches the triple + using the matching operator . + properties: + 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 type: object - name: + supplementalGroups: + description: supplementalGroups defines the linux groups to + be applied to the NodeAgent Pod + items: + format: int64 + type: integer + type: array + timeout: + description: timeout defines the NodeAgent timeout, default + value is 1h + type: string + uploaderType: + description: The type of uploader to transfer the data of + pod volumes, the supported values are 'restic' or 'kopia' + enum: + - restic + - kopia type: string - velero: - description: BackupStorageLocationSpec defines the desired state of a Velero BackupStorageLocation + required: + - uploaderType + type: object + restic: + description: (deprecation warning) ResticConfig is the configuration + for restic DaemonSet. restic is for backwards compatibility + and is replaced by the nodeAgent restic will be removed with + the OADP 1.4 + properties: + enable: + description: enable defines a boolean pointer whether we want + the daemonset to exist or not + type: boolean + podConfig: + description: Pod specific configuration properties: - accessMode: - description: AccessMode defines the permissions for the backup storage location. - enum: - - ReadOnly - - ReadWrite - type: string - backupSyncPeriod: - description: BackupSyncPeriod defines how frequently to sync backup API objects from object storage. A value of 0 disables sync. - nullable: true - type: string - config: + env: + description: env defines the list of environment variables + to be supplied to podSpec + items: + description: EnvVar represents an environment variable + present in a Container. + properties: + 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 + valueFrom: + description: Source for the environment variable's + value. Cannot be used if value is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + 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 + optional: + description: Specify whether the ConfigMap + or its key must be defined + type: boolean + required: + - key + type: object + fieldRef: + description: 'Selects a field of the pod: supports + metadata.name, metadata.namespace, `metadata.labels['''']`, + `metadata.annotations['''']`, spec.nodeName, + spec.serviceAccountName, status.hostIP, status.podIP, + status.podIPs.' + properties: + apiVersion: + description: Version of the schema the FieldPath + is written in terms of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to select + in the specified API version. + type: string + required: + - fieldPath + type: object + resourceFieldRef: + description: 'Selects a resource of the container: + only resources limits and requests (limits.cpu, + limits.memory, limits.ephemeral-storage, requests.cpu, + requests.memory and requests.ephemeral-storage) + are currently supported.' + properties: + containerName: + description: 'Container name: required for + volumes, optional for env vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output format + of the exposed resources, defaults to + "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource to select' + type: string + required: + - resource + type: object + secretKeyRef: + description: Selects a key of a secret in the + pod's namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + 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 + optional: + description: Specify whether the Secret + or its key must be defined + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + labels: additionalProperties: type: string - description: Config is for provider-specific configuration fields. - type: object - credential: - description: Credential contains the credential information intended to be used with this location - properties: - key: - description: The key of the secret to select from. Must be a valid secret key. - type: string - 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 - optional: - description: Specify whether the Secret or its key must be defined - type: boolean - required: - - key + description: labels to add to pods type: object - default: - description: Default indicates this location is the default backup storage location. - type: boolean - objectStorage: - description: ObjectStorageLocation specifies the settings necessary to connect to a provider's object storage. - properties: - bucket: - description: Bucket is the bucket to use for object storage. - type: string - caCert: - description: CACert defines a CA bundle to use when verifying TLS connections to the provider. - format: byte - type: string - prefix: - description: Prefix is the path inside a bucket to use for Velero storage. Optional. - type: string - required: - - bucket + nodeSelector: + additionalProperties: + type: string + description: nodeSelector defines the nodeSelector to + be supplied to podSpec type: object - provider: - description: Provider is the provider of the backup storage. - type: string - validationFrequency: - description: ValidationFrequency defines how frequently to validate the corresponding object storage. A value of 0 disables validation. + resourceAllocations: + description: resourceAllocations defines the CPU and Memory + resource allocations for the Pod nullable: true - type: string - required: - - objectStorage - - provider - type: object - type: object - type: array - configuration: - description: configuration is used to configure the data protection application's server config - properties: - nodeAgent: - description: NodeAgent is needed to allow selection between kopia or restic - properties: - enable: - description: enable defines a boolean pointer whether we want the daemonset to exist or not - type: boolean - podConfig: - description: Pod specific configuration - properties: - env: - description: env defines the list of environment variables to be supplied to podSpec - items: - description: EnvVar represents an environment variable present in a Container. - properties: - 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 - valueFrom: - description: Source for the environment variable's value. Cannot be used if value is not empty. - properties: - configMapKeyRef: - description: Selects a key of a ConfigMap. - properties: - key: - description: The key to select. - type: string - 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 - optional: - description: Specify whether the ConfigMap or its key must be defined - type: boolean - required: - - key - type: object - fieldRef: - description: 'Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['''']`, `metadata.annotations['''']`, spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.' - properties: - apiVersion: - description: Version of the schema the FieldPath is written in terms of, defaults to "v1". - type: string - fieldPath: - description: Path of the field to select in the specified API version. - type: string - required: - - fieldPath - type: object - resourceFieldRef: - description: 'Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.' - properties: - containerName: - description: 'Container name: required for volumes, optional for env vars' - type: string - divisor: - anyOf: - - type: integer - - type: string - description: Specifies the output format of the exposed resources, defaults to "1" - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - description: 'Required: resource to select' - type: string - required: - - resource - type: object - secretKeyRef: - description: Selects a key of a secret in the pod's namespace - properties: - key: - description: The key of the secret to select from. Must be a valid secret key. - type: string - 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 - optional: - description: Specify whether the Secret or its key must be defined - type: boolean - required: - - key - type: object - type: object - required: - - name + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum amount + of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + nullable: true type: object - type: array - labels: - additionalProperties: - type: string - description: labels to add to pods - type: object - nodeSelector: - additionalProperties: - type: string - description: nodeSelector defines the nodeSelector to be supplied to podSpec - type: object - resourceAllocations: - description: resourceAllocations defines the CPU and Memory resource allocations for the Pod - nullable: true + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: 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/' + nullable: true + type: object + type: object + tolerations: + description: tolerations defines the list of tolerations + to be applied to daemonset + items: + description: The pod this Toleration is attached to + tolerates any taint that matches the triple + using the matching operator . properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: 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: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: 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 + 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 - tolerations: - description: tolerations defines the list of tolerations to be applied to daemonset - items: - description: The pod this Toleration is attached to tolerates any taint that matches the triple using the matching operator . - properties: - 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 - type: object - supplementalGroups: - description: supplementalGroups defines the linux groups to be applied to the NodeAgent Pod - items: + type: array + type: object + supplementalGroups: + description: supplementalGroups defines the linux groups to + be applied to the NodeAgent Pod + items: + format: int64 + type: integer + type: array + timeout: + description: timeout defines the NodeAgent timeout, default + value is 1h + type: string + type: object + velero: + properties: + args: + description: Velero args are settings to customize velero + server arguments. Overrides values in other fields. + properties: + add_dir_header: + description: If true, adds the file directory to the header + of the log messages + type: boolean + alsologtostderr: + description: log to standard error as well as files (no + effect when -logtostderr=true) + type: boolean + backup-sync-period: + description: How often to ensure all Velero backups in + object storage exist as Backup API objects in the cluster. + This is the default sync period if none is explicitly + specified for a backup storage location. format: int64 type: integer - type: array - timeout: - description: timeout defines the NodeAgent timeout, default value is 1h - type: string - uploaderType: - description: The type of uploader to transfer the data of pod volumes, the supported values are 'restic' or 'kopia' - enum: - - restic - - kopia - type: string - required: - - uploaderType - type: object - restic: - description: (deprecation warning) ResticConfig is the configuration for restic DaemonSet. restic is for backwards compatibility and is replaced by the nodeAgent restic will be removed with the OADP 1.4 - properties: - enable: - description: enable defines a boolean pointer whether we want the daemonset to exist or not - type: boolean - podConfig: - description: Pod specific configuration - properties: - env: - description: env defines the list of environment variables to be supplied to podSpec - items: - description: EnvVar represents an environment variable present in a Container. - properties: - 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 - valueFrom: - description: Source for the environment variable's value. Cannot be used if value is not empty. - properties: - configMapKeyRef: - description: Selects a key of a ConfigMap. - properties: - key: - description: The key to select. - type: string - 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 - optional: - description: Specify whether the ConfigMap or its key must be defined - type: boolean - required: - - key - type: object - fieldRef: - description: 'Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['''']`, `metadata.annotations['''']`, spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.' - properties: - apiVersion: - description: Version of the schema the FieldPath is written in terms of, defaults to "v1". - type: string - fieldPath: - description: Path of the field to select in the specified API version. - type: string - required: - - fieldPath - type: object - resourceFieldRef: - description: 'Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.' - properties: - containerName: - description: 'Container name: required for volumes, optional for env vars' - type: string - divisor: - anyOf: - - type: integer - - type: string - description: Specifies the output format of the exposed resources, defaults to "1" - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - description: 'Required: resource to select' - type: string - required: - - resource - type: object - secretKeyRef: - description: Selects a key of a secret in the pod's namespace - properties: - key: - description: The key of the secret to select from. Must be a valid secret key. - type: string - 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 - optional: - description: Specify whether the Secret or its key must be defined - type: boolean - required: - - key - type: object - type: object - required: - - name - type: object - type: array - labels: - additionalProperties: - type: string - description: labels to add to pods - type: object - nodeSelector: - additionalProperties: - type: string - description: nodeSelector defines the nodeSelector to be supplied to podSpec - type: object - resourceAllocations: - description: resourceAllocations defines the CPU and Memory resource allocations for the Pod - nullable: true - properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - nullable: true - description: 'Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' - type: object - nullable: true - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - nullable: 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 - nullable: true - type: object - tolerations: - description: tolerations defines the list of tolerations to be applied to daemonset - items: - description: The pod this Toleration is attached to tolerates any taint that matches the triple using the matching operator . - properties: - 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 - type: object - supplementalGroups: - description: supplementalGroups defines the linux groups to be applied to the NodeAgent Pod - items: + client-burst: + description: Maximum number of requests by the server + to the Kubernetes API in a short period of time. + type: integer + client-page-size: + description: Page size of requests by the server to the + Kubernetes API when listing objects during a backup. + Set to 0 to disable paging. + type: integer + client-qps: + description: Maximum number of requests per second by + the server to the Kubernetes API once the burst limit + has been reached. this will be validated as a valid + float32 + type: string + colorized: + description: Show colored output in TTY + type: boolean + default-backup-ttl: + description: default 720h0m0s format: int64 type: integer - type: array - timeout: - description: timeout defines the NodeAgent timeout, default value is 1h - type: string - type: object - velero: - properties: - args: - description: Velero args are settings to customize velero server arguments. Overrides values in other fields. - properties: - add_dir_header: - description: If true, adds the file directory to the header of the log messages - type: boolean - alsologtostderr: - description: log to standard error as well as files (no effect when -logtostderr=true) - type: boolean - backup-sync-period: - description: How often to ensure all Velero backups in object storage exist as Backup API objects in the cluster. This is the default sync period if none is explicitly specified for a backup storage location. - format: int64 - type: integer - client-burst: - description: Maximum number of requests by the server to the Kubernetes API in a short period of time. - type: integer - client-page-size: - description: Page size of requests by the server to the Kubernetes API when listing objects during a backup. Set to 0 to disable paging. - type: integer - client-qps: - description: Maximum number of requests per second by the server to the Kubernetes API once the burst limit has been reached. this will be validated as a valid float32 - type: string - colorized: - description: Show colored output in TTY - type: boolean - default-backup-ttl: - description: default 720h0m0s - format: int64 - type: integer - default-item-operation-timeout: - description: How long to wait on asynchronous BackupItemActions and RestoreItemActions to complete before timing out. (default 1h0m0s) - format: int64 - type: integer - default-repo-maintain-frequency: - description: How often 'maintain' is run for backup repositories by default. - format: int64 - type: integer - default-volumes-to-fs-backup: - description: Backup all volumes with pod volume file system backup by default. - type: boolean - disabled-controllers: - description: List of controllers to disable on startup. Valid values are backup,backup-operations,backup-deletion,backup-finalizer,backup-sync,download-request,gc,backup-repo,restore,restore-operations,schedule,server-status-request - enum: - - backup - - backup-operations - - backup-deletion - - backup-finalizer - - backup-sync - - download-request - - gc - - backup-repo - - restore - - restore-operations - - schedule - - server-status-request - items: - type: string - type: array - fs-backup-timeout: - description: How long pod volume file system backups/restores should be allowed to run before timing out. (default 4h0m0s) - format: int64 - type: integer - garbage-collection-frequency: - description: How long to wait by default before backups can be garbage collected. (default 720h0m0s) - format: int64 - type: integer - item-operation-sync-frequency: - description: How often to check status on backup/restore operations after backup/restore processing. - format: int64 - type: integer - log-format: - description: The format for log output. Valid values are text, json. (default text) - enum: - - text - - json - type: string - log_backtrace_at: - description: when logging hits line file:N, emit a stack trace - type: string - log_dir: - description: If non-empty, write log files in this directory (no effect when -logtostderr=true) - type: string - log_file: - description: If non-empty, use this log file (no effect when -logtostderr=true) - type: string - log_file_max_size: - description: Defines the maximum size a log file can grow to (no effect when -logtostderr=true). Unit is megabytes. If the value is 0, the maximum file size is unlimited. (default 1800) - format: int64 - minimum: 0 - type: integer - logtostderr: - description: 'Boolean flags. Not handled atomically because the flag.Value interface does not let us avoid the =true, and that shorthand is necessary for compatibility. TODO: does this matter enough to fix? Seems unlikely.' - type: boolean - max-concurrent-k8s-connections: - description: Max concurrent connections number that Velero can create with kube-apiserver. Default is 30. (default 30) - type: integer - metrics-address: - description: The address to expose prometheus metrics - type: string - one_output: - description: If true, only write logs to their native severity level (vs also writing to each lower severity level; no effect when -logtostderr=true) - type: boolean - profiler-address: - description: The address to expose the pprof profiler. - type: string - resource-timeout: - description: How long to wait for resource processes which are not covered by other specific timeout parameters. Default is 10 minutes. (default 10m0s) - format: int64 - type: integer - restore-resource-priorities: - description: Desired order of resource restores, the priority list contains two parts which are split by "-" element. The resources before "-" element are restored first as high priorities, the resources after "-" element are restored last as low priorities, and any resource not in the list will be restored alphabetically between the high and low priorities. (default securitycontextconstraints,customresourcedefinitions,namespaces,managedcluster.cluster.open-cluster-management.io,managedcluster.clusterview.open-cluster-management.io,klusterletaddonconfig.agent.open-cluster-management.io,managedclusteraddon.addon.open-cluster-management.io,storageclasses,volumesnapshotclass.snapshot.storage.k8s.io,volumesnapshotcontents.snapshot.storage.k8s.io,volumesnapshots.snapshot.storage.k8s.io,datauploads.velero.io,persistentvolumes,persistentvolumeclaims,serviceaccounts,secrets,configmaps,limitranges,pods,replicasets.apps,clusterclasses.cluster.x-k8s.io,endpoints,services,-,clusterbootstraps.run.tanzu.vmware.com,clusters.cluster.x-k8s.io,clusterresourcesets.addons.cluster.x-k8s.io) - type: string - skip_headers: - description: If true, avoid header prefixes in the log messages - type: boolean - skip_log_headers: - description: If true, avoid headers when opening log files (no effect when -logtostderr=true) - type: boolean - stderrthreshold: - description: logs at or above this threshold go to stderr when writing to files and stderr (no effect when -logtostderr=true or -alsologtostderr=false) (default 2) - type: integer - store-validation-frequency: - description: How often to verify if the storage is valid. Optional. Set this to `0s` to disable sync. Default 1 minute. - format: int64 - type: integer - terminating-resource-timeout: - description: How long to wait on persistent volumes and namespaces to terminate during a restore before timing out. - format: int64 - type: integer - v: - description: number for the log level verbosity - type: integer - vmodule: - description: comma-separated list of pattern=N settings for file-filtered logging + default-item-operation-timeout: + description: How long to wait on asynchronous BackupItemActions + and RestoreItemActions to complete before timing out. + (default 1h0m0s) + format: int64 + type: integer + default-repo-maintain-frequency: + description: How often 'maintain' is run for backup repositories + by default. + format: int64 + type: integer + default-volumes-to-fs-backup: + description: Backup all volumes with pod volume file system + backup by default. + type: boolean + disabled-controllers: + description: List of controllers to disable on startup. + Valid values are backup,backup-operations,backup-deletion,backup-finalizer,backup-sync,download-request,gc,backup-repo,restore,restore-operations,schedule,server-status-request + enum: + - backup + - backup-operations + - backup-deletion + - backup-finalizer + - backup-sync + - download-request + - gc + - backup-repo + - restore + - restore-operations + - schedule + - server-status-request + items: type: string - type: object - customPlugins: - description: customPlugins defines the custom plugin to be installed with Velero - items: - properties: - image: - type: string - name: - type: string - required: - - image - - name - type: object - type: array - defaultItemOperationTimeout: - description: How long to wait on asynchronous BackupItemActions and RestoreItemActions to complete before timing out. Default value is 1h. - type: string - defaultPlugins: - items: + type: array + fs-backup-timeout: + description: How long pod volume file system backups/restores + should be allowed to run before timing out. (default + 4h0m0s) + format: int64 + type: integer + garbage-collection-frequency: + description: How long to wait by default before backups + can be garbage collected. (default 720h0m0s) + format: int64 + type: integer + item-operation-sync-frequency: + description: How often to check status on backup/restore + operations after backup/restore processing. + format: int64 + type: integer + log-format: + description: The format for log output. Valid values are + text, json. (default text) enum: - - aws - - gcp - - azure - - csi - - openshift - - kubevirt + - text + - json type: string - type: array - featureFlags: - description: featureFlags defines the list of features to enable for Velero instance - items: + log_backtrace_at: + description: when logging hits line file:N, emit a stack + trace type: string - type: array - itemOperationSyncFrequency: - description: How often to check status on async backup/restore operations after backup processing. Default value is 2m. - type: string - logLevel: - description: Velero server’s log level (use debug for the most logging, leave unset for velero default) - enum: - - trace - - debug - - info - - warning - - error - - fatal - - panic - type: string - noDefaultBackupLocation: - description: If you need to install Velero without a default backup storage location noDefaultBackupLocation flag is required for confirmation - type: boolean - podConfig: - description: Pod specific configuration + log_dir: + description: If non-empty, write log files in this directory + (no effect when -logtostderr=true) + type: string + log_file: + description: If non-empty, use this log file (no effect + when -logtostderr=true) + type: string + log_file_max_size: + description: Defines the maximum size a log file can grow + to (no effect when -logtostderr=true). Unit is megabytes. + If the value is 0, the maximum file size is unlimited. + (default 1800) + format: int64 + minimum: 0 + type: integer + logtostderr: + description: 'Boolean flags. Not handled atomically because + the flag.Value interface does not let us avoid the =true, + and that shorthand is necessary for compatibility. TODO: + does this matter enough to fix? Seems unlikely.' + type: boolean + max-concurrent-k8s-connections: + description: Max concurrent connections number that Velero + can create with kube-apiserver. Default is 30. (default + 30) + type: integer + metrics-address: + description: The address to expose prometheus metrics + type: string + one_output: + description: If true, only write logs to their native + severity level (vs also writing to each lower severity + level; no effect when -logtostderr=true) + type: boolean + profiler-address: + description: The address to expose the pprof profiler. + type: string + resource-timeout: + description: How long to wait for resource processes which + are not covered by other specific timeout parameters. + Default is 10 minutes. (default 10m0s) + format: int64 + type: integer + restore-resource-priorities: + description: Desired order of resource restores, the priority + list contains two parts which are split by "-" element. + The resources before "-" element are restored first + as high priorities, the resources after "-" element + are restored last as low priorities, and any resource + not in the list will be restored alphabetically between + the high and low priorities. (default securitycontextconstraints,customresourcedefinitions,namespaces,managedcluster.cluster.open-cluster-management.io,managedcluster.clusterview.open-cluster-management.io,klusterletaddonconfig.agent.open-cluster-management.io,managedclusteraddon.addon.open-cluster-management.io,storageclasses,volumesnapshotclass.snapshot.storage.k8s.io,volumesnapshotcontents.snapshot.storage.k8s.io,volumesnapshots.snapshot.storage.k8s.io,datauploads.velero.io,persistentvolumes,persistentvolumeclaims,serviceaccounts,secrets,configmaps,limitranges,pods,replicasets.apps,clusterclasses.cluster.x-k8s.io,endpoints,services,-,clusterbootstraps.run.tanzu.vmware.com,clusters.cluster.x-k8s.io,clusterresourcesets.addons.cluster.x-k8s.io) + type: string + skip_headers: + description: If true, avoid header prefixes in the log + messages + type: boolean + skip_log_headers: + description: If true, avoid headers when opening log files + (no effect when -logtostderr=true) + type: boolean + stderrthreshold: + description: logs at or above this threshold go to stderr + when writing to files and stderr (no effect when -logtostderr=true + or -alsologtostderr=false) (default 2) + type: integer + store-validation-frequency: + description: How often to verify if the storage is valid. + Optional. Set this to `0s` to disable sync. Default + 1 minute. + format: int64 + type: integer + terminating-resource-timeout: + description: How long to wait on persistent volumes and + namespaces to terminate during a restore before timing + out. + format: int64 + type: integer + v: + description: number for the log level verbosity + type: integer + vmodule: + description: comma-separated list of pattern=N settings + for file-filtered logging + type: string + type: object + customPlugins: + description: customPlugins defines the custom plugin to be + installed with Velero + items: properties: - env: - description: env defines the list of environment variables to be supplied to podSpec - items: - description: EnvVar represents an environment variable present in a Container. - properties: - 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 - valueFrom: - description: Source for the environment variable's value. Cannot be used if value is not empty. - properties: - configMapKeyRef: - description: Selects a key of a ConfigMap. - properties: - key: - description: The key to select. - type: string - 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 - optional: - description: Specify whether the ConfigMap or its key must be defined - type: boolean - required: - - key - type: object - fieldRef: - description: 'Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['''']`, `metadata.annotations['''']`, spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.' - properties: - apiVersion: - description: Version of the schema the FieldPath is written in terms of, defaults to "v1". - type: string - fieldPath: - description: Path of the field to select in the specified API version. - type: string - required: - - fieldPath - type: object - resourceFieldRef: - description: 'Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.' - properties: - containerName: - description: 'Container name: required for volumes, optional for env vars' - type: string - divisor: - anyOf: - - type: integer - - type: string - description: Specifies the output format of the exposed resources, defaults to "1" - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - description: 'Required: resource to select' - type: string - required: - - resource - type: object - secretKeyRef: - description: Selects a key of a secret in the pod's namespace - properties: - key: - description: The key of the secret to select from. Must be a valid secret key. - type: string - 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 - optional: - description: Specify whether the Secret or its key must be defined - type: boolean - required: - - key - type: object - type: object - required: - - name - type: object - type: array - labels: - additionalProperties: - type: string - description: labels to add to pods - type: object - nodeSelector: - additionalProperties: - type: string - description: nodeSelector defines the nodeSelector to be supplied to podSpec - type: object - resourceAllocations: - description: resourceAllocations defines the CPU and Memory resource allocations for the Pod - nullable: true - properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - nullable: true - description: 'Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' - type: object - nullable: true - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - nullable: 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 - nullable: true - type: object - tolerations: - description: tolerations defines the list of tolerations to be applied to daemonset - items: - description: The pod this Toleration is attached to tolerates any taint that matches the triple using the matching operator . - properties: - 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 + image: + type: string + name: + type: string + required: + - image + - name type: object - resourceTimeout: - description: resourceTimeout defines how long to wait for several Velero resources before timeout occurs, such as Velero CRD availability, volumeSnapshot deletion, and repo availability. Default is 10m + type: array + defaultItemOperationTimeout: + description: How long to wait on asynchronous BackupItemActions + and RestoreItemActions to complete before timing out. Default + value is 1h. + type: string + defaultPlugins: + items: + enum: + - aws + - gcp + - azure + - csi + - openshift + - kubevirt type: string - restoreResourcesVersionPriority: - description: restoreResourceVersionPriority represents a configmap that will be created if defined for use in conjunction with EnableAPIGroupVersions feature flag Defining this field automatically add EnableAPIGroupVersions to the velero server feature flag + type: array + featureFlags: + description: featureFlags defines the list of features to + enable for Velero instance + items: type: string - type: object - type: object - features: - description: features defines the configuration for the DPA to enable the OADP tech preview features - type: object - podAnnotations: - additionalProperties: - type: string - description: add annotations to pods deployed by operator - type: object - podDnsConfig: - description: podDnsConfig defines the DNS parameters of a pod in addition to those generated from DNSPolicy. https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-dns-config - properties: - 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: + type: array + itemOperationSyncFrequency: + description: How often to check status on async backup/restore + operations after backup processing. Default value is 2m. 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: - description: PodDNSConfigOption defines DNS resolver options of a pod. - properties: - 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: + logLevel: + description: Velero server’s log level (use debug for the + most logging, leave unset for velero default) + enum: + - trace + - debug + - info + - warning + - error + - fatal + - panic type: string - type: array - type: object - podDnsPolicy: - description: podDnsPolicy defines how a pod's DNS will be configured. https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-s-dns-policy - type: string - snapshotLocations: - description: snapshotLocations defines the list of desired configuration to use for VolumeSnapshotLocations - items: - description: SnapshotLocation defines the configuration for the DPA snapshot store - properties: - velero: - description: VolumeSnapshotLocationSpec defines the specification for a Velero VolumeSnapshotLocation. + noDefaultBackupLocation: + description: If you need to install Velero without a default + backup storage location noDefaultBackupLocation flag is + required for confirmation + type: boolean + podConfig: + description: Pod specific configuration properties: - config: + env: + description: env defines the list of environment variables + to be supplied to podSpec + items: + description: EnvVar represents an environment variable + present in a Container. + properties: + 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 + valueFrom: + description: Source for the environment variable's + value. Cannot be used if value is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + 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 + optional: + description: Specify whether the ConfigMap + or its key must be defined + type: boolean + required: + - key + type: object + fieldRef: + description: 'Selects a field of the pod: supports + metadata.name, metadata.namespace, `metadata.labels['''']`, + `metadata.annotations['''']`, spec.nodeName, + spec.serviceAccountName, status.hostIP, status.podIP, + status.podIPs.' + properties: + apiVersion: + description: Version of the schema the FieldPath + is written in terms of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to select + in the specified API version. + type: string + required: + - fieldPath + type: object + resourceFieldRef: + description: 'Selects a resource of the container: + only resources limits and requests (limits.cpu, + limits.memory, limits.ephemeral-storage, requests.cpu, + requests.memory and requests.ephemeral-storage) + are currently supported.' + properties: + containerName: + description: 'Container name: required for + volumes, optional for env vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output format + of the exposed resources, defaults to + "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource to select' + type: string + required: + - resource + type: object + secretKeyRef: + description: Selects a key of a secret in the + pod's namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + 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 + optional: + description: Specify whether the Secret + or its key must be defined + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + labels: + additionalProperties: + type: string + description: labels to add to pods + type: object + nodeSelector: additionalProperties: type: string - description: Config is for provider-specific configuration fields. + description: nodeSelector defines the nodeSelector to + be supplied to podSpec type: object - credential: - description: Credential contains the credential information intended to be used with this location + resourceAllocations: + description: resourceAllocations defines the CPU and Memory + resource allocations for the Pod + nullable: true properties: - key: - description: The key of the secret to select from. Must be a valid secret key. - type: string - 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 - optional: - description: Specify whether the Secret or its key must be defined - type: boolean - required: - - key + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum amount + of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + nullable: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: 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/' + nullable: true + type: object type: object - provider: - description: Provider is the provider of the volume storage. - type: string - required: - - provider + tolerations: + description: tolerations defines the list of tolerations + to be applied to daemonset + items: + description: The pod this Toleration is attached to + tolerates any taint that matches the triple + using the matching operator . + properties: + 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 type: object - required: - - velero - type: object - type: array - unsupportedOverrides: - additionalProperties: - type: string - description: 'unsupportedOverrides can be used to override images used in deployments. Available keys are: - veleroImageFqin - awsPluginImageFqin - openshiftPluginImageFqin - azurePluginImageFqin - gcpPluginImageFqin - csiPluginImageFqin - resticRestoreImageFqin - kubevirtPluginImageFqin - operator-type' - enum: - - veleroImageFqin - - awsPluginImageFqin - - openshiftPluginImageFqin - - azurePluginImageFqin - - gcpPluginImageFqin - - csiPluginImageFqin - - resticRestoreImageFqin - - kubevirtPluginImageFqin - - operator-type - type: object - required: - - configuration - type: object - status: - description: DataProtectionApplicationStatus defines the observed state of DataProtectionApplication - properties: - conditions: - items: - description: "Condition contains details for one aspect of the current state of this API Resource. --- This struct is intended for direct use as an array at the field path .status.conditions. For example, \n \ttype FooStatus struct{ \t // Represents the observations of a foo's current state. \t // Known .status.conditions.type are: \"Available\", \"Progressing\", and \"Degraded\" \t // +patchMergeKey=type \t // +patchStrategy=merge \t // +listType=map \t // +listMapKey=type \t Conditions []metav1.Condition `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` \n \t // other fields \t}" - properties: - lastTransitionTime: - description: lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. - format: date-time - type: string - message: - description: message is a human readable message indicating details about the transition. This may be an empty string. - maxLength: 32768 - type: string - observedGeneration: - description: observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance. - format: int64 - minimum: 0 - type: integer - reason: - description: reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty. - maxLength: 1024 - minLength: 1 - pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ - type: string - status: - description: status of the condition, one of True, False, Unknown. - enum: - - "True" - - "False" - - Unknown + resourceTimeout: + description: resourceTimeout defines how long to wait for + several Velero resources before timeout occurs, such as + Velero CRD availability, volumeSnapshot deletion, and repo + availability. Default is 10m type: string - type: - description: type of condition in CamelCase or in foo.example.com/CamelCase. --- Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) - maxLength: 316 - pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + restoreResourcesVersionPriority: + description: restoreResourceVersionPriority represents a configmap + that will be created if defined for use in conjunction with + EnableAPIGroupVersions feature flag Defining this field + automatically add EnableAPIGroupVersions to the velero server + feature flag type: string - required: - - lastTransitionTime - - message - - reason - - status - - type type: object - type: array - type: object - type: object - served: true - storage: true - subresources: - status: {} + type: object + features: + description: features defines the configuration for the DPA to enable + the OADP tech preview features + type: object + podAnnotations: + additionalProperties: + type: string + description: add annotations to pods deployed by operator + type: object + podDnsConfig: + description: podDnsConfig defines the DNS parameters of a pod in addition + to those generated from DNSPolicy. https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-dns-config + properties: + 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: + 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: + description: PodDNSConfigOption defines DNS resolver options + of a pod. + properties: + 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: + type: string + type: array + type: object + podDnsPolicy: + description: podDnsPolicy defines how a pod's DNS will be configured. + https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-s-dns-policy + type: string + snapshotLocations: + description: snapshotLocations defines the list of desired configuration + to use for VolumeSnapshotLocations + items: + description: SnapshotLocation defines the configuration for the + DPA snapshot store + properties: + velero: + description: VolumeSnapshotLocationSpec defines the specification + for a Velero VolumeSnapshotLocation. + properties: + config: + additionalProperties: + type: string + description: Config is for provider-specific configuration + fields. + type: object + credential: + description: Credential contains the credential information + intended to be used with this location + properties: + key: + description: The key of the secret to select from. Must + be a valid secret key. + type: string + 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 + optional: + description: Specify whether the Secret or its key must + be defined + type: boolean + required: + - key + type: object + provider: + description: Provider is the provider of the volume storage. + type: string + required: + - provider + type: object + required: + - velero + type: object + type: array + unsupportedOverrides: + additionalProperties: + type: string + description: 'unsupportedOverrides can be used to override images + used in deployments. Available keys are: - veleroImageFqin - + awsPluginImageFqin - openshiftPluginImageFqin - azurePluginImageFqin - + gcpPluginImageFqin - csiPluginImageFqin - resticRestoreImageFqin - + kubevirtPluginImageFqin - operator-type' + enum: + - veleroImageFqin + - awsPluginImageFqin + - openshiftPluginImageFqin + - azurePluginImageFqin + - gcpPluginImageFqin + - csiPluginImageFqin + - resticRestoreImageFqin + - kubevirtPluginImageFqin + - operator-type + type: object + required: + - configuration + type: object + status: + description: DataProtectionApplicationStatus defines the observed state + of DataProtectionApplication + properties: + conditions: + items: + description: "Condition contains details for one aspect of the current + state of this API Resource. --- This struct is intended for direct + use as an array at the field path .status.conditions. For example, + \n \ttype FooStatus struct{ \t // Represents the observations + of a foo's current state. \t // Known .status.conditions.type + are: \"Available\", \"Progressing\", and \"Degraded\" \t // + +patchMergeKey=type \t // +patchStrategy=merge \t // +listType=map + \t // +listMapKey=type \t Conditions []metav1.Condition + `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" + protobuf:\"bytes,1,rep,name=conditions\"` \n \t // other fields + \t}" + properties: + lastTransitionTime: + description: lastTransitionTime is the last time the condition + transitioned from one status to another. This should be when + the underlying condition changed. If that is not known, then + using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: message is a human readable message indicating + details about the transition. This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: observedGeneration represents the .metadata.generation + that the condition was set based upon. For instance, if .metadata.generation + is currently 12, but the .status.conditions[x].observedGeneration + is 9, the condition is out of date with respect to the current + state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: reason contains a programmatic identifier indicating + the reason for the condition's last transition. Producers + of specific condition types may define expected values and + meanings for this field, and whether the values are considered + a guaranteed API. The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + --- Many .condition.type values are consistent across resources + like Available, but because arbitrary conditions can be useful + (see .node.status.conditions), the ability to deconflict is + important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + type: object + type: object + served: true + storage: true + subresources: + status: {} status: acceptedNames: kind: "" diff --git a/config/crd/bases/oadp.openshift.io_dataprotectionapplications.yaml b/config/crd/bases/oadp.openshift.io_dataprotectionapplications.yaml index 4698e052f9..daddfec920 100644 --- a/config/crd/bases/oadp.openshift.io_dataprotectionapplications.yaml +++ b/config/crd/bases/oadp.openshift.io_dataprotectionapplications.yaml @@ -1,3 +1,5 @@ + +--- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: @@ -12,959 +14,1323 @@ spec: listKind: DataProtectionApplicationList plural: dataprotectionapplications shortNames: - - dpa + - dpa singular: dataprotectionapplication scope: Namespaced versions: - - name: v1alpha1 - schema: - openAPIV3Schema: - description: DataProtectionApplication is the Schema for the dpa API - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - description: DataProtectionApplicationSpec defines the desired state of Velero - properties: - backupImages: - description: backupImages is used to specify whether you want to deploy a registry for enabling backup and restore of images - type: boolean - backupLocations: - description: backupLocations defines the list of desired configuration to use for BackupStorageLocations - items: - description: BackupLocation defines the configuration for the DPA backup storage - properties: - bucket: - description: CloudStorageLocation defines BackupStorageLocation using bucket referenced by CloudStorage CR. - properties: - backupSyncPeriod: - description: backupSyncPeriod defines how frequently to sync backup API objects from object storage. A value of 0 disables sync. - nullable: true + - name: v1alpha1 + schema: + openAPIV3Schema: + description: DataProtectionApplication is the Schema for the dpa API + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: DataProtectionApplicationSpec defines the desired state of + Velero + properties: + backupImages: + description: backupImages is used to specify whether you want to deploy + a registry for enabling backup and restore of images + type: boolean + backupLocations: + description: backupLocations defines the list of desired configuration + to use for BackupStorageLocations + items: + description: BackupLocation defines the configuration for the DPA + backup storage + properties: + bucket: + description: CloudStorageLocation defines BackupStorageLocation + using bucket referenced by CloudStorage CR. + properties: + backupSyncPeriod: + description: backupSyncPeriod defines how frequently to + sync backup API objects from object storage. A value of + 0 disables sync. + nullable: true + type: string + caCert: + description: CACert defines a CA bundle to use when verifying + TLS connections to the provider. + format: byte + type: string + cloudStorageRef: + description: LocalObjectReference contains enough information + to let you locate the referenced object inside the same + namespace. + properties: + 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 + config: + additionalProperties: type: string - caCert: - description: CACert defines a CA bundle to use when verifying TLS connections to the provider. - format: byte + description: config is for provider-specific configuration + fields. + type: object + credential: + description: credential contains the credential information + intended to be used with this location + properties: + key: + description: The key of the secret to select from. Must + be a valid secret key. + type: string + 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 + optional: + description: Specify whether the Secret or its key must + be defined + type: boolean + required: + - key + type: object + default: + description: default indicates this location is the default + backup storage location. + type: boolean + prefix: + description: Prefix is the path inside a bucket to use for + Velero storage. Optional. + type: string + required: + - cloudStorageRef + type: object + name: + type: string + velero: + description: BackupStorageLocationSpec defines the desired state + of a Velero BackupStorageLocation + properties: + accessMode: + description: AccessMode defines the permissions for the + backup storage location. + enum: + - ReadOnly + - ReadWrite + type: string + backupSyncPeriod: + description: BackupSyncPeriod defines how frequently to + sync backup API objects from object storage. A value of + 0 disables sync. + nullable: true + type: string + config: + additionalProperties: type: string - cloudStorageRef: - description: LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace. - properties: - 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 + description: Config is for provider-specific configuration + fields. + type: object + credential: + description: Credential contains the credential information + intended to be used with this location + properties: + key: + description: The key of the secret to select from. Must + be a valid secret key. + type: string + 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 + optional: + description: Specify whether the Secret or its key must + be defined + type: boolean + required: + - key + type: object + default: + description: Default indicates this location is the default + backup storage location. + type: boolean + objectStorage: + description: ObjectStorageLocation specifies the settings + necessary to connect to a provider's object storage. + properties: + bucket: + description: Bucket is the bucket to use for object + storage. + type: string + caCert: + description: CACert defines a CA bundle to use when + verifying TLS connections to the provider. + format: byte + type: string + prefix: + description: Prefix is the path inside a bucket to use + for Velero storage. Optional. + type: string + required: + - bucket + type: object + provider: + description: Provider is the provider of the backup storage. + type: string + validationFrequency: + description: ValidationFrequency defines how frequently + to validate the corresponding object storage. A value + of 0 disables validation. + nullable: true + type: string + required: + - objectStorage + - provider + type: object + type: object + type: array + configuration: + description: configuration is used to configure the data protection + application's server config + properties: + nodeAgent: + description: NodeAgent is needed to allow selection between kopia + or restic + properties: + enable: + description: enable defines a boolean pointer whether we want + the daemonset to exist or not + type: boolean + podConfig: + description: Pod specific configuration + properties: + env: + description: env defines the list of environment variables + to be supplied to podSpec + items: + description: EnvVar represents an environment variable + present in a Container. + properties: + 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 + valueFrom: + description: Source for the environment variable's + value. Cannot be used if value is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + 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 + optional: + description: Specify whether the ConfigMap + or its key must be defined + type: boolean + required: + - key + type: object + fieldRef: + description: 'Selects a field of the pod: supports + metadata.name, metadata.namespace, `metadata.labels['''']`, + `metadata.annotations['''']`, spec.nodeName, + spec.serviceAccountName, status.hostIP, status.podIP, + status.podIPs.' + properties: + apiVersion: + description: Version of the schema the FieldPath + is written in terms of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to select + in the specified API version. + type: string + required: + - fieldPath + type: object + resourceFieldRef: + description: 'Selects a resource of the container: + only resources limits and requests (limits.cpu, + limits.memory, limits.ephemeral-storage, requests.cpu, + requests.memory and requests.ephemeral-storage) + are currently supported.' + properties: + containerName: + description: 'Container name: required for + volumes, optional for env vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output format + of the exposed resources, defaults to + "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource to select' + type: string + required: + - resource + type: object + secretKeyRef: + description: Selects a key of a secret in the + pod's namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + 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 + optional: + description: Specify whether the Secret + or its key must be defined + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + labels: + additionalProperties: + type: string + description: labels to add to pods type: object - config: + nodeSelector: additionalProperties: type: string - description: config is for provider-specific configuration fields. + description: nodeSelector defines the nodeSelector to + be supplied to podSpec type: object - credential: - description: credential contains the credential information intended to be used with this location + resourceAllocations: + description: resourceAllocations defines the CPU and Memory + resource allocations for the Pod + nullable: true properties: - key: - description: The key of the secret to select from. Must be a valid secret key. - type: string - 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 - optional: - description: Specify whether the Secret or its key must be defined - type: boolean - required: - - key + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum amount + of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + nullable: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: 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/' + nullable: true + type: object type: object - default: - description: default indicates this location is the default backup storage location. - type: boolean - prefix: - description: Prefix is the path inside a bucket to use for Velero storage. Optional. - type: string - required: - - cloudStorageRef + tolerations: + description: tolerations defines the list of tolerations + to be applied to daemonset + items: + description: The pod this Toleration is attached to + tolerates any taint that matches the triple + using the matching operator . + properties: + 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 type: object - name: + supplementalGroups: + description: supplementalGroups defines the linux groups to + be applied to the NodeAgent Pod + items: + format: int64 + type: integer + type: array + timeout: + description: timeout defines the NodeAgent timeout, default + value is 1h + type: string + uploaderType: + description: The type of uploader to transfer the data of + pod volumes, the supported values are 'restic' or 'kopia' + enum: + - restic + - kopia type: string - velero: - description: BackupStorageLocationSpec defines the desired state of a Velero BackupStorageLocation + required: + - uploaderType + type: object + restic: + description: (deprecation warning) ResticConfig is the configuration + for restic DaemonSet. restic is for backwards compatibility + and is replaced by the nodeAgent restic will be removed with + the OADP 1.4 + properties: + enable: + description: enable defines a boolean pointer whether we want + the daemonset to exist or not + type: boolean + podConfig: + description: Pod specific configuration properties: - accessMode: - description: AccessMode defines the permissions for the backup storage location. - enum: - - ReadOnly - - ReadWrite - type: string - backupSyncPeriod: - description: BackupSyncPeriod defines how frequently to sync backup API objects from object storage. A value of 0 disables sync. - nullable: true - type: string - config: + env: + description: env defines the list of environment variables + to be supplied to podSpec + items: + description: EnvVar represents an environment variable + present in a Container. + properties: + 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 + valueFrom: + description: Source for the environment variable's + value. Cannot be used if value is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + 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 + optional: + description: Specify whether the ConfigMap + or its key must be defined + type: boolean + required: + - key + type: object + fieldRef: + description: 'Selects a field of the pod: supports + metadata.name, metadata.namespace, `metadata.labels['''']`, + `metadata.annotations['''']`, spec.nodeName, + spec.serviceAccountName, status.hostIP, status.podIP, + status.podIPs.' + properties: + apiVersion: + description: Version of the schema the FieldPath + is written in terms of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to select + in the specified API version. + type: string + required: + - fieldPath + type: object + resourceFieldRef: + description: 'Selects a resource of the container: + only resources limits and requests (limits.cpu, + limits.memory, limits.ephemeral-storage, requests.cpu, + requests.memory and requests.ephemeral-storage) + are currently supported.' + properties: + containerName: + description: 'Container name: required for + volumes, optional for env vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output format + of the exposed resources, defaults to + "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource to select' + type: string + required: + - resource + type: object + secretKeyRef: + description: Selects a key of a secret in the + pod's namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + 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 + optional: + description: Specify whether the Secret + or its key must be defined + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + labels: additionalProperties: type: string - description: Config is for provider-specific configuration fields. - type: object - credential: - description: Credential contains the credential information intended to be used with this location - properties: - key: - description: The key of the secret to select from. Must be a valid secret key. - type: string - 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 - optional: - description: Specify whether the Secret or its key must be defined - type: boolean - required: - - key + description: labels to add to pods type: object - default: - description: Default indicates this location is the default backup storage location. - type: boolean - objectStorage: - description: ObjectStorageLocation specifies the settings necessary to connect to a provider's object storage. - properties: - bucket: - description: Bucket is the bucket to use for object storage. - type: string - caCert: - description: CACert defines a CA bundle to use when verifying TLS connections to the provider. - format: byte - type: string - prefix: - description: Prefix is the path inside a bucket to use for Velero storage. Optional. - type: string - required: - - bucket + nodeSelector: + additionalProperties: + type: string + description: nodeSelector defines the nodeSelector to + be supplied to podSpec type: object - provider: - description: Provider is the provider of the backup storage. - type: string - validationFrequency: - description: ValidationFrequency defines how frequently to validate the corresponding object storage. A value of 0 disables validation. + resourceAllocations: + description: resourceAllocations defines the CPU and Memory + resource allocations for the Pod nullable: true - type: string - required: - - objectStorage - - provider - type: object - type: object - type: array - configuration: - description: configuration is used to configure the data protection application's server config - properties: - nodeAgent: - description: NodeAgent is needed to allow selection between kopia or restic - properties: - enable: - description: enable defines a boolean pointer whether we want the daemonset to exist or not - type: boolean - podConfig: - description: Pod specific configuration - properties: - env: - description: env defines the list of environment variables to be supplied to podSpec - items: - description: EnvVar represents an environment variable present in a Container. - properties: - 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 - valueFrom: - description: Source for the environment variable's value. Cannot be used if value is not empty. - properties: - configMapKeyRef: - description: Selects a key of a ConfigMap. - properties: - key: - description: The key to select. - type: string - 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 - optional: - description: Specify whether the ConfigMap or its key must be defined - type: boolean - required: - - key - type: object - fieldRef: - description: 'Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['''']`, `metadata.annotations['''']`, spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.' - properties: - apiVersion: - description: Version of the schema the FieldPath is written in terms of, defaults to "v1". - type: string - fieldPath: - description: Path of the field to select in the specified API version. - type: string - required: - - fieldPath - type: object - resourceFieldRef: - description: 'Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.' - properties: - containerName: - description: 'Container name: required for volumes, optional for env vars' - type: string - divisor: - anyOf: - - type: integer - - type: string - description: Specifies the output format of the exposed resources, defaults to "1" - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - description: 'Required: resource to select' - type: string - required: - - resource - type: object - secretKeyRef: - description: Selects a key of a secret in the pod's namespace - properties: - key: - description: The key of the secret to select from. Must be a valid secret key. - type: string - 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 - optional: - description: Specify whether the Secret or its key must be defined - type: boolean - required: - - key - type: object - type: object - required: - - name + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum amount + of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + nullable: true type: object - type: array - labels: - additionalProperties: - type: string - description: labels to add to pods - type: object - nodeSelector: - additionalProperties: - type: string - description: nodeSelector defines the nodeSelector to be supplied to podSpec - type: object - resourceAllocations: - description: resourceAllocations defines the CPU and Memory resource allocations for the Pod - nullable: true + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: 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/' + nullable: true + type: object + type: object + tolerations: + description: tolerations defines the list of tolerations + to be applied to daemonset + items: + description: The pod this Toleration is attached to + tolerates any taint that matches the triple + using the matching operator . properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: 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: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: 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 + 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 - tolerations: - description: tolerations defines the list of tolerations to be applied to daemonset - items: - description: The pod this Toleration is attached to tolerates any taint that matches the triple using the matching operator . - properties: - 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 - type: object - supplementalGroups: - description: supplementalGroups defines the linux groups to be applied to the NodeAgent Pod - items: + type: array + type: object + supplementalGroups: + description: supplementalGroups defines the linux groups to + be applied to the NodeAgent Pod + items: + format: int64 + type: integer + type: array + timeout: + description: timeout defines the NodeAgent timeout, default + value is 1h + type: string + type: object + velero: + properties: + args: + description: Velero args are settings to customize velero + server arguments. Overrides values in other fields. + properties: + add_dir_header: + description: If true, adds the file directory to the header + of the log messages + type: boolean + alsologtostderr: + description: log to standard error as well as files (no + effect when -logtostderr=true) + type: boolean + backup-sync-period: + description: How often to ensure all Velero backups in + object storage exist as Backup API objects in the cluster. + This is the default sync period if none is explicitly + specified for a backup storage location. format: int64 type: integer - type: array - timeout: - description: timeout defines the NodeAgent timeout, default value is 1h - type: string - uploaderType: - description: The type of uploader to transfer the data of pod volumes, the supported values are 'restic' or 'kopia' - enum: - - restic - - kopia - type: string - required: - - uploaderType - type: object - restic: - description: (deprecation warning) ResticConfig is the configuration for restic DaemonSet. restic is for backwards compatibility and is replaced by the nodeAgent restic will be removed with the OADP 1.4 - properties: - enable: - description: enable defines a boolean pointer whether we want the daemonset to exist or not - type: boolean - podConfig: - description: Pod specific configuration - properties: - env: - description: env defines the list of environment variables to be supplied to podSpec - items: - description: EnvVar represents an environment variable present in a Container. - properties: - 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 - valueFrom: - description: Source for the environment variable's value. Cannot be used if value is not empty. - properties: - configMapKeyRef: - description: Selects a key of a ConfigMap. - properties: - key: - description: The key to select. - type: string - 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 - optional: - description: Specify whether the ConfigMap or its key must be defined - type: boolean - required: - - key - type: object - fieldRef: - description: 'Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['''']`, `metadata.annotations['''']`, spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.' - properties: - apiVersion: - description: Version of the schema the FieldPath is written in terms of, defaults to "v1". - type: string - fieldPath: - description: Path of the field to select in the specified API version. - type: string - required: - - fieldPath - type: object - resourceFieldRef: - description: 'Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.' - properties: - containerName: - description: 'Container name: required for volumes, optional for env vars' - type: string - divisor: - anyOf: - - type: integer - - type: string - description: Specifies the output format of the exposed resources, defaults to "1" - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - description: 'Required: resource to select' - type: string - required: - - resource - type: object - secretKeyRef: - description: Selects a key of a secret in the pod's namespace - properties: - key: - description: The key of the secret to select from. Must be a valid secret key. - type: string - 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 - optional: - description: Specify whether the Secret or its key must be defined - type: boolean - required: - - key - type: object - type: object - required: - - name - type: object - type: array - labels: - additionalProperties: - type: string - description: labels to add to pods - type: object - nodeSelector: - additionalProperties: - type: string - description: nodeSelector defines the nodeSelector to be supplied to podSpec - type: object - resourceAllocations: - description: resourceAllocations defines the CPU and Memory resource allocations for the Pod - nullable: true - properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - nullable: true - description: 'Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' - type: object - nullable: true - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - nullable: 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 - nullable: true - type: object - tolerations: - description: tolerations defines the list of tolerations to be applied to daemonset - items: - description: The pod this Toleration is attached to tolerates any taint that matches the triple using the matching operator . - properties: - 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 - type: object - supplementalGroups: - description: supplementalGroups defines the linux groups to be applied to the NodeAgent Pod - items: + client-burst: + description: Maximum number of requests by the server + to the Kubernetes API in a short period of time. + type: integer + client-page-size: + description: Page size of requests by the server to the + Kubernetes API when listing objects during a backup. + Set to 0 to disable paging. + type: integer + client-qps: + description: Maximum number of requests per second by + the server to the Kubernetes API once the burst limit + has been reached. this will be validated as a valid + float32 + type: string + colorized: + description: Show colored output in TTY + type: boolean + default-backup-ttl: + description: default 720h0m0s format: int64 type: integer - type: array - timeout: - description: timeout defines the NodeAgent timeout, default value is 1h - type: string - type: object - velero: - properties: - args: - description: Velero args are settings to customize velero server arguments. Overrides values in other fields. - properties: - add_dir_header: - description: If true, adds the file directory to the header of the log messages - type: boolean - alsologtostderr: - description: log to standard error as well as files (no effect when -logtostderr=true) - type: boolean - backup-sync-period: - description: How often to ensure all Velero backups in object storage exist as Backup API objects in the cluster. This is the default sync period if none is explicitly specified for a backup storage location. - format: int64 - type: integer - client-burst: - description: Maximum number of requests by the server to the Kubernetes API in a short period of time. - type: integer - client-page-size: - description: Page size of requests by the server to the Kubernetes API when listing objects during a backup. Set to 0 to disable paging. - type: integer - client-qps: - description: Maximum number of requests per second by the server to the Kubernetes API once the burst limit has been reached. this will be validated as a valid float32 - type: string - colorized: - description: Show colored output in TTY - type: boolean - default-backup-ttl: - description: default 720h0m0s - format: int64 - type: integer - default-item-operation-timeout: - description: How long to wait on asynchronous BackupItemActions and RestoreItemActions to complete before timing out. (default 1h0m0s) - format: int64 - type: integer - default-repo-maintain-frequency: - description: How often 'maintain' is run for backup repositories by default. - format: int64 - type: integer - default-volumes-to-fs-backup: - description: Backup all volumes with pod volume file system backup by default. - type: boolean - disabled-controllers: - description: List of controllers to disable on startup. Valid values are backup,backup-operations,backup-deletion,backup-finalizer,backup-sync,download-request,gc,backup-repo,restore,restore-operations,schedule,server-status-request - enum: - - backup - - backup-operations - - backup-deletion - - backup-finalizer - - backup-sync - - download-request - - gc - - backup-repo - - restore - - restore-operations - - schedule - - server-status-request - items: - type: string - type: array - fs-backup-timeout: - description: How long pod volume file system backups/restores should be allowed to run before timing out. (default 4h0m0s) - format: int64 - type: integer - garbage-collection-frequency: - description: How long to wait by default before backups can be garbage collected. (default 720h0m0s) - format: int64 - type: integer - item-operation-sync-frequency: - description: How often to check status on backup/restore operations after backup/restore processing. - format: int64 - type: integer - log-format: - description: The format for log output. Valid values are text, json. (default text) - enum: - - text - - json - type: string - log_backtrace_at: - description: when logging hits line file:N, emit a stack trace - type: string - log_dir: - description: If non-empty, write log files in this directory (no effect when -logtostderr=true) - type: string - log_file: - description: If non-empty, use this log file (no effect when -logtostderr=true) - type: string - log_file_max_size: - description: Defines the maximum size a log file can grow to (no effect when -logtostderr=true). Unit is megabytes. If the value is 0, the maximum file size is unlimited. (default 1800) - format: int64 - minimum: 0 - type: integer - logtostderr: - description: 'Boolean flags. Not handled atomically because the flag.Value interface does not let us avoid the =true, and that shorthand is necessary for compatibility. TODO: does this matter enough to fix? Seems unlikely.' - type: boolean - max-concurrent-k8s-connections: - description: Max concurrent connections number that Velero can create with kube-apiserver. Default is 30. (default 30) - type: integer - metrics-address: - description: The address to expose prometheus metrics - type: string - one_output: - description: If true, only write logs to their native severity level (vs also writing to each lower severity level; no effect when -logtostderr=true) - type: boolean - profiler-address: - description: The address to expose the pprof profiler. - type: string - resource-timeout: - description: How long to wait for resource processes which are not covered by other specific timeout parameters. Default is 10 minutes. (default 10m0s) - format: int64 - type: integer - restore-resource-priorities: - description: Desired order of resource restores, the priority list contains two parts which are split by "-" element. The resources before "-" element are restored first as high priorities, the resources after "-" element are restored last as low priorities, and any resource not in the list will be restored alphabetically between the high and low priorities. (default securitycontextconstraints,customresourcedefinitions,namespaces,managedcluster.cluster.open-cluster-management.io,managedcluster.clusterview.open-cluster-management.io,klusterletaddonconfig.agent.open-cluster-management.io,managedclusteraddon.addon.open-cluster-management.io,storageclasses,volumesnapshotclass.snapshot.storage.k8s.io,volumesnapshotcontents.snapshot.storage.k8s.io,volumesnapshots.snapshot.storage.k8s.io,datauploads.velero.io,persistentvolumes,persistentvolumeclaims,serviceaccounts,secrets,configmaps,limitranges,pods,replicasets.apps,clusterclasses.cluster.x-k8s.io,endpoints,services,-,clusterbootstraps.run.tanzu.vmware.com,clusters.cluster.x-k8s.io,clusterresourcesets.addons.cluster.x-k8s.io) - type: string - skip_headers: - description: If true, avoid header prefixes in the log messages - type: boolean - skip_log_headers: - description: If true, avoid headers when opening log files (no effect when -logtostderr=true) - type: boolean - stderrthreshold: - description: logs at or above this threshold go to stderr when writing to files and stderr (no effect when -logtostderr=true or -alsologtostderr=false) (default 2) - type: integer - store-validation-frequency: - description: How often to verify if the storage is valid. Optional. Set this to `0s` to disable sync. Default 1 minute. - format: int64 - type: integer - terminating-resource-timeout: - description: How long to wait on persistent volumes and namespaces to terminate during a restore before timing out. - format: int64 - type: integer - v: - description: number for the log level verbosity - type: integer - vmodule: - description: comma-separated list of pattern=N settings for file-filtered logging + default-item-operation-timeout: + description: How long to wait on asynchronous BackupItemActions + and RestoreItemActions to complete before timing out. + (default 1h0m0s) + format: int64 + type: integer + default-repo-maintain-frequency: + description: How often 'maintain' is run for backup repositories + by default. + format: int64 + type: integer + default-volumes-to-fs-backup: + description: Backup all volumes with pod volume file system + backup by default. + type: boolean + disabled-controllers: + description: List of controllers to disable on startup. + Valid values are backup,backup-operations,backup-deletion,backup-finalizer,backup-sync,download-request,gc,backup-repo,restore,restore-operations,schedule,server-status-request + enum: + - backup + - backup-operations + - backup-deletion + - backup-finalizer + - backup-sync + - download-request + - gc + - backup-repo + - restore + - restore-operations + - schedule + - server-status-request + items: type: string - type: object - customPlugins: - description: customPlugins defines the custom plugin to be installed with Velero - items: - properties: - image: - type: string - name: - type: string - required: - - image - - name - type: object - type: array - defaultItemOperationTimeout: - description: How long to wait on asynchronous BackupItemActions and RestoreItemActions to complete before timing out. Default value is 1h. - type: string - defaultPlugins: - items: + type: array + fs-backup-timeout: + description: How long pod volume file system backups/restores + should be allowed to run before timing out. (default + 4h0m0s) + format: int64 + type: integer + garbage-collection-frequency: + description: How long to wait by default before backups + can be garbage collected. (default 720h0m0s) + format: int64 + type: integer + item-operation-sync-frequency: + description: How often to check status on backup/restore + operations after backup/restore processing. + format: int64 + type: integer + log-format: + description: The format for log output. Valid values are + text, json. (default text) enum: - - aws - - gcp - - azure - - csi - - openshift - - kubevirt + - text + - json type: string - type: array - featureFlags: - description: featureFlags defines the list of features to enable for Velero instance - items: + log_backtrace_at: + description: when logging hits line file:N, emit a stack + trace type: string - type: array - itemOperationSyncFrequency: - description: How often to check status on async backup/restore operations after backup processing. Default value is 2m. - type: string - logLevel: - description: Velero server’s log level (use debug for the most logging, leave unset for velero default) - enum: - - trace - - debug - - info - - warning - - error - - fatal - - panic - type: string - noDefaultBackupLocation: - description: If you need to install Velero without a default backup storage location noDefaultBackupLocation flag is required for confirmation - type: boolean - podConfig: - description: Pod specific configuration + log_dir: + description: If non-empty, write log files in this directory + (no effect when -logtostderr=true) + type: string + log_file: + description: If non-empty, use this log file (no effect + when -logtostderr=true) + type: string + log_file_max_size: + description: Defines the maximum size a log file can grow + to (no effect when -logtostderr=true). Unit is megabytes. + If the value is 0, the maximum file size is unlimited. + (default 1800) + format: int64 + minimum: 0 + type: integer + logtostderr: + description: 'Boolean flags. Not handled atomically because + the flag.Value interface does not let us avoid the =true, + and that shorthand is necessary for compatibility. TODO: + does this matter enough to fix? Seems unlikely.' + type: boolean + max-concurrent-k8s-connections: + description: Max concurrent connections number that Velero + can create with kube-apiserver. Default is 30. (default + 30) + type: integer + metrics-address: + description: The address to expose prometheus metrics + type: string + one_output: + description: If true, only write logs to their native + severity level (vs also writing to each lower severity + level; no effect when -logtostderr=true) + type: boolean + profiler-address: + description: The address to expose the pprof profiler. + type: string + resource-timeout: + description: How long to wait for resource processes which + are not covered by other specific timeout parameters. + Default is 10 minutes. (default 10m0s) + format: int64 + type: integer + restore-resource-priorities: + description: Desired order of resource restores, the priority + list contains two parts which are split by "-" element. + The resources before "-" element are restored first + as high priorities, the resources after "-" element + are restored last as low priorities, and any resource + not in the list will be restored alphabetically between + the high and low priorities. (default securitycontextconstraints,customresourcedefinitions,namespaces,managedcluster.cluster.open-cluster-management.io,managedcluster.clusterview.open-cluster-management.io,klusterletaddonconfig.agent.open-cluster-management.io,managedclusteraddon.addon.open-cluster-management.io,storageclasses,volumesnapshotclass.snapshot.storage.k8s.io,volumesnapshotcontents.snapshot.storage.k8s.io,volumesnapshots.snapshot.storage.k8s.io,datauploads.velero.io,persistentvolumes,persistentvolumeclaims,serviceaccounts,secrets,configmaps,limitranges,pods,replicasets.apps,clusterclasses.cluster.x-k8s.io,endpoints,services,-,clusterbootstraps.run.tanzu.vmware.com,clusters.cluster.x-k8s.io,clusterresourcesets.addons.cluster.x-k8s.io) + type: string + skip_headers: + description: If true, avoid header prefixes in the log + messages + type: boolean + skip_log_headers: + description: If true, avoid headers when opening log files + (no effect when -logtostderr=true) + type: boolean + stderrthreshold: + description: logs at or above this threshold go to stderr + when writing to files and stderr (no effect when -logtostderr=true + or -alsologtostderr=false) (default 2) + type: integer + store-validation-frequency: + description: How often to verify if the storage is valid. + Optional. Set this to `0s` to disable sync. Default + 1 minute. + format: int64 + type: integer + terminating-resource-timeout: + description: How long to wait on persistent volumes and + namespaces to terminate during a restore before timing + out. + format: int64 + type: integer + v: + description: number for the log level verbosity + type: integer + vmodule: + description: comma-separated list of pattern=N settings + for file-filtered logging + type: string + type: object + customPlugins: + description: customPlugins defines the custom plugin to be + installed with Velero + items: properties: - env: - description: env defines the list of environment variables to be supplied to podSpec - items: - description: EnvVar represents an environment variable present in a Container. - properties: - 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 - valueFrom: - description: Source for the environment variable's value. Cannot be used if value is not empty. - properties: - configMapKeyRef: - description: Selects a key of a ConfigMap. - properties: - key: - description: The key to select. - type: string - 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 - optional: - description: Specify whether the ConfigMap or its key must be defined - type: boolean - required: - - key - type: object - fieldRef: - description: 'Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['''']`, `metadata.annotations['''']`, spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.' - properties: - apiVersion: - description: Version of the schema the FieldPath is written in terms of, defaults to "v1". - type: string - fieldPath: - description: Path of the field to select in the specified API version. - type: string - required: - - fieldPath - type: object - resourceFieldRef: - description: 'Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.' - properties: - containerName: - description: 'Container name: required for volumes, optional for env vars' - type: string - divisor: - anyOf: - - type: integer - - type: string - description: Specifies the output format of the exposed resources, defaults to "1" - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - description: 'Required: resource to select' - type: string - required: - - resource - type: object - secretKeyRef: - description: Selects a key of a secret in the pod's namespace - properties: - key: - description: The key of the secret to select from. Must be a valid secret key. - type: string - 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 - optional: - description: Specify whether the Secret or its key must be defined - type: boolean - required: - - key - type: object - type: object - required: - - name - type: object - type: array - labels: - additionalProperties: - type: string - description: labels to add to pods - type: object - nodeSelector: - additionalProperties: - type: string - description: nodeSelector defines the nodeSelector to be supplied to podSpec - type: object - resourceAllocations: - description: resourceAllocations defines the CPU and Memory resource allocations for the Pod - nullable: true - properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - nullable: true - description: 'Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' - type: object - nullable: true - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - nullable: 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 - nullable: true - type: object - tolerations: - description: tolerations defines the list of tolerations to be applied to daemonset - items: - description: The pod this Toleration is attached to tolerates any taint that matches the triple using the matching operator . - properties: - 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 + image: + type: string + name: + type: string + required: + - image + - name type: object - resourceTimeout: - description: resourceTimeout defines how long to wait for several Velero resources before timeout occurs, such as Velero CRD availability, volumeSnapshot deletion, and repo availability. Default is 10m + type: array + defaultItemOperationTimeout: + description: How long to wait on asynchronous BackupItemActions + and RestoreItemActions to complete before timing out. Default + value is 1h. + type: string + defaultPlugins: + items: + enum: + - aws + - gcp + - azure + - csi + - openshift + - kubevirt type: string - restoreResourcesVersionPriority: - description: restoreResourceVersionPriority represents a configmap that will be created if defined for use in conjunction with EnableAPIGroupVersions feature flag Defining this field automatically add EnableAPIGroupVersions to the velero server feature flag + type: array + featureFlags: + description: featureFlags defines the list of features to + enable for Velero instance + items: type: string - type: object - type: object - features: - description: features defines the configuration for the DPA to enable the OADP tech preview features - type: object - podAnnotations: - additionalProperties: - type: string - description: add annotations to pods deployed by operator - type: object - podDnsConfig: - description: podDnsConfig defines the DNS parameters of a pod in addition to those generated from DNSPolicy. https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-dns-config - properties: - 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: + type: array + itemOperationSyncFrequency: + description: How often to check status on async backup/restore + operations after backup processing. Default value is 2m. 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: - description: PodDNSConfigOption defines DNS resolver options of a pod. - properties: - 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: + logLevel: + description: Velero server’s log level (use debug for the + most logging, leave unset for velero default) + enum: + - trace + - debug + - info + - warning + - error + - fatal + - panic type: string - type: array - type: object - podDnsPolicy: - description: podDnsPolicy defines how a pod's DNS will be configured. https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-s-dns-policy - type: string - snapshotLocations: - description: snapshotLocations defines the list of desired configuration to use for VolumeSnapshotLocations - items: - description: SnapshotLocation defines the configuration for the DPA snapshot store - properties: - velero: - description: VolumeSnapshotLocationSpec defines the specification for a Velero VolumeSnapshotLocation. + noDefaultBackupLocation: + description: If you need to install Velero without a default + backup storage location noDefaultBackupLocation flag is + required for confirmation + type: boolean + podConfig: + description: Pod specific configuration properties: - config: + env: + description: env defines the list of environment variables + to be supplied to podSpec + items: + description: EnvVar represents an environment variable + present in a Container. + properties: + 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 + valueFrom: + description: Source for the environment variable's + value. Cannot be used if value is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + 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 + optional: + description: Specify whether the ConfigMap + or its key must be defined + type: boolean + required: + - key + type: object + fieldRef: + description: 'Selects a field of the pod: supports + metadata.name, metadata.namespace, `metadata.labels['''']`, + `metadata.annotations['''']`, spec.nodeName, + spec.serviceAccountName, status.hostIP, status.podIP, + status.podIPs.' + properties: + apiVersion: + description: Version of the schema the FieldPath + is written in terms of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to select + in the specified API version. + type: string + required: + - fieldPath + type: object + resourceFieldRef: + description: 'Selects a resource of the container: + only resources limits and requests (limits.cpu, + limits.memory, limits.ephemeral-storage, requests.cpu, + requests.memory and requests.ephemeral-storage) + are currently supported.' + properties: + containerName: + description: 'Container name: required for + volumes, optional for env vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output format + of the exposed resources, defaults to + "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource to select' + type: string + required: + - resource + type: object + secretKeyRef: + description: Selects a key of a secret in the + pod's namespace + properties: + key: + description: The key of the secret to select + from. Must be a valid secret key. + type: string + 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 + optional: + description: Specify whether the Secret + or its key must be defined + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + labels: + additionalProperties: + type: string + description: labels to add to pods + type: object + nodeSelector: additionalProperties: type: string - description: Config is for provider-specific configuration fields. + description: nodeSelector defines the nodeSelector to + be supplied to podSpec type: object - credential: - description: Credential contains the credential information intended to be used with this location + resourceAllocations: + description: resourceAllocations defines the CPU and Memory + resource allocations for the Pod + nullable: true properties: - key: - description: The key of the secret to select from. Must be a valid secret key. - type: string - 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 - optional: - description: Specify whether the Secret or its key must be defined - type: boolean - required: - - key + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum amount + of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + nullable: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: 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/' + nullable: true + type: object type: object - provider: - description: Provider is the provider of the volume storage. - type: string - required: - - provider + tolerations: + description: tolerations defines the list of tolerations + to be applied to daemonset + items: + description: The pod this Toleration is attached to + tolerates any taint that matches the triple + using the matching operator . + properties: + 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 type: object - required: - - velero - type: object - type: array - unsupportedOverrides: - additionalProperties: - type: string - description: 'unsupportedOverrides can be used to override images used in deployments. Available keys are: - veleroImageFqin - awsPluginImageFqin - openshiftPluginImageFqin - azurePluginImageFqin - gcpPluginImageFqin - csiPluginImageFqin - resticRestoreImageFqin - kubevirtPluginImageFqin - operator-type' - enum: - - veleroImageFqin - - awsPluginImageFqin - - openshiftPluginImageFqin - - azurePluginImageFqin - - gcpPluginImageFqin - - csiPluginImageFqin - - resticRestoreImageFqin - - kubevirtPluginImageFqin - - operator-type - type: object - required: - - configuration - type: object - status: - description: DataProtectionApplicationStatus defines the observed state of DataProtectionApplication - properties: - conditions: - items: - description: "Condition contains details for one aspect of the current state of this API Resource. --- This struct is intended for direct use as an array at the field path .status.conditions. For example, \n \ttype FooStatus struct{ \t // Represents the observations of a foo's current state. \t // Known .status.conditions.type are: \"Available\", \"Progressing\", and \"Degraded\" \t // +patchMergeKey=type \t // +patchStrategy=merge \t // +listType=map \t // +listMapKey=type \t Conditions []metav1.Condition `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` \n \t // other fields \t}" - properties: - lastTransitionTime: - description: lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. - format: date-time - type: string - message: - description: message is a human readable message indicating details about the transition. This may be an empty string. - maxLength: 32768 - type: string - observedGeneration: - description: observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance. - format: int64 - minimum: 0 - type: integer - reason: - description: reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty. - maxLength: 1024 - minLength: 1 - pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ - type: string - status: - description: status of the condition, one of True, False, Unknown. - enum: - - "True" - - "False" - - Unknown + resourceTimeout: + description: resourceTimeout defines how long to wait for + several Velero resources before timeout occurs, such as + Velero CRD availability, volumeSnapshot deletion, and repo + availability. Default is 10m type: string - type: - description: type of condition in CamelCase or in foo.example.com/CamelCase. --- Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) - maxLength: 316 - pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + restoreResourcesVersionPriority: + description: restoreResourceVersionPriority represents a configmap + that will be created if defined for use in conjunction with + EnableAPIGroupVersions feature flag Defining this field + automatically add EnableAPIGroupVersions to the velero server + feature flag type: string - required: - - lastTransitionTime - - message - - reason - - status - - type type: object - type: array - type: object - type: object - served: true - storage: true - subresources: - status: {} + type: object + features: + description: features defines the configuration for the DPA to enable + the OADP tech preview features + type: object + podAnnotations: + additionalProperties: + type: string + description: add annotations to pods deployed by operator + type: object + podDnsConfig: + description: podDnsConfig defines the DNS parameters of a pod in addition + to those generated from DNSPolicy. https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-dns-config + properties: + 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: + 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: + description: PodDNSConfigOption defines DNS resolver options + of a pod. + properties: + 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: + type: string + type: array + type: object + podDnsPolicy: + description: podDnsPolicy defines how a pod's DNS will be configured. + https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-s-dns-policy + type: string + snapshotLocations: + description: snapshotLocations defines the list of desired configuration + to use for VolumeSnapshotLocations + items: + description: SnapshotLocation defines the configuration for the + DPA snapshot store + properties: + velero: + description: VolumeSnapshotLocationSpec defines the specification + for a Velero VolumeSnapshotLocation. + properties: + config: + additionalProperties: + type: string + description: Config is for provider-specific configuration + fields. + type: object + credential: + description: Credential contains the credential information + intended to be used with this location + properties: + key: + description: The key of the secret to select from. Must + be a valid secret key. + type: string + 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 + optional: + description: Specify whether the Secret or its key must + be defined + type: boolean + required: + - key + type: object + provider: + description: Provider is the provider of the volume storage. + type: string + required: + - provider + type: object + required: + - velero + type: object + type: array + unsupportedOverrides: + additionalProperties: + type: string + description: 'unsupportedOverrides can be used to override images + used in deployments. Available keys are: - veleroImageFqin - + awsPluginImageFqin - openshiftPluginImageFqin - azurePluginImageFqin - + gcpPluginImageFqin - csiPluginImageFqin - resticRestoreImageFqin - + kubevirtPluginImageFqin - operator-type' + enum: + - veleroImageFqin + - awsPluginImageFqin + - openshiftPluginImageFqin + - azurePluginImageFqin + - gcpPluginImageFqin + - csiPluginImageFqin + - resticRestoreImageFqin + - kubevirtPluginImageFqin + - operator-type + type: object + required: + - configuration + type: object + status: + description: DataProtectionApplicationStatus defines the observed state + of DataProtectionApplication + properties: + conditions: + items: + description: "Condition contains details for one aspect of the current + state of this API Resource. --- This struct is intended for direct + use as an array at the field path .status.conditions. For example, + \n \ttype FooStatus struct{ \t // Represents the observations + of a foo's current state. \t // Known .status.conditions.type + are: \"Available\", \"Progressing\", and \"Degraded\" \t // + +patchMergeKey=type \t // +patchStrategy=merge \t // +listType=map + \t // +listMapKey=type \t Conditions []metav1.Condition + `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" + protobuf:\"bytes,1,rep,name=conditions\"` \n \t // other fields + \t}" + properties: + lastTransitionTime: + description: lastTransitionTime is the last time the condition + transitioned from one status to another. This should be when + the underlying condition changed. If that is not known, then + using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: message is a human readable message indicating + details about the transition. This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: observedGeneration represents the .metadata.generation + that the condition was set based upon. For instance, if .metadata.generation + is currently 12, but the .status.conditions[x].observedGeneration + is 9, the condition is out of date with respect to the current + state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: reason contains a programmatic identifier indicating + the reason for the condition's last transition. Producers + of specific condition types may define expected values and + meanings for this field, and whether the values are considered + a guaranteed API. The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + --- Many .condition.type values are consistent across resources + like Available, but because arbitrary conditions can be useful + (see .node.status.conditions), the ability to deconflict is + important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + type: object + type: object + served: true + storage: true + subresources: + status: {} status: acceptedNames: kind: "" diff --git a/controllers/nodeagent_test.go b/controllers/nodeagent_test.go index 3759367607..80eff5ac05 100644 --- a/controllers/nodeagent_test.go +++ b/controllers/nodeagent_test.go @@ -803,7 +803,7 @@ func TestDPAReconciler_buildNodeAgentDaemonset(t *testing.T) { NodeSelector: map[string]string{ "foo": "bar", }, - ResourceAllocations: corev1.ResourceRequirements{ + ResourceAllocations: oadpv1alpha1.OADPResourceRequirements{ Limits: corev1.ResourceList{ corev1.ResourceCPU: resource.MustParse("2"), corev1.ResourceMemory: resource.MustParse("128Mi"), @@ -991,7 +991,7 @@ func TestDPAReconciler_buildNodeAgentDaemonset(t *testing.T) { NodeSelector: map[string]string{ "foo": "bar", }, - ResourceAllocations: corev1.ResourceRequirements{ + ResourceAllocations: oadpv1alpha1.OADPResourceRequirements{ Limits: corev1.ResourceList{ corev1.ResourceCPU: resource.MustParse("2"), }, @@ -1173,7 +1173,7 @@ func TestDPAReconciler_buildNodeAgentDaemonset(t *testing.T) { NodeSelector: map[string]string{ "foo": "bar", }, - ResourceAllocations: corev1.ResourceRequirements{ + ResourceAllocations: oadpv1alpha1.OADPResourceRequirements{ Requests: corev1.ResourceList{ corev1.ResourceCPU: resource.MustParse("2"), }, @@ -1352,7 +1352,7 @@ func TestDPAReconciler_buildNodeAgentDaemonset(t *testing.T) { NodeSelector: map[string]string{ "foo": "bar", }, - ResourceAllocations: corev1.ResourceRequirements{ + ResourceAllocations: oadpv1alpha1.OADPResourceRequirements{ Limits: corev1.ResourceList{ corev1.ResourceMemory: resource.MustParse("256Mi"), }, @@ -1534,7 +1534,7 @@ func TestDPAReconciler_buildNodeAgentDaemonset(t *testing.T) { NodeSelector: map[string]string{ "foo": "bar", }, - ResourceAllocations: corev1.ResourceRequirements{ + ResourceAllocations: oadpv1alpha1.OADPResourceRequirements{ Requests: corev1.ResourceList{ corev1.ResourceMemory: resource.MustParse("256Mi"), }, diff --git a/controllers/validator_test.go b/controllers/validator_test.go index d5f6c0b7e4..efb414a71d 100644 --- a/controllers/validator_test.go +++ b/controllers/validator_test.go @@ -271,7 +271,7 @@ func TestDPAReconciler_ValidateDataProtectionCR(t *testing.T) { oadpv1alpha1.DefaultPluginAWS, }, PodConfig: &oadpv1alpha1.PodConfig{ - ResourceAllocations: corev1.ResourceRequirements{ + ResourceAllocations: oadpv1alpha1.OADPResourceRequirements{ Requests: corev1.ResourceList{ corev1.ResourceCPU: resource.MustParse("2"), }, @@ -324,7 +324,7 @@ func TestDPAReconciler_ValidateDataProtectionCR(t *testing.T) { oadpv1alpha1.DefaultPluginAWS, }, PodConfig: &oadpv1alpha1.PodConfig{ - ResourceAllocations: corev1.ResourceRequirements{ + ResourceAllocations: oadpv1alpha1.OADPResourceRequirements{ Requests: corev1.ResourceList{ corev1.ResourceCPU: resource.MustParse("2"), }, @@ -334,7 +334,7 @@ func TestDPAReconciler_ValidateDataProtectionCR(t *testing.T) { Restic: &oadpv1alpha1.ResticConfig{ NodeAgentCommonFields: oadpv1alpha1.NodeAgentCommonFields{ PodConfig: &oadpv1alpha1.PodConfig{ - ResourceAllocations: corev1.ResourceRequirements{ + ResourceAllocations: oadpv1alpha1.OADPResourceRequirements{ Requests: corev1.ResourceList{ corev1.ResourceCPU: resource.MustParse("2"), }, diff --git a/controllers/velero_test.go b/controllers/velero_test.go index f088a1c7c6..e39c15f29a 100644 --- a/controllers/velero_test.go +++ b/controllers/velero_test.go @@ -1263,7 +1263,7 @@ func TestDPAReconciler_buildVeleroDeployment(t *testing.T) { Configuration: &oadpv1alpha1.ApplicationConfig{ Velero: &oadpv1alpha1.VeleroConfig{ PodConfig: &oadpv1alpha1.PodConfig{ - ResourceAllocations: corev1.ResourceRequirements{ + ResourceAllocations: oadpv1alpha1.OADPResourceRequirements{ Limits: corev1.ResourceList{ corev1.ResourceCPU: resource.MustParse("2"), corev1.ResourceMemory: resource.MustParse("700Mi"), @@ -1354,7 +1354,7 @@ func TestDPAReconciler_buildVeleroDeployment(t *testing.T) { Configuration: &oadpv1alpha1.ApplicationConfig{ Velero: &oadpv1alpha1.VeleroConfig{ PodConfig: &oadpv1alpha1.PodConfig{ - ResourceAllocations: corev1.ResourceRequirements{ + ResourceAllocations: oadpv1alpha1.OADPResourceRequirements{ Limits: corev1.ResourceList{ corev1.ResourceCPU: resource.MustParse("2"), }, @@ -1439,7 +1439,7 @@ func TestDPAReconciler_buildVeleroDeployment(t *testing.T) { Configuration: &oadpv1alpha1.ApplicationConfig{ Velero: &oadpv1alpha1.VeleroConfig{ PodConfig: &oadpv1alpha1.PodConfig{ - ResourceAllocations: corev1.ResourceRequirements{ + ResourceAllocations: oadpv1alpha1.OADPResourceRequirements{ Requests: corev1.ResourceList{ corev1.ResourceCPU: resource.MustParse("2"), }, @@ -1521,7 +1521,7 @@ func TestDPAReconciler_buildVeleroDeployment(t *testing.T) { Configuration: &oadpv1alpha1.ApplicationConfig{ Velero: &oadpv1alpha1.VeleroConfig{ PodConfig: &oadpv1alpha1.PodConfig{ - ResourceAllocations: corev1.ResourceRequirements{ + ResourceAllocations: oadpv1alpha1.OADPResourceRequirements{ Requests: corev1.ResourceList{ corev1.ResourceMemory: resource.MustParse("256Mi"), }, @@ -1603,7 +1603,7 @@ func TestDPAReconciler_buildVeleroDeployment(t *testing.T) { Configuration: &oadpv1alpha1.ApplicationConfig{ Velero: &oadpv1alpha1.VeleroConfig{ PodConfig: &oadpv1alpha1.PodConfig{ - ResourceAllocations: corev1.ResourceRequirements{ + ResourceAllocations: oadpv1alpha1.OADPResourceRequirements{ Limits: corev1.ResourceList{ corev1.ResourceMemory: resource.MustParse("128Mi"), }, @@ -1688,7 +1688,7 @@ func TestDPAReconciler_buildVeleroDeployment(t *testing.T) { Configuration: &oadpv1alpha1.ApplicationConfig{ Velero: &oadpv1alpha1.VeleroConfig{ PodConfig: &oadpv1alpha1.PodConfig{ - ResourceAllocations: corev1.ResourceRequirements{ + ResourceAllocations: oadpv1alpha1.OADPResourceRequirements{ Limits: corev1.ResourceList{ corev1.ResourceCPU: resource.MustParse("2"), corev1.ResourceMemory: resource.MustParse("700Mi"), @@ -1805,7 +1805,7 @@ func TestDPAReconciler_buildVeleroDeployment(t *testing.T) { Configuration: &oadpv1alpha1.ApplicationConfig{ Velero: &oadpv1alpha1.VeleroConfig{ PodConfig: &oadpv1alpha1.PodConfig{ - ResourceAllocations: corev1.ResourceRequirements{ + ResourceAllocations: oadpv1alpha1.OADPResourceRequirements{ Limits: corev1.ResourceList{ corev1.ResourceCPU: resource.MustParse("2"), corev1.ResourceMemory: resource.MustParse("700Mi"), diff --git a/go.mod b/go.mod index 27274e27c0..78f371eedf 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( github.com/operator-framework/operator-lib v0.9.0 github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.51.2 github.com/sirupsen/logrus v1.9.0 - k8s.io/api v0.25.6 + k8s.io/api v0.25.6 // must update OADPResourceRequirements in api/v1alpha1/oadp_types.go when package updates k8s.io/apiextensions-apiserver v0.24.2 k8s.io/apimachinery v0.25.6 k8s.io/client-go v0.25.6 diff --git a/tests/e2e/dpa_deployment_suite_test.go b/tests/e2e/dpa_deployment_suite_test.go index db7e8b31fe..ee10274bc1 100644 --- a/tests/e2e/dpa_deployment_suite_test.go +++ b/tests/e2e/dpa_deployment_suite_test.go @@ -319,7 +319,7 @@ var _ = Describe("Configuration testing for DPA Custom Resource", func() { Configuration: &oadpv1alpha1.ApplicationConfig{ Velero: &oadpv1alpha1.VeleroConfig{ PodConfig: &oadpv1alpha1.PodConfig{ - ResourceAllocations: corev1.ResourceRequirements{ + ResourceAllocations: oadpv1alpha1.OADPResourceRequirements{ Limits: corev1.ResourceList{ corev1.ResourceCPU: resource.MustParse("2"), corev1.ResourceMemory: resource.MustParse("512Mi"),