From ac935212692cf515a56be43f8345cad179ffab6f Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Mon, 12 Aug 2024 16:03:03 +0800 Subject: [PATCH 01/34] add command --- docs/api-references/docs.md | 24 + manifests/crd.yaml | 12347 ++++++++-------- manifests/crd/v1/pingcap.com_backups.yaml | 3 + .../crd/v1/pingcap.com_backupschedules.yaml | 6 + manifests/federation-crd.yaml | 6268 ++++---- .../pingcap/v1alpha1/openapi_generated.go | 7 + pkg/apis/pingcap/v1alpha1/types.go | 6 + 7 files changed, 9358 insertions(+), 9303 deletions(-) diff --git a/docs/api-references/docs.md b/docs/api-references/docs.md index 6a96a6bbcc..203774ec68 100644 --- a/docs/api-references/docs.md +++ b/docs/api-references/docs.md @@ -245,6 +245,18 @@ Default is current timestamp.

+logSubcommand
+ +string + + + +(Optional) +

Subcommand is the subcommand for BR, such as start, stop, pause etc.

+ + + + logTruncateUntil
string @@ -4234,6 +4246,18 @@ Default is current timestamp.

+logSubcommand
+ +string + + + +(Optional) +

Subcommand is the subcommand for BR, such as start, stop, pause etc.

+ + + + logTruncateUntil
string diff --git a/manifests/crd.yaml b/manifests/crd.yaml index 49fed4d885..e93cdc85e1 100644 --- a/manifests/crd.yaml +++ b/manifests/crd.yaml @@ -4,68 +4,41 @@ kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.15.0 - name: backups.pingcap.com + name: backupschedules.pingcap.com spec: group: pingcap.com names: - kind: Backup - listKind: BackupList - plural: backups + kind: BackupSchedule + listKind: BackupScheduleList + plural: backupschedules shortNames: - - bk - singular: backup + - bks + singular: backupschedule scope: Namespaced versions: - additionalPrinterColumns: - - description: the type of backup, such as full, db, table. Only used when Mode - = snapshot. - jsonPath: .spec.backupType - name: Type - type: string - - description: the mode of backup, such as snapshot, log. - jsonPath: .spec.backupMode - name: Mode - type: string - - description: The current status of the backup - jsonPath: .status.phase - name: Status - type: string - - description: The full path of backup data - jsonPath: .status.backupPath - name: BackupPath - type: string - - description: The data size of the backup - jsonPath: .status.backupSizeReadable - name: BackupSize - type: string - - description: The real size of volume snapshot backup, only valid to volume snapshot - backup - jsonPath: .status.incrementalBackupSizeReadable - name: IncrementalBackupSize - priority: 10 - type: string - - description: The commit ts of the backup - jsonPath: .status.commitTs - name: CommitTS + - description: The cron format string used for backup scheduling + jsonPath: .spec.schedule + name: Schedule type: string - - description: The log backup truncate until ts - jsonPath: .status.logSuccessTruncateUntil - name: LogTruncateUntil + - description: The max number of backups we want to keep + jsonPath: .spec.maxBackups + name: MaxBackups + type: integer + - description: How long backups we want to keep + jsonPath: .spec.maxReservedTime + name: MaxReservedTime type: string - - description: The time at which the backup was started - jsonPath: .status.timeStarted - name: Started + - description: The last backup CR name + jsonPath: .status.lastBackup + name: LastBackup priority: 1 - type: date - - description: The time at which the backup was completed - jsonPath: .status.timeCompleted - name: Completed + type: string + - description: The last time the backup was successfully created + jsonPath: .status.lastBackupTime + name: LastBackupTime priority: 1 type: date - - description: The time that the backup takes - jsonPath: .status.timeTaken - name: TimeTaken - type: string - jsonPath: .metadata.creationTimestamp name: Age type: date @@ -81,841 +54,747 @@ spec: type: object spec: properties: - additionalVolumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - required: - - mountPath - - name - type: object - type: array - additionalVolumes: - items: - properties: - awsElasticBlockStore: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - azureDisk: + backupTemplate: + properties: + additionalVolumeMounts: + items: properties: - cachingMode: - type: string - diskName: - type: string - diskURI: + mountPath: type: string - fsType: + mountPropagation: type: string - kind: + name: type: string readOnly: type: boolean - required: - - diskName - - diskURI - type: object - azureFile: - properties: - readOnly: - type: boolean - secretName: + subPath: type: string - shareName: + subPathExpr: type: string required: - - secretName - - shareName + - mountPath + - name type: object - cephfs: + type: array + additionalVolumes: + items: properties: - monitors: - items: - type: string - type: array - path: - type: string - readOnly: - type: boolean - secretFile: - type: string - secretRef: + awsElasticBlockStore: properties: - name: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: type: string + required: + - volumeID type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - monitors - type: object - cinder: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: + azureDisk: properties: - name: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: type: string + readOnly: + type: boolean + required: + - diskName + - diskURI type: object - x-kubernetes-map-type: atomic - volumeID: - type: string - required: - - volumeID - type: object - configMap: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - csi: - properties: - driver: - type: string - fsType: - type: string - nodePublishSecretRef: + azureFile: properties: - name: + readOnly: + type: boolean + secretName: type: string + shareName: + type: string + required: + - secretName + - shareName type: object - x-kubernetes-map-type: atomic - readOnly: - type: boolean - volumeAttributes: - additionalProperties: - type: string - type: object - required: - - driver - type: object - downwardAPI: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - fieldRef: + cephfs: + properties: + monitors: + items: + type: string + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: properties: - apiVersion: + key: type: string - fieldPath: + mode: + format: int32 + type: integer + path: type: string required: - - fieldPath + - key + - path type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: + type: array + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + readOnly: + type: boolean + volumeAttributes: + additionalProperties: type: string - resourceFieldRef: + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: properties: - containerName: - type: string - divisor: - 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 - resource: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + 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 + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic required: - - resource + - path type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - type: object - emptyDir: - properties: - medium: - type: string - sizeLimit: - 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 - type: object - ephemeral: - properties: - volumeClaimTemplate: + type: array + type: object + emptyDir: properties: - metadata: - type: object - spec: + medium: + type: string + sizeLimit: + 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 + type: object + ephemeral: + properties: + volumeClaimTemplate: properties: - accessModes: - items: - type: string - type: array - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - required: - - kind - - name - type: object - x-kubernetes-map-type: atomic - dataSourceRef: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - required: - - kind - - name + metadata: type: object - resources: + spec: properties: - claims: + accessModes: items: - properties: - name: - type: string - required: - - name - type: object + type: string type: array - x-kubernetes-list-map-keys: + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind - name - x-kubernetes-list-type: map - 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 - 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 type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + 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 + 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 + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string + type: object type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeMode: + type: string + volumeName: + type: string type: object - x-kubernetes-map-type: atomic - storageClassName: - type: string - volumeMode: - type: string - volumeName: - type: string + required: + - spec type: object - required: - - spec - type: object - type: object - fc: - properties: - fsType: - type: string - lun: - format: int32 - type: integer - readOnly: - type: boolean - targetWWNs: - items: - type: string - type: array - wwids: - items: - type: string - type: array - type: object - flexVolume: - properties: - driver: - type: string - fsType: - type: string - options: - additionalProperties: - type: string type: object - readOnly: - type: boolean - secretRef: + fc: properties: - name: + fsType: type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + wwids: + items: + type: string + type: array type: object - x-kubernetes-map-type: atomic - required: - - driver - type: object - flocker: - properties: - datasetName: - type: string - datasetUUID: - type: string - type: object - gcePersistentDisk: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - pdName: - type: string - readOnly: - type: boolean - required: - - pdName - type: object - gitRepo: - properties: - directory: - type: string - repository: - type: string - revision: - type: string - required: - - repository - type: object - glusterfs: - properties: - endpoints: - type: string - path: - type: string - readOnly: - type: boolean - required: - - endpoints - - path - type: object - hostPath: - properties: - path: - type: string - type: - type: string - required: - - path - type: object - iscsi: - properties: - chapAuthDiscovery: - type: boolean - chapAuthSession: - type: boolean - fsType: - type: string - initiatorName: - type: string - iqn: - type: string - iscsiInterface: - type: string - lun: - format: int32 - type: integer - portals: - items: - type: string - type: array - readOnly: - type: boolean - secretRef: + flexVolume: properties: - name: + driver: type: string + fsType: + type: string + options: + additionalProperties: + type: string + type: object + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + required: + - driver type: object - x-kubernetes-map-type: atomic - targetPortal: - type: string - required: - - iqn - - lun - - targetPortal - type: object - name: - type: string - nfs: - properties: - path: - type: string - readOnly: - type: boolean - server: - type: string - required: - - path - - server - type: object - persistentVolumeClaim: - properties: - claimName: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - photonPersistentDisk: - properties: - fsType: - type: string - pdID: - type: string - required: - - pdID - type: object - portworxVolume: - properties: - fsType: - type: string - readOnly: - type: boolean - volumeID: + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: type: string - required: - - volumeID - type: object - projected: - properties: - defaultMode: - format: int32 - type: integer - sources: - items: - properties: - configMap: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - downwardAPI: + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: properties: - items: - items: - properties: - fieldRef: + configMap: + properties: + items: + items: properties: - apiVersion: + key: type: string - fieldPath: + mode: + format: int32 + type: integer + path: type: string required: - - fieldPath + - key + - path type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: + type: array + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + downwardAPI: + properties: + items: + items: properties: - containerName: - type: string - divisor: - 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 - resource: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + 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 + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic required: - - resource + - path type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - type: object - secret: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean + type: array + type: object + secret: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object type: object - x-kubernetes-map-type: atomic - serviceAccountToken: + type: array + type: object + quobyte: + properties: + group: + type: string + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: + type: string + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + user: + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + sslEnabled: + type: boolean + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer + items: + items: properties: - audience: + key: type: string - expirationSeconds: - format: int64 + mode: + format: int32 type: integer path: type: string required: + - key - path type: object - type: object - type: array - type: object - quobyte: - properties: - group: - type: string - readOnly: - type: boolean - registry: - type: string - tenant: - type: string - user: - type: string - volume: - type: string - required: - - registry - - volume - type: object - rbd: - properties: - fsType: - type: string - image: - type: string - keyring: - type: string - monitors: - items: - type: string - type: array - pool: - type: string - readOnly: - type: boolean - secretRef: + type: array + optional: + type: boolean + secretName: + type: string + type: object + storageos: properties: - name: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + volumeName: + type: string + volumeNamespace: type: string type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - image - - monitors - type: object - scaleIO: - properties: - fsType: - type: string - gateway: - type: string - protectionDomain: - type: string - readOnly: - type: boolean - secretRef: + vsphereVolume: properties: - name: + fsType: type: string - type: object - x-kubernetes-map-type: atomic - sslEnabled: - type: boolean - storageMode: - type: string - storagePool: - type: string - system: - type: string - volumeName: - type: string - required: - - gateway - - secretRef - - system - type: object - secret: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - optional: - type: boolean - secretName: - type: string - type: object - storageos: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: + storagePolicyID: type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath type: object - x-kubernetes-map-type: atomic - volumeName: - type: string - volumeNamespace: - type: string - type: object - vsphereVolume: - properties: - fsType: - type: string - storagePolicyID: - type: string - storagePolicyName: - type: string - volumePath: - type: string required: - - volumePath + - name type: object - required: - - name - type: object - type: array - affinity: - properties: - nodeAffinity: + type: array + affinity: properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - preference: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - type: object - x-kubernetes-map-type: atomic - weight: - format: int32 - type: integer - required: - - preference - - weight - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: + nodeAffinity: properties: - nodeSelectorTerms: + preferredDuringSchedulingIgnoredDuringExecution: items: properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - type: object - x-kubernetes-map-type: atomic - type: array - required: - - nodeSelectorTerms - type: object - x-kubernetes-map-type: atomic - type: object - podAffinity: - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: - properties: - labelSelector: + preference: properties: matchExpressions: items: @@ -933,15 +812,7 @@ spec: - operator type: object type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - namespaceSelector: - properties: - matchExpressions: + matchFields: items: properties: key: @@ -957,97 +828,135 @@ spec: - operator type: object type: array - matchLabels: - additionalProperties: - type: string - type: object type: object x-kubernetes-map-type: atomic - namespaces: - items: - type: string - type: array - topologyKey: - type: string + weight: + format: int32 + type: integer required: - - topologyKey + - preference + - weight type: object - weight: - format: int32 - type: integer - required: - - podAffinityTerm - - weight - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array type: object - type: object - x-kubernetes-map-type: atomic - namespaceSelector: + x-kubernetes-map-type: atomic + type: array + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: properties: - matchExpressions: - items: - properties: - key: - type: string - operator: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + items: type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string + type: array + topologyKey: + type: string + required: + - topologyKey type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight type: object - x-kubernetes-map-type: atomic - namespaces: - items: - type: string - type: array - topologyKey: - type: string - required: - - topologyKey - type: object - type: array - type: object - podAntiAffinity: - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: properties: labelSelector: properties: @@ -1106,4535 +1015,4462 @@ spec: required: - topologyKey type: object - weight: - format: int32 - type: integer - required: - - podAffinityTerm - - weight - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: - properties: - labelSelector: + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: properties: - matchExpressions: - items: - properties: - key: - type: string - operator: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + items: type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string + type: array + topologyKey: + type: string + required: + - topologyKey type: object - type: object - x-kubernetes-map-type: atomic - namespaceSelector: + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: properties: - matchExpressions: - items: - properties: - key: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: type: string - operator: + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string + type: object type: object + x-kubernetes-map-type: atomic + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey type: object - x-kubernetes-map-type: atomic - namespaces: - items: - type: string - type: array - topologyKey: - type: string - required: - - topologyKey - type: object - type: array + type: array + type: object type: object - type: object - azblob: - properties: - accessTier: - type: string - container: - type: string - path: - type: string - prefix: - type: string - sasToken: - type: string - secretName: - type: string - storageAccount: - type: string - type: object - backoffRetryPolicy: - properties: - maxRetryTimes: - default: 2 - type: integer - minRetryDuration: - default: 300s - type: string - retryTimeout: - default: 30m + azblob: + properties: + accessTier: + type: string + container: + type: string + path: + type: string + prefix: + type: string + sasToken: + type: string + secretName: + type: string + storageAccount: + type: string + type: object + backoffRetryPolicy: + properties: + maxRetryTimes: + default: 2 + type: integer + minRetryDuration: + default: 300s + type: string + retryTimeout: + default: 30m + type: string + type: object + backupMode: + default: snapshot type: string - type: object - backupMode: - default: snapshot - type: string - backupType: - type: string - br: - properties: - checkRequirements: - type: boolean - checksum: - type: boolean - cluster: + backupType: type: string - clusterNamespace: + br: + properties: + checkRequirements: + type: boolean + checksum: + type: boolean + cluster: + type: string + clusterNamespace: + type: string + concurrency: + format: int32 + type: integer + db: + type: string + logLevel: + type: string + onLine: + type: boolean + options: + items: + type: string + type: array + rateLimit: + type: integer + sendCredToTikv: + type: boolean + statusAddr: + type: string + table: + type: string + timeAgo: + type: string + required: + - cluster + type: object + calcSizeLevel: + default: all type: string - concurrency: - format: int32 - type: integer - db: + cleanOption: + properties: + backoffEnabled: + type: boolean + batchConcurrency: + format: int32 + type: integer + disableBatchConcurrency: + type: boolean + pageSize: + format: int64 + type: integer + retryCount: + default: 5 + type: integer + routineConcurrency: + format: int32 + type: integer + snapshotsDeleteRatio: + default: 1 + type: number + type: object + cleanPolicy: type: string - logLevel: + commitTs: type: string - onLine: - type: boolean - options: + dumpling: + properties: + options: + items: + type: string + type: array + tableFilter: + items: + type: string + type: array + type: object + env: items: - type: string - type: array - rateLimit: - type: integer - sendCredToTikv: - type: boolean - statusAddr: - type: string - table: - type: string - timeAgo: - type: string - required: - - cluster - type: object - calcSizeLevel: - default: all - type: string - cleanOption: - properties: - backoffEnabled: - type: boolean - batchConcurrency: - format: int32 - type: integer - disableBatchConcurrency: - type: boolean - pageSize: - format: int64 - type: integer - retryCount: - default: 5 - type: integer - routineConcurrency: - format: int32 - type: integer - snapshotsDeleteRatio: - default: 1 - type: number - type: object - cleanPolicy: - type: string - commitTs: - type: string - dumpling: - properties: - options: - items: - type: string - type: array - tableFilter: - items: - type: string - type: array - type: object - env: - items: - properties: - name: - type: string - value: - type: string - valueFrom: properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - resourceFieldRef: - properties: - containerName: - type: string - divisor: - 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 - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - secretKeyRef: + name: + type: string + value: + type: string + valueFrom: properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + properties: + containerName: + type: string + divisor: + 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 + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic type: object - x-kubernetes-map-type: atomic + required: + - name type: object - required: - - name - type: object - type: array - federalVolumeBackupPhase: - type: string - from: - properties: - host: - type: string - port: - format: int32 - type: integer - secretName: - type: string - tlsClientSecretName: - type: string - user: - type: string - required: - - host - - secretName - type: object - gcs: - properties: - bucket: - type: string - bucketAcl: - type: string - location: - type: string - objectAcl: - type: string - path: - type: string - prefix: - type: string - projectId: - type: string - secretName: - type: string - storageClass: - type: string - required: - - projectId - type: object - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - local: - properties: - prefix: + type: array + federalVolumeBackupPhase: type: string - volume: + from: properties: - awsElasticBlockStore: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - azureDisk: - properties: - cachingMode: - type: string - diskName: - type: string - diskURI: - type: string - fsType: - type: string - kind: - type: string - readOnly: - type: boolean - required: - - diskName - - diskURI - type: object - azureFile: - properties: - readOnly: - type: boolean - secretName: - type: string - shareName: - type: string - required: - - secretName - - shareName - type: object - cephfs: + host: + type: string + port: + format: int32 + type: integer + secretName: + type: string + tlsClientSecretName: + type: string + user: + type: string + required: + - host + - secretName + type: object + gcs: + properties: + bucket: + type: string + bucketAcl: + type: string + location: + type: string + objectAcl: + type: string + path: + type: string + prefix: + type: string + projectId: + type: string + secretName: + type: string + storageClass: + type: string + required: + - projectId + type: object + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + local: + properties: + prefix: + type: string + volume: properties: - monitors: - items: - type: string - type: array - path: - type: string - readOnly: - type: boolean - secretFile: - type: string - secretRef: + awsElasticBlockStore: properties: - name: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: type: string + required: + - volumeID type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - monitors - type: object - cinder: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: + azureDisk: properties: - name: + cachingMode: + type: string + diskName: type: string + diskURI: + type: string + fsType: + type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI type: object - x-kubernetes-map-type: atomic - volumeID: - type: string - required: - - volumeID - type: object - configMap: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - csi: - properties: - driver: - type: string - fsType: - type: string - nodePublishSecretRef: + azureFile: properties: - name: + readOnly: + type: boolean + secretName: + type: string + shareName: type: string + required: + - secretName + - shareName type: object - x-kubernetes-map-type: atomic - readOnly: - type: boolean - volumeAttributes: - additionalProperties: - type: string + cephfs: + properties: + monitors: + items: + type: string + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + user: + type: string + required: + - monitors type: object - required: - - driver - type: object - downwardAPI: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - fieldRef: + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: properties: - apiVersion: + key: type: string - fieldPath: + mode: + format: int32 + type: integer + path: type: string required: - - fieldPath + - key + - path type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - 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 - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - type: object - emptyDir: - properties: - medium: - type: string - sizeLimit: - 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 - type: object - ephemeral: - properties: - volumeClaimTemplate: + type: array + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + csi: properties: - metadata: - type: object - spec: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: properties: - accessModes: - items: + name: + type: string + type: object + x-kubernetes-map-type: atomic + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: type: string - type: array - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - required: - - kind - - name - type: object - x-kubernetes-map-type: atomic - dataSourceRef: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - required: - - kind - - name - type: object - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - 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 - type: object - requests: - additionalProperties: + resourceFieldRef: + properties: + containerName: + type: string + divisor: 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 - type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: + resource: type: string - type: object - type: object - x-kubernetes-map-type: atomic - storageClassName: - type: string - volumeMode: - type: string - volumeName: - type: string - type: object - required: - - spec - type: object - type: object - fc: - properties: - fsType: - type: string - lun: - format: int32 - type: integer - readOnly: - type: boolean - targetWWNs: - items: - type: string - type: array - wwids: - items: - type: string - type: array - type: object - flexVolume: - properties: - driver: - type: string - fsType: - type: string - options: - additionalProperties: - type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array type: object - readOnly: - type: boolean - secretRef: + emptyDir: properties: - name: + medium: type: string + sizeLimit: + 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 type: object - x-kubernetes-map-type: atomic - required: - - driver - type: object - flocker: - properties: - datasetName: - type: string - datasetUUID: - type: string - type: object - gcePersistentDisk: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - pdName: - type: string - readOnly: - type: boolean - required: - - pdName - type: object - gitRepo: - properties: - directory: - type: string - repository: - type: string - revision: - type: string - required: - - repository - type: object - glusterfs: - properties: - endpoints: - type: string - path: - type: string - readOnly: - type: boolean - required: - - endpoints - - path - type: object - hostPath: - properties: - path: - type: string - type: - type: string - required: - - path - type: object - iscsi: - properties: - chapAuthDiscovery: - type: boolean - chapAuthSession: - type: boolean - fsType: - type: string - initiatorName: - type: string - iqn: - type: string - iscsiInterface: - type: string - lun: - format: int32 - type: integer - portals: - items: - type: string - type: array - readOnly: - type: boolean - secretRef: + ephemeral: properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - targetPortal: - type: string - required: - - iqn - - lun - - targetPortal - type: object - name: - type: string - nfs: - properties: - path: - type: string - readOnly: - type: boolean - server: - type: string - required: - - path - - server - type: object - persistentVolumeClaim: - properties: - claimName: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - photonPersistentDisk: - properties: - fsType: - type: string - pdID: - type: string - required: - - pdID - type: object - portworxVolume: - properties: - fsType: - type: string - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - projected: - properties: - defaultMode: - format: int32 - type: integer - sources: - items: - properties: - configMap: - properties: - items: - items: + volumeClaimTemplate: + properties: + metadata: + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + dataSource: properties: - key: + apiGroup: type: string - mode: - format: int32 - type: integer - path: + kind: type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - downwardAPI: - properties: - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: + name: type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - 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 - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic required: - - path + - kind + - name type: object - type: array - type: object - secret: - properties: - items: - items: + x-kubernetes-map-type: atomic + dataSourceRef: properties: - key: + apiGroup: type: string - mode: - format: int32 - type: integer - path: + kind: + type: string + name: + type: string + namespace: type: string required: - - key - - path + - kind + - name type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - serviceAccountToken: - properties: - audience: - type: string - expirationSeconds: - format: int64 - type: integer - path: - type: string - required: - - path - type: object - type: object - type: array - type: object - quobyte: - properties: - group: - type: string - readOnly: - type: boolean - registry: - type: string - tenant: - type: string - user: - type: string - volume: - type: string - required: - - registry - - volume - type: object - rbd: - properties: - fsType: - type: string - image: - type: string - keyring: - type: string - monitors: - items: - type: string - type: array - pool: - type: string - readOnly: - type: boolean - secretRef: + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + 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 + 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 + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object + type: object + fc: properties: - name: + fsType: type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + wwids: + items: + type: string + type: array type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - image - - monitors - type: object - scaleIO: - properties: - fsType: - type: string - gateway: - type: string - protectionDomain: - type: string - readOnly: - type: boolean - secretRef: + flexVolume: properties: - name: + driver: type: string - type: object - x-kubernetes-map-type: atomic - sslEnabled: - type: boolean - storageMode: - type: string - storagePool: - type: string - system: - type: string - volumeName: - type: string - required: - - gateway - - secretRef - - system - type: object - secret: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: + fsType: + type: string + options: + additionalProperties: type: string - required: - - key - - path - type: object - type: array - optional: - type: boolean - secretName: - type: string - type: object - storageos: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: + type: object + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + required: + - driver + type: object + flocker: properties: - name: + datasetName: + type: string + datasetUUID: type: string type: object - x-kubernetes-map-type: atomic - volumeName: - type: string - volumeNamespace: - type: string - type: object - vsphereVolume: - properties: - fsType: - type: string - storagePolicyID: - type: string - storagePolicyName: - type: string - volumePath: - type: string - required: - - volumePath - type: object - required: - - name - type: object - volumeMount: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - required: - - mountPath - - name - type: object - required: - - volume - - volumeMount - type: object - logStop: - type: boolean - logTruncateUntil: - type: string - podSecurityContext: - properties: - fsGroup: - format: int64 - type: integer - fsGroupChangePolicy: - type: string - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - required: - - type - type: object - supplementalGroups: - items: - format: int64 - type: integer - type: array - sysctls: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object - type: object - priorityClassName: - type: string - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - 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 - 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 - type: object - type: object - resumeGcSchedule: - type: boolean - s3: - properties: - acl: - type: string - bucket: - type: string - endpoint: - type: string - options: - items: - type: string - type: array - path: - type: string - prefix: - type: string - provider: - type: string - region: - type: string - secretName: - type: string - sse: - type: string - storageClass: - type: string - required: - - provider - type: object - serviceAccount: - type: string - storageClassName: - type: string - storageSize: - type: string - tableFilter: - items: - type: string - type: array - tikvGCLifeTime: - type: string - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - toolImage: - type: string - useKMS: - type: boolean - volumeBackupInitJobMaxActiveSeconds: - default: 600 - type: integer - type: object - status: - properties: - backoffRetryStatus: - items: - properties: - detectFailedAt: - format: date-time - type: string - expectedRetryAt: - format: date-time - type: string - originalReason: - type: string - realRetryAt: - format: date-time - type: string - retryNum: - type: integer - retryReason: - type: string - type: object - type: array - backupPath: - type: string - backupSize: - format: int64 - type: integer - backupSizeReadable: - type: string - commitTs: - type: string - conditions: - items: - properties: - command: - type: string - lastTransitionTime: - format: date-time - nullable: true - type: string - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - required: - - status - - type - type: object - nullable: true - type: array - incrementalBackupSize: - format: int64 - type: integer - incrementalBackupSizeReadable: - type: string - logCheckpointTs: - type: string - logSubCommandStatuses: - additionalProperties: - properties: - command: - type: string - conditions: - items: - properties: - command: - type: string - lastTransitionTime: - format: date-time - nullable: true - type: string - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - required: - - status - - type - type: object - nullable: true - type: array - logTruncatingUntil: - type: string - phase: - type: string - timeCompleted: - format: date-time - nullable: true - type: string - timeStarted: - format: date-time - nullable: true - type: string - type: object - type: object - logSuccessTruncateUntil: - type: string - phase: - type: string - progresses: - items: - properties: - lastTransitionTime: - format: date-time - nullable: true - type: string - progress: - type: number - step: - type: string - type: object - nullable: true - type: array - timeCompleted: - format: date-time - nullable: true - type: string - timeStarted: - format: date-time - nullable: true - type: string - timeTaken: - type: string - type: object - required: - - metadata - - spec - type: object - served: true - storage: true - subresources: {} ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.15.0 - name: backupschedules.pingcap.com -spec: - group: pingcap.com - names: - kind: BackupSchedule - listKind: BackupScheduleList - plural: backupschedules - shortNames: - - bks - singular: backupschedule - scope: Namespaced - versions: - - additionalPrinterColumns: - - description: The cron format string used for backup scheduling - jsonPath: .spec.schedule - name: Schedule - type: string - - description: The max number of backups we want to keep - jsonPath: .spec.maxBackups - name: MaxBackups - type: integer - - description: How long backups we want to keep - jsonPath: .spec.maxReservedTime - name: MaxReservedTime - type: string - - description: The last backup CR name - jsonPath: .status.lastBackup - name: LastBackup - priority: 1 - type: string - - description: The last time the backup was successfully created - jsonPath: .status.lastBackupTime - name: LastBackupTime - priority: 1 - type: date - - jsonPath: .metadata.creationTimestamp - name: Age - type: date - name: v1alpha1 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - backupTemplate: - properties: - additionalVolumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - required: - - mountPath - - name - type: object - type: array - additionalVolumes: - items: - properties: - awsElasticBlockStore: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - azureDisk: - properties: - cachingMode: - type: string - diskName: - type: string - diskURI: - type: string - fsType: - type: string - kind: - type: string - readOnly: - type: boolean - required: - - diskName - - diskURI - type: object - azureFile: - properties: - readOnly: - type: boolean - secretName: - type: string - shareName: - type: string - required: - - secretName - - shareName - type: object - cephfs: - properties: - monitors: - items: - type: string - type: array - path: - type: string - readOnly: - type: boolean - secretFile: - type: string - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - monitors - type: object - cinder: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - volumeID: - type: string - required: - - volumeID - type: object - configMap: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - csi: - properties: - driver: - type: string - fsType: - type: string - nodePublishSecretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - readOnly: - type: boolean - volumeAttributes: - additionalProperties: - type: string - type: object - required: - - driver - type: object - downwardAPI: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - 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 - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - type: object - emptyDir: - properties: - medium: - type: string - sizeLimit: - 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 - type: object - ephemeral: - properties: - volumeClaimTemplate: - properties: - metadata: - type: object - spec: - properties: - accessModes: - items: - type: string - type: array - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - required: - - kind - - name - type: object - x-kubernetes-map-type: atomic - dataSourceRef: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - required: - - kind - - name - type: object - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - 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 - 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 - type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - storageClassName: - type: string - volumeMode: - type: string - volumeName: - type: string - type: object - required: - - spec - type: object - type: object - fc: - properties: - fsType: - type: string - lun: - format: int32 - type: integer - readOnly: - type: boolean - targetWWNs: - items: - type: string - type: array - wwids: - items: - type: string - type: array - type: object - flexVolume: - properties: - driver: - type: string - fsType: - type: string - options: - additionalProperties: - type: string - type: object - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - required: - - driver - type: object - flocker: - properties: - datasetName: - type: string - datasetUUID: - type: string - type: object - gcePersistentDisk: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - pdName: - type: string - readOnly: - type: boolean - required: - - pdName - type: object - gitRepo: - properties: - directory: - type: string - repository: - type: string - revision: - type: string - required: - - repository - type: object - glusterfs: - properties: - endpoints: - type: string - path: - type: string - readOnly: - type: boolean - required: - - endpoints - - path - type: object - hostPath: - properties: - path: - type: string - type: - type: string - required: - - path - type: object - iscsi: - properties: - chapAuthDiscovery: - type: boolean - chapAuthSession: - type: boolean - fsType: - type: string - initiatorName: - type: string - iqn: - type: string - iscsiInterface: - type: string - lun: - format: int32 - type: integer - portals: - items: - type: string - type: array - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - targetPortal: - type: string - required: - - iqn - - lun - - targetPortal - type: object - name: - type: string - nfs: - properties: - path: - type: string - readOnly: - type: boolean - server: - type: string - required: - - path - - server - type: object - persistentVolumeClaim: - properties: - claimName: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - photonPersistentDisk: - properties: - fsType: - type: string - pdID: - type: string - required: - - pdID - type: object - portworxVolume: - properties: - fsType: - type: string - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - projected: - properties: - defaultMode: - format: int32 - type: integer - sources: - items: - properties: - configMap: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - downwardAPI: - properties: - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - 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 - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - type: object - secret: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - serviceAccountToken: - properties: - audience: - type: string - expirationSeconds: - format: int64 - type: integer - path: - type: string - required: - - path - type: object - type: object - type: array - type: object - quobyte: - properties: - group: - type: string - readOnly: - type: boolean - registry: - type: string - tenant: - type: string - user: - type: string - volume: - type: string - required: - - registry - - volume - type: object - rbd: - properties: - fsType: - type: string - image: - type: string - keyring: - type: string - monitors: - items: - type: string - type: array - pool: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - image - - monitors - type: object - scaleIO: - properties: - fsType: - type: string - gateway: - type: string - protectionDomain: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - sslEnabled: - type: boolean - storageMode: - type: string - storagePool: - type: string - system: - type: string - volumeName: - type: string - required: - - gateway - - secretRef - - system - type: object - secret: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - optional: - type: boolean - secretName: - type: string - type: object - storageos: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - volumeName: - type: string - volumeNamespace: - type: string - type: object - vsphereVolume: - properties: - fsType: - type: string - storagePolicyID: - type: string - storagePolicyName: - type: string - volumePath: - type: string - required: - - volumePath - type: object - required: - - name - type: object - type: array - affinity: - properties: - nodeAffinity: - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - preference: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - type: object - x-kubernetes-map-type: atomic - weight: - format: int32 - type: integer - required: - - preference - - weight - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: + gcePersistentDisk: properties: - nodeSelectorTerms: - items: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - type: object - x-kubernetes-map-type: atomic - type: array + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean required: - - nodeSelectorTerms + - pdName type: object - x-kubernetes-map-type: atomic - type: object - podAffinity: - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - namespaces: - items: - type: string - type: array - topologyKey: - type: string - required: - - topologyKey - type: object - weight: - format: int32 - type: integer - required: - - podAffinityTerm - - weight - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - namespaces: - items: - type: string - type: array - topologyKey: + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: type: string - required: - - topologyKey - type: object - type: array - type: object - podAntiAffinity: - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: + type: array + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + type: string + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: properties: - labelSelector: + configMap: properties: - matchExpressions: + items: items: properties: key: type: string - operator: + mode: + format: int32 + type: integer + path: type: string - values: - items: - type: string - type: array required: - key - - operator + - path type: object type: array - matchLabels: - additionalProperties: - type: string - type: object + name: + type: string + optional: + type: boolean type: object x-kubernetes-map-type: atomic - namespaceSelector: + downwardAPI: properties: - matchExpressions: + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + 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 + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + secret: + properties: + items: items: properties: key: type: string - operator: + mode: + format: int32 + type: integer + path: type: string - values: - items: - type: string - type: array required: - key - - operator + - path type: object type: array - matchLabels: - additionalProperties: - type: string - type: object + name: + type: string + optional: + type: boolean type: object x-kubernetes-map-type: atomic - namespaces: - items: - type: string - type: array - topologyKey: + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + type: object + quobyte: + properties: + group: + type: string + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: + type: string + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + user: + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + sslEnabled: + type: boolean + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: type: string required: - - topologyKey - type: object - weight: - format: int32 - type: integer - required: - - podAffinityTerm - - weight - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object + - key + - path type: object - x-kubernetes-map-type: atomic - namespaces: - items: + type: array + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: type: string - type: array - topologyKey: - type: string - required: - - topologyKey - type: object - type: array + type: object + x-kubernetes-map-type: atomic + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + required: + - name + type: object + volumeMount: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + required: + - volume + - volumeMount + type: object + logStop: + type: boolean + logSubcommand: + default: start + type: string + logTruncateUntil: + type: string + podSecurityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + priorityClassName: + type: string + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + 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 + 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 type: object type: object - azblob: + resumeGcSchedule: + type: boolean + s3: properties: - accessTier: + acl: type: string - container: + bucket: + type: string + endpoint: type: string + options: + items: + type: string + type: array path: type: string prefix: type: string - sasToken: - type: string - secretName: - type: string - storageAccount: - type: string - type: object - backoffRetryPolicy: - properties: - maxRetryTimes: - default: 2 - type: integer - minRetryDuration: - default: 300s - type: string - retryTimeout: - default: 30m - type: string - type: object - backupMode: - default: snapshot - type: string - backupType: - type: string - br: - properties: - checkRequirements: - type: boolean - checksum: - type: boolean - cluster: - type: string - clusterNamespace: - type: string - concurrency: - format: int32 - type: integer - db: + provider: type: string - logLevel: + region: type: string - onLine: - type: boolean - options: - items: - type: string - type: array - rateLimit: - type: integer - sendCredToTikv: - type: boolean - statusAddr: + secretName: type: string - table: + sse: type: string - timeAgo: + storageClass: type: string required: - - cluster + - provider type: object - calcSizeLevel: - default: all + serviceAccount: type: string - cleanOption: - properties: - backoffEnabled: - type: boolean - batchConcurrency: - format: int32 - type: integer - disableBatchConcurrency: - type: boolean - pageSize: - format: int64 - type: integer - retryCount: - default: 5 - type: integer - routineConcurrency: - format: int32 - type: integer - snapshotsDeleteRatio: - default: 1 - type: number - type: object - cleanPolicy: + storageClassName: type: string - commitTs: + storageSize: type: string - dumpling: - properties: - options: - items: + tableFilter: + items: + type: string + type: array + tikvGCLifeTime: + type: string + tolerations: + items: + properties: + effect: type: string - type: array - tableFilter: - items: + key: type: string - type: array - type: object - env: + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + toolImage: + type: string + useKMS: + type: boolean + volumeBackupInitJobMaxActiveSeconds: + default: 600 + type: integer + type: object + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + logBackupTemplate: + properties: + additionalVolumeMounts: items: properties: + mountPath: + type: string + mountPropagation: + type: string name: type: string - value: + readOnly: + type: boolean + subPath: type: string - valueFrom: + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + additionalVolumes: + items: + properties: + awsElasticBlockStore: properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - resourceFieldRef: - properties: - containerName: - type: string - divisor: - 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 - resource: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: + type: string + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: + properties: + name: type: string - required: - - resource type: object x-kubernetes-map-type: atomic - secretKeyRef: + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: properties: - key: - type: string name: type: string - optional: - type: boolean - required: - - key type: object x-kubernetes-map-type: atomic + volumeID: + type: string + required: + - volumeID type: object - required: - - name - type: object - type: array - federalVolumeBackupPhase: - type: string - from: - properties: - host: - type: string - port: - format: int32 - type: integer - secretName: - type: string - tlsClientSecretName: - type: string - user: - type: string - required: - - host - - secretName - type: object - gcs: - properties: - bucket: - type: string - bucketAcl: - type: string - location: - type: string - objectAcl: - type: string - path: - type: string - prefix: - type: string - projectId: - type: string - secretName: - type: string - storageClass: - type: string - required: - - projectId - type: object - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - local: - properties: - prefix: - type: string - volume: - properties: - awsElasticBlockStore: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - azureDisk: - properties: - cachingMode: - type: string - diskName: - type: string - diskURI: - type: string - fsType: - type: string - kind: - type: string - readOnly: - type: boolean - required: - - diskName - - diskURI - type: object - azureFile: - properties: - readOnly: - type: boolean - secretName: - type: string - shareName: - type: string - required: - - secretName - - shareName - type: object - cephfs: - properties: - monitors: - items: - type: string - type: array - path: - type: string - readOnly: - type: boolean - secretFile: - type: string - secretRef: + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: properties: - name: + key: type: string - type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - monitors - type: object - cinder: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: + mode: + format: int32 + type: integer + path: type: string + required: + - key + - path type: object - x-kubernetes-map-type: atomic - volumeID: + type: array + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + readOnly: + type: boolean + volumeAttributes: + additionalProperties: type: string - required: - - volumeID - type: object - configMap: - properties: - defaultMode: - format: int32 - type: integer + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: items: - items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + 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 + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + 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 + type: object + ephemeral: + properties: + volumeClaimTemplate: + properties: + metadata: + type: object + spec: properties: - key: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + 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 + 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 + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: type: string - mode: - format: int32 - type: integer - path: + volumeMode: + type: string + volumeName: type: string - required: - - key - - path type: object - type: array - name: + required: + - spec + type: object + type: object + fc: + properties: + fsType: + type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - csi: - properties: - driver: + type: array + wwids: + items: type: string - fsType: + type: array + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: type: string - nodePublishSecretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - readOnly: - type: boolean - volumeAttributes: - additionalProperties: + type: object + readOnly: + type: boolean + secretRef: + properties: + name: type: string - type: object - required: - - driver - type: object - downwardAPI: - properties: - defaultMode: - format: int32 - type: integer + type: object + x-kubernetes-map-type: atomic + required: + - driver + type: object + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - 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 - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - type: object - emptyDir: - properties: - medium: type: string - sizeLimit: - 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 - type: object - ephemeral: - properties: - volumeClaimTemplate: + type: array + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + type: string + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: properties: - metadata: - type: object - spec: + configMap: properties: - accessModes: + items: items: - type: string + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object type: array - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - required: - - kind - - name - type: object - x-kubernetes-map-type: atomic - dataSourceRef: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - required: - - kind - - name - type: object - resources: - properties: - claims: - items: + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + downwardAPI: + properties: + items: + items: + properties: + fieldRef: properties: - name: + apiVersion: + type: string + fieldPath: type: string required: - - name + - fieldPath type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - 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 - 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 - type: object - type: object - selector: - properties: - matchExpressions: - items: + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: properties: - key: + containerName: type: string - operator: + divisor: + 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 + resource: type: string - values: - items: - type: string - type: array required: - - key - - operator + - resource type: object - type: array - matchLabels: - additionalProperties: + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + secret: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: type: string - type: object - type: object - x-kubernetes-map-type: atomic - storageClassName: + required: + - key + - path + type: object + type: array + name: type: string - volumeMode: + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + serviceAccountToken: + properties: + audience: type: string - volumeName: + expirationSeconds: + format: int64 + type: integer + path: type: string + required: + - path type: object - required: - - spec type: object - type: object - fc: - properties: - fsType: + type: array + type: object + quobyte: + properties: + group: + type: string + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: type: string - lun: - format: int32 - type: integer - readOnly: - type: boolean - targetWWNs: - items: - type: string - type: array - wwids: - items: + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: type: string - type: array - type: object - flexVolume: - properties: - driver: - type: string - fsType: - type: string - options: - additionalProperties: + type: object + x-kubernetes-map-type: atomic + user: + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: type: string - type: object - readOnly: - type: boolean - secretRef: + type: object + x-kubernetes-map-type: atomic + sslEnabled: + type: boolean + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer + items: + items: properties: - name: + key: + type: string + mode: + format: int32 + type: integer + path: type: string + required: + - key + - path type: object - x-kubernetes-map-type: atomic - required: - - driver - type: object - flocker: - properties: - datasetName: - type: string - datasetUUID: - type: string - type: object - gcePersistentDisk: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - pdName: - type: string - readOnly: - type: boolean - required: - - pdName - type: object - gitRepo: - properties: - directory: - type: string - repository: - type: string - revision: - type: string - required: - - repository - type: object - glusterfs: - properties: - endpoints: - type: string - path: - type: string - readOnly: - type: boolean - required: - - endpoints - - path - type: object - hostPath: - properties: - path: - type: string - type: - type: string - required: - - path - type: object - iscsi: + type: array + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: properties: - chapAuthDiscovery: - type: boolean - chapAuthSession: - type: boolean - fsType: - type: string - initiatorName: - type: string - iqn: - type: string - iscsiInterface: - type: string - lun: - format: int32 - type: integer - portals: + nodeSelectorTerms: items: - type: string + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic type: array - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - targetPortal: - type: string - required: - - iqn - - lun - - targetPortal - type: object - name: - type: string - nfs: - properties: - path: - type: string - readOnly: - type: boolean - server: - type: string - required: - - path - - server - type: object - persistentVolumeClaim: - properties: - claimName: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - photonPersistentDisk: - properties: - fsType: - type: string - pdID: - type: string - required: - - pdID - type: object - portworxVolume: - properties: - fsType: - type: string - readOnly: - type: boolean - volumeID: - type: string required: - - volumeID + - nodeSelectorTerms type: object - projected: - properties: - defaultMode: - format: int32 - type: integer - sources: - items: + x-kubernetes-map-type: atomic + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: properties: - configMap: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: properties: - items: + matchExpressions: items: properties: key: type: string - mode: - format: int32 - type: integer - path: + operator: type: string + values: + items: + type: string + type: array required: - key - - path + - operator type: object type: array - name: - type: string - optional: - type: boolean + matchLabels: + additionalProperties: + type: string + type: object type: object x-kubernetes-map-type: atomic - downwardAPI: - properties: - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - 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 - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - type: object - secret: + namespaceSelector: properties: - items: + matchExpressions: items: properties: key: type: string - mode: - format: int32 - type: integer - path: + operator: type: string + values: + items: + type: string + type: array required: - key - - path + - operator type: object type: array - name: - type: string - optional: - type: boolean + matchLabels: + additionalProperties: + type: string + type: object type: object x-kubernetes-map-type: atomic - serviceAccountToken: - properties: - audience: - type: string - expirationSeconds: - format: int64 - type: integer - path: - type: string - required: - - path - type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey type: object - type: array - type: object - quobyte: - properties: - group: - type: string - readOnly: - type: boolean - registry: - type: string - tenant: - type: string - user: - type: string - volume: - type: string - required: - - registry - - volume - type: object - rbd: - properties: - fsType: - type: string - image: - type: string - keyring: - type: string - monitors: - items: - type: string - type: array - pool: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - image - - monitors - type: object - scaleIO: - properties: - fsType: - type: string - gateway: - type: string - protectionDomain: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - sslEnabled: - type: boolean - storageMode: - type: string - storagePool: - type: string - system: - type: string - volumeName: - type: string - required: - - gateway - - secretRef - - system - type: object - secret: - properties: - defaultMode: - format: int32 - type: integer - items: - items: + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object type: object - type: array - optional: - type: boolean - secretName: - type: string - type: object - storageos: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: + x-kubernetes-map-type: atomic + namespaces: + items: type: string - type: object - x-kubernetes-map-type: atomic - volumeName: - type: string - volumeNamespace: - type: string - type: object - vsphereVolume: - properties: - fsType: - type: string - storagePolicyID: - type: string - storagePolicyName: - type: string - volumePath: - type: string - required: - - volumePath - type: object - required: - - name - type: object - volumeMount: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - required: - - mountPath - - name + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array type: object - required: - - volume - - volumeMount type: object - logStop: - type: boolean - logTruncateUntil: - type: string - podSecurityContext: + azblob: properties: - fsGroup: - format: int64 - type: integer - fsGroupChangePolicy: + accessTier: + type: string + container: + type: string + path: + type: string + prefix: + type: string + sasToken: + type: string + secretName: + type: string + storageAccount: type: string - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - required: - - type - type: object - supplementalGroups: - items: - format: int64 - type: integer - type: array - sysctls: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object type: object - priorityClassName: - type: string - resources: + backoffRetryPolicy: properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - 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 - 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 - type: object + maxRetryTimes: + default: 2 + type: integer + minRetryDuration: + default: 300s + type: string + retryTimeout: + default: 30m + type: string type: object - resumeGcSchedule: - type: boolean - s3: + backupMode: + default: snapshot + type: string + backupType: + type: string + br: properties: - acl: + checkRequirements: + type: boolean + checksum: + type: boolean + cluster: + type: string + clusterNamespace: type: string - bucket: + concurrency: + format: int32 + type: integer + db: type: string - endpoint: + logLevel: type: string + onLine: + type: boolean options: items: type: string type: array - path: - type: string - prefix: - type: string - provider: - type: string - region: - type: string - secretName: + rateLimit: + type: integer + sendCredToTikv: + type: boolean + statusAddr: type: string - sse: + table: type: string - storageClass: + timeAgo: type: string required: - - provider + - cluster type: object - serviceAccount: - type: string - storageClassName: + calcSizeLevel: + default: all type: string - storageSize: + cleanOption: + properties: + backoffEnabled: + type: boolean + batchConcurrency: + format: int32 + type: integer + disableBatchConcurrency: + type: boolean + pageSize: + format: int64 + type: integer + retryCount: + default: 5 + type: integer + routineConcurrency: + format: int32 + type: integer + snapshotsDeleteRatio: + default: 1 + type: number + type: object + cleanPolicy: type: string - tableFilter: - items: - type: string - type: array - tikvGCLifeTime: + commitTs: type: string - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: + dumpling: + properties: + options: + items: type: string - tolerationSeconds: - format: int64 - type: integer - value: + type: array + tableFilter: + items: type: string - type: object - type: array - toolImage: - type: string - useKMS: - type: boolean - volumeBackupInitJobMaxActiveSeconds: - default: 600 - type: integer - type: object - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - logBackupTemplate: - properties: - additionalVolumeMounts: + type: array + type: object + env: items: properties: - mountPath: - type: string - mountPropagation: - type: string name: type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: + value: type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + properties: + containerName: + type: string + divisor: + 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 + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object required: - - mountPath - name type: object type: array - additionalVolumes: - items: - properties: - awsElasticBlockStore: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - azureDisk: - properties: - cachingMode: - type: string - diskName: - type: string - diskURI: - type: string - fsType: - type: string - kind: - type: string - readOnly: - type: boolean - required: - - diskName - - diskURI - type: object - azureFile: - properties: - readOnly: - type: boolean - secretName: - type: string - shareName: - type: string - required: - - secretName - - shareName - type: object - cephfs: - properties: - monitors: - items: + federalVolumeBackupPhase: + type: string + from: + properties: + host: + type: string + port: + format: int32 + type: integer + secretName: + type: string + tlsClientSecretName: + type: string + user: + type: string + required: + - host + - secretName + type: object + gcs: + properties: + bucket: + type: string + bucketAcl: + type: string + location: + type: string + objectAcl: + type: string + path: + type: string + prefix: + type: string + projectId: + type: string + secretName: + type: string + storageClass: + type: string + required: + - projectId + type: object + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + local: + properties: + prefix: + type: string + volume: + properties: + awsElasticBlockStore: + properties: + fsType: type: string - type: array - path: - type: string - readOnly: - type: boolean - secretFile: - type: string - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - monitors - type: object - cinder: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: type: string - type: object - x-kubernetes-map-type: atomic - volumeID: - type: string - required: - - volumeID - type: object - configMap: - properties: - defaultMode: - format: int32 - type: integer - items: - items: + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: properties: - key: + name: type: string - mode: - format: int32 - type: integer - path: + type: object + x-kubernetes-map-type: atomic + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: type: string - required: - - key - - path type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - csi: - properties: - driver: - type: string - fsType: - type: string - nodePublishSecretRef: - properties: - name: + x-kubernetes-map-type: atomic + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + readOnly: + type: boolean + volumeAttributes: + additionalProperties: type: string - type: object - x-kubernetes-map-type: atomic - readOnly: - type: boolean - volumeAttributes: - additionalProperties: + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + 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 + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: type: string - type: object - required: - - driver - type: object - downwardAPI: - properties: - defaultMode: - format: int32 - type: integer - items: - items: + sizeLimit: + 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 + type: object + ephemeral: + properties: + volumeClaimTemplate: properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath + metadata: type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: + spec: properties: - containerName: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + 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 + 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 + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: type: string - divisor: - 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 - resource: + volumeMode: + type: string + volumeName: type: string - required: - - resource type: object - x-kubernetes-map-type: atomic required: - - path + - spec + type: object + type: object + fc: + properties: + fsType: + type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + wwids: + items: + type: string + type: array + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string + type: object + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + required: + - driver + type: object + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + readOnly: + type: boolean + secretRef: + properties: + name: + type: string type: object - type: array - type: object - emptyDir: - properties: - medium: - type: string - sizeLimit: - 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 - type: object - ephemeral: - properties: - volumeClaimTemplate: - properties: - metadata: - type: object - spec: + x-kubernetes-map-type: atomic + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + type: string + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: properties: - accessModes: - items: - type: string - type: array - dataSource: + configMap: properties: - apiGroup: - type: string - kind: - type: string + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array name: type: string - required: - - kind - - name + optional: + type: boolean type: object x-kubernetes-map-type: atomic - dataSourceRef: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - required: - - kind - - name - type: object - resources: + downwardAPI: properties: - claims: + items: items: properties: - name: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + 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 + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic required: - - name + - path type: object type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - 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 - 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 - type: object type: object - selector: + secret: properties: - matchExpressions: + items: items: properties: key: type: string - operator: + mode: + format: int32 + type: integer + path: type: string - values: - items: - type: string - type: array required: - key - - operator + - path type: object type: array - matchLabels: - additionalProperties: - type: string - type: object + name: + type: string + optional: + type: boolean type: object x-kubernetes-map-type: atomic - storageClassName: - type: string - volumeMode: + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + type: object + quobyte: + properties: + group: + type: string + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: + type: string + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + user: + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + sslEnabled: + type: boolean + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: type: string - volumeName: + mode: + format: int32 + type: integer + path: type: string + required: + - key + - path type: object - required: - - spec - type: object - type: object - fc: - properties: - fsType: - type: string - lun: - format: int32 - type: integer - readOnly: - type: boolean - targetWWNs: - items: + type: array + optional: + type: boolean + secretName: type: string - type: array - wwids: - items: + type: object + storageos: + properties: + fsType: type: string - type: array - type: object - flexVolume: + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + required: + - name + type: object + volumeMount: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + required: + - volume + - volumeMount + type: object + logStop: + type: boolean + logSubcommand: + default: start + type: string + logTruncateUntil: + type: string + podSecurityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: + type: boolean + runAsUser: + format: int64 + type: integer + seLinuxOptions: + properties: + level: + type: string + role: + type: string + type: + type: string + user: + type: string + type: object + seccompProfile: + properties: + localhostProfile: + type: string + type: + type: string + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: properties: - driver: + name: type: string - fsType: + value: type: string - options: - additionalProperties: - type: string - type: object - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic required: - - driver + - name + - value type: object - flocker: + type: array + windowsOptions: + properties: + gmsaCredentialSpec: + type: string + gmsaCredentialSpecName: + type: string + hostProcess: + type: boolean + runAsUserName: + type: string + type: object + type: object + priorityClassName: + type: string + resources: + properties: + claims: + items: properties: - datasetName: - type: string - datasetUUID: + name: type: string + required: + - name type: object - gcePersistentDisk: + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + 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 + 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 + type: object + type: object + resumeGcSchedule: + type: boolean + s3: + properties: + acl: + type: string + bucket: + type: string + endpoint: + type: string + options: + items: + type: string + type: array + path: + type: string + prefix: + type: string + provider: + type: string + region: + type: string + secretName: + type: string + sse: + type: string + storageClass: + type: string + required: + - provider + type: object + serviceAccount: + type: string + storageClassName: + type: string + storageSize: + type: string + tableFilter: + items: + type: string + type: array + tikvGCLifeTime: + type: string + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + toolImage: + type: string + useKMS: + type: boolean + volumeBackupInitJobMaxActiveSeconds: + default: 600 + type: integer + type: object + maxBackups: + format: int32 + type: integer + maxReservedTime: + type: string + pause: + type: boolean + schedule: + type: string + storageClassName: + type: string + storageSize: + type: string + required: + - backupTemplate + - schedule + type: object + status: + properties: + allBackupCleanTime: + format: date-time + type: string + lastBackup: + type: string + lastBackupTime: + format: date-time + type: string + logBackup: + type: string + type: object + required: + - metadata + - spec + type: object + served: true + storage: true + subresources: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.15.0 + name: backups.pingcap.com +spec: + group: pingcap.com + names: + kind: Backup + listKind: BackupList + plural: backups + shortNames: + - bk + singular: backup + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: the type of backup, such as full, db, table. Only used when Mode + = snapshot. + jsonPath: .spec.backupType + name: Type + type: string + - description: the mode of backup, such as snapshot, log. + jsonPath: .spec.backupMode + name: Mode + type: string + - description: The current status of the backup + jsonPath: .status.phase + name: Status + type: string + - description: The full path of backup data + jsonPath: .status.backupPath + name: BackupPath + type: string + - description: The data size of the backup + jsonPath: .status.backupSizeReadable + name: BackupSize + type: string + - description: The real size of volume snapshot backup, only valid to volume snapshot + backup + jsonPath: .status.incrementalBackupSizeReadable + name: IncrementalBackupSize + priority: 10 + type: string + - description: The commit ts of the backup + jsonPath: .status.commitTs + name: CommitTS + type: string + - description: The log backup truncate until ts + jsonPath: .status.logSuccessTruncateUntil + name: LogTruncateUntil + type: string + - description: The time at which the backup was started + jsonPath: .status.timeStarted + name: Started + priority: 1 + type: date + - description: The time at which the backup was completed + jsonPath: .status.timeCompleted + name: Completed + priority: 1 + type: date + - description: The time that the backup takes + jsonPath: .status.timeTaken + name: TimeTaken + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + additionalVolumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + additionalVolumes: + items: + properties: + awsElasticBlockStore: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: + type: string + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: properties: - fsType: - type: string - partition: - format: int32 - type: integer - pdName: + name: type: string - readOnly: - type: boolean - required: - - pdName type: object - gitRepo: + x-kubernetes-map-type: atomic + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: properties: - directory: - type: string - repository: - type: string - revision: + name: type: string - required: - - repository type: object - glusterfs: + x-kubernetes-map-type: atomic + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: properties: - endpoints: - type: string - path: + name: type: string - readOnly: - type: boolean - required: - - endpoints - - path type: object - hostPath: - properties: - path: - type: string - type: - type: string - required: - - path + x-kubernetes-map-type: atomic + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string type: object - iscsi: - properties: - chapAuthDiscovery: - type: boolean - chapAuthSession: - type: boolean - fsType: - type: string - initiatorName: - type: string - iqn: - type: string - iscsiInterface: - type: string - lun: - format: int32 - type: integer - portals: - items: + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: type: string - type: array - readOnly: - type: boolean - secretRef: + resourceFieldRef: + properties: + containerName: + type: string + divisor: + 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 + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + 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 + type: object + ephemeral: + properties: + volumeClaimTemplate: + properties: + metadata: + type: object + spec: properties: - name: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + 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 + 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 + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeMode: + type: string + volumeName: type: string type: object - x-kubernetes-map-type: atomic - targetPortal: - type: string required: - - iqn - - lun - - targetPortal + - spec type: object - name: + type: object + fc: + properties: + fsType: type: string - nfs: - properties: - path: - type: string - readOnly: - type: boolean - server: - type: string - required: - - path - - server - type: object - persistentVolumeClaim: - properties: - claimName: - type: string - readOnly: - type: boolean - required: - - claimName + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + wwids: + items: + type: string + type: array + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string type: object - photonPersistentDisk: + readOnly: + type: boolean + secretRef: properties: - fsType: - type: string - pdID: + name: type: string - required: - - pdID type: object - portworxVolume: + x-kubernetes-map-type: atomic + required: + - driver + type: object + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + readOnly: + type: boolean + secretRef: properties: - fsType: - type: string - readOnly: - type: boolean - volumeID: + name: type: string - required: - - volumeID type: object - projected: - properties: - defaultMode: - format: int32 - type: integer - sources: - items: + x-kubernetes-map-type: atomic + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + type: string + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + configMap: properties: - configMap: - properties: - items: - items: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + downwardAPI: + properties: + items: + items: + properties: + fieldRef: properties: - key: - type: string - mode: - format: int32 - type: integer - path: + apiVersion: type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - downwardAPI: - properties: - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: + fieldPath: type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - 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 - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic required: - - path + - fieldPath type: object - type: array - type: object - secret: - properties: - items: - items: + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: properties: - key: + containerName: type: string - mode: - format: int32 - type: integer - path: + divisor: + 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 + resource: type: string required: - - key - - path + - resource type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - serviceAccountToken: - properties: - audience: - type: string - expirationSeconds: - format: int64 - type: integer - path: - type: string - required: - - path - type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array type: object - type: array - type: object - quobyte: - properties: - group: - type: string - readOnly: - type: boolean - registry: - type: string - tenant: - type: string - user: - type: string - volume: - type: string - required: - - registry - - volume - type: object - rbd: - properties: - fsType: - type: string - image: - type: string - keyring: - type: string - monitors: - items: - type: string - type: array - pool: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - image - - monitors - type: object - scaleIO: - properties: - fsType: - type: string - gateway: - type: string - protectionDomain: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - sslEnabled: - type: boolean - storageMode: - type: string - storagePool: - type: string - system: - type: string - volumeName: - type: string - required: - - gateway - - secretRef - - system - type: object - secret: - properties: - defaultMode: - format: int32 - type: integer - items: - items: + secret: properties: - key: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + serviceAccountToken: + properties: + audience: type: string - mode: - format: int32 + expirationSeconds: + format: int64 type: integer path: type: string required: - - key - path type: object - type: array - optional: - type: boolean - secretName: - type: string - type: object - storageos: + type: object + type: array + type: object + quobyte: + properties: + group: + type: string + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: + type: string + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - volumeName: - type: string - volumeNamespace: + name: type: string type: object - vsphereVolume: + x-kubernetes-map-type: atomic + user: + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: properties: - fsType: - type: string - storagePolicyID: - type: string - storagePolicyName: - type: string - volumePath: + name: type: string - required: - - volumePath type: object + x-kubernetes-map-type: atomic + sslEnabled: + type: boolean + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string required: - - name + - gateway + - secretRef + - system type: object - type: array - affinity: - properties: - nodeAffinity: - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - preference: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - type: object - x-kubernetes-map-type: atomic - weight: - format: int32 - type: integer - required: - - preference - - weight - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: + secret: + properties: + defaultMode: + format: int32 + type: integer + items: + items: properties: - nodeSelectorTerms: - items: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - type: object - x-kubernetes-map-type: atomic - type: array + key: + type: string + mode: + format: int32 + type: integer + path: + type: string required: - - nodeSelectorTerms + - key + - path type: object - x-kubernetes-map-type: atomic - type: object - podAffinity: + type: array + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + x-kubernetes-map-type: atomic + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: properties: - preferredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: items: properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - namespaces: - items: + matchExpressions: + items: + properties: + key: type: string - type: array - topologyKey: - type: string - required: - - topologyKey - type: object - weight: - format: int32 - type: integer - required: - - podAffinityTerm - - weight + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array type: object + x-kubernetes-map-type: atomic type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: + required: + - nodeSelectorTerms + type: object + x-kubernetes-map-type: atomic + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: properties: labelSelector: properties: @@ -5693,82 +5529,82 @@ spec: required: - topologyKey type: object - type: array - type: object - podAntiAffinity: - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - namespaces: - items: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: type: string - type: array - topologyKey: - type: string - required: - - topologyKey + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string type: object - weight: - format: int32 - type: integer - required: - - podAffinityTerm - - weight type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: + x-kubernetes-map-type: atomic + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: properties: labelSelector: properties: @@ -5827,1164 +5663,1337 @@ spec: required: - topologyKey type: object - type: array - type: object - type: object - azblob: - properties: - accessTier: - type: string - container: - type: string - path: - type: string - prefix: - type: string - sasToken: - type: string - secretName: - type: string - storageAccount: - type: string - type: object - backoffRetryPolicy: - properties: - maxRetryTimes: - default: 2 - type: integer - minRetryDuration: - default: 300s - type: string - retryTimeout: - default: 30m - type: string - type: object - backupMode: - default: snapshot - type: string - backupType: - type: string - br: - properties: - checkRequirements: - type: boolean - checksum: - type: boolean - cluster: - type: string - clusterNamespace: - type: string - concurrency: - format: int32 - type: integer - db: - type: string - logLevel: - type: string - onLine: - type: boolean - options: + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: items: - type: string + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object type: array - rateLimit: - type: integer - sendCredToTikv: - type: boolean - statusAddr: - type: string - table: - type: string - timeAgo: - type: string - required: - - cluster type: object - calcSizeLevel: - default: all + type: object + azblob: + properties: + accessTier: + type: string + container: + type: string + path: + type: string + prefix: + type: string + sasToken: + type: string + secretName: + type: string + storageAccount: + type: string + type: object + backoffRetryPolicy: + properties: + maxRetryTimes: + default: 2 + type: integer + minRetryDuration: + default: 300s + type: string + retryTimeout: + default: 30m + type: string + type: object + backupMode: + default: snapshot + type: string + backupType: + type: string + br: + properties: + checkRequirements: + type: boolean + checksum: + type: boolean + cluster: + type: string + clusterNamespace: + type: string + concurrency: + format: int32 + type: integer + db: + type: string + logLevel: + type: string + onLine: + type: boolean + options: + items: + type: string + type: array + rateLimit: + type: integer + sendCredToTikv: + type: boolean + statusAddr: type: string - cleanOption: - properties: - backoffEnabled: - type: boolean - batchConcurrency: - format: int32 - type: integer - disableBatchConcurrency: - type: boolean - pageSize: - format: int64 - type: integer - retryCount: - default: 5 - type: integer - routineConcurrency: - format: int32 - type: integer - snapshotsDeleteRatio: - default: 1 - type: number - type: object - cleanPolicy: + table: type: string - commitTs: + timeAgo: type: string - dumpling: - properties: - options: - items: - type: string - type: array - tableFilter: - items: - type: string - type: array - type: object - env: + required: + - cluster + type: object + calcSizeLevel: + default: all + type: string + cleanOption: + properties: + backoffEnabled: + type: boolean + batchConcurrency: + format: int32 + type: integer + disableBatchConcurrency: + type: boolean + pageSize: + format: int64 + type: integer + retryCount: + default: 5 + type: integer + routineConcurrency: + format: int32 + type: integer + snapshotsDeleteRatio: + default: 1 + type: number + type: object + cleanPolicy: + type: string + commitTs: + type: string + dumpling: + properties: + options: + items: + type: string + type: array + tableFilter: items: + type: string + type: array + type: object + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: properties: - name: - type: string - value: - type: string - valueFrom: + configMapKeyRef: properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - resourceFieldRef: - properties: - containerName: - type: string - divisor: - 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 - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - secretKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key type: object - required: - - name + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + properties: + containerName: + type: string + divisor: + 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 + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic type: object - type: array - federalVolumeBackupPhase: + required: + - name + type: object + type: array + federalVolumeBackupPhase: + type: string + from: + properties: + host: type: string - from: - properties: - host: - type: string - port: - format: int32 - type: integer - secretName: - type: string - tlsClientSecretName: - type: string - user: - type: string - required: - - host - - secretName - type: object - gcs: - properties: - bucket: - type: string - bucketAcl: - type: string - location: - type: string - objectAcl: - type: string - path: - type: string - prefix: - type: string - projectId: - type: string - secretName: - type: string - storageClass: - type: string - required: - - projectId - type: object - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - local: + port: + format: int32 + type: integer + secretName: + type: string + tlsClientSecretName: + type: string + user: + type: string + required: + - host + - secretName + type: object + gcs: + properties: + bucket: + type: string + bucketAcl: + type: string + location: + type: string + objectAcl: + type: string + path: + type: string + prefix: + type: string + projectId: + type: string + secretName: + type: string + storageClass: + type: string + required: + - projectId + type: object + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + local: + properties: + prefix: + type: string + volume: properties: - prefix: - type: string - volume: + awsElasticBlockStore: properties: - awsElasticBlockStore: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - azureDisk: - properties: - cachingMode: - type: string - diskName: - type: string - diskURI: - type: string - fsType: - type: string - kind: - type: string - readOnly: - type: boolean - required: - - diskName - - diskURI - type: object - azureFile: - properties: - readOnly: - type: boolean - secretName: - type: string - shareName: - type: string - required: - - secretName - - shareName - type: object - cephfs: - properties: - monitors: - items: - type: string - type: array - path: - type: string - readOnly: - type: boolean - secretFile: - type: string - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - monitors - type: object - cinder: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - volumeID: - type: string - required: - - volumeID - type: object - configMap: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - csi: - properties: - driver: - type: string - fsType: - type: string - nodePublishSecretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - readOnly: - type: boolean - volumeAttributes: - additionalProperties: - type: string - type: object - required: - - driver - type: object - downwardAPI: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - 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 - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - type: object - emptyDir: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: + type: string + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: properties: - medium: + name: type: string - sizeLimit: - 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 - type: object - ephemeral: - properties: - volumeClaimTemplate: - properties: - metadata: - type: object - spec: - properties: - accessModes: - items: - type: string - type: array - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - required: - - kind - - name - type: object - x-kubernetes-map-type: atomic - dataSourceRef: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - required: - - kind - - name - type: object - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - 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 - 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 - type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - storageClassName: - type: string - volumeMode: - type: string - volumeName: - type: string - type: object - required: - - spec - type: object type: object - fc: + x-kubernetes-map-type: atomic + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: properties: - fsType: + name: type: string - lun: - format: int32 - type: integer - readOnly: - type: boolean - targetWWNs: - items: - type: string - type: array - wwids: - items: - type: string - type: array type: object - flexVolume: - properties: - driver: - type: string - fsType: - type: string - options: - additionalProperties: + x-kubernetes-map-type: atomic + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: type: string - type: object - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - required: - - driver - type: object - flocker: - properties: - datasetName: - type: string - datasetUUID: - type: string - type: object - gcePersistentDisk: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - pdName: - type: string - readOnly: - type: boolean - required: - - pdName - type: object - gitRepo: - properties: - directory: - type: string - repository: - type: string - revision: - type: string - required: - - repository - type: object - glusterfs: + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: properties: - endpoints: - type: string - path: + name: type: string - readOnly: - type: boolean - required: - - endpoints - - path type: object - hostPath: - properties: - path: - type: string - type: - type: string - required: - - path + x-kubernetes-map-type: atomic + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string type: object - iscsi: - properties: - chapAuthDiscovery: - type: boolean - chapAuthSession: - type: boolean - fsType: - type: string - initiatorName: - type: string - iqn: - type: string - iscsiInterface: - type: string - lun: - format: int32 - type: integer - portals: - items: + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: type: string - type: array - readOnly: - type: boolean - secretRef: + resourceFieldRef: + properties: + containerName: + type: string + divisor: + 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 + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + 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 + type: object + ephemeral: + properties: + volumeClaimTemplate: + properties: + metadata: + type: object + spec: properties: - name: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + 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 + 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 + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeMode: + type: string + volumeName: type: string type: object - x-kubernetes-map-type: atomic - targetPortal: - type: string required: - - iqn - - lun - - targetPortal + - spec type: object - name: + type: object + fc: + properties: + fsType: type: string - nfs: - properties: - path: - type: string - readOnly: - type: boolean - server: - type: string - required: - - path - - server - type: object - persistentVolumeClaim: - properties: - claimName: - type: string - readOnly: - type: boolean - required: - - claimName + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + wwids: + items: + type: string + type: array + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string type: object - photonPersistentDisk: + readOnly: + type: boolean + secretRef: properties: - fsType: - type: string - pdID: + name: type: string - required: - - pdID type: object - portworxVolume: + x-kubernetes-map-type: atomic + required: + - driver + type: object + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + readOnly: + type: boolean + secretRef: properties: - fsType: - type: string - readOnly: - type: boolean - volumeID: + name: type: string - required: - - volumeID type: object - projected: - properties: - defaultMode: - format: int32 - type: integer - sources: - items: + x-kubernetes-map-type: atomic + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + type: string + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + configMap: properties: - configMap: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - downwardAPI: - properties: - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - 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 - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + downwardAPI: + properties: + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string required: - - path + - fieldPath type: object - type: array - type: object - secret: - properties: - items: - items: + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: properties: - key: + containerName: type: string - mode: - format: int32 - type: integer - path: + divisor: + 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 + resource: type: string required: - - key - - path + - resource type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - serviceAccountToken: - properties: - audience: - type: string - expirationSeconds: - format: int64 - type: integer - path: - type: string - required: - - path - type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array type: object - type: array - type: object - quobyte: - properties: - group: - type: string - readOnly: - type: boolean - registry: - type: string - tenant: - type: string - user: - type: string - volume: - type: string - required: - - registry - - volume - type: object - rbd: - properties: - fsType: - type: string - image: - type: string - keyring: - type: string - monitors: - items: - type: string - type: array - pool: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - image - - monitors - type: object - scaleIO: - properties: - fsType: - type: string - gateway: - type: string - protectionDomain: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - sslEnabled: - type: boolean - storageMode: - type: string - storagePool: - type: string - system: - type: string - volumeName: - type: string - required: - - gateway - - secretRef - - system - type: object - secret: - properties: - defaultMode: - format: int32 - type: integer - items: - items: + secret: properties: - key: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: type: string - mode: - format: int32 + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 type: integer path: type: string required: - - key - path type: object - type: array - optional: - type: boolean - secretName: - type: string - type: object - storageos: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - volumeName: - type: string - volumeNamespace: - type: string - type: object - vsphereVolume: + type: object + type: array + type: object + quobyte: + properties: + group: + type: string + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: + type: string + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: properties: - fsType: - type: string - storagePolicyID: - type: string - storagePolicyName: - type: string - volumePath: + name: type: string - required: - - volumePath type: object + x-kubernetes-map-type: atomic + user: + type: string required: - - name + - image + - monitors type: object - volumeMount: + scaleIO: properties: - mountPath: + fsType: type: string - mountPropagation: + gateway: type: string - name: + protectionDomain: type: string readOnly: type: boolean - subPath: + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + sslEnabled: + type: boolean + storageMode: type: string - subPathExpr: + storagePool: + type: string + system: + type: string + volumeName: type: string required: - - mountPath - - name + - gateway + - secretRef + - system type: object - required: - - volume - - volumeMount - type: object - logStop: - type: boolean - logTruncateUntil: - type: string - podSecurityContext: - properties: - fsGroup: - format: int64 - type: integer - fsGroupChangePolicy: - type: string - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: + secret: properties: - level: - type: string - role: - type: string - type: - type: string - user: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + optional: + type: boolean + secretName: type: string type: object - seccompProfile: + storageos: properties: - localhostProfile: + fsType: type: string - type: + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + volumeName: + type: string + volumeNamespace: type: string - required: - - type type: object - supplementalGroups: - items: - format: int64 - type: integer - type: array - sysctls: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - windowsOptions: + vsphereVolume: properties: - gmsaCredentialSpec: + fsType: type: string - gmsaCredentialSpecName: + storagePolicyID: type: string - hostProcess: - type: boolean - runAsUserName: + storagePolicyName: + type: string + volumePath: type: string + required: + - volumePath type: object + required: + - name type: object - priorityClassName: - type: string - resources: + volumeMount: properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - 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 - 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 - type: object + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name type: object - resumeGcSchedule: + required: + - volume + - volumeMount + type: object + logStop: + type: boolean + logSubcommand: + default: start + type: string + logTruncateUntil: + type: string + podSecurityContext: + properties: + fsGroup: + format: int64 + type: integer + fsGroupChangePolicy: + type: string + runAsGroup: + format: int64 + type: integer + runAsNonRoot: type: boolean - s3: + runAsUser: + format: int64 + type: integer + seLinuxOptions: properties: - acl: - type: string - bucket: + level: type: string - endpoint: + role: type: string - options: - items: - type: string - type: array - path: + type: type: string - prefix: + user: type: string - provider: + type: object + seccompProfile: + properties: + localhostProfile: type: string - region: + type: type: string - secretName: + required: + - type + type: object + supplementalGroups: + items: + format: int64 + type: integer + type: array + sysctls: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + properties: + gmsaCredentialSpec: type: string - sse: + gmsaCredentialSpecName: type: string - storageClass: + hostProcess: + type: boolean + runAsUserName: type: string - required: - - provider type: object - serviceAccount: + type: object + priorityClassName: + type: string + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + 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 + 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 + type: object + type: object + resumeGcSchedule: + type: boolean + s3: + properties: + acl: type: string - storageClassName: + bucket: type: string - storageSize: + endpoint: type: string - tableFilter: + options: items: type: string type: array - tikvGCLifeTime: + path: type: string - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - toolImage: + prefix: type: string - useKMS: - type: boolean - volumeBackupInitJobMaxActiveSeconds: - default: 600 - type: integer + provider: + type: string + region: + type: string + secretName: + type: string + sse: + type: string + storageClass: + type: string + required: + - provider type: object - maxBackups: - format: int32 - type: integer - maxReservedTime: - type: string - pause: - type: boolean - schedule: + serviceAccount: type: string storageClassName: type: string storageSize: type: string - required: - - backupTemplate - - schedule + tableFilter: + items: + type: string + type: array + tikvGCLifeTime: + type: string + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + toolImage: + type: string + useKMS: + type: boolean + volumeBackupInitJobMaxActiveSeconds: + default: 600 + type: integer type: object status: properties: - allBackupCleanTime: - format: date-time + backoffRetryStatus: + items: + properties: + detectFailedAt: + format: date-time + type: string + expectedRetryAt: + format: date-time + type: string + originalReason: + type: string + realRetryAt: + format: date-time + type: string + retryNum: + type: integer + retryReason: + type: string + type: object + type: array + backupPath: type: string - lastBackup: + backupSize: + format: int64 + type: integer + backupSizeReadable: type: string - lastBackupTime: + commitTs: + type: string + conditions: + items: + properties: + command: + type: string + lastTransitionTime: + format: date-time + nullable: true + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + nullable: true + type: array + incrementalBackupSize: + format: int64 + type: integer + incrementalBackupSizeReadable: + type: string + logCheckpointTs: + type: string + logSubCommandStatuses: + additionalProperties: + properties: + command: + type: string + conditions: + items: + properties: + command: + type: string + lastTransitionTime: + format: date-time + nullable: true + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + nullable: true + type: array + logTruncatingUntil: + type: string + phase: + type: string + timeCompleted: + format: date-time + nullable: true + type: string + timeStarted: + format: date-time + nullable: true + type: string + type: object + type: object + logSuccessTruncateUntil: + type: string + phase: + type: string + progresses: + items: + properties: + lastTransitionTime: + format: date-time + nullable: true + type: string + progress: + type: number + step: + type: string + type: object + nullable: true + type: array + timeCompleted: format: date-time + nullable: true type: string - logBackup: + timeStarted: + format: date-time + nullable: true + type: string + timeTaken: type: string type: object required: diff --git a/manifests/crd/v1/pingcap.com_backups.yaml b/manifests/crd/v1/pingcap.com_backups.yaml index 753a1d33ca..b63416a139 100644 --- a/manifests/crd/v1/pingcap.com_backups.yaml +++ b/manifests/crd/v1/pingcap.com_backups.yaml @@ -2138,6 +2138,9 @@ spec: type: object logStop: type: boolean + logSubcommand: + default: start + type: string logTruncateUntil: type: string podSecurityContext: diff --git a/manifests/crd/v1/pingcap.com_backupschedules.yaml b/manifests/crd/v1/pingcap.com_backupschedules.yaml index fadc331a7d..bdf30a8f11 100644 --- a/manifests/crd/v1/pingcap.com_backupschedules.yaml +++ b/manifests/crd/v1/pingcap.com_backupschedules.yaml @@ -2113,6 +2113,9 @@ spec: type: object logStop: type: boolean + logSubcommand: + default: start + type: string logTruncateUntil: type: string podSecurityContext: @@ -4346,6 +4349,9 @@ spec: type: object logStop: type: boolean + logSubcommand: + default: start + type: string logTruncateUntil: type: string podSecurityContext: diff --git a/manifests/federation-crd.yaml b/manifests/federation-crd.yaml index 0a6ae36d68..742c6627d4 100644 --- a/manifests/federation-crd.yaml +++ b/manifests/federation-crd.yaml @@ -4,35 +4,41 @@ kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.15.0 - name: volumebackups.federation.pingcap.com + name: volumebackupschedules.federation.pingcap.com spec: group: federation.pingcap.com names: - kind: VolumeBackup - listKind: VolumeBackupList - plural: volumebackups + kind: VolumeBackupSchedule + listKind: VolumeBackupScheduleList + plural: volumebackupschedules shortNames: - - vbk - singular: volumebackup + - vbks + singular: volumebackupschedule scope: Namespaced versions: - additionalPrinterColumns: - - description: The current status of the backup - jsonPath: .status.phase - name: Status - type: string - - description: The data size of the backup - jsonPath: .status.backupSizeReadable - name: BackupSize + - description: The cron format string used for backup scheduling + jsonPath: .spec.schedule + name: Schedule type: string - - description: The commit ts of the backup - jsonPath: .status.commitTs - name: CommitTS + - description: The max number of backups we want to keep + jsonPath: .spec.maxBackups + name: MaxBackups + type: integer + - description: How long backups we want to keep + jsonPath: .spec.maxReservedTime + name: MaxReservedTime type: string - - description: The time that volume backup federation takes - jsonPath: .status.timeTaken - name: TimeTaken + - description: The last backup CR name + jsonPath: .status.lastBackup + name: LastBackup + priority: 1 type: string + - description: The last time the backup was successfully created + jsonPath: .status.lastBackupTime + name: LastBackupTime + priority: 1 + type: date - jsonPath: .metadata.creationTimestamp name: Age type: date @@ -46,1781 +52,1732 @@ spec: type: string metadata: type: object - skipGC: - default: false - type: boolean spec: properties: - clusters: - items: - properties: - k8sClusterName: - type: string - tcName: - type: string - tcNamespace: - type: string - type: object - type: array - template: + backupTemplate: properties: - additionalVolumeMounts: + clusters: items: properties: - mountPath: - type: string - mountPropagation: - type: string - name: + k8sClusterName: type: string - readOnly: - type: boolean - subPath: + tcName: type: string - subPathExpr: + tcNamespace: type: string - required: - - mountPath - - name type: object type: array - additionalVolumes: - items: - properties: - awsElasticBlockStore: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - azureDisk: + template: + properties: + additionalVolumeMounts: + items: properties: - cachingMode: - type: string - diskName: - type: string - diskURI: + mountPath: type: string - fsType: + mountPropagation: type: string - kind: + name: type: string readOnly: type: boolean - required: - - diskName - - diskURI - type: object - azureFile: - properties: - readOnly: - type: boolean - secretName: + subPath: type: string - shareName: + subPathExpr: type: string required: - - secretName - - shareName + - mountPath + - name type: object - cephfs: + type: array + additionalVolumes: + items: properties: - monitors: - items: - type: string - type: array - path: - type: string - readOnly: - type: boolean - secretFile: - type: string - secretRef: + awsElasticBlockStore: properties: - name: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: type: string + required: + - volumeID type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - monitors - type: object - cinder: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: + azureDisk: properties: - name: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: type: string + readOnly: + type: boolean + required: + - diskName + - diskURI type: object - x-kubernetes-map-type: atomic - volumeID: - type: string - required: - - volumeID - type: object - configMap: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - csi: - properties: - driver: - type: string - fsType: - type: string - nodePublishSecretRef: + azureFile: properties: - name: + readOnly: + type: boolean + secretName: type: string + shareName: + type: string + required: + - secretName + - shareName type: object - x-kubernetes-map-type: atomic - readOnly: - type: boolean - volumeAttributes: - additionalProperties: - type: string - type: object - required: - - driver - type: object - downwardAPI: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: + cephfs: + properties: + monitors: + items: type: string - resourceFieldRef: + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: properties: - containerName: + key: type: string - divisor: - 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 - resource: + mode: + format: int32 + type: integer + path: type: string required: - - resource + - key + - path type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - type: object - emptyDir: - properties: - medium: - type: string - sizeLimit: - 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 - type: object - ephemeral: - properties: - volumeClaimTemplate: + type: array + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + csi: properties: - metadata: - type: object - spec: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: properties: - accessModes: - items: + name: + type: string + type: object + x-kubernetes-map-type: atomic + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: type: string - type: array - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - required: - - kind - - name - type: object - x-kubernetes-map-type: atomic - dataSourceRef: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - required: - - kind - - name - type: object - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - 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 - type: object - requests: - additionalProperties: + resourceFieldRef: + properties: + containerName: + type: string + divisor: 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 - type: object + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + 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 + type: object + ephemeral: + properties: + volumeClaimTemplate: + properties: + metadata: type: object - selector: + spec: properties: - matchExpressions: + accessModes: items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: type: string - type: object - type: object - x-kubernetes-map-type: atomic - storageClassName: - type: string - volumeMode: - type: string - volumeName: - type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + 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 + 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 + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object + type: object + fc: + properties: + fsType: + type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + wwids: + items: + type: string + type: array + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string + type: object + readOnly: + type: boolean + secretRef: + properties: + name: + type: string type: object + x-kubernetes-map-type: atomic required: - - spec + - driver type: object - type: object - fc: - properties: - fsType: - type: string - lun: - format: int32 - type: integer - readOnly: - type: boolean - targetWWNs: - items: - type: string - type: array - wwids: - items: - type: string - type: array - type: object - flexVolume: - properties: - driver: - type: string - fsType: - type: string - options: - additionalProperties: - type: string + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string type: object - readOnly: - type: boolean - secretRef: + gcePersistentDisk: properties: - name: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: type: string + readOnly: + type: boolean + required: + - pdName type: object - x-kubernetes-map-type: atomic - required: - - driver - type: object - flocker: - properties: - datasetName: - type: string - datasetUUID: - type: string - type: object - gcePersistentDisk: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - pdName: - type: string - readOnly: - type: boolean - required: - - pdName - type: object - gitRepo: - properties: - directory: - type: string - repository: - type: string - revision: - type: string - required: - - repository - type: object - glusterfs: - properties: - endpoints: - type: string - path: - type: string - readOnly: - type: boolean - required: - - endpoints - - path - type: object - hostPath: - properties: - path: - type: string - type: - type: string - required: - - path - type: object - iscsi: - properties: - chapAuthDiscovery: - type: boolean - chapAuthSession: - type: boolean - fsType: - type: string - initiatorName: - type: string - iqn: - type: string - iscsiInterface: - type: string - lun: - format: int32 - type: integer - portals: - items: - type: string - type: array - readOnly: - type: boolean - secretRef: + gitRepo: properties: - name: + directory: + type: string + repository: + type: string + revision: type: string + required: + - repository type: object - x-kubernetes-map-type: atomic - targetPortal: - type: string - required: - - iqn - - lun - - targetPortal - type: object - name: - type: string - nfs: - properties: - path: - type: string - readOnly: - type: boolean - server: - type: string - required: - - path - - server - type: object - persistentVolumeClaim: - properties: - claimName: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - photonPersistentDisk: - properties: - fsType: - type: string - pdID: - type: string - required: - - pdID - type: object - portworxVolume: - properties: - fsType: - type: string - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - projected: - properties: - defaultMode: - format: int32 - type: integer - sources: - items: - properties: - configMap: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - downwardAPI: + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + type: string + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: properties: - items: - items: - properties: - fieldRef: + configMap: + properties: + items: + items: properties: - apiVersion: + key: type: string - fieldPath: + mode: + format: int32 + type: integer + path: type: string required: - - fieldPath + - key + - path type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: + type: array + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + downwardAPI: + properties: + items: + items: properties: - containerName: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: type: string - divisor: - 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 - resource: + resourceFieldRef: + properties: + containerName: + type: string + divisor: + 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 + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + secret: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: type: string required: - - resource + - key + - path type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - type: object - secret: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - serviceAccountToken: - properties: - audience: - type: string - expirationSeconds: - format: int64 - type: integer - path: - type: string - required: - - path - type: object - type: object - type: array - type: object - quobyte: - properties: - group: - type: string - readOnly: - type: boolean - registry: - type: string - tenant: - type: string - user: - type: string - volume: - type: string - required: - - registry - - volume - type: object - rbd: - properties: - fsType: - type: string - image: - type: string - keyring: - type: string - monitors: - items: - type: string - type: array - pool: - type: string - readOnly: - type: boolean - secretRef: + type: array + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + type: object + quobyte: properties: - name: + group: + type: string + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: type: string + required: + - registry + - volume type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - image - - monitors - type: object - scaleIO: - properties: - fsType: - type: string - gateway: - type: string - protectionDomain: - type: string - readOnly: - type: boolean - secretRef: + rbd: properties: - name: + fsType: type: string - type: object - x-kubernetes-map-type: atomic - sslEnabled: - type: boolean - storageMode: - type: string - storagePool: - type: string - system: - type: string - volumeName: - type: string - required: - - gateway - - secretRef - - system - type: object - secret: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: + image: + type: string + keyring: + type: string + monitors: + items: type: string - required: - - key - - path - type: object - type: array - optional: - type: boolean - secretName: - type: string - type: object - storageos: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + user: type: string + required: + - image + - monitors type: object - x-kubernetes-map-type: atomic - volumeName: - type: string - volumeNamespace: - type: string - type: object - vsphereVolume: - properties: - fsType: - type: string - storagePolicyID: - type: string - storagePolicyName: - type: string - volumePath: - type: string - required: - - volumePath - type: object - required: - - name - type: object - type: array - azblob: - properties: - accessTier: - type: string - container: - type: string - path: - type: string - prefix: - type: string - sasToken: - type: string - secretName: - type: string - storageAccount: - type: string - type: object - br: - properties: - checkRequirements: - type: boolean - concurrency: - format: int32 - type: integer - options: - items: - type: string - type: array - sendCredToTikv: - type: boolean - type: object - calcSizeLevel: - default: all - type: string - cleanPolicy: - type: string - env: - items: - properties: - name: - type: string - value: - type: string - valueFrom: - properties: - configMapKeyRef: + scaleIO: properties: - key: + fsType: type: string - name: + gateway: type: string - optional: + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + sslEnabled: type: boolean + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string required: - - key + - gateway + - secretRef + - system type: object - x-kubernetes-map-type: atomic - fieldRef: + secret: properties: - apiVersion: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + volumeName: type: string - fieldPath: + volumeNamespace: type: string - required: - - fieldPath type: object - x-kubernetes-map-type: atomic - resourceFieldRef: + vsphereVolume: properties: - containerName: + fsType: type: string - divisor: - 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 - resource: + storagePolicyID: type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - secretKeyRef: - properties: - key: + storagePolicyName: type: string - name: + volumePath: type: string - optional: - type: boolean required: - - key + - volumePath type: object - x-kubernetes-map-type: atomic + required: + - name type: object - required: - - name - type: object - type: array - gcs: - properties: - bucket: - type: string - bucketAcl: - type: string - location: - type: string - objectAcl: - type: string - path: - type: string - prefix: - type: string - projectId: - type: string - secretName: - type: string - storageClass: + type: array + azblob: + properties: + accessTier: + type: string + container: + type: string + path: + type: string + prefix: + type: string + sasToken: + type: string + secretName: + type: string + storageAccount: + type: string + type: object + br: + properties: + checkRequirements: + type: boolean + concurrency: + format: int32 + type: integer + options: + items: + type: string + type: array + sendCredToTikv: + type: boolean + type: object + calcSizeLevel: + default: all type: string - required: - - projectId - type: object - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - local: - properties: - prefix: + cleanPolicy: type: string - volume: + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + properties: + containerName: + type: string + divisor: + 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 + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + gcs: properties: - awsElasticBlockStore: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - azureDisk: - properties: - cachingMode: - type: string - diskName: - type: string - diskURI: - type: string - fsType: - type: string - kind: - type: string - readOnly: - type: boolean - required: - - diskName - - diskURI - type: object - azureFile: - properties: - readOnly: - type: boolean - secretName: - type: string - shareName: - type: string - required: - - secretName - - shareName - type: object - cephfs: + bucket: + type: string + bucketAcl: + type: string + location: + type: string + objectAcl: + type: string + path: + type: string + prefix: + type: string + projectId: + type: string + secretName: + type: string + storageClass: + type: string + required: + - projectId + type: object + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + local: + properties: + prefix: + type: string + volume: properties: - monitors: - items: - type: string - type: array - path: - type: string - readOnly: - type: boolean - secretFile: - type: string - secretRef: + awsElasticBlockStore: properties: - name: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: type: string + required: + - volumeID type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - monitors - type: object - cinder: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: + azureDisk: properties: - name: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI type: object - x-kubernetes-map-type: atomic - volumeID: - type: string - required: - - volumeID - type: object - configMap: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - csi: - properties: - driver: - type: string - fsType: - type: string - nodePublishSecretRef: + azureFile: properties: - name: + readOnly: + type: boolean + secretName: + type: string + shareName: type: string + required: + - secretName + - shareName type: object - x-kubernetes-map-type: atomic - readOnly: - type: boolean - volumeAttributes: - additionalProperties: - type: string + cephfs: + properties: + monitors: + items: + type: string + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + user: + type: string + required: + - monitors type: object - required: - - driver - type: object - downwardAPI: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - fieldRef: + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: properties: - apiVersion: + key: type: string - fieldPath: + mode: + format: int32 + type: integer + path: type: string required: - - fieldPath + - key + - path type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: + type: array + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + readOnly: + type: boolean + volumeAttributes: + additionalProperties: type: string - resourceFieldRef: + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: properties: - containerName: - type: string - divisor: - 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 - resource: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + 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 + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic required: - - resource + - path type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - type: object - emptyDir: - properties: - medium: - type: string - sizeLimit: - 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 - type: object - ephemeral: - properties: - volumeClaimTemplate: + type: array + type: object + emptyDir: properties: - metadata: - type: object - spec: + medium: + type: string + sizeLimit: + 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 + type: object + ephemeral: + properties: + volumeClaimTemplate: properties: - accessModes: - items: - type: string - type: array - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - required: - - kind - - name - type: object - x-kubernetes-map-type: atomic - dataSourceRef: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - required: - - kind - - name + metadata: type: object - resources: + spec: properties: - claims: + accessModes: items: - properties: - name: - type: string - required: - - name - type: object + type: string type: array - x-kubernetes-list-map-keys: + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind - name - x-kubernetes-list-type: map - 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 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 + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: + resources: + properties: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + 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 + 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 + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: - type: string + type: object type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeMode: + type: string + volumeName: + type: string type: object - x-kubernetes-map-type: atomic - storageClassName: - type: string - volumeMode: - type: string - volumeName: + required: + - spec + type: object + type: object + fc: + properties: + fsType: + type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + wwids: + items: + type: string + type: array + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string + type: object + readOnly: + type: boolean + secretRef: + properties: + name: type: string type: object + x-kubernetes-map-type: atomic + required: + - driver + type: object + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean required: - - spec + - pdName type: object - type: object - fc: - properties: - fsType: - type: string - lun: - format: int32 - type: integer - readOnly: - type: boolean - targetWWNs: - items: - type: string - type: array - wwids: - items: - type: string - type: array - type: object - flexVolume: - properties: - driver: - type: string - fsType: - type: string - options: - additionalProperties: - type: string + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository type: object - readOnly: - type: boolean - secretRef: + glusterfs: properties: - name: + endpoints: + type: string + path: type: string + readOnly: + type: boolean + required: + - endpoints + - path type: object - x-kubernetes-map-type: atomic - required: - - driver - type: object - flocker: - properties: - datasetName: - type: string - datasetUUID: - type: string - type: object - gcePersistentDisk: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - pdName: - type: string - readOnly: - type: boolean - required: - - pdName - type: object - gitRepo: - properties: - directory: - type: string - repository: - type: string - revision: - type: string - required: - - repository - type: object - glusterfs: - properties: - endpoints: - type: string - path: - type: string - readOnly: - type: boolean - required: - - endpoints - - path - type: object - hostPath: - properties: - path: - type: string - type: - type: string - required: - - path - type: object - iscsi: - properties: - chapAuthDiscovery: - type: boolean - chapAuthSession: - type: boolean - fsType: - type: string - initiatorName: - type: string - iqn: - type: string - iscsiInterface: - type: string - lun: - format: int32 - type: integer - portals: - items: - type: string - type: array - readOnly: - type: boolean - secretRef: + hostPath: properties: - name: + path: + type: string + type: type: string + required: + - path type: object - x-kubernetes-map-type: atomic - targetPortal: - type: string - required: - - iqn - - lun - - targetPortal - type: object - name: - type: string - nfs: - properties: - path: - type: string - readOnly: - type: boolean - server: - type: string - required: - - path - - server - type: object - persistentVolumeClaim: - properties: - claimName: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - photonPersistentDisk: - properties: - fsType: - type: string - pdID: - type: string - required: - - pdID - type: object - portworxVolume: - properties: - fsType: - type: string - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - projected: - properties: - defaultMode: - format: int32 - type: integer - sources: - items: - properties: - configMap: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - downwardAPI: + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + type: string + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: properties: - items: - items: - properties: - fieldRef: + configMap: + properties: + items: + items: properties: - apiVersion: + key: type: string - fieldPath: + mode: + format: int32 + type: integer + path: type: string required: - - fieldPath + - key + - path type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: + type: array + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + downwardAPI: + properties: + items: + items: properties: - containerName: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: type: string - divisor: - 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 - resource: + resourceFieldRef: + properties: + containerName: + type: string + divisor: + 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 + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + secret: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: type: string required: - - resource + - key + - path type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - type: object - secret: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean + type: array + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object type: object - x-kubernetes-map-type: atomic - serviceAccountToken: + type: array + type: object + quobyte: + properties: + group: + type: string + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: + type: string + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + user: + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + sslEnabled: + type: boolean + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer + items: + items: properties: - audience: + key: type: string - expirationSeconds: - format: int64 + mode: + format: int32 type: integer path: type: string required: + - key - path type: object - type: object - type: array - type: object - quobyte: - properties: - group: - type: string - readOnly: - type: boolean - registry: - type: string - tenant: - type: string - user: - type: string - volume: - type: string - required: - - registry - - volume - type: object - rbd: - properties: - fsType: - type: string - image: - type: string - keyring: - type: string - monitors: - items: - type: string - type: array - pool: - type: string - readOnly: - type: boolean - secretRef: + type: array + optional: + type: boolean + secretName: + type: string + type: object + storageos: properties: - name: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + volumeName: + type: string + volumeNamespace: type: string type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - image - - monitors - type: object - scaleIO: - properties: - fsType: - type: string - gateway: - type: string - protectionDomain: - type: string - readOnly: - type: boolean - secretRef: + vsphereVolume: properties: - name: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: type: string + volumePath: + type: string + required: + - volumePath type: object - x-kubernetes-map-type: atomic - sslEnabled: - type: boolean - storageMode: - type: string - storagePool: - type: string - system: - type: string - volumeName: - type: string required: - - gateway - - secretRef - - system + - name type: object - secret: + volumeMount: properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - optional: - type: boolean - secretName: + mountPath: type: string - type: object - storageos: - properties: - fsType: + mountPropagation: + type: string + name: type: string readOnly: type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - volumeName: - type: string - volumeNamespace: - type: string - type: object - vsphereVolume: - properties: - fsType: - type: string - storagePolicyID: - type: string - storagePolicyName: + subPath: type: string - volumePath: + subPathExpr: type: string required: - - volumePath + - mountPath + - name type: object required: - - name + - volume + - volumeMount type: object - volumeMount: + priorityClassName: + type: string + resources: properties: - mountPath: + claims: + items: + properties: + name: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + 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 + 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 + type: object + type: object + s3: + properties: + acl: + type: string + bucket: + type: string + endpoint: + type: string + options: + items: + type: string + type: array + path: + type: string + prefix: + type: string + provider: type: string - mountPropagation: + region: type: string - name: + secretName: type: string - readOnly: - type: boolean - subPath: + sse: type: string - subPathExpr: + storageClass: type: string required: - - mountPath - - name + - provider type: object - required: - - volume - - volumeMount - type: object - priorityClassName: - type: string - resources: - properties: - claims: + serviceAccount: + type: string + snapshotsDeleteRatio: + default: 1 + type: number + tolerations: items: properties: - name: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: type: string - required: - - name type: object type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - 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 - 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 - type: object - type: object - s3: - properties: - acl: - type: string - bucket: - type: string - endpoint: - type: string - options: - items: - type: string - type: array - path: - type: string - prefix: - type: string - provider: - type: string - region: - type: string - secretName: - type: string - sse: - type: string - storageClass: + toolImage: type: string - required: - - provider + volumeBackupInitJobMaxActiveSeconds: + default: 600 + type: integer type: object - serviceAccount: - type: string - snapshotsDeleteRatio: - default: 1 - type: number - tolerations: - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - toolImage: - type: string - volumeBackupInitJobMaxActiveSeconds: - default: 600 - type: integer type: object - type: object - status: - properties: - backupSize: - format: int64 + maxBackups: + format: int32 type: integer - backupSizeReadable: - type: string - backups: - items: - properties: - backupName: - type: string - backupPath: - type: string - backupSize: - format: int64 - type: integer - commitTs: - type: string - k8sClusterName: - type: string - message: - type: string - phase: - type: string - reason: - type: string - tcName: - type: string - tcNamespace: - type: string - required: - - backupName - - phase - type: object - type: array - commitTs: + maxReservedTime: type: string - conditions: - items: - properties: - lastTransitionTime: - format: date-time - nullable: true - type: string - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - required: - - status - - type - type: object - nullable: true - type: array - phase: + pause: + type: boolean + schedule: type: string - timeCompleted: + required: + - backupTemplate + - schedule + type: object + status: + properties: + allBackupCleanTime: format: date-time - nullable: true type: string - timeStarted: - format: date-time - nullable: true + lastBackup: type: string - timeTaken: + lastBackupTime: + format: date-time type: string type: object required: @@ -1836,41 +1793,35 @@ kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.15.0 - name: volumebackupschedules.federation.pingcap.com + name: volumebackups.federation.pingcap.com spec: group: federation.pingcap.com names: - kind: VolumeBackupSchedule - listKind: VolumeBackupScheduleList - plural: volumebackupschedules + kind: VolumeBackup + listKind: VolumeBackupList + plural: volumebackups shortNames: - - vbks - singular: volumebackupschedule + - vbk + singular: volumebackup scope: Namespaced versions: - additionalPrinterColumns: - - description: The cron format string used for backup scheduling - jsonPath: .spec.schedule - name: Schedule + - description: The current status of the backup + jsonPath: .status.phase + name: Status type: string - - description: The max number of backups we want to keep - jsonPath: .spec.maxBackups - name: MaxBackups - type: integer - - description: How long backups we want to keep - jsonPath: .spec.maxReservedTime - name: MaxReservedTime + - description: The data size of the backup + jsonPath: .status.backupSizeReadable + name: BackupSize type: string - - description: The last backup CR name - jsonPath: .status.lastBackup - name: LastBackup - priority: 1 + - description: The commit ts of the backup + jsonPath: .status.commitTs + name: CommitTS + type: string + - description: The time that volume backup federation takes + jsonPath: .status.timeTaken + name: TimeTaken type: string - - description: The last time the backup was successfully created - jsonPath: .status.lastBackupTime - name: LastBackupTime - priority: 1 - type: date - jsonPath: .metadata.creationTimestamp name: Age type: date @@ -1884,1732 +1835,1781 @@ spec: type: string metadata: type: object + skipGC: + default: false + type: boolean spec: properties: - backupTemplate: + clusters: + items: + properties: + k8sClusterName: + type: string + tcName: + type: string + tcNamespace: + type: string + type: object + type: array + template: properties: - clusters: + additionalVolumeMounts: items: properties: - k8sClusterName: + mountPath: type: string - tcName: + mountPropagation: type: string - tcNamespace: + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: type: string + required: + - mountPath + - name type: object type: array - template: - properties: - additionalVolumeMounts: - items: + additionalVolumes: + items: + properties: + awsElasticBlockStore: properties: - mountPath: + fsType: type: string - mountPropagation: + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: type: string - name: + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: type: string readOnly: type: boolean - subPath: + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: type: string - subPathExpr: + shareName: type: string required: - - mountPath - - name + - secretName + - shareName type: object - type: array - additionalVolumes: - items: + cephfs: properties: - awsElasticBlockStore: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - azureDisk: + monitors: + items: + type: string + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: properties: - cachingMode: - type: string - diskName: - type: string - diskURI: - type: string - fsType: - type: string - kind: + name: type: string - readOnly: - type: boolean - required: - - diskName - - diskURI type: object - azureFile: + x-kubernetes-map-type: atomic + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: properties: - readOnly: - type: boolean - secretName: - type: string - shareName: + name: type: string - required: - - secretName - - shareName type: object - cephfs: - properties: - monitors: - items: + x-kubernetes-map-type: atomic + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: type: string - type: array - path: - type: string - readOnly: - type: boolean - secretFile: - type: string - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - monitors - type: object - cinder: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - volumeID: - type: string - required: - - volumeID - type: object - configMap: + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array name: type: string - optional: - type: boolean type: object x-kubernetes-map-type: atomic - csi: - properties: - driver: - type: string - fsType: - type: string - nodePublishSecretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - readOnly: - type: boolean - volumeAttributes: - additionalProperties: - type: string - type: object - required: - - driver + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string type: object - downwardAPI: - properties: - defaultMode: - format: int32 - type: integer - items: - items: + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: + apiVersion: + type: string + fieldPath: type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - 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 - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic required: - - path + - fieldPath type: object - type: array - type: object - emptyDir: - properties: - medium: - type: string - sizeLimit: - 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 - type: object - ephemeral: + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: + properties: + containerName: + type: string + divisor: + 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 + resource: + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + 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 + type: object + ephemeral: + properties: + volumeClaimTemplate: properties: - volumeClaimTemplate: + metadata: + type: object + spec: properties: - metadata: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name type: object - spec: + x-kubernetes-map-type: atomic + dataSourceRef: properties: - accessModes: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + claims: items: - type: string + properties: + name: + type: string + required: + - name + type: object type: array - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - required: - - kind - - name - type: object - x-kubernetes-map-type: atomic - dataSourceRef: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - required: - - kind + x-kubernetes-list-map-keys: - name + x-kubernetes-list-type: map + 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 type: object - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - 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 - 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 - 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 type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: type: string - type: object + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string type: object - x-kubernetes-map-type: atomic - storageClassName: - type: string - volumeMode: - type: string - volumeName: - type: string type: object - required: - - spec - type: object - type: object - fc: - properties: - fsType: - type: string - lun: - format: int32 - type: integer - readOnly: - type: boolean - targetWWNs: - items: - type: string - type: array - wwids: - items: - type: string - type: array - type: object - flexVolume: - properties: - driver: - type: string - fsType: - type: string - options: - additionalProperties: - type: string - type: object - readOnly: - type: boolean - secretRef: - properties: - name: + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeMode: + type: string + volumeName: type: string type: object - x-kubernetes-map-type: atomic - required: - - driver - type: object - flocker: - properties: - datasetName: - type: string - datasetUUID: - type: string - type: object - gcePersistentDisk: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - pdName: - type: string - readOnly: - type: boolean - required: - - pdName - type: object - gitRepo: - properties: - directory: - type: string - repository: - type: string - revision: - type: string - required: - - repository - type: object - glusterfs: - properties: - endpoints: - type: string - path: - type: string - readOnly: - type: boolean required: - - endpoints - - path + - spec type: object - hostPath: - properties: - path: - type: string - type: - type: string - required: - - path + type: object + fc: + properties: + fsType: + type: string + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + wwids: + items: + type: string + type: array + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string type: object - iscsi: + readOnly: + type: boolean + secretRef: properties: - chapAuthDiscovery: - type: boolean - chapAuthSession: - type: boolean - fsType: - type: string - initiatorName: - type: string - iqn: - type: string - iscsiInterface: - type: string - lun: - format: int32 - type: integer - portals: - items: - type: string - type: array - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - targetPortal: + name: type: string - required: - - iqn - - lun - - targetPortal type: object - name: + x-kubernetes-map-type: atomic + required: + - driver + type: object + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: type: string - nfs: - properties: - path: - type: string - readOnly: - type: boolean - server: - type: string - required: - - path - - server - type: object - persistentVolumeClaim: - properties: - claimName: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - photonPersistentDisk: - properties: - fsType: - type: string - pdID: - type: string - required: - - pdID - type: object - portworxVolume: + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + readOnly: + type: boolean + secretRef: properties: - fsType: - type: string - readOnly: - type: boolean - volumeID: + name: type: string - required: - - volumeID type: object - projected: - properties: - defaultMode: - format: int32 - type: integer - sources: - items: + x-kubernetes-map-type: atomic + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + type: string + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + configMap: properties: - configMap: - properties: - items: - items: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + downwardAPI: + properties: + items: + items: + properties: + fieldRef: properties: - key: - type: string - mode: - format: int32 - type: integer - path: + apiVersion: type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - downwardAPI: - properties: - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: + fieldPath: type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - 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 - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic required: - - path + - fieldPath type: object - type: array - type: object - secret: - properties: - items: - items: + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: properties: - key: + containerName: type: string - mode: - format: int32 - type: integer - path: + divisor: + 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 + resource: type: string required: - - key - - path + - resource type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - serviceAccountToken: - properties: - audience: - type: string - expirationSeconds: - format: int64 - type: integer - path: - type: string - required: - - path - type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array type: object - type: array - type: object - quobyte: + secret: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + serviceAccountToken: + properties: + audience: + type: string + expirationSeconds: + format: int64 + type: integer + path: + type: string + required: + - path + type: object + type: object + type: array + type: object + quobyte: + properties: + group: + type: string + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: + type: string + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: properties: - group: - type: string - readOnly: - type: boolean - registry: - type: string - tenant: - type: string - user: - type: string - volume: + name: type: string - required: - - registry - - volume type: object - rbd: + x-kubernetes-map-type: atomic + user: + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: properties: - fsType: - type: string - image: - type: string - keyring: + name: type: string - monitors: - items: + type: object + x-kubernetes-map-type: atomic + sslEnabled: + type: boolean + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: type: string - type: array - pool: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - user: + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + optional: + type: boolean + secretName: + type: string + type: object + storageos: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: + properties: + name: type: string - required: - - image - - monitors type: object - scaleIO: + x-kubernetes-map-type: atomic + volumeName: + type: string + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + azblob: + properties: + accessTier: + type: string + container: + type: string + path: + type: string + prefix: + type: string + sasToken: + type: string + secretName: + type: string + storageAccount: + type: string + type: object + br: + properties: + checkRequirements: + type: boolean + concurrency: + format: int32 + type: integer + options: + items: + type: string + type: array + sendCredToTikv: + type: boolean + type: object + calcSizeLevel: + default: all + type: string + cleanPolicy: + type: string + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: properties: - fsType: - type: string - gateway: + key: type: string - protectionDomain: + name: type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - sslEnabled: + optional: type: boolean - storageMode: - type: string - storagePool: - type: string - system: - type: string - volumeName: - type: string required: - - gateway - - secretRef - - system + - key type: object - secret: + x-kubernetes-map-type: atomic + fieldRef: properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - optional: - type: boolean - secretName: + apiVersion: + type: string + fieldPath: type: string + required: + - fieldPath type: object - storageos: + x-kubernetes-map-type: atomic + resourceFieldRef: properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - volumeName: + containerName: type: string - volumeNamespace: + divisor: + 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 + resource: type: string + required: + - resource type: object - vsphereVolume: + x-kubernetes-map-type: atomic + secretKeyRef: properties: - fsType: - type: string - storagePolicyID: - type: string - storagePolicyName: + key: type: string - volumePath: + name: type: string + optional: + type: boolean required: - - volumePath + - key type: object - required: - - name + x-kubernetes-map-type: atomic type: object - type: array - azblob: - properties: - accessTier: - type: string - container: - type: string - path: - type: string - prefix: - type: string - sasToken: - type: string - secretName: - type: string - storageAccount: - type: string - type: object - br: - properties: - checkRequirements: - type: boolean - concurrency: - format: int32 - type: integer - options: - items: - type: string - type: array - sendCredToTikv: - type: boolean - type: object - calcSizeLevel: - default: all + required: + - name + type: object + type: array + gcs: + properties: + bucket: type: string - cleanPolicy: + bucketAcl: type: string - env: - items: - properties: - name: - type: string - value: - type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - resourceFieldRef: - properties: - containerName: - type: string - divisor: - 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 - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - secretKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - type: object - required: - - name - type: object - type: array - gcs: - properties: - bucket: - type: string - bucketAcl: - type: string - location: - type: string - objectAcl: - type: string - path: - type: string - prefix: - type: string - projectId: - type: string - secretName: - type: string - storageClass: - type: string - required: - - projectId - type: object - imagePullSecrets: - items: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - type: array - local: + location: + type: string + objectAcl: + type: string + path: + type: string + prefix: + type: string + projectId: + type: string + secretName: + type: string + storageClass: + type: string + required: + - projectId + type: object + imagePullSecrets: + items: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + type: array + local: + properties: + prefix: + type: string + volume: properties: - prefix: - type: string - volume: + awsElasticBlockStore: properties: - awsElasticBlockStore: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - azureDisk: + fsType: + type: string + partition: + format: int32 + type: integer + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + azureDisk: + properties: + cachingMode: + type: string + diskName: + type: string + diskURI: + type: string + fsType: + type: string + kind: + type: string + readOnly: + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + properties: + readOnly: + type: boolean + secretName: + type: string + shareName: + type: string + required: + - secretName + - shareName + type: object + cephfs: + properties: + monitors: + items: + type: string + type: array + path: + type: string + readOnly: + type: boolean + secretFile: + type: string + secretRef: properties: - cachingMode: - type: string - diskName: - type: string - diskURI: - type: string - fsType: - type: string - kind: + name: type: string - readOnly: - type: boolean - required: - - diskName - - diskURI type: object - azureFile: + x-kubernetes-map-type: atomic + user: + type: string + required: + - monitors + type: object + cinder: + properties: + fsType: + type: string + readOnly: + type: boolean + secretRef: properties: - readOnly: - type: boolean - secretName: - type: string - shareName: + name: type: string - required: - - secretName - - shareName type: object - cephfs: - properties: - monitors: - items: + x-kubernetes-map-type: atomic + volumeID: + type: string + required: + - volumeID + type: object + configMap: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: type: string - type: array - path: - type: string - readOnly: - type: boolean - secretFile: - type: string - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - monitors - type: object - cinder: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - volumeID: - type: string - required: - - volumeID - type: object - configMap: + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + csi: + properties: + driver: + type: string + fsType: + type: string + nodePublishSecretRef: properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array name: type: string - optional: - type: boolean type: object x-kubernetes-map-type: atomic - csi: - properties: - driver: - type: string - fsType: - type: string - nodePublishSecretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - readOnly: - type: boolean - volumeAttributes: - additionalProperties: + readOnly: + type: boolean + volumeAttributes: + additionalProperties: + type: string + type: object + required: + - driver + type: object + downwardAPI: + properties: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: type: string - type: object - required: - - driver - type: object - downwardAPI: - properties: - defaultMode: - format: int32 - type: integer - items: - items: + resourceFieldRef: properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: + containerName: + type: string + divisor: + 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 + resource: type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - 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 - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic required: - - path + - resource type: object - type: array - type: object - emptyDir: - properties: - medium: - type: string - sizeLimit: - 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 - type: object - ephemeral: + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + emptyDir: + properties: + medium: + type: string + sizeLimit: + 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 + type: object + ephemeral: + properties: + volumeClaimTemplate: properties: - volumeClaimTemplate: + metadata: + type: object + spec: properties: - metadata: + accessModes: + items: + type: string + type: array + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name type: object - spec: + x-kubernetes-map-type: atomic + dataSourceRef: properties: - accessModes: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + claims: items: - type: string + properties: + name: + type: string + required: + - name + type: object type: array - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - required: - - kind - - name - type: object - x-kubernetes-map-type: atomic - dataSourceRef: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - required: - - kind + x-kubernetes-list-map-keys: - name + x-kubernetes-list-type: map + 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 type: object - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - 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 - 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 - 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 type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - required: - - key - - operator - type: object - type: array - matchLabels: - additionalProperties: + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: type: string - type: object + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string type: object - x-kubernetes-map-type: atomic - storageClassName: - type: string - volumeMode: - type: string - volumeName: - type: string type: object - required: - - spec - type: object - type: object - fc: - properties: - fsType: - type: string - lun: - format: int32 - type: integer - readOnly: - type: boolean - targetWWNs: - items: - type: string - type: array - wwids: - items: - type: string - type: array - type: object - flexVolume: - properties: - driver: - type: string - fsType: - type: string - options: - additionalProperties: - type: string - type: object - readOnly: - type: boolean - secretRef: - properties: - name: + x-kubernetes-map-type: atomic + storageClassName: type: string - type: object - x-kubernetes-map-type: atomic - required: - - driver - type: object - flocker: - properties: - datasetName: - type: string - datasetUUID: - type: string - type: object - gcePersistentDisk: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - pdName: - type: string - readOnly: - type: boolean - required: - - pdName - type: object - gitRepo: - properties: - directory: - type: string - repository: - type: string - revision: - type: string - required: - - repository - type: object - glusterfs: - properties: - endpoints: - type: string - path: - type: string - readOnly: - type: boolean - required: - - endpoints - - path - type: object - hostPath: - properties: - path: - type: string - type: - type: string - required: - - path - type: object - iscsi: - properties: - chapAuthDiscovery: - type: boolean - chapAuthSession: - type: boolean - fsType: - type: string - initiatorName: - type: string - iqn: - type: string - iscsiInterface: - type: string - lun: - format: int32 - type: integer - portals: - items: - type: string - type: array - readOnly: - type: boolean - secretRef: - properties: - name: + volumeMode: + type: string + volumeName: type: string type: object - x-kubernetes-map-type: atomic - targetPortal: - type: string required: - - iqn - - lun - - targetPortal + - spec type: object - name: + type: object + fc: + properties: + fsType: type: string - nfs: - properties: - path: - type: string - readOnly: - type: boolean - server: - type: string - required: - - path - - server - type: object - persistentVolumeClaim: - properties: - claimName: - type: string - readOnly: - type: boolean - required: - - claimName + lun: + format: int32 + type: integer + readOnly: + type: boolean + targetWWNs: + items: + type: string + type: array + wwids: + items: + type: string + type: array + type: object + flexVolume: + properties: + driver: + type: string + fsType: + type: string + options: + additionalProperties: + type: string type: object - photonPersistentDisk: + readOnly: + type: boolean + secretRef: properties: - fsType: - type: string - pdID: + name: type: string - required: - - pdID type: object - portworxVolume: + x-kubernetes-map-type: atomic + required: + - driver + type: object + flocker: + properties: + datasetName: + type: string + datasetUUID: + type: string + type: object + gcePersistentDisk: + properties: + fsType: + type: string + partition: + format: int32 + type: integer + pdName: + type: string + readOnly: + type: boolean + required: + - pdName + type: object + gitRepo: + properties: + directory: + type: string + repository: + type: string + revision: + type: string + required: + - repository + type: object + glusterfs: + properties: + endpoints: + type: string + path: + type: string + readOnly: + type: boolean + required: + - endpoints + - path + type: object + hostPath: + properties: + path: + type: string + type: + type: string + required: + - path + type: object + iscsi: + properties: + chapAuthDiscovery: + type: boolean + chapAuthSession: + type: boolean + fsType: + type: string + initiatorName: + type: string + iqn: + type: string + iscsiInterface: + type: string + lun: + format: int32 + type: integer + portals: + items: + type: string + type: array + readOnly: + type: boolean + secretRef: properties: - fsType: - type: string - readOnly: - type: boolean - volumeID: + name: type: string - required: - - volumeID type: object - projected: - properties: - defaultMode: - format: int32 - type: integer - sources: - items: + x-kubernetes-map-type: atomic + targetPortal: + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + type: string + nfs: + properties: + path: + type: string + readOnly: + type: boolean + server: + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + properties: + claimName: + type: string + readOnly: + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + properties: + fsType: + type: string + pdID: + type: string + required: + - pdID + type: object + portworxVolume: + properties: + fsType: + type: string + readOnly: + type: boolean + volumeID: + type: string + required: + - volumeID + type: object + projected: + properties: + defaultMode: + format: int32 + type: integer + sources: + items: + properties: + configMap: properties: - configMap: - properties: - items: - items: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean + type: object + x-kubernetes-map-type: atomic + downwardAPI: + properties: + items: + items: + properties: + fieldRef: properties: - key: - type: string - mode: - format: int32 - type: integer - path: + apiVersion: type: string - required: - - key - - path - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - downwardAPI: - properties: - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: + fieldPath: type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - 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 - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic required: - - path + - fieldPath type: object - type: array - type: object - secret: - properties: - items: - items: + x-kubernetes-map-type: atomic + mode: + format: int32 + type: integer + path: + type: string + resourceFieldRef: properties: - key: + containerName: type: string - mode: - format: int32 - type: integer - path: + divisor: + 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 + resource: type: string required: - - key - - path + - resource type: object - type: array - name: - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - serviceAccountToken: - properties: - audience: - type: string - expirationSeconds: - format: int64 - type: integer - path: - type: string - required: - - path - type: object + x-kubernetes-map-type: atomic + required: + - path + type: object + type: array + type: object + secret: + properties: + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + name: + type: string + optional: + type: boolean type: object - type: array - type: object - quobyte: - properties: - group: - type: string - readOnly: - type: boolean - registry: - type: string - tenant: - type: string - user: - type: string - volume: - type: string - required: - - registry - - volume - type: object - rbd: - properties: - fsType: - type: string - image: - type: string - keyring: - type: string - monitors: - items: - type: string - type: array - pool: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - image - - monitors - type: object - scaleIO: - properties: - fsType: - type: string - gateway: - type: string - protectionDomain: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - sslEnabled: - type: boolean - storageMode: - type: string - storagePool: - type: string - system: - type: string - volumeName: - type: string - required: - - gateway - - secretRef - - system - type: object - secret: - properties: - defaultMode: - format: int32 - type: integer - items: - items: + x-kubernetes-map-type: atomic + serviceAccountToken: properties: - key: + audience: type: string - mode: - format: int32 + expirationSeconds: + format: int64 type: integer path: type: string required: - - key - path type: object - type: array - optional: - type: boolean - secretName: - type: string - type: object - storageos: + type: object + type: array + type: object + quobyte: + properties: + group: + type: string + readOnly: + type: boolean + registry: + type: string + tenant: + type: string + user: + type: string + volume: + type: string + required: + - registry + - volume + type: object + rbd: + properties: + fsType: + type: string + image: + type: string + keyring: + type: string + monitors: + items: + type: string + type: array + pool: + type: string + readOnly: + type: boolean + secretRef: properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - type: string - type: object - x-kubernetes-map-type: atomic - volumeName: - type: string - volumeNamespace: + name: type: string type: object - vsphereVolume: + x-kubernetes-map-type: atomic + user: + type: string + required: + - image + - monitors + type: object + scaleIO: + properties: + fsType: + type: string + gateway: + type: string + protectionDomain: + type: string + readOnly: + type: boolean + secretRef: properties: - fsType: - type: string - storagePolicyID: - type: string - storagePolicyName: - type: string - volumePath: + name: type: string - required: - - volumePath type: object + x-kubernetes-map-type: atomic + sslEnabled: + type: boolean + storageMode: + type: string + storagePool: + type: string + system: + type: string + volumeName: + type: string required: - - name + - gateway + - secretRef + - system type: object - volumeMount: + secret: properties: - mountPath: - type: string - mountPropagation: + defaultMode: + format: int32 + type: integer + items: + items: + properties: + key: + type: string + mode: + format: int32 + type: integer + path: + type: string + required: + - key + - path + type: object + type: array + optional: + type: boolean + secretName: type: string - name: + type: object + storageos: + properties: + fsType: type: string readOnly: type: boolean - subPath: + secretRef: + properties: + name: + type: string + type: object + x-kubernetes-map-type: atomic + volumeName: type: string - subPathExpr: + volumeNamespace: + type: string + type: object + vsphereVolume: + properties: + fsType: + type: string + storagePolicyID: + type: string + storagePolicyName: + type: string + volumePath: type: string required: - - mountPath - - name + - volumePath type: object required: - - volume - - volumeMount - type: object - priorityClassName: - type: string - resources: - properties: - claims: - items: - properties: - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - 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 - 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 - type: object + - name type: object - s3: + volumeMount: properties: - acl: - type: string - bucket: - type: string - endpoint: - type: string - options: - items: - type: string - type: array - path: - type: string - prefix: - type: string - provider: + mountPath: type: string - region: + mountPropagation: type: string - secretName: + name: type: string - sse: + readOnly: + type: boolean + subPath: type: string - storageClass: + subPathExpr: type: string required: - - provider + - mountPath + - name type: object - serviceAccount: - type: string - snapshotsDeleteRatio: - default: 1 - type: number - tolerations: + required: + - volume + - volumeMount + type: object + priorityClassName: + type: string + resources: + properties: + claims: items: properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: + name: type: string + required: + - name type: object type: array - toolImage: + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + 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 + 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 + type: object + type: object + s3: + properties: + acl: type: string - volumeBackupInitJobMaxActiveSeconds: - default: 600 - type: integer + bucket: + type: string + endpoint: + type: string + options: + items: + type: string + type: array + path: + type: string + prefix: + type: string + provider: + type: string + region: + type: string + secretName: + type: string + sse: + type: string + storageClass: + type: string + required: + - provider type: object + serviceAccount: + type: string + snapshotsDeleteRatio: + default: 1 + type: number + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + toolImage: + type: string + volumeBackupInitJobMaxActiveSeconds: + default: 600 + type: integer type: object - maxBackups: - format: int32 - type: integer - maxReservedTime: - type: string - pause: - type: boolean - schedule: - type: string - required: - - backupTemplate - - schedule type: object status: properties: - allBackupCleanTime: - format: date-time + backupSize: + format: int64 + type: integer + backupSizeReadable: type: string - lastBackup: + backups: + items: + properties: + backupName: + type: string + backupPath: + type: string + backupSize: + format: int64 + type: integer + commitTs: + type: string + k8sClusterName: + type: string + message: + type: string + phase: + type: string + reason: + type: string + tcName: + type: string + tcNamespace: + type: string + required: + - backupName + - phase + type: object + type: array + commitTs: type: string - lastBackupTime: + conditions: + items: + properties: + lastTransitionTime: + format: date-time + nullable: true + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + nullable: true + type: array + phase: + type: string + timeCompleted: + format: date-time + nullable: true + type: string + timeStarted: format: date-time + nullable: true + type: string + timeTaken: type: string type: object required: diff --git a/pkg/apis/pingcap/v1alpha1/openapi_generated.go b/pkg/apis/pingcap/v1alpha1/openapi_generated.go index 85c0ec1246..4f789a1a7e 100644 --- a/pkg/apis/pingcap/v1alpha1/openapi_generated.go +++ b/pkg/apis/pingcap/v1alpha1/openapi_generated.go @@ -1079,6 +1079,13 @@ func schema_pkg_apis_pingcap_v1alpha1_BackupSpec(ref common.ReferenceCallback) c Format: "", }, }, + "logSubcommand": { + SchemaProps: spec.SchemaProps{ + Description: "Subcommand is the subcommand for BR, such as start, stop, pause etc.", + Type: []string{"string"}, + Format: "", + }, + }, "logTruncateUntil": { SchemaProps: spec.SchemaProps{ Description: "LogTruncateUntil is log backup truncate until timestamp. Format supports TSO or datetime, e.g. '400036290571534337', '2018-05-11 01:42:23'.", diff --git a/pkg/apis/pingcap/v1alpha1/types.go b/pkg/apis/pingcap/v1alpha1/types.go index 7839858e30..9e2361996c 100644 --- a/pkg/apis/pingcap/v1alpha1/types.go +++ b/pkg/apis/pingcap/v1alpha1/types.go @@ -2177,6 +2177,10 @@ type BackupSpec struct { // Default is current timestamp. // +optional CommitTs string `json:"commitTs,omitempty"` + // Subcommand is the subcommand for BR, such as start, stop, pause etc. + // +optional + // +kubebuilder:default="start" + LogSubcommand string `json:"logSubcommand,omitempty"` // LogTruncateUntil is log backup truncate until timestamp. // Format supports TSO or datetime, e.g. '400036290571534337', '2018-05-11 01:42:23'. // +optional @@ -2397,6 +2401,8 @@ const ( LogTruncateCommand LogSubCommandType = "log-truncate" // LogStopCommand is the stop command of log backup. LogStopCommand LogSubCommandType = "log-stop" + // LogPauseCommand is the pause command of log backup. + LogPauseCommand LogSubCommandType = "log-pause" ) // LogSubCommandStatus is the log backup subcommand's status. From b698c61c4e1b54e40cb0e26f699d4e4131f77365 Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Tue, 13 Aug 2024 17:00:15 +0800 Subject: [PATCH 02/34] add more --- pkg/apis/pingcap/v1alpha1/backup.go | 16 +++++++++++----- pkg/backup/backup/backup_manager.go | 1 + pkg/controller/backup/backup_controller.go | 2 +- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go index d380ab3fe4..9bc0dc799e 100644 --- a/pkg/apis/pingcap/v1alpha1/backup.go +++ b/pkg/apis/pingcap/v1alpha1/backup.go @@ -321,15 +321,21 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType { if backup.Spec.Mode != BackupModeLog { return "" } - if backup.Spec.LogStop { + switch backup.Spec.LogSubcommand { + case "log-start": + return LogStartCommand + case "log-stop": return LogStopCommand - } - if backup.Spec.LogTruncateUntil != "" { + case "log-pause": + return LogPauseCommand + case "log-truncate": return LogTruncateCommand - } - return LogStartCommand + default: + return "" + } } +//TODO: (Ris) move logic about truncate to elsewhere // IsLogBackupSubCommandOntheCondition return whether the log subcommand on the condition. func IsLogBackupSubCommandOntheCondition(backup *Backup, conditionType BackupConditionType) bool { command := ParseLogBackupSubcommand(backup) diff --git a/pkg/backup/backup/backup_manager.go b/pkg/backup/backup/backup_manager.go index 29e13ca78c..4fa54029e0 100644 --- a/pkg/backup/backup/backup_manager.go +++ b/pkg/backup/backup/backup_manager.go @@ -161,6 +161,7 @@ func (bm *backupManager) syncBackupJob(backup *v1alpha1.Backup) error { var job *batchv1.Job var reason string var updateStatus *controller.BackupUpdateStatus + //TODO: (Ris)modify the backupJobs if job, updateStatus, reason, err = bm.makeBackupJob(backup); err != nil { klog.Errorf("backup %s/%s create job %s failed, reason is %s, error %v.", ns, name, backupJobName, reason, err) return err diff --git a/pkg/controller/backup/backup_controller.go b/pkg/controller/backup/backup_controller.go index 41a27dfbd3..4cdc625cb1 100644 --- a/pkg/controller/backup/backup_controller.go +++ b/pkg/controller/backup/backup_controller.go @@ -208,7 +208,7 @@ func (c *Controller) updateBackup(cur interface{}) { return } - // TODO: log backup check all subcommand job's pod status + // TODO: (Ris)log backup check all subcommand job's pod status if newBackup.Spec.Mode != v1alpha1.BackupModeLog { // we will create backup job when we mark backup as scheduled status, // but the backup job or its pod may failed due to insufficient resources or other reasons in k8s, From 5bc9a6024ea4afafa56c9818f8ed50aa70b52aee Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Thu, 15 Aug 2024 08:37:21 +0200 Subject: [PATCH 03/34] add truncate task --- pkg/apis/pingcap/v1alpha1/backup.go | 11 +++++++++-- pkg/controller/backup/backup_controller.go | 8 ++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go index 9bc0dc799e..6de001d5c5 100644 --- a/pkg/apis/pingcap/v1alpha1/backup.go +++ b/pkg/apis/pingcap/v1alpha1/backup.go @@ -201,6 +201,13 @@ func IsBackupScheduled(backup *Backup) bool { return condition != nil && condition.Status == corev1.ConditionTrue } +func HaveTruncateUntil(backup *Backup) bool { + if backup.Spec.Mode != BackupModeLog { + return false + } + return backup.Spec.LogTruncateUntil != "" +} + // IsBackupRunning returns true if a Backup is Running. func IsBackupRunning(backup *Backup) bool { if backup.Spec.Mode == BackupModeLog { @@ -332,10 +339,10 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType { return LogTruncateCommand default: return "" - } + } } -//TODO: (Ris) move logic about truncate to elsewhere +// TODO: (Ris) move logic about truncate to elsewhere // IsLogBackupSubCommandOntheCondition return whether the log subcommand on the condition. func IsLogBackupSubCommandOntheCondition(backup *Backup, conditionType BackupConditionType) bool { command := ParseLogBackupSubcommand(backup) diff --git a/pkg/controller/backup/backup_controller.go b/pkg/controller/backup/backup_controller.go index 4cdc625cb1..d30c50e4f8 100644 --- a/pkg/controller/backup/backup_controller.go +++ b/pkg/controller/backup/backup_controller.go @@ -240,8 +240,16 @@ func (c *Controller) updateBackup(cur interface{}) { return } + klog.V(4).Infof("backup object %s/%s enqueue", ns, name) c.enqueueBackup(newBackup) + + //For log backup with truncate, we need to create a truncate job + if v1alpha1.HaveTruncateUntil(newBackup) { + truncateTask := newBackup.DeepCopy() + truncateTask.Spec.LogSubcommand = string(v1alpha1.LogTruncateCommand) + c.enqueueBackup(truncateTask) + } } func (c *Controller) deleteJob(obj interface{}) { From d4d04775fa3ab50ac3566678c69287a979d3fc94 Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Thu, 15 Aug 2024 09:14:41 +0200 Subject: [PATCH 04/34] add pause(p1) --- pkg/apis/pingcap/v1alpha1/backup.go | 9 +++++++++ pkg/apis/pingcap/v1alpha1/types.go | 6 +++++- pkg/controller/backup/backup_controller.go | 6 +++++- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go index 6de001d5c5..b49423f81a 100644 --- a/pkg/apis/pingcap/v1alpha1/backup.go +++ b/pkg/apis/pingcap/v1alpha1/backup.go @@ -201,6 +201,7 @@ func IsBackupScheduled(backup *Backup) bool { return condition != nil && condition.Status == corev1.ConditionTrue } +// HaveTruncateUntil returns true if a Backup has truncate until set func HaveTruncateUntil(backup *Backup) bool { if backup.Spec.Mode != BackupModeLog { return false @@ -208,6 +209,14 @@ func HaveTruncateUntil(backup *Backup) bool { return backup.Spec.LogTruncateUntil != "" } +func IsBackupPaused(backup *Backup) bool { + if backup.Spec.Mode == BackupModeLog { + return IsLogBackupSubCommandOntheCondition(backup, BackupPaused) + } + _, condition := GetBackupCondition(&backup.Status, BackupPaused) + return condition != nil && condition.Status == corev1.ConditionTrue +} + // IsBackupRunning returns true if a Backup is Running. func IsBackupRunning(backup *Backup) bool { if backup.Spec.Mode == BackupModeLog { diff --git a/pkg/apis/pingcap/v1alpha1/types.go b/pkg/apis/pingcap/v1alpha1/types.go index 9e2361996c..1dc42de4b3 100644 --- a/pkg/apis/pingcap/v1alpha1/types.go +++ b/pkg/apis/pingcap/v1alpha1/types.go @@ -2179,7 +2179,7 @@ type BackupSpec struct { CommitTs string `json:"commitTs,omitempty"` // Subcommand is the subcommand for BR, such as start, stop, pause etc. // +optional - // +kubebuilder:default="start" + // +kubebuilder:default="log-start" LogSubcommand string `json:"logSubcommand,omitempty"` // LogTruncateUntil is log backup truncate until timestamp. // Format supports TSO or datetime, e.g. '400036290571534337', '2018-05-11 01:42:23'. @@ -2362,6 +2362,8 @@ const ( BackupInvalid BackupConditionType = "Invalid" // BackupPrepare means the backup prepare backup process BackupPrepare BackupConditionType = "Prepare" + // BackupPaused means the backup was paused + BackupPaused BackupConditionType = "Paused" // BackupStopped means the backup was stopped, just log backup has this condition BackupStopped BackupConditionType = "Stopped" // BackupRestart means the backup was restarted, now just support snapshot backup @@ -2403,6 +2405,8 @@ const ( LogStopCommand LogSubCommandType = "log-stop" // LogPauseCommand is the pause command of log backup. LogPauseCommand LogSubCommandType = "log-pause" + // LogResumeCommand is the resume command of log backup. + LogResumeCommand LogSubCommandType = "log-resume" ) // LogSubCommandStatus is the log backup subcommand's status. diff --git a/pkg/controller/backup/backup_controller.go b/pkg/controller/backup/backup_controller.go index d30c50e4f8..deb779188d 100644 --- a/pkg/controller/backup/backup_controller.go +++ b/pkg/controller/backup/backup_controller.go @@ -240,12 +240,16 @@ func (c *Controller) updateBackup(cur interface{}) { return } + if newBackup.Spec.Mode == v1alpha1.BackupModeLog && newBackup.Spec.LogSubcommand == string(v1alpha1.LogStartCommand) && v1alpha1.IsBackupPaused(newBackup) { + newBackup.Spec.LogSubcommand = string(v1alpha1.LogResumeCommand) + } + klog.V(4).Infof("backup object %s/%s enqueue", ns, name) c.enqueueBackup(newBackup) //For log backup with truncate, we need to create a truncate job - if v1alpha1.HaveTruncateUntil(newBackup) { + if v1alpha1.HaveTruncateUntil(newBackup) && newBackup.Spec.LogSubcommand != string(v1alpha1.LogTruncateCommand) { truncateTask := newBackup.DeepCopy() truncateTask.Spec.LogSubcommand = string(v1alpha1.LogTruncateCommand) c.enqueueBackup(truncateTask) From 66f0c91d0a9cc643833637e1071834d564f66bf8 Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Thu, 15 Aug 2024 09:50:39 +0200 Subject: [PATCH 05/34] task didn't apply --- manifests/crd.yaml | 6 +++--- manifests/crd/v1/pingcap.com_backups.yaml | 2 +- .../crd/v1/pingcap.com_backupschedules.yaml | 4 ++-- pkg/apis/pingcap/v1alpha1/types.go | 2 +- pkg/controller/backup/backup_controller.go | 18 ++++++++---------- 5 files changed, 15 insertions(+), 17 deletions(-) diff --git a/manifests/crd.yaml b/manifests/crd.yaml index e93cdc85e1..68e6e4c46a 100644 --- a/manifests/crd.yaml +++ b/manifests/crd.yaml @@ -2114,7 +2114,7 @@ spec: logStop: type: boolean logSubcommand: - default: start + default: log-start type: string logTruncateUntil: type: string @@ -4350,7 +4350,7 @@ spec: logStop: type: boolean logSubcommand: - default: start + default: log-start type: string logTruncateUntil: type: string @@ -6696,7 +6696,7 @@ spec: logStop: type: boolean logSubcommand: - default: start + default: log-start type: string logTruncateUntil: type: string diff --git a/manifests/crd/v1/pingcap.com_backups.yaml b/manifests/crd/v1/pingcap.com_backups.yaml index b63416a139..afcea77fce 100644 --- a/manifests/crd/v1/pingcap.com_backups.yaml +++ b/manifests/crd/v1/pingcap.com_backups.yaml @@ -2139,7 +2139,7 @@ spec: logStop: type: boolean logSubcommand: - default: start + default: log-start type: string logTruncateUntil: type: string diff --git a/manifests/crd/v1/pingcap.com_backupschedules.yaml b/manifests/crd/v1/pingcap.com_backupschedules.yaml index bdf30a8f11..1bb9f92d88 100644 --- a/manifests/crd/v1/pingcap.com_backupschedules.yaml +++ b/manifests/crd/v1/pingcap.com_backupschedules.yaml @@ -2114,7 +2114,7 @@ spec: logStop: type: boolean logSubcommand: - default: start + default: log-start type: string logTruncateUntil: type: string @@ -4350,7 +4350,7 @@ spec: logStop: type: boolean logSubcommand: - default: start + default: log-start type: string logTruncateUntil: type: string diff --git a/pkg/apis/pingcap/v1alpha1/types.go b/pkg/apis/pingcap/v1alpha1/types.go index 1dc42de4b3..d961d8143f 100644 --- a/pkg/apis/pingcap/v1alpha1/types.go +++ b/pkg/apis/pingcap/v1alpha1/types.go @@ -2363,7 +2363,7 @@ const ( // BackupPrepare means the backup prepare backup process BackupPrepare BackupConditionType = "Prepare" // BackupPaused means the backup was paused - BackupPaused BackupConditionType = "Paused" + BackupPaused BackupConditionType = "Paused" // BackupStopped means the backup was stopped, just log backup has this condition BackupStopped BackupConditionType = "Stopped" // BackupRestart means the backup was restarted, now just support snapshot backup diff --git a/pkg/controller/backup/backup_controller.go b/pkg/controller/backup/backup_controller.go index deb779188d..36aa15630e 100644 --- a/pkg/controller/backup/backup_controller.go +++ b/pkg/controller/backup/backup_controller.go @@ -167,9 +167,16 @@ func (c *Controller) updateBackup(cur interface{}) { ns := newBackup.GetNamespace() name := newBackup.GetName() + //For log backup with truncate, we need to create a truncate job + if newBackup.Spec.LogSubcommand != string(v1alpha1.LogTruncateCommand) && v1alpha1.HaveTruncateUntil(newBackup) { + truncateTask := newBackup.DeepCopy() + truncateTask.Spec.LogSubcommand = string(v1alpha1.LogTruncateCommand) + defer c.updateBackup(truncateTask) + } + if newBackup.DeletionTimestamp != nil { // the backup is being deleted, we need to do some cleanup work, enqueue backup. - klog.Infof("backup %s/%s is being deleted", ns, name) + klog.Infof("backup %s/%s - %s is being deleted", ns, name, string(newBackup.Spec.LogSubcommand)) c.enqueueBackup(newBackup) return } @@ -208,7 +215,6 @@ func (c *Controller) updateBackup(cur interface{}) { return } - // TODO: (Ris)log backup check all subcommand job's pod status if newBackup.Spec.Mode != v1alpha1.BackupModeLog { // we will create backup job when we mark backup as scheduled status, // but the backup job or its pod may failed due to insufficient resources or other reasons in k8s, @@ -244,16 +250,8 @@ func (c *Controller) updateBackup(cur interface{}) { newBackup.Spec.LogSubcommand = string(v1alpha1.LogResumeCommand) } - klog.V(4).Infof("backup object %s/%s enqueue", ns, name) c.enqueueBackup(newBackup) - - //For log backup with truncate, we need to create a truncate job - if v1alpha1.HaveTruncateUntil(newBackup) && newBackup.Spec.LogSubcommand != string(v1alpha1.LogTruncateCommand) { - truncateTask := newBackup.DeepCopy() - truncateTask.Spec.LogSubcommand = string(v1alpha1.LogTruncateCommand) - c.enqueueBackup(truncateTask) - } } func (c *Controller) deleteJob(obj interface{}) { From f94c12fba0b72b0ee0b279e468e0079e0576c490 Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Thu, 15 Aug 2024 11:49:25 +0200 Subject: [PATCH 06/34] done --- pkg/backup/backup/backup_manager.go | 1 + pkg/controller/backup/backup_controller.go | 10 ++-------- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/pkg/backup/backup/backup_manager.go b/pkg/backup/backup/backup_manager.go index 4fa54029e0..efda3cdcb4 100644 --- a/pkg/backup/backup/backup_manager.go +++ b/pkg/backup/backup/backup_manager.go @@ -168,6 +168,7 @@ func (bm *backupManager) syncBackupJob(backup *v1alpha1.Backup) error { } // create k8s job + klog.Infof("backup %s/%s creating job %s.", ns, name, backupJobName) if err := bm.deps.JobControl.CreateJob(backup, job); err != nil { errMsg := fmt.Errorf("create backup %s/%s job %s failed, err: %v", ns, name, backupJobName, err) bm.statusUpdater.Update(backup, &v1alpha1.BackupCondition{ diff --git a/pkg/controller/backup/backup_controller.go b/pkg/controller/backup/backup_controller.go index 36aa15630e..aa9bab3b91 100644 --- a/pkg/controller/backup/backup_controller.go +++ b/pkg/controller/backup/backup_controller.go @@ -155,6 +155,7 @@ func (c *Controller) sync(key string) (err error) { return err } + klog.Infof("Syncing Backup %s/%s", ns, name) return c.syncBackup(backup.DeepCopy()) } @@ -167,16 +168,9 @@ func (c *Controller) updateBackup(cur interface{}) { ns := newBackup.GetNamespace() name := newBackup.GetName() - //For log backup with truncate, we need to create a truncate job - if newBackup.Spec.LogSubcommand != string(v1alpha1.LogTruncateCommand) && v1alpha1.HaveTruncateUntil(newBackup) { - truncateTask := newBackup.DeepCopy() - truncateTask.Spec.LogSubcommand = string(v1alpha1.LogTruncateCommand) - defer c.updateBackup(truncateTask) - } - if newBackup.DeletionTimestamp != nil { // the backup is being deleted, we need to do some cleanup work, enqueue backup. - klog.Infof("backup %s/%s - %s is being deleted", ns, name, string(newBackup.Spec.LogSubcommand)) + klog.Infof("backup %s/%s is being deleted", ns, name) c.enqueueBackup(newBackup) return } From e7f8537bead9fb4b1597c3eb46b3477eb4eac54f Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Mon, 26 Aug 2024 09:49:41 +0200 Subject: [PATCH 07/34] handel skip --- pkg/apis/pingcap/v1alpha1/backup.go | 11 +++++++++++ pkg/backup/backup/backup_manager.go | 8 ++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go index b49423f81a..937a52cf5b 100644 --- a/pkg/apis/pingcap/v1alpha1/backup.go +++ b/pkg/apis/pingcap/v1alpha1/backup.go @@ -414,3 +414,14 @@ func IsLogBackupAlreadyTruncate(backup *Backup) bool { func IsLogBackupAlreadyStop(backup *Backup) bool { return backup.Spec.Mode == BackupModeLog && backup.Status.Phase == BackupStopped } + +// IsLogBackupAlreadyStop return whether log backup has already paused. +//TODO: (Ris) deal with task stopped +func IsLogBackupAlreadyPaused(backup *Backup) bool { + return backup.Spec.Mode == BackupModeLog && backup.Status.Phase == BackupPaused +} + +// IsLogBackupAlreadyRestart return whether log backup has already resumed. +func IsLogBackupAlreadyResumed(backup *Backup) bool { + return backup.Spec.Mode == BackupModeLog && backup.Status.Phase == BackupRestart +} diff --git a/pkg/backup/backup/backup_manager.go b/pkg/backup/backup/backup_manager.go index efda3cdcb4..4f46bcc66b 100644 --- a/pkg/backup/backup/backup_manager.go +++ b/pkg/backup/backup/backup_manager.go @@ -1090,6 +1090,12 @@ func (bm *backupManager) skipLogBackupSync(backup *v1alpha1.Backup) (bool, error switch command { case v1alpha1.LogStartCommand: skip = v1alpha1.IsLogBackupAlreadyStart(backup) + case v1alpha1.LogStopCommand: + skip = v1alpha1.IsLogBackupAlreadyStop(backup) + case v1alpha1.LogPauseCommand: + skip = v1alpha1.IsLogBackupAlreadyPaused(backup) + case v1alpha1.LogResumeCommand: + skip = !v1alpha1.IsLogBackupAlreadyResumed(backup) case v1alpha1.LogTruncateCommand: if v1alpha1.IsLogBackupAlreadyTruncate(backup) { skip = true @@ -1105,8 +1111,6 @@ func (bm *backupManager) skipLogBackupSync(backup *v1alpha1.Backup) (bool, error Status: corev1.ConditionTrue, }, updateStatus) } - case v1alpha1.LogStopCommand: - skip = v1alpha1.IsLogBackupAlreadyStop(backup) default: return false, nil } From 5be5ee0eaeefd7196ad4aaf5483568f8d5312771 Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Mon, 26 Aug 2024 11:02:34 +0200 Subject: [PATCH 08/34] before bm --- cmd/backup-manager/app/backup/manager.go | 4 ++++ pkg/apis/pingcap/v1alpha1/backup.go | 3 +++ 2 files changed, 7 insertions(+) diff --git a/cmd/backup-manager/app/backup/manager.go b/cmd/backup-manager/app/backup/manager.go index b0d3b712da..d8c58e5e93 100644 --- a/cmd/backup-manager/app/backup/manager.go +++ b/cmd/backup-manager/app/backup/manager.go @@ -472,6 +472,10 @@ func (bm *Manager) performLogBackup(ctx context.Context, backup *v1alpha1.Backup resultStatus, reason, err = bm.stopLogBackup(ctx, backup) case string(v1alpha1.LogTruncateCommand): resultStatus, reason, err = bm.truncateLogBackup(ctx, backup) + case string(v1alpha1.LogResumeCommand): + klog.Errorf("Log resume command is not supported yet") + case string(v1alpha1.LogPauseCommand): + klog.Errorf("Log pause command is not supported yet") default: return fmt.Errorf("log backup %s unknown log subcommand %s", bm, bm.SubCommand) } diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go index 937a52cf5b..d041763a77 100644 --- a/pkg/apis/pingcap/v1alpha1/backup.go +++ b/pkg/apis/pingcap/v1alpha1/backup.go @@ -339,6 +339,9 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType { } switch backup.Spec.LogSubcommand { case "log-start": + if IsLogBackupAlreadyStart(backup) { + return LogResumeCommand + } return LogStartCommand case "log-stop": return LogStopCommand From 3a5f24c7d02e42b24340087b0133ef1090a92088 Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Tue, 27 Aug 2024 07:16:20 +0200 Subject: [PATCH 09/34] add resume --- cmd/backup-manager/app/backup/backup.go | 17 ++++++++++ cmd/backup-manager/app/backup/manager.go | 43 +++++++++++++++++++++++- pkg/apis/pingcap/v1alpha1/backup.go | 7 ++-- 3 files changed, 64 insertions(+), 3 deletions(-) diff --git a/cmd/backup-manager/app/backup/backup.go b/cmd/backup-manager/app/backup/backup.go index 854d37d2c1..cadbad0f6c 100644 --- a/cmd/backup-manager/app/backup/backup.go +++ b/cmd/backup-manager/app/backup/backup.go @@ -167,6 +167,23 @@ func (bo *Options) doStartLogBackup(ctx context.Context, backup *v1alpha1.Backup return bo.brCommandRun(ctx, fullArgs) } +// doResumeLogBackup generates br args about log backup resume and runs br binary to do the real backup work. +func (bo *Options) doResumeLogBackup(ctx context.Context, backup *v1alpha1.Backup) error { + specificArgs := []string{ + "log", + "resume", + fmt.Sprintf("--task-name=%s", backup.Name), + } + // if bo.CommitTS != "" && bo.CommitTS != "0" { + // specificArgs = append(specificArgs, fmt.Sprintf("--start-ts=%s", bo.CommitTS)) + // } + fullArgs, err := bo.backupCommandTemplate(backup, specificArgs, false) + if err != nil { + return err + } + return bo.brCommandRun(ctx, fullArgs) +} + // doStoplogBackup generates br args about log backup stop and runs br binary to do the real backup work. func (bo *Options) doStopLogBackup(ctx context.Context, backup *v1alpha1.Backup) error { specificArgs := []string{ diff --git a/cmd/backup-manager/app/backup/manager.go b/cmd/backup-manager/app/backup/manager.go index d8c58e5e93..085e425379 100644 --- a/cmd/backup-manager/app/backup/manager.go +++ b/cmd/backup-manager/app/backup/manager.go @@ -472,8 +472,9 @@ func (bm *Manager) performLogBackup(ctx context.Context, backup *v1alpha1.Backup resultStatus, reason, err = bm.stopLogBackup(ctx, backup) case string(v1alpha1.LogTruncateCommand): resultStatus, reason, err = bm.truncateLogBackup(ctx, backup) + //TODO: (Ris) support more funcs case string(v1alpha1.LogResumeCommand): - klog.Errorf("Log resume command is not supported yet") + resultStatus, reason, err = bm.resumeLogBackup(ctx, backup) case string(v1alpha1.LogPauseCommand): klog.Errorf("Log pause command is not supported yet") default: @@ -555,6 +556,46 @@ func (bm *Manager) startLogBackup(ctx context.Context, backup *v1alpha1.Backup) return updateStatus, "", nil } +// resumeLogBackup resume log backup. +func (bm *Manager) resumeLogBackup(ctx context.Context, backup *v1alpha1.Backup) (*controller.BackupUpdateStatus, string, error) { + started := time.Now() + backupFullPath, err := util.GetStoragePath(backup) + if err != nil { + klog.Errorf("Get backup full path of cluster %s failed, err: %s", bm, err) + return nil, "GetBackupRemotePathFailed", err + } + klog.Infof("Get backup full path %s of cluster %s success", backupFullPath, bm) + + updatePathStatus := &controller.BackupUpdateStatus{ + BackupPath: &backupFullPath, + } + + // change Prepare to Running before real backup process start + if err := bm.StatusUpdater.Update(backup, &v1alpha1.BackupCondition{ + Command: v1alpha1.LogResumeCommand, + Type: v1alpha1.BackupRunning, + Status: corev1.ConditionTrue, + }, updatePathStatus); err != nil { + return nil, "UpdateStatusFailed", err + } + + // run br binary to do the real job + backupErr := bm.doResumeLogBackup(ctx, backup) + + if backupErr != nil { + klog.Errorf("Resume log backup of cluster %s failed, err: %s", bm, backupErr) + return nil, "ResumeLogBackuFailed", backupErr + } + klog.Infof("Resume log backup of cluster %s to %s success", bm, backupFullPath) + + finish := time.Now() + updateStatus := &controller.BackupUpdateStatus{ + TimeStarted: &metav1.Time{Time: started}, + TimeCompleted: &metav1.Time{Time: finish}, + } + return updateStatus, "", nil +} + // stopLogBackup stops log backup. func (bm *Manager) stopLogBackup(ctx context.Context, backup *v1alpha1.Backup) (*controller.BackupUpdateStatus, string, error) { started := time.Now() diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go index d041763a77..58e7fd8497 100644 --- a/pkg/apis/pingcap/v1alpha1/backup.go +++ b/pkg/apis/pingcap/v1alpha1/backup.go @@ -391,7 +391,10 @@ func GetLogSubcommandConditionInfo(backup *Backup) (reason, message string) { // IsLogBackupAlreadyStart return whether log backup has already started. func IsLogBackupAlreadyStart(backup *Backup) bool { - return backup.Spec.Mode == BackupModeLog && backup.Status.CommitTs != "" + if backup.Spec.Mode != BackupModeLog || backup.Status.CommitTs == "" { + return false + } + return backup.Status.Phase == BackupRunning } // IsLogBackupAlreadyTruncate return whether log backup has already truncated. @@ -426,5 +429,5 @@ func IsLogBackupAlreadyPaused(backup *Backup) bool { // IsLogBackupAlreadyRestart return whether log backup has already resumed. func IsLogBackupAlreadyResumed(backup *Backup) bool { - return backup.Spec.Mode == BackupModeLog && backup.Status.Phase == BackupRestart + return backup.Spec.Mode == BackupModeLog && backup.Status.Phase == BackupRunning } From a69c409fcd5210ee0373c6199784f8e1b076a971 Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Tue, 27 Aug 2024 08:34:00 +0200 Subject: [PATCH 10/34] add pause --- cmd/backup-manager/app/backup/backup.go | 14 +++++++ cmd/backup-manager/app/backup/manager.go | 48 +++++++++++++++++------- pkg/controller/backup_status_updater.go | 1 + 3 files changed, 49 insertions(+), 14 deletions(-) diff --git a/cmd/backup-manager/app/backup/backup.go b/cmd/backup-manager/app/backup/backup.go index cadbad0f6c..f46e1e13c1 100644 --- a/cmd/backup-manager/app/backup/backup.go +++ b/cmd/backup-manager/app/backup/backup.go @@ -198,6 +198,20 @@ func (bo *Options) doStopLogBackup(ctx context.Context, backup *v1alpha1.Backup) return bo.brCommandRun(ctx, fullArgs) } +// doPauselogBackup generates br args about log backup pause and runs br binary to do the real backup work. +func (bo *Options) doPauseLogBackup(ctx context.Context, backup *v1alpha1.Backup) error { + specificArgs := []string{ + "log", + "pause", + fmt.Sprintf("--task-name=%s", backup.Name), + } + fullArgs, err := bo.backupCommandTemplate(backup, specificArgs, false) + if err != nil { + return err + } + return bo.brCommandRun(ctx, fullArgs) +} + // doTruncateLogBackup generates br args about log backup truncate and runs br binary to do the real backup work. func (bo *Options) doTruncateLogBackup(ctx context.Context, backup *v1alpha1.Backup) error { specificArgs := []string{ diff --git a/cmd/backup-manager/app/backup/manager.go b/cmd/backup-manager/app/backup/manager.go index 085e425379..a7bf3fcf12 100644 --- a/cmd/backup-manager/app/backup/manager.go +++ b/cmd/backup-manager/app/backup/manager.go @@ -472,11 +472,10 @@ func (bm *Manager) performLogBackup(ctx context.Context, backup *v1alpha1.Backup resultStatus, reason, err = bm.stopLogBackup(ctx, backup) case string(v1alpha1.LogTruncateCommand): resultStatus, reason, err = bm.truncateLogBackup(ctx, backup) - //TODO: (Ris) support more funcs case string(v1alpha1.LogResumeCommand): resultStatus, reason, err = bm.resumeLogBackup(ctx, backup) case string(v1alpha1.LogPauseCommand): - klog.Errorf("Log pause command is not supported yet") + resultStatus, reason, err = bm.pauseLogBackup(ctx, backup) default: return fmt.Errorf("log backup %s unknown log subcommand %s", bm, bm.SubCommand) } @@ -559,23 +558,13 @@ func (bm *Manager) startLogBackup(ctx context.Context, backup *v1alpha1.Backup) // resumeLogBackup resume log backup. func (bm *Manager) resumeLogBackup(ctx context.Context, backup *v1alpha1.Backup) (*controller.BackupUpdateStatus, string, error) { started := time.Now() - backupFullPath, err := util.GetStoragePath(backup) - if err != nil { - klog.Errorf("Get backup full path of cluster %s failed, err: %s", bm, err) - return nil, "GetBackupRemotePathFailed", err - } - klog.Infof("Get backup full path %s of cluster %s success", backupFullPath, bm) - - updatePathStatus := &controller.BackupUpdateStatus{ - BackupPath: &backupFullPath, - } // change Prepare to Running before real backup process start if err := bm.StatusUpdater.Update(backup, &v1alpha1.BackupCondition{ Command: v1alpha1.LogResumeCommand, Type: v1alpha1.BackupRunning, Status: corev1.ConditionTrue, - }, updatePathStatus); err != nil { + }, nil); err != nil { return nil, "UpdateStatusFailed", err } @@ -586,7 +575,7 @@ func (bm *Manager) resumeLogBackup(ctx context.Context, backup *v1alpha1.Backup) klog.Errorf("Resume log backup of cluster %s failed, err: %s", bm, backupErr) return nil, "ResumeLogBackuFailed", backupErr } - klog.Infof("Resume log backup of cluster %s to %s success", bm, backupFullPath) + klog.Infof("Resume log backup of cluster %s success", bm) finish := time.Now() updateStatus := &controller.BackupUpdateStatus{ @@ -627,6 +616,37 @@ func (bm *Manager) stopLogBackup(ctx context.Context, backup *v1alpha1.Backup) ( return updateStatus, "", nil } +// pauseLogBackup stops log backup. +func (bm *Manager) pauseLogBackup(ctx context.Context, backup *v1alpha1.Backup) (*controller.BackupUpdateStatus, string, error) { + started := time.Now() + + // change Prepare to Running before real backup process start + if err := bm.StatusUpdater.Update(backup, &v1alpha1.BackupCondition{ + Command: v1alpha1.LogPauseCommand, + Type: v1alpha1.BackupRunning, + Status: corev1.ConditionTrue, + }, nil); err != nil { + return nil, "UpdateStatusFailed", err + } + + // run br binary to do the real job + backupErr := bm.doPauseLogBackup(ctx, backup) + + if backupErr != nil { + klog.Errorf("Pause log backup of cluster %s failed, err: %s", bm, backupErr) + return nil, "PauseLogBackupFailed", backupErr + } + klog.Infof("Pause log backup of cluster %s success", bm) + + finish := time.Now() + + updateStatus := &controller.BackupUpdateStatus{ + TimeStarted: &metav1.Time{Time: started}, + TimeCompleted: &metav1.Time{Time: finish}, + } + return updateStatus, "", nil +} + // truncateLogBackup truncates log backup. func (bm *Manager) truncateLogBackup(ctx context.Context, backup *v1alpha1.Backup) (*controller.BackupUpdateStatus, string, error) { started := time.Now() diff --git a/pkg/controller/backup_status_updater.go b/pkg/controller/backup_status_updater.go index 370ecfacb2..147eb20dae 100644 --- a/pkg/controller/backup_status_updater.go +++ b/pkg/controller/backup_status_updater.go @@ -254,6 +254,7 @@ func updateLogSubcommandStatus(backup *v1alpha1.Backup, condition *v1alpha1.Back } // updateWholeLogBackupStatus updates the whole log backup status. +//TODO: (Ris) add more states func updateWholeLogBackupStatus(backup *v1alpha1.Backup, condition *v1alpha1.BackupCondition, status *BackupUpdateStatus) bool { // call real update interface to update whole status doUpdateStatusAndCondition := func(newCondition *v1alpha1.BackupCondition, newStatus *BackupUpdateStatus) bool { From cc893467e7622fb2e45fc28dc10efea44d5f153f Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Thu, 29 Aug 2024 11:31:20 +0200 Subject: [PATCH 11/34] change states --- pkg/controller/backup_status_updater.go | 36 ++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/pkg/controller/backup_status_updater.go b/pkg/controller/backup_status_updater.go index 147eb20dae..632df381c8 100644 --- a/pkg/controller/backup_status_updater.go +++ b/pkg/controller/backup_status_updater.go @@ -209,6 +209,7 @@ func updateSnapshotBackupStatus(backup *v1alpha1.Backup, condition *v1alpha1.Bac // updateLogBackupStatus update log backup status. // it will update both the log backup sub command status and the whole log backup status. +//TODO: (Ris) add more states here func updateLogBackupStatus(backup *v1alpha1.Backup, condition *v1alpha1.BackupCondition, newStatus *BackupUpdateStatus) bool { // update whole backup status isWholeStatusUpdate := updateWholeLogBackupStatus(backup, condition, newStatus) @@ -254,7 +255,6 @@ func updateLogSubcommandStatus(backup *v1alpha1.Backup, condition *v1alpha1.Back } // updateWholeLogBackupStatus updates the whole log backup status. -//TODO: (Ris) add more states func updateWholeLogBackupStatus(backup *v1alpha1.Backup, condition *v1alpha1.BackupCondition, status *BackupUpdateStatus) bool { // call real update interface to update whole status doUpdateStatusAndCondition := func(newCondition *v1alpha1.BackupCondition, newStatus *BackupUpdateStatus) bool { @@ -295,6 +295,24 @@ func updateWholeLogBackupStatus(backup *v1alpha1.Backup, condition *v1alpha1.Bac newStatus.TimeCompleted = nil newStatus.TimeStarted = nil return &newStatus + case v1alpha1.LogPauseCommand: + // pause command, complete condition, should not update TimeStarted, TimeCompleted + // other conditions, no need to be used to update whole status + if condition.Type != v1alpha1.BackupComplete { + return nil + } + newStatus.TimeCompleted = nil + newStatus.TimeStarted = nil + return &newStatus + case v1alpha1.LogResumeCommand: + // resume command, complete condition, should not update TimeCompleted, TimeStarted + // other conditions, no need to be used to update whole status + if condition.Type != v1alpha1.BackupComplete { + return nil + } + newStatus.TimeCompleted = nil + newStatus.TimeStarted = nil + return &newStatus default: // should not hanpen return nil @@ -324,6 +342,22 @@ func updateWholeLogBackupStatus(backup *v1alpha1.Backup, condition *v1alpha1.Bac return &newCondition } return nil + case v1alpha1.LogPauseCommand: + // pause command, complete condition, should be updated as paused + // other conditions, no need to be used to update whole condition + if condition.Type == v1alpha1.BackupComplete { + newCondition.Type = v1alpha1.BackupPaused + return &newCondition + } + return nil + case v1alpha1.LogResumeCommand: + // resume command, complete condition, should be updated as resumed + // other conditions, no need to be used to update whole condition + if condition.Type == v1alpha1.BackupComplete { + newCondition.Type = v1alpha1.BackupRunning + return &newCondition + } + return nil default: // truncate command or other, all conditions, no need to be used to update whole condition. return nil From 6ad5981fd7eac3df6211ca3fd26fe8d311f939c2 Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Fri, 30 Aug 2024 08:51:45 +0200 Subject: [PATCH 12/34] fix --- pkg/apis/pingcap/v1alpha1/backup.go | 7 ++----- pkg/backup/backup/backup_manager.go | 2 +- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go index 58e7fd8497..0d9767ae09 100644 --- a/pkg/apis/pingcap/v1alpha1/backup.go +++ b/pkg/apis/pingcap/v1alpha1/backup.go @@ -391,10 +391,7 @@ func GetLogSubcommandConditionInfo(backup *Backup) (reason, message string) { // IsLogBackupAlreadyStart return whether log backup has already started. func IsLogBackupAlreadyStart(backup *Backup) bool { - if backup.Spec.Mode != BackupModeLog || backup.Status.CommitTs == "" { - return false - } - return backup.Status.Phase == BackupRunning + return backup.Spec.Mode == BackupModeLog && backup.Status.CommitTs != "" } // IsLogBackupAlreadyTruncate return whether log backup has already truncated. @@ -428,6 +425,6 @@ func IsLogBackupAlreadyPaused(backup *Backup) bool { } // IsLogBackupAlreadyRestart return whether log backup has already resumed. -func IsLogBackupAlreadyResumed(backup *Backup) bool { +func IsLogBackupAlreadyRunning(backup *Backup) bool { return backup.Spec.Mode == BackupModeLog && backup.Status.Phase == BackupRunning } diff --git a/pkg/backup/backup/backup_manager.go b/pkg/backup/backup/backup_manager.go index 4f46bcc66b..69e27f44d8 100644 --- a/pkg/backup/backup/backup_manager.go +++ b/pkg/backup/backup/backup_manager.go @@ -1095,7 +1095,7 @@ func (bm *backupManager) skipLogBackupSync(backup *v1alpha1.Backup) (bool, error case v1alpha1.LogPauseCommand: skip = v1alpha1.IsLogBackupAlreadyPaused(backup) case v1alpha1.LogResumeCommand: - skip = !v1alpha1.IsLogBackupAlreadyResumed(backup) + skip = !v1alpha1.IsLogBackupAlreadyRunning(backup) case v1alpha1.LogTruncateCommand: if v1alpha1.IsLogBackupAlreadyTruncate(backup) { skip = true From c58b62ca0842addef0380d3e2db233a6e2d7a38d Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Fri, 30 Aug 2024 10:14:56 +0200 Subject: [PATCH 13/34] fix resume failed lint --- hack/local-up-operator.sh | 4 ---- pkg/apis/pingcap/v1alpha1/backup.go | 6 ++---- pkg/backup/backup/backup_manager.go | 5 ++--- pkg/controller/backup_status_updater.go | 1 - 4 files changed, 4 insertions(+), 12 deletions(-) diff --git a/hack/local-up-operator.sh b/hack/local-up-operator.sh index d89806b563..6bb765f328 100755 --- a/hack/local-up-operator.sh +++ b/hack/local-up-operator.sh @@ -13,10 +13,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -# -# This command runs tidb-operator in Kubernetes. -# - # Default provider is kind PROVIDER=${PROVIDER:-kind} diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go index 0d9767ae09..951f60082a 100644 --- a/pkg/apis/pingcap/v1alpha1/backup.go +++ b/pkg/apis/pingcap/v1alpha1/backup.go @@ -339,7 +339,7 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType { } switch backup.Spec.LogSubcommand { case "log-start": - if IsLogBackupAlreadyStart(backup) { + if IsLogBackupAlreadyPaused(backup) { return LogResumeCommand } return LogStartCommand @@ -350,11 +350,10 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType { case "log-truncate": return LogTruncateCommand default: - return "" + return LogStartCommand } } -// TODO: (Ris) move logic about truncate to elsewhere // IsLogBackupSubCommandOntheCondition return whether the log subcommand on the condition. func IsLogBackupSubCommandOntheCondition(backup *Backup, conditionType BackupConditionType) bool { command := ParseLogBackupSubcommand(backup) @@ -419,7 +418,6 @@ func IsLogBackupAlreadyStop(backup *Backup) bool { } // IsLogBackupAlreadyStop return whether log backup has already paused. -//TODO: (Ris) deal with task stopped func IsLogBackupAlreadyPaused(backup *Backup) bool { return backup.Spec.Mode == BackupModeLog && backup.Status.Phase == BackupPaused } diff --git a/pkg/backup/backup/backup_manager.go b/pkg/backup/backup/backup_manager.go index 69e27f44d8..c29d5762eb 100644 --- a/pkg/backup/backup/backup_manager.go +++ b/pkg/backup/backup/backup_manager.go @@ -161,7 +161,6 @@ func (bm *backupManager) syncBackupJob(backup *v1alpha1.Backup) error { var job *batchv1.Job var reason string var updateStatus *controller.BackupUpdateStatus - //TODO: (Ris)modify the backupJobs if job, updateStatus, reason, err = bm.makeBackupJob(backup); err != nil { klog.Errorf("backup %s/%s create job %s failed, reason is %s, error %v.", ns, name, backupJobName, reason, err) return err @@ -1095,7 +1094,7 @@ func (bm *backupManager) skipLogBackupSync(backup *v1alpha1.Backup) (bool, error case v1alpha1.LogPauseCommand: skip = v1alpha1.IsLogBackupAlreadyPaused(backup) case v1alpha1.LogResumeCommand: - skip = !v1alpha1.IsLogBackupAlreadyRunning(backup) + skip = v1alpha1.IsLogBackupAlreadyRunning(backup) case v1alpha1.LogTruncateCommand: if v1alpha1.IsLogBackupAlreadyTruncate(backup) { skip = true @@ -1240,7 +1239,7 @@ func shouldLogBackupCommandRequeue(backup *v1alpha1.Backup) bool { } command := v1alpha1.ParseLogBackupSubcommand(backup) - if command == v1alpha1.LogTruncateCommand || command == v1alpha1.LogStopCommand { + if command == v1alpha1.LogTruncateCommand || command == v1alpha1.LogStopCommand || command == v1alpha1.LogPauseCommand { return backup.Status.CommitTs == "" } return false diff --git a/pkg/controller/backup_status_updater.go b/pkg/controller/backup_status_updater.go index 632df381c8..a0f977b167 100644 --- a/pkg/controller/backup_status_updater.go +++ b/pkg/controller/backup_status_updater.go @@ -209,7 +209,6 @@ func updateSnapshotBackupStatus(backup *v1alpha1.Backup, condition *v1alpha1.Bac // updateLogBackupStatus update log backup status. // it will update both the log backup sub command status and the whole log backup status. -//TODO: (Ris) add more states here func updateLogBackupStatus(backup *v1alpha1.Backup, condition *v1alpha1.BackupCondition, newStatus *BackupUpdateStatus) bool { // update whole backup status isWholeStatusUpdate := updateWholeLogBackupStatus(backup, condition, newStatus) From bd137403a6ebfe5cffe4a9db4ea7c80f1dd09264 Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Tue, 3 Sep 2024 06:33:57 +0200 Subject: [PATCH 14/34] add test --- tests/e2e/br/br.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tests/e2e/br/br.go b/tests/e2e/br/br.go index 58e5c1c81f..c3a93997de 100644 --- a/tests/e2e/br/br.go +++ b/tests/e2e/br/br.go @@ -404,6 +404,7 @@ var _ = ginkgo.Describe("Backup and Restore", func() { ginkgo.By("Start log backup") backup, err := createBackupAndWaitForComplete(f, backupName, backupClusterName, typ, func(backup *v1alpha1.Backup) { + backup.Spec.LogSubcommand = "log-start" backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete backup.Spec.Mode = v1alpha1.BackupModeLog }) @@ -412,6 +413,7 @@ var _ = ginkgo.Describe("Backup and Restore", func() { ginkgo.By("Truncate log backup") backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) { + backup.Spec.LogSubcommand = "log-truncate" backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete backup.Spec.Mode = v1alpha1.BackupModeLog backup.Spec.LogTruncateUntil = time.Now().Format(time.RFC3339) @@ -421,6 +423,7 @@ var _ = ginkgo.Describe("Backup and Restore", func() { ginkgo.By("Truncate log backup again") backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) { + backup.Spec.LogSubcommand = "log-truncate" backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete backup.Spec.Mode = v1alpha1.BackupModeLog backup.Spec.LogTruncateUntil = time.Now().Format(time.RFC3339) @@ -430,19 +433,19 @@ var _ = ginkgo.Describe("Backup and Restore", func() { ginkgo.By("Stop log backup") backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) { + backup.Spec.LogSubcommand = "log-stop" backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete backup.Spec.Mode = v1alpha1.BackupModeLog - backup.Spec.LogStop = true }) framework.ExpectNoError(err) framework.ExpectEqual(backup.Status.Phase, v1alpha1.BackupStopped) ginkgo.By("Truncate log backup after stop") backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) { + backup.Spec.LogSubcommand = "log-truncate" backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete backup.Spec.Mode = v1alpha1.BackupModeLog backup.Spec.LogTruncateUntil = time.Now().Format(time.RFC3339) - backup.Spec.LogStop = false }) framework.ExpectNoError(err) framework.ExpectEqual(backup.Status.LogSuccessTruncateUntil, backup.Spec.LogTruncateUntil) From 236b63f1d40202693c2e7fd1817f288b5088fab0 Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Mon, 23 Sep 2024 09:39:12 +0200 Subject: [PATCH 15/34] fix comments --- cmd/backup-manager/app/backup/backup.go | 3 --- pkg/apis/pingcap/v1alpha1/backup.go | 21 +++++++++++---------- pkg/apis/pingcap/v1alpha1/types.go | 2 +- pkg/controller/backup/backup_controller.go | 5 ----- 4 files changed, 12 insertions(+), 19 deletions(-) diff --git a/cmd/backup-manager/app/backup/backup.go b/cmd/backup-manager/app/backup/backup.go index f46e1e13c1..67002fd213 100644 --- a/cmd/backup-manager/app/backup/backup.go +++ b/cmd/backup-manager/app/backup/backup.go @@ -174,9 +174,6 @@ func (bo *Options) doResumeLogBackup(ctx context.Context, backup *v1alpha1.Backu "resume", fmt.Sprintf("--task-name=%s", backup.Name), } - // if bo.CommitTS != "" && bo.CommitTS != "0" { - // specificArgs = append(specificArgs, fmt.Sprintf("--start-ts=%s", bo.CommitTS)) - // } fullArgs, err := bo.backupCommandTemplate(backup, specificArgs, false) if err != nil { return err diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go index 951f60082a..19f77ecefd 100644 --- a/pkg/apis/pingcap/v1alpha1/backup.go +++ b/pkg/apis/pingcap/v1alpha1/backup.go @@ -209,14 +209,6 @@ func HaveTruncateUntil(backup *Backup) bool { return backup.Spec.LogTruncateUntil != "" } -func IsBackupPaused(backup *Backup) bool { - if backup.Spec.Mode == BackupModeLog { - return IsLogBackupSubCommandOntheCondition(backup, BackupPaused) - } - _, condition := GetBackupCondition(&backup.Status, BackupPaused) - return condition != nil && condition.Status == corev1.ConditionTrue -} - // IsBackupRunning returns true if a Backup is Running. func IsBackupRunning(backup *Backup) bool { if backup.Spec.Mode == BackupModeLog { @@ -337,6 +329,12 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType { if backup.Spec.Mode != BackupModeLog { return "" } + + //Compatible with the old version + if backup.Spec.LogStop { + return LogStopCommand + } + switch backup.Spec.LogSubcommand { case "log-start": if IsLogBackupAlreadyPaused(backup) { @@ -350,6 +348,9 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType { case "log-truncate": return LogTruncateCommand default: + if backup.Spec.LogTruncateUntil != "" { + return LogTruncateCommand + } return LogStartCommand } } @@ -417,12 +418,12 @@ func IsLogBackupAlreadyStop(backup *Backup) bool { return backup.Spec.Mode == BackupModeLog && backup.Status.Phase == BackupStopped } -// IsLogBackupAlreadyStop return whether log backup has already paused. +// IsLogBackupAlreadyPaused return whether log backup has already paused. func IsLogBackupAlreadyPaused(backup *Backup) bool { return backup.Spec.Mode == BackupModeLog && backup.Status.Phase == BackupPaused } -// IsLogBackupAlreadyRestart return whether log backup has already resumed. +// IsLogBackupAlreadyRunning return whether log backup has already resumed. func IsLogBackupAlreadyRunning(backup *Backup) bool { return backup.Spec.Mode == BackupModeLog && backup.Status.Phase == BackupRunning } diff --git a/pkg/apis/pingcap/v1alpha1/types.go b/pkg/apis/pingcap/v1alpha1/types.go index d961d8143f..9db0313769 100644 --- a/pkg/apis/pingcap/v1alpha1/types.go +++ b/pkg/apis/pingcap/v1alpha1/types.go @@ -1879,6 +1879,7 @@ type TLSCluster struct { // +kubebuilder:printcolumn:name="Completed",type=date,JSONPath=`.status.timeCompleted`,description="The time at which the backup was completed",priority=1 // +kubebuilder:printcolumn:name="TimeTaken",type=string,JSONPath=`.status.timeTaken`,description="The time that the backup takes" // +kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp` +// +kubebuilder:validation:OneOf={"logSubCommand", "logStop"} type Backup struct { metav1.TypeMeta `json:",inline"` // +k8s:openapi-gen=false @@ -2179,7 +2180,6 @@ type BackupSpec struct { CommitTs string `json:"commitTs,omitempty"` // Subcommand is the subcommand for BR, such as start, stop, pause etc. // +optional - // +kubebuilder:default="log-start" LogSubcommand string `json:"logSubcommand,omitempty"` // LogTruncateUntil is log backup truncate until timestamp. // Format supports TSO or datetime, e.g. '400036290571534337', '2018-05-11 01:42:23'. diff --git a/pkg/controller/backup/backup_controller.go b/pkg/controller/backup/backup_controller.go index aa9bab3b91..73212ab128 100644 --- a/pkg/controller/backup/backup_controller.go +++ b/pkg/controller/backup/backup_controller.go @@ -155,7 +155,6 @@ func (c *Controller) sync(key string) (err error) { return err } - klog.Infof("Syncing Backup %s/%s", ns, name) return c.syncBackup(backup.DeepCopy()) } @@ -240,10 +239,6 @@ func (c *Controller) updateBackup(cur interface{}) { return } - if newBackup.Spec.Mode == v1alpha1.BackupModeLog && newBackup.Spec.LogSubcommand == string(v1alpha1.LogStartCommand) && v1alpha1.IsBackupPaused(newBackup) { - newBackup.Spec.LogSubcommand = string(v1alpha1.LogResumeCommand) - } - klog.V(4).Infof("backup object %s/%s enqueue", ns, name) c.enqueueBackup(newBackup) } From 62ecb74cce6407900c350f728fdabc37a9f205d8 Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Mon, 23 Sep 2024 11:27:55 +0200 Subject: [PATCH 16/34] make subcommand and logStop conflict --- manifests/crd.yaml | 24 ++++++++++++++++--- manifests/crd/v1/pingcap.com_backups.yaml | 8 ++++++- .../crd/v1/pingcap.com_backupschedules.yaml | 16 +++++++++++-- pkg/apis/pingcap/v1alpha1/types.go | 2 ++ 4 files changed, 44 insertions(+), 6 deletions(-) diff --git a/manifests/crd.yaml b/manifests/crd.yaml index 68e6e4c46a..5941e61aa0 100644 --- a/manifests/crd.yaml +++ b/manifests/crd.yaml @@ -2114,7 +2114,6 @@ spec: logStop: type: boolean logSubcommand: - default: log-start type: string logTruncateUntil: type: string @@ -2282,6 +2281,13 @@ spec: default: 600 type: integer type: object + x-kubernetes-validations: + - message: Field `logStop` is the old version field, please use `logSubcommand` + instead + rule: 'has(self.logSubcommand) ? !has(self.logStop) : true' + - message: Field `logStop` is the old version field, please use `logSubcommand` + instead + rule: 'has(self.logStop) ? !has(self.logSubcommand) : true' imagePullSecrets: items: properties: @@ -4350,7 +4356,6 @@ spec: logStop: type: boolean logSubcommand: - default: log-start type: string logTruncateUntil: type: string @@ -4518,6 +4523,13 @@ spec: default: 600 type: integer type: object + x-kubernetes-validations: + - message: Field `logStop` is the old version field, please use `logSubcommand` + instead + rule: 'has(self.logSubcommand) ? !has(self.logStop) : true' + - message: Field `logStop` is the old version field, please use `logSubcommand` + instead + rule: 'has(self.logStop) ? !has(self.logSubcommand) : true' maxBackups: format: int32 type: integer @@ -6696,7 +6708,6 @@ spec: logStop: type: boolean logSubcommand: - default: log-start type: string logTruncateUntil: type: string @@ -6864,6 +6875,13 @@ spec: default: 600 type: integer type: object + x-kubernetes-validations: + - message: Field `logStop` is the old version field, please use `logSubcommand` + instead + rule: 'has(self.logSubcommand) ? !has(self.logStop) : true' + - message: Field `logStop` is the old version field, please use `logSubcommand` + instead + rule: 'has(self.logStop) ? !has(self.logSubcommand) : true' status: properties: backoffRetryStatus: diff --git a/manifests/crd/v1/pingcap.com_backups.yaml b/manifests/crd/v1/pingcap.com_backups.yaml index afcea77fce..3b82954047 100644 --- a/manifests/crd/v1/pingcap.com_backups.yaml +++ b/manifests/crd/v1/pingcap.com_backups.yaml @@ -2139,7 +2139,6 @@ spec: logStop: type: boolean logSubcommand: - default: log-start type: string logTruncateUntil: type: string @@ -2307,6 +2306,13 @@ spec: default: 600 type: integer type: object + x-kubernetes-validations: + - message: Field `logStop` is the old version field, please use `logSubcommand` + instead + rule: 'has(self.logSubcommand) ? !has(self.logStop) : true' + - message: Field `logStop` is the old version field, please use `logSubcommand` + instead + rule: 'has(self.logStop) ? !has(self.logSubcommand) : true' status: properties: backoffRetryStatus: diff --git a/manifests/crd/v1/pingcap.com_backupschedules.yaml b/manifests/crd/v1/pingcap.com_backupschedules.yaml index 1bb9f92d88..335bee5a66 100644 --- a/manifests/crd/v1/pingcap.com_backupschedules.yaml +++ b/manifests/crd/v1/pingcap.com_backupschedules.yaml @@ -2114,7 +2114,6 @@ spec: logStop: type: boolean logSubcommand: - default: log-start type: string logTruncateUntil: type: string @@ -2282,6 +2281,13 @@ spec: default: 600 type: integer type: object + x-kubernetes-validations: + - message: Field `logStop` is the old version field, please use `logSubcommand` + instead + rule: 'has(self.logSubcommand) ? !has(self.logStop) : true' + - message: Field `logStop` is the old version field, please use `logSubcommand` + instead + rule: 'has(self.logStop) ? !has(self.logSubcommand) : true' imagePullSecrets: items: properties: @@ -4350,7 +4356,6 @@ spec: logStop: type: boolean logSubcommand: - default: log-start type: string logTruncateUntil: type: string @@ -4518,6 +4523,13 @@ spec: default: 600 type: integer type: object + x-kubernetes-validations: + - message: Field `logStop` is the old version field, please use `logSubcommand` + instead + rule: 'has(self.logSubcommand) ? !has(self.logStop) : true' + - message: Field `logStop` is the old version field, please use `logSubcommand` + instead + rule: 'has(self.logStop) ? !has(self.logSubcommand) : true' maxBackups: format: int32 type: integer diff --git a/pkg/apis/pingcap/v1alpha1/types.go b/pkg/apis/pingcap/v1alpha1/types.go index 9db0313769..6927a7471c 100644 --- a/pkg/apis/pingcap/v1alpha1/types.go +++ b/pkg/apis/pingcap/v1alpha1/types.go @@ -2131,6 +2131,8 @@ type Progress struct { // BackupSpec contains the backup specification for a tidb cluster. // +k8s:openapi-gen=true +// +kubebuilder:validation:XValidation:rule="has(self.logSubcommand) ? !has(self.logStop) : true",message="Field `logStop` is the old version field, please use `logSubcommand` instead" +// +kubebuilder:validation:XValidation:rule="has(self.logStop) ? !has(self.logSubcommand) : true",message="Field `logStop` is the old version field, please use `logSubcommand` instead" type BackupSpec struct { corev1.ResourceRequirements `json:"resources,omitempty"` // List of environment variables to set in the container, like v1.Container.Env. From 1bea7becfe7c60f42b5607fa3ec7604cf4b31a3f Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Tue, 24 Sep 2024 11:01:03 +0200 Subject: [PATCH 17/34] add alreadySync logic --- pkg/apis/pingcap/v1alpha1/backup.go | 46 ++++++++++++++++++++------ pkg/backup/backup/backup_manager.go | 50 ++++++++++++----------------- 2 files changed, 56 insertions(+), 40 deletions(-) diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go index 19f77ecefd..d12912f110 100644 --- a/pkg/apis/pingcap/v1alpha1/backup.go +++ b/pkg/apis/pingcap/v1alpha1/backup.go @@ -310,6 +310,9 @@ func IsBackupCleanFailed(backup *Backup) bool { // IsCleanCandidate returns true if a Backup should be added to clean candidate according to cleanPolicy func IsCleanCandidate(backup *Backup) bool { + if backup.Spec.Mode == BackupModeLog { + return true + } switch backup.Spec.CleanPolicy { case CleanPolicyTypeDelete, CleanPolicyTypeOnFailure: return true @@ -324,34 +327,57 @@ func NeedNotClean(backup *Backup) bool { } // ParseLogBackupSubcommand parse the log backup subcommand from cr. -// The parse priority of the command is stop > truncate > start. func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType { if backup.Spec.Mode != BackupModeLog { return "" } - //Compatible with the old version + // Compatible with the old version if backup.Spec.LogStop { + if isSubcommandAlreadySync(backup, LogStopCommand) { + return LogTruncateCommand + } return LogStopCommand } + var subCommand LogSubCommandType switch backup.Spec.LogSubcommand { case "log-start": if IsLogBackupAlreadyPaused(backup) { - return LogResumeCommand + subCommand = LogResumeCommand + } else { + subCommand = LogStartCommand } - return LogStartCommand case "log-stop": - return LogStopCommand + subCommand = LogStopCommand case "log-pause": - return LogPauseCommand + subCommand = LogPauseCommand case "log-truncate": + subCommand = LogTruncateCommand + default: + subCommand = LogStartCommand + } + + // If the selected subcommand is already done, switch to LogTruncateCommand + if isSubcommandAlreadySync(backup, subCommand) { return LogTruncateCommand + } + + return subCommand +} + +func isSubcommandAlreadySync(backup *Backup, subCommand LogSubCommandType) bool { + switch subCommand { + case LogStartCommand: + return IsLogBackupAlreadyStart(backup) + case LogStopCommand: + return IsLogBackupAlreadyStop(backup) + case LogPauseCommand: + return IsLogBackupAlreadyPaused(backup) + case LogResumeCommand: + return IsLogBackupAlreadyRunning(backup) default: - if backup.Spec.LogTruncateUntil != "" { - return LogTruncateCommand - } - return LogStartCommand + return false } } diff --git a/pkg/backup/backup/backup_manager.go b/pkg/backup/backup/backup_manager.go index c29d5762eb..6136f1c509 100644 --- a/pkg/backup/backup/backup_manager.go +++ b/pkg/backup/backup/backup_manager.go @@ -1078,46 +1078,36 @@ func (bm *backupManager) skipSnapshotBackupSync(backup *v1alpha1.Backup) (bool, return false, nil } -// skipLogBackupSync skip log backup, returns true if can be skipped. +// skipLogBackupSync skips log backup, returns true if it can be skipped. func (bm *backupManager) skipLogBackupSync(backup *v1alpha1.Backup) (bool, error) { if backup.Spec.Mode != v1alpha1.BackupModeLog { return false, nil } - var skip bool - var err error + command := v1alpha1.ParseLogBackupSubcommand(backup) - switch command { - case v1alpha1.LogStartCommand: - skip = v1alpha1.IsLogBackupAlreadyStart(backup) - case v1alpha1.LogStopCommand: - skip = v1alpha1.IsLogBackupAlreadyStop(backup) - case v1alpha1.LogPauseCommand: - skip = v1alpha1.IsLogBackupAlreadyPaused(backup) - case v1alpha1.LogResumeCommand: - skip = v1alpha1.IsLogBackupAlreadyRunning(backup) - case v1alpha1.LogTruncateCommand: - if v1alpha1.IsLogBackupAlreadyTruncate(backup) { - skip = true - // if skip truncate, we need update truncate to be complete, and truncating util is the spec's truncate until. - updateStatus := &controller.BackupUpdateStatus{ - TimeStarted: &metav1.Time{Time: time.Now()}, - TimeCompleted: &metav1.Time{Time: time.Now()}, - LogTruncatingUntil: &backup.Spec.LogTruncateUntil, - } - err = bm.statusUpdater.Update(backup, &v1alpha1.BackupCondition{ - Command: v1alpha1.LogTruncateCommand, - Type: v1alpha1.BackupComplete, - Status: corev1.ConditionTrue, - }, updateStatus) + + // Handle the special case for LogTruncateCommand where additional actions are needed + var err error + if command == v1alpha1.LogTruncateCommand && v1alpha1.IsLogBackupAlreadyTruncate(backup) { + // If skipping truncate, update status + updateStatus := &controller.BackupUpdateStatus{ + TimeStarted: &metav1.Time{Time: time.Now()}, + TimeCompleted: &metav1.Time{Time: time.Now()}, + LogTruncatingUntil: &backup.Spec.LogTruncateUntil, } - default: - return false, nil + err = bm.statusUpdater.Update(backup, &v1alpha1.BackupCondition{ + Command: v1alpha1.LogTruncateCommand, + Type: v1alpha1.BackupComplete, + Status: corev1.ConditionTrue, + }, updateStatus) } - if skip { + if command == v1alpha1.LogTruncateCommand { klog.Infof("log backup %s/%s subcommand %s is already done, will skip sync.", backup.Namespace, backup.Name, command) + return true, err } - return skip, err + + return false, nil } // skipVolumeSnapshotBackupSync skip volume snapshot backup, returns true if can be skipped. From a5be49367bb3b2b2bc4c0508c095b344b15d8102 Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Tue, 24 Sep 2024 12:04:13 +0200 Subject: [PATCH 18/34] better truncate --- pkg/apis/pingcap/v1alpha1/backup.go | 13 ++++++------- pkg/backup/backup/backup_manager.go | 8 ++++---- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go index d12912f110..676b8476ee 100644 --- a/pkg/apis/pingcap/v1alpha1/backup.go +++ b/pkg/apis/pingcap/v1alpha1/backup.go @@ -310,9 +310,6 @@ func IsBackupCleanFailed(backup *Backup) bool { // IsCleanCandidate returns true if a Backup should be added to clean candidate according to cleanPolicy func IsCleanCandidate(backup *Backup) bool { - if backup.Spec.Mode == BackupModeLog { - return true - } switch backup.Spec.CleanPolicy { case CleanPolicyTypeDelete, CleanPolicyTypeOnFailure: return true @@ -334,7 +331,7 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType { // Compatible with the old version if backup.Spec.LogStop { - if isSubcommandAlreadySync(backup, LogStopCommand) { + if IsLogSubcommandAlreadySync(backup, LogStopCommand) && backup.Spec.LogTruncateUntil != "" { return LogTruncateCommand } return LogStopCommand @@ -358,15 +355,17 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType { subCommand = LogStartCommand } - // If the selected subcommand is already done, switch to LogTruncateCommand - if isSubcommandAlreadySync(backup, subCommand) { + // If the selected subcommand is already sync and logTruncateUntil is set, switch to LogTruncateCommand + if IsLogSubcommandAlreadySync(backup, subCommand) && backup.Spec.LogTruncateUntil != "" { return LogTruncateCommand } return subCommand } -func isSubcommandAlreadySync(backup *Backup, subCommand LogSubCommandType) bool { +// IsLogSubcommandAlreadySync return whether the log subcommand already sync. +// It only check start/stop/pause subcommand. Truncate subcommand need to check the truncate until seperately. +func IsLogSubcommandAlreadySync(backup *Backup, subCommand LogSubCommandType) bool { switch subCommand { case LogStartCommand: return IsLogBackupAlreadyStart(backup) diff --git a/pkg/backup/backup/backup_manager.go b/pkg/backup/backup/backup_manager.go index 6136f1c509..048d51f3e9 100644 --- a/pkg/backup/backup/backup_manager.go +++ b/pkg/backup/backup/backup_manager.go @@ -1085,8 +1085,11 @@ func (bm *backupManager) skipLogBackupSync(backup *v1alpha1.Backup) (bool, error } command := v1alpha1.ParseLogBackupSubcommand(backup) + if command != v1alpha1.LogTruncateCommand && v1alpha1.IsLogSubcommandAlreadySync(backup, command) { + return true, nil + } - // Handle the special case for LogTruncateCommand where additional actions are needed + // Handle the special case for LogTruncateCommand var err error if command == v1alpha1.LogTruncateCommand && v1alpha1.IsLogBackupAlreadyTruncate(backup) { // If skipping truncate, update status @@ -1100,9 +1103,6 @@ func (bm *backupManager) skipLogBackupSync(backup *v1alpha1.Backup) (bool, error Type: v1alpha1.BackupComplete, Status: corev1.ConditionTrue, }, updateStatus) - } - - if command == v1alpha1.LogTruncateCommand { klog.Infof("log backup %s/%s subcommand %s is already done, will skip sync.", backup.Namespace, backup.Name, command) return true, err } From ea818c4049b9e9179bc2f53de3cf14e168a06504 Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Tue, 24 Sep 2024 12:12:08 +0200 Subject: [PATCH 19/34] remove explict truncate --- pkg/apis/pingcap/v1alpha1/backup.go | 2 -- tests/e2e/br/br.go | 3 --- 2 files changed, 5 deletions(-) diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go index 676b8476ee..e9e591f1c3 100644 --- a/pkg/apis/pingcap/v1alpha1/backup.go +++ b/pkg/apis/pingcap/v1alpha1/backup.go @@ -349,8 +349,6 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType { subCommand = LogStopCommand case "log-pause": subCommand = LogPauseCommand - case "log-truncate": - subCommand = LogTruncateCommand default: subCommand = LogStartCommand } diff --git a/tests/e2e/br/br.go b/tests/e2e/br/br.go index c3a93997de..85cf3d28f0 100644 --- a/tests/e2e/br/br.go +++ b/tests/e2e/br/br.go @@ -413,7 +413,6 @@ var _ = ginkgo.Describe("Backup and Restore", func() { ginkgo.By("Truncate log backup") backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) { - backup.Spec.LogSubcommand = "log-truncate" backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete backup.Spec.Mode = v1alpha1.BackupModeLog backup.Spec.LogTruncateUntil = time.Now().Format(time.RFC3339) @@ -423,7 +422,6 @@ var _ = ginkgo.Describe("Backup and Restore", func() { ginkgo.By("Truncate log backup again") backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) { - backup.Spec.LogSubcommand = "log-truncate" backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete backup.Spec.Mode = v1alpha1.BackupModeLog backup.Spec.LogTruncateUntil = time.Now().Format(time.RFC3339) @@ -442,7 +440,6 @@ var _ = ginkgo.Describe("Backup and Restore", func() { ginkgo.By("Truncate log backup after stop") backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) { - backup.Spec.LogSubcommand = "log-truncate" backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete backup.Spec.Mode = v1alpha1.BackupModeLog backup.Spec.LogTruncateUntil = time.Now().Format(time.RFC3339) From 27cd7fb4f74078b901a87b08e97ce5cb3188ea58 Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Wed, 25 Sep 2024 07:12:24 +0200 Subject: [PATCH 20/34] add tests --- tests/e2e/br/br.go | 116 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 115 insertions(+), 1 deletion(-) diff --git a/tests/e2e/br/br.go b/tests/e2e/br/br.go index 85cf3d28f0..5443b3cd39 100644 --- a/tests/e2e/br/br.go +++ b/tests/e2e/br/br.go @@ -378,7 +378,85 @@ var _ = ginkgo.Describe("Backup and Restore", func() { }) ginkgo.Context("Log Backup Test", func() { - ginkgo.It("start,truncate,stop log backup", func() { + ginkgo.It("start,truncate,stop log backup using old interface", func() { + backupClusterName := "log-backup" + backupVersion := utilimage.TiDBLatest + enableTLS := false + skipCA := false + backupName := backupClusterName + typ := strings.ToLower(typeBR) + + ns := f.Namespace.Name + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + ginkgo.By("Create log-backup.enable TiDB cluster for log backup") + err := createLogBackupEnableTidbCluster(f, backupClusterName, backupVersion, enableTLS, skipCA) + framework.ExpectNoError(err) + + ginkgo.By("Wait for backup TiDB cluster ready") + err = utiltidbcluster.WaitForTCConditionReady(f.ExtClient, ns, backupClusterName, tidbReadyTimeout, 0) + framework.ExpectNoError(err) + + ginkgo.By("Create RBAC for log backup") + err = createRBAC(f) + framework.ExpectNoError(err) + + ginkgo.By("Start log backup") + backup, err := createBackupAndWaitForComplete(f, backupName, backupClusterName, typ, func(backup *v1alpha1.Backup) { + backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete + backup.Spec.Mode = v1alpha1.BackupModeLog + }) + framework.ExpectNoError(err) + framework.ExpectNotEqual(backup.Status.CommitTs, "") + + ginkgo.By("Truncate log backup") + backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) { + backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete + backup.Spec.Mode = v1alpha1.BackupModeLog + backup.Spec.LogTruncateUntil = time.Now().Format(time.RFC3339) + }) + framework.ExpectNoError(err) + framework.ExpectEqual(backup.Status.LogSuccessTruncateUntil, backup.Spec.LogTruncateUntil) + + ginkgo.By("Truncate log backup again") + backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) { + backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete + backup.Spec.Mode = v1alpha1.BackupModeLog + backup.Spec.LogTruncateUntil = time.Now().Format(time.RFC3339) + }) + framework.ExpectNoError(err) + framework.ExpectEqual(backup.Status.LogSuccessTruncateUntil, backup.Spec.LogTruncateUntil) + + ginkgo.By("Stop log backup") + backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) { + backup.Spec.LogStop = true + backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete + backup.Spec.Mode = v1alpha1.BackupModeLog + }) + framework.ExpectNoError(err) + framework.ExpectEqual(backup.Status.Phase, v1alpha1.BackupStopped) + + ginkgo.By("Truncate log backup after stop") + backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) { + backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete + backup.Spec.Mode = v1alpha1.BackupModeLog + backup.Spec.LogTruncateUntil = time.Now().Format(time.RFC3339) + }) + framework.ExpectNoError(err) + framework.ExpectEqual(backup.Status.LogSuccessTruncateUntil, backup.Spec.LogTruncateUntil) + + ginkgo.By("Delete backup") + err = deleteBackup(f, backupName) + framework.ExpectNoError(err) + + ginkgo.By("Check if all backup files in storage is deleted") + cleaned, err := f.Storage.IsDataCleaned(ctx, ns, backup.Spec.S3.Prefix) // now we only use s3 + framework.ExpectNoError(err) + framework.ExpectEqual(cleaned, true, "storage should be cleaned") + }) + + ginkgo.It("start -> pause -> resume -> pause -> resume -> stop log backup", func() { backupClusterName := "log-backup" backupVersion := utilimage.TiDBLatest enableTLS := false @@ -420,6 +498,15 @@ var _ = ginkgo.Describe("Backup and Restore", func() { framework.ExpectNoError(err) framework.ExpectEqual(backup.Status.LogSuccessTruncateUntil, backup.Spec.LogTruncateUntil) + ginkgo.By("Pause log backup") + backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) { + backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete + backup.Spec.Mode = v1alpha1.BackupModeLog + backup.Spec.LogSubcommand = "log-pause" + }) + framework.ExpectNoError(err) + framework.ExpectEqual(backup.Status.Phase, v1alpha1.BackupPaused) + ginkgo.By("Truncate log backup again") backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) { backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete @@ -429,6 +516,33 @@ var _ = ginkgo.Describe("Backup and Restore", func() { framework.ExpectNoError(err) framework.ExpectEqual(backup.Status.LogSuccessTruncateUntil, backup.Spec.LogTruncateUntil) + ginkgo.By("resume log backup") + backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) { + backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete + backup.Spec.Mode = v1alpha1.BackupModeLog + backup.Spec.LogSubcommand = "log-start" + }) + framework.ExpectNoError(err) + framework.ExpectEqual(backup.Status.Phase, v1alpha1.BackupRunning) + + ginkgo.By("Pause log backup again") + backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) { + backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete + backup.Spec.Mode = v1alpha1.BackupModeLog + backup.Spec.LogSubcommand = "log-pause" + }) + framework.ExpectNoError(err) + framework.ExpectEqual(backup.Status.Phase, v1alpha1.BackupPaused) + + ginkgo.By("resume log backup again") + backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) { + backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete + backup.Spec.Mode = v1alpha1.BackupModeLog + backup.Spec.LogSubcommand = "log-start" + }) + framework.ExpectNoError(err) + framework.ExpectEqual(backup.Status.Phase, v1alpha1.BackupRunning) + ginkgo.By("Stop log backup") backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) { backup.Spec.LogSubcommand = "log-stop" From 43d40103cad59de64e090201eb63feb11ef40fb3 Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Wed, 25 Sep 2024 07:13:06 +0200 Subject: [PATCH 21/34] add validation of unknown sub -commnad --- pkg/apis/pingcap/v1alpha1/backup.go | 17 ++++------------- pkg/apis/pingcap/v1alpha1/types.go | 3 ++- pkg/backup/backup/backup_manager.go | 14 +++++++++++++- pkg/controller/backup/backup_controller.go | 2 +- 4 files changed, 20 insertions(+), 16 deletions(-) diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go index e9e591f1c3..5c100b550e 100644 --- a/pkg/apis/pingcap/v1alpha1/backup.go +++ b/pkg/apis/pingcap/v1alpha1/backup.go @@ -285,17 +285,6 @@ func IsVolumeBackupFailed(backup *Backup) bool { return condition != nil && condition.Status == corev1.ConditionTrue } -// IsLogBackupStopped returns true if a log backup is stopped. -// It means log backup is at stopped status. -// It used to filter CR update event which is stop command and stopped status, and let it run truncate after log backup stopped which is truncate command and stopped status. -func IsLogBackupStopped(backup *Backup) bool { - if backup.Spec.Mode == BackupModeLog { - command := ParseLogBackupSubcommand(backup) - return command == LogStopCommand && backup.Status.Phase == BackupStopped - } - return false -} - // IsBackupClean returns true if a Backup has been successfully cleaned up func IsBackupClean(backup *Backup) bool { _, condition := GetBackupCondition(&backup.Status, BackupClean) @@ -349,8 +338,10 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType { subCommand = LogStopCommand case "log-pause": subCommand = LogPauseCommand - default: + case "": subCommand = LogStartCommand + default: + return LogUnknownCommand } // If the selected subcommand is already sync and logTruncateUntil is set, switch to LogTruncateCommand @@ -362,7 +353,7 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType { } // IsLogSubcommandAlreadySync return whether the log subcommand already sync. -// It only check start/stop/pause subcommand. Truncate subcommand need to check the truncate until seperately. +// It only check start/stop/pause subcommand. Truncate subcommand need to check the `logTruncateUntil` seperately. func IsLogSubcommandAlreadySync(backup *Backup, subCommand LogSubCommandType) bool { switch subCommand { case LogStartCommand: diff --git a/pkg/apis/pingcap/v1alpha1/types.go b/pkg/apis/pingcap/v1alpha1/types.go index 6927a7471c..36478e95d7 100644 --- a/pkg/apis/pingcap/v1alpha1/types.go +++ b/pkg/apis/pingcap/v1alpha1/types.go @@ -1879,7 +1879,6 @@ type TLSCluster struct { // +kubebuilder:printcolumn:name="Completed",type=date,JSONPath=`.status.timeCompleted`,description="The time at which the backup was completed",priority=1 // +kubebuilder:printcolumn:name="TimeTaken",type=string,JSONPath=`.status.timeTaken`,description="The time that the backup takes" // +kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp` -// +kubebuilder:validation:OneOf={"logSubCommand", "logStop"} type Backup struct { metav1.TypeMeta `json:",inline"` // +k8s:openapi-gen=false @@ -2409,6 +2408,8 @@ const ( LogPauseCommand LogSubCommandType = "log-pause" // LogResumeCommand is the resume command of log backup. LogResumeCommand LogSubCommandType = "log-resume" + // LogUnknownCommand is the unknown command of log backup. + LogUnknownCommand LogSubCommandType = "log-unknown" ) // LogSubCommandStatus is the log backup subcommand's status. diff --git a/pkg/backup/backup/backup_manager.go b/pkg/backup/backup/backup_manager.go index 048d51f3e9..94918fa742 100644 --- a/pkg/backup/backup/backup_manager.go +++ b/pkg/backup/backup/backup_manager.go @@ -191,11 +191,23 @@ func (bm *backupManager) syncBackupJob(backup *v1alpha1.Backup) error { func (bm *backupManager) validateBackup(backup *v1alpha1.Backup) error { ns := backup.GetNamespace() name := backup.GetName() - logBackupSubcommand := v1alpha1.ParseLogBackupSubcommand(backup) var err error + logBackupSubcommand := v1alpha1.ParseLogBackupSubcommand(backup) if backup.Spec.BR == nil { err = backuputil.ValidateBackup(backup, "", nil) } else { + if backup.Spec.Mode == v1alpha1.BackupModeLog && logBackupSubcommand == v1alpha1.LogUnknownCommand { + err = fmt.Errorf("log backup %s/%s subcommand `%s` is not supported", ns, name, backup.Spec.LogSubcommand) + bm.statusUpdater.Update(backup, &v1alpha1.BackupCondition{ + Command: logBackupSubcommand, + Type: v1alpha1.BackupRetryTheFailed, + Status: corev1.ConditionTrue, + Reason: err.Error(), + Message: err.Error(), + }, nil) + return err + } + backupNamespace := backup.GetNamespace() if backup.Spec.BR.ClusterNamespace != "" { backupNamespace = backup.Spec.BR.ClusterNamespace diff --git a/pkg/controller/backup/backup_controller.go b/pkg/controller/backup/backup_controller.go index 73212ab128..0d2c095d6a 100644 --- a/pkg/controller/backup/backup_controller.go +++ b/pkg/controller/backup/backup_controller.go @@ -234,7 +234,7 @@ func (c *Controller) updateBackup(cur interface{}) { return } - if v1alpha1.IsBackupScheduled(newBackup) || v1alpha1.IsBackupRunning(newBackup) || v1alpha1.IsBackupPrepared(newBackup) || v1alpha1.IsLogBackupStopped(newBackup) { + if v1alpha1.IsBackupScheduled(newBackup) || v1alpha1.IsBackupRunning(newBackup) || v1alpha1.IsBackupPrepared(newBackup) || v1alpha1.IsLogBackupAlreadyStop(newBackup) { klog.V(4).Infof("backup %s/%s is already Scheduled, Running, Preparing or Failed, skipping.", ns, name) return } From 1c68708f5244c2d8188e3b0a63db2e4ee22c6ea4 Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Wed, 25 Sep 2024 07:15:24 +0200 Subject: [PATCH 22/34] lint --- pkg/backup/backup/backup_manager.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/backup/backup/backup_manager.go b/pkg/backup/backup/backup_manager.go index 94918fa742..be4aa1264b 100644 --- a/pkg/backup/backup/backup_manager.go +++ b/pkg/backup/backup/backup_manager.go @@ -197,14 +197,14 @@ func (bm *backupManager) validateBackup(backup *v1alpha1.Backup) error { err = backuputil.ValidateBackup(backup, "", nil) } else { if backup.Spec.Mode == v1alpha1.BackupModeLog && logBackupSubcommand == v1alpha1.LogUnknownCommand { - err = fmt.Errorf("log backup %s/%s subcommand `%s` is not supported", ns, name, backup.Spec.LogSubcommand) + err = fmt.Errorf("log backup %s/%s subcommand `%s` is not supported", ns, name, backup.Spec.LogSubcommand) bm.statusUpdater.Update(backup, &v1alpha1.BackupCondition{ Command: logBackupSubcommand, Type: v1alpha1.BackupRetryTheFailed, Status: corev1.ConditionTrue, Reason: err.Error(), Message: err.Error(), - }, nil) + }, nil) return err } From 292b35089ab5baf473e46a399562659a6cd1ed6f Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Wed, 25 Sep 2024 08:40:47 +0200 Subject: [PATCH 23/34] typo --- pkg/apis/pingcap/v1alpha1/backup.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go index 5c100b550e..ca60f977d7 100644 --- a/pkg/apis/pingcap/v1alpha1/backup.go +++ b/pkg/apis/pingcap/v1alpha1/backup.go @@ -353,7 +353,7 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType { } // IsLogSubcommandAlreadySync return whether the log subcommand already sync. -// It only check start/stop/pause subcommand. Truncate subcommand need to check the `logTruncateUntil` seperately. +// It only check start/stop/pause subcommand. Truncate subcommand need to check the `logTruncateUntil` separately. func IsLogSubcommandAlreadySync(backup *Backup, subCommand LogSubCommandType) bool { switch subCommand { case LogStartCommand: From 2797bf303617f3f7f0a4269c08c3c1875a9046c2 Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Wed, 25 Sep 2024 09:31:29 +0200 Subject: [PATCH 24/34] add truncate check --- pkg/apis/pingcap/v1alpha1/backup.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go index ca60f977d7..7923f23bda 100644 --- a/pkg/apis/pingcap/v1alpha1/backup.go +++ b/pkg/apis/pingcap/v1alpha1/backup.go @@ -320,7 +320,7 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType { // Compatible with the old version if backup.Spec.LogStop { - if IsLogSubcommandAlreadySync(backup, LogStopCommand) && backup.Spec.LogTruncateUntil != "" { + if IsLogBackupAlreadyStop(backup) && backup.Spec.LogTruncateUntil != "" && backup.Spec.LogTruncateUntil != backup.Status.LogSuccessTruncateUntil { return LogTruncateCommand } return LogStopCommand @@ -345,7 +345,7 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType { } // If the selected subcommand is already sync and logTruncateUntil is set, switch to LogTruncateCommand - if IsLogSubcommandAlreadySync(backup, subCommand) && backup.Spec.LogTruncateUntil != "" { + if IsLogSubcommandAlreadySync(backup, subCommand) && backup.Spec.LogTruncateUntil != "" && backup.Spec.LogTruncateUntil != backup.Status.LogSuccessTruncateUntil { return LogTruncateCommand } From 90cf8f2b2a7bded3ff6249f6c0d45dc4d064eab0 Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Wed, 25 Sep 2024 09:37:29 +0200 Subject: [PATCH 25/34] handle empty subcommand --- pkg/apis/pingcap/v1alpha1/backup.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go index 7923f23bda..a01db45bd9 100644 --- a/pkg/apis/pingcap/v1alpha1/backup.go +++ b/pkg/apis/pingcap/v1alpha1/backup.go @@ -328,6 +328,8 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType { var subCommand LogSubCommandType switch backup.Spec.LogSubcommand { + case "": + fallthrough case "log-start": if IsLogBackupAlreadyPaused(backup) { subCommand = LogResumeCommand @@ -338,8 +340,6 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType { subCommand = LogStopCommand case "log-pause": subCommand = LogPauseCommand - case "": - subCommand = LogStartCommand default: return LogUnknownCommand } From a31daf1f9e8772fd2c66ce0395d25d71c771ab20 Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Wed, 25 Sep 2024 11:22:14 +0200 Subject: [PATCH 26/34] more restricted subCommand check --- cmd/backup-manager/app/backup/manager.go | 2 +- docs/api-references/docs.md | 9 +++++++-- manifests/crd.yaml | 15 +++++++++++++++ manifests/crd/v1/pingcap.com_backups.yaml | 5 +++++ manifests/crd/v1/pingcap.com_backupschedules.yaml | 10 ++++++++++ pkg/apis/pingcap/v1alpha1/backup.go | 6 +++--- pkg/apis/pingcap/v1alpha1/types.go | 3 ++- 7 files changed, 43 insertions(+), 7 deletions(-) diff --git a/cmd/backup-manager/app/backup/manager.go b/cmd/backup-manager/app/backup/manager.go index a7bf3fcf12..226ac9ab22 100644 --- a/cmd/backup-manager/app/backup/manager.go +++ b/cmd/backup-manager/app/backup/manager.go @@ -616,7 +616,7 @@ func (bm *Manager) stopLogBackup(ctx context.Context, backup *v1alpha1.Backup) ( return updateStatus, "", nil } -// pauseLogBackup stops log backup. +// pauseLogBackup pauses log backup. func (bm *Manager) pauseLogBackup(ctx context.Context, backup *v1alpha1.Backup) (*controller.BackupUpdateStatus, string, error) { started := time.Now() diff --git a/docs/api-references/docs.md b/docs/api-references/docs.md index 203774ec68..8367f02c8c 100644 --- a/docs/api-references/docs.md +++ b/docs/api-references/docs.md @@ -247,7 +247,9 @@ Default is current timestamp.

logSubcommand
-string + +LogSubCommandType + @@ -4248,7 +4250,9 @@ Default is current timestamp.

logSubcommand
-string + +LogSubCommandType + @@ -8914,6 +8918,7 @@ BackupConditionType

(Appears on: BackupCondition, +BackupSpec, LogSubCommandStatus)

diff --git a/manifests/crd.yaml b/manifests/crd.yaml index 5941e61aa0..0324823d5b 100644 --- a/manifests/crd.yaml +++ b/manifests/crd.yaml @@ -2114,6 +2114,11 @@ spec: logStop: type: boolean logSubcommand: + enum: + - "" + - log-start + - log-stop + - log-pause type: string logTruncateUntil: type: string @@ -4356,6 +4361,11 @@ spec: logStop: type: boolean logSubcommand: + enum: + - "" + - log-start + - log-stop + - log-pause type: string logTruncateUntil: type: string @@ -6708,6 +6718,11 @@ spec: logStop: type: boolean logSubcommand: + enum: + - "" + - log-start + - log-stop + - log-pause type: string logTruncateUntil: type: string diff --git a/manifests/crd/v1/pingcap.com_backups.yaml b/manifests/crd/v1/pingcap.com_backups.yaml index 3b82954047..1f719f1f6b 100644 --- a/manifests/crd/v1/pingcap.com_backups.yaml +++ b/manifests/crd/v1/pingcap.com_backups.yaml @@ -2139,6 +2139,11 @@ spec: logStop: type: boolean logSubcommand: + enum: + - "" + - log-start + - log-stop + - log-pause type: string logTruncateUntil: type: string diff --git a/manifests/crd/v1/pingcap.com_backupschedules.yaml b/manifests/crd/v1/pingcap.com_backupschedules.yaml index 335bee5a66..45f641f874 100644 --- a/manifests/crd/v1/pingcap.com_backupschedules.yaml +++ b/manifests/crd/v1/pingcap.com_backupschedules.yaml @@ -2114,6 +2114,11 @@ spec: logStop: type: boolean logSubcommand: + enum: + - "" + - log-start + - log-stop + - log-pause type: string logTruncateUntil: type: string @@ -4356,6 +4361,11 @@ spec: logStop: type: boolean logSubcommand: + enum: + - "" + - log-start + - log-stop + - log-pause type: string logTruncateUntil: type: string diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go index a01db45bd9..5310b1d3eb 100644 --- a/pkg/apis/pingcap/v1alpha1/backup.go +++ b/pkg/apis/pingcap/v1alpha1/backup.go @@ -330,15 +330,15 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType { switch backup.Spec.LogSubcommand { case "": fallthrough - case "log-start": + case LogStartCommand: if IsLogBackupAlreadyPaused(backup) { subCommand = LogResumeCommand } else { subCommand = LogStartCommand } - case "log-stop": + case LogStopCommand: subCommand = LogStopCommand - case "log-pause": + case LogPauseCommand: subCommand = LogPauseCommand default: return LogUnknownCommand diff --git a/pkg/apis/pingcap/v1alpha1/types.go b/pkg/apis/pingcap/v1alpha1/types.go index 36478e95d7..0d76d07a2d 100644 --- a/pkg/apis/pingcap/v1alpha1/types.go +++ b/pkg/apis/pingcap/v1alpha1/types.go @@ -2181,7 +2181,8 @@ type BackupSpec struct { CommitTs string `json:"commitTs,omitempty"` // Subcommand is the subcommand for BR, such as start, stop, pause etc. // +optional - LogSubcommand string `json:"logSubcommand,omitempty"` + // +kubebuilder:validation:Enum:="";"log-start";"log-stop";"log-pause" + LogSubcommand LogSubCommandType `json:"logSubcommand,omitempty"` // LogTruncateUntil is log backup truncate until timestamp. // Format supports TSO or datetime, e.g. '400036290571534337', '2018-05-11 01:42:23'. // +optional From 04721de0c6131b35908961c6dc10fc0422e7edd6 Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Wed, 25 Sep 2024 12:13:22 +0200 Subject: [PATCH 27/34] user should be able to truncate after stop --- manifests/crd.yaml | 3 -- manifests/crd/v1/pingcap.com_backups.yaml | 1 - .../crd/v1/pingcap.com_backupschedules.yaml | 2 - pkg/apis/pingcap/v1alpha1/backup.go | 47 ++++++++++--------- pkg/apis/pingcap/v1alpha1/types.go | 2 +- pkg/controller/backup/backup_controller.go | 2 +- 6 files changed, 27 insertions(+), 30 deletions(-) diff --git a/manifests/crd.yaml b/manifests/crd.yaml index 0324823d5b..2bdb2ce7cb 100644 --- a/manifests/crd.yaml +++ b/manifests/crd.yaml @@ -2115,7 +2115,6 @@ spec: type: boolean logSubcommand: enum: - - "" - log-start - log-stop - log-pause @@ -4362,7 +4361,6 @@ spec: type: boolean logSubcommand: enum: - - "" - log-start - log-stop - log-pause @@ -6719,7 +6717,6 @@ spec: type: boolean logSubcommand: enum: - - "" - log-start - log-stop - log-pause diff --git a/manifests/crd/v1/pingcap.com_backups.yaml b/manifests/crd/v1/pingcap.com_backups.yaml index 1f719f1f6b..8b91e0ad9e 100644 --- a/manifests/crd/v1/pingcap.com_backups.yaml +++ b/manifests/crd/v1/pingcap.com_backups.yaml @@ -2140,7 +2140,6 @@ spec: type: boolean logSubcommand: enum: - - "" - log-start - log-stop - log-pause diff --git a/manifests/crd/v1/pingcap.com_backupschedules.yaml b/manifests/crd/v1/pingcap.com_backupschedules.yaml index 45f641f874..22a40a0176 100644 --- a/manifests/crd/v1/pingcap.com_backupschedules.yaml +++ b/manifests/crd/v1/pingcap.com_backupschedules.yaml @@ -2115,7 +2115,6 @@ spec: type: boolean logSubcommand: enum: - - "" - log-start - log-stop - log-pause @@ -4362,7 +4361,6 @@ spec: type: boolean logSubcommand: enum: - - "" - log-start - log-stop - log-pause diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go index 5310b1d3eb..cd824e9008 100644 --- a/pkg/apis/pingcap/v1alpha1/backup.go +++ b/pkg/apis/pingcap/v1alpha1/backup.go @@ -318,31 +318,34 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType { return "" } - // Compatible with the old version - if backup.Spec.LogStop { - if IsLogBackupAlreadyStop(backup) && backup.Spec.LogTruncateUntil != "" && backup.Spec.LogTruncateUntil != backup.Status.LogSuccessTruncateUntil { - return LogTruncateCommand - } - return LogStopCommand - } - var subCommand LogSubCommandType - switch backup.Spec.LogSubcommand { - case "": - fallthrough - case LogStartCommand: - if IsLogBackupAlreadyPaused(backup) { - subCommand = LogResumeCommand - } else { + + // Maintain backward compatibility: + // Users can omit the LogSubcommand field and use the `LogStop` field to stop log backups as in older version. + if backup.Spec.LogSubcommand == "" { + if backup.Spec.LogStop || IsLogBackupAlreadyStop(backup) { + subCommand = LogStopCommand + } else if IsLogBackupAlreadyPaused(backup){ + subCommand = LogResumeCommand + } else { subCommand = LogStartCommand } - case LogStopCommand: - subCommand = LogStopCommand - case LogPauseCommand: - subCommand = LogPauseCommand - default: - return LogUnknownCommand - } + } else { + switch backup.Spec.LogSubcommand { + case LogStartCommand: + if IsLogBackupAlreadyPaused(backup) { + subCommand = LogResumeCommand + } else { + subCommand = LogStartCommand + } + case LogStopCommand: + subCommand = LogStopCommand + case LogPauseCommand: + subCommand = LogPauseCommand + default: + return LogUnknownCommand + } + } // If the selected subcommand is already sync and logTruncateUntil is set, switch to LogTruncateCommand if IsLogSubcommandAlreadySync(backup, subCommand) && backup.Spec.LogTruncateUntil != "" && backup.Spec.LogTruncateUntil != backup.Status.LogSuccessTruncateUntil { diff --git a/pkg/apis/pingcap/v1alpha1/types.go b/pkg/apis/pingcap/v1alpha1/types.go index 0d76d07a2d..13292b9d25 100644 --- a/pkg/apis/pingcap/v1alpha1/types.go +++ b/pkg/apis/pingcap/v1alpha1/types.go @@ -2181,7 +2181,7 @@ type BackupSpec struct { CommitTs string `json:"commitTs,omitempty"` // Subcommand is the subcommand for BR, such as start, stop, pause etc. // +optional - // +kubebuilder:validation:Enum:="";"log-start";"log-stop";"log-pause" + // +kubebuilder:validation:Enum:="log-start";"log-stop";"log-pause" LogSubcommand LogSubCommandType `json:"logSubcommand,omitempty"` // LogTruncateUntil is log backup truncate until timestamp. // Format supports TSO or datetime, e.g. '400036290571534337', '2018-05-11 01:42:23'. diff --git a/pkg/controller/backup/backup_controller.go b/pkg/controller/backup/backup_controller.go index 0d2c095d6a..c3b65621c4 100644 --- a/pkg/controller/backup/backup_controller.go +++ b/pkg/controller/backup/backup_controller.go @@ -234,7 +234,7 @@ func (c *Controller) updateBackup(cur interface{}) { return } - if v1alpha1.IsBackupScheduled(newBackup) || v1alpha1.IsBackupRunning(newBackup) || v1alpha1.IsBackupPrepared(newBackup) || v1alpha1.IsLogBackupAlreadyStop(newBackup) { + if v1alpha1.IsBackupScheduled(newBackup) || v1alpha1.IsBackupRunning(newBackup) || v1alpha1.IsBackupPrepared(newBackup) || v1alpha1.IsBackupFailed(newBackup) { klog.V(4).Infof("backup %s/%s is already Scheduled, Running, Preparing or Failed, skipping.", ns, name) return } From aebc1d5c6efe5ed683d0435f53f4deb2e1b34c52 Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Wed, 25 Sep 2024 12:23:03 +0200 Subject: [PATCH 28/34] lint --- pkg/apis/pingcap/v1alpha1/backup.go | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go index cd824e9008..dde3579658 100644 --- a/pkg/apis/pingcap/v1alpha1/backup.go +++ b/pkg/apis/pingcap/v1alpha1/backup.go @@ -320,7 +320,6 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType { var subCommand LogSubCommandType - // Maintain backward compatibility: // Users can omit the LogSubcommand field and use the `LogStop` field to stop log backups as in older version. if backup.Spec.LogSubcommand == "" { if backup.Spec.LogStop || IsLogBackupAlreadyStop(backup) { From 4fab3510dcc01d5d711a1639c86c26b8754de287 Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Wed, 25 Sep 2024 12:30:15 +0200 Subject: [PATCH 29/34] lint --- pkg/apis/pingcap/v1alpha1/backup.go | 44 ++++++++++++++--------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go index dde3579658..14a4fd63ee 100644 --- a/pkg/apis/pingcap/v1alpha1/backup.go +++ b/pkg/apis/pingcap/v1alpha1/backup.go @@ -321,30 +321,30 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType { var subCommand LogSubCommandType // Users can omit the LogSubcommand field and use the `LogStop` field to stop log backups as in older version. - if backup.Spec.LogSubcommand == "" { - if backup.Spec.LogStop || IsLogBackupAlreadyStop(backup) { - subCommand = LogStopCommand - } else if IsLogBackupAlreadyPaused(backup){ - subCommand = LogResumeCommand - } else { + if backup.Spec.LogSubcommand == "" { + if backup.Spec.LogStop || IsLogBackupAlreadyStop(backup) { + subCommand = LogStopCommand + } else if IsLogBackupAlreadyPaused(backup) { + subCommand = LogResumeCommand + } else { subCommand = LogStartCommand } - } else { - switch backup.Spec.LogSubcommand { - case LogStartCommand: - if IsLogBackupAlreadyPaused(backup) { - subCommand = LogResumeCommand - } else { - subCommand = LogStartCommand - } - case LogStopCommand: - subCommand = LogStopCommand - case LogPauseCommand: - subCommand = LogPauseCommand - default: - return LogUnknownCommand - } - } + } else { + switch backup.Spec.LogSubcommand { + case LogStartCommand: + if IsLogBackupAlreadyPaused(backup) { + subCommand = LogResumeCommand + } else { + subCommand = LogStartCommand + } + case LogStopCommand: + subCommand = LogStopCommand + case LogPauseCommand: + subCommand = LogPauseCommand + default: + return LogUnknownCommand + } + } // If the selected subcommand is already sync and logTruncateUntil is set, switch to LogTruncateCommand if IsLogSubcommandAlreadySync(backup, subCommand) && backup.Spec.LogTruncateUntil != "" && backup.Spec.LogTruncateUntil != backup.Status.LogSuccessTruncateUntil { From 638ca5f6a9762bb058fcc4331d1431e0844c1af4 Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Fri, 27 Sep 2024 11:12:35 +0200 Subject: [PATCH 30/34] compatible with old version --- pkg/apis/pingcap/v1alpha1/backup.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go index 14a4fd63ee..03a2c0ddae 100644 --- a/pkg/apis/pingcap/v1alpha1/backup.go +++ b/pkg/apis/pingcap/v1alpha1/backup.go @@ -324,8 +324,6 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType { if backup.Spec.LogSubcommand == "" { if backup.Spec.LogStop || IsLogBackupAlreadyStop(backup) { subCommand = LogStopCommand - } else if IsLogBackupAlreadyPaused(backup) { - subCommand = LogResumeCommand } else { subCommand = LogStartCommand } From 726e5b366092aabf529e6b868ff750b9adef1074 Mon Sep 17 00:00:00 2001 From: ris <79858083+RidRisR@users.noreply.github.com> Date: Sun, 29 Sep 2024 11:06:56 +0800 Subject: [PATCH 31/34] Update backup.go --- pkg/apis/pingcap/v1alpha1/backup.go | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go index 03a2c0ddae..392f4a8e0b 100644 --- a/pkg/apis/pingcap/v1alpha1/backup.go +++ b/pkg/apis/pingcap/v1alpha1/backup.go @@ -320,28 +320,26 @@ func ParseLogBackupSubcommand(backup *Backup) LogSubCommandType { var subCommand LogSubCommandType + switch backup.Spec.LogSubcommand { // Users can omit the LogSubcommand field and use the `LogStop` field to stop log backups as in older version. - if backup.Spec.LogSubcommand == "" { + case "": if backup.Spec.LogStop || IsLogBackupAlreadyStop(backup) { subCommand = LogStopCommand } else { subCommand = LogStartCommand } - } else { - switch backup.Spec.LogSubcommand { - case LogStartCommand: - if IsLogBackupAlreadyPaused(backup) { - subCommand = LogResumeCommand - } else { - subCommand = LogStartCommand - } - case LogStopCommand: - subCommand = LogStopCommand - case LogPauseCommand: - subCommand = LogPauseCommand - default: - return LogUnknownCommand + case LogStartCommand: + if IsLogBackupAlreadyPaused(backup) { + subCommand = LogResumeCommand + } else { + subCommand = LogStartCommand } + case LogStopCommand: + subCommand = LogStopCommand + case LogPauseCommand: + subCommand = LogPauseCommand + default: + return LogUnknownCommand } // If the selected subcommand is already sync and logTruncateUntil is set, switch to LogTruncateCommand From 79fb58649440f28467c9a8e9cf3570dd60a35f76 Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Tue, 8 Oct 2024 09:15:22 +0200 Subject: [PATCH 32/34] fix condition --- pkg/apis/pingcap/v1alpha1/backup.go | 2 +- tests/e2e/br/br.go | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/pkg/apis/pingcap/v1alpha1/backup.go b/pkg/apis/pingcap/v1alpha1/backup.go index 392f4a8e0b..75d7a5610c 100644 --- a/pkg/apis/pingcap/v1alpha1/backup.go +++ b/pkg/apis/pingcap/v1alpha1/backup.go @@ -371,7 +371,7 @@ func IsLogSubcommandAlreadySync(backup *Backup, subCommand LogSubCommandType) bo func IsLogBackupSubCommandOntheCondition(backup *Backup, conditionType BackupConditionType) bool { command := ParseLogBackupSubcommand(backup) switch command { - case LogStartCommand, LogStopCommand: + case LogStartCommand, LogStopCommand, LogPauseCommand, LogResumeCommand: if subStatus, ok := backup.Status.LogSubCommandStatuses[command]; ok { return subStatus.Phase == conditionType } diff --git a/tests/e2e/br/br.go b/tests/e2e/br/br.go index 42cc67a959..349109cc26 100644 --- a/tests/e2e/br/br.go +++ b/tests/e2e/br/br.go @@ -482,7 +482,7 @@ var _ = ginkgo.Describe("Backup and Restore", func() { ginkgo.By("Start log backup") backup, err := createBackupAndWaitForComplete(f, backupName, backupClusterName, typ, func(backup *v1alpha1.Backup) { - backup.Spec.LogSubcommand = "log-start" + backup.Spec.LogSubcommand = v1alpha1.LogStartCommand backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete backup.Spec.Mode = v1alpha1.BackupModeLog }) @@ -500,9 +500,9 @@ var _ = ginkgo.Describe("Backup and Restore", func() { ginkgo.By("Pause log backup") backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) { + backup.Spec.LogSubcommand = v1alpha1.LogPauseCommand backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete backup.Spec.Mode = v1alpha1.BackupModeLog - backup.Spec.LogSubcommand = "log-pause" }) framework.ExpectNoError(err) framework.ExpectEqual(backup.Status.Phase, v1alpha1.BackupPaused) @@ -518,34 +518,34 @@ var _ = ginkgo.Describe("Backup and Restore", func() { ginkgo.By("resume log backup") backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) { + backup.Spec.LogSubcommand = v1alpha1.LogStartCommand backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete backup.Spec.Mode = v1alpha1.BackupModeLog - backup.Spec.LogSubcommand = "log-start" }) framework.ExpectNoError(err) framework.ExpectEqual(backup.Status.Phase, v1alpha1.BackupRunning) ginkgo.By("Pause log backup again") backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) { + backup.Spec.LogSubcommand = v1alpha1.LogPauseCommand backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete backup.Spec.Mode = v1alpha1.BackupModeLog - backup.Spec.LogSubcommand = "log-pause" }) framework.ExpectNoError(err) framework.ExpectEqual(backup.Status.Phase, v1alpha1.BackupPaused) ginkgo.By("resume log backup again") backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) { + backup.Spec.LogSubcommand = v1alpha1.LogStartCommand backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete backup.Spec.Mode = v1alpha1.BackupModeLog - backup.Spec.LogSubcommand = "log-start" }) framework.ExpectNoError(err) framework.ExpectEqual(backup.Status.Phase, v1alpha1.BackupRunning) ginkgo.By("Stop log backup") backup, err = continueLogBackupAndWaitForComplete(f, backup, func(backup *v1alpha1.Backup) { - backup.Spec.LogSubcommand = "log-stop" + backup.Spec.LogSubcommand = v1alpha1.LogStopCommand backup.Spec.CleanPolicy = v1alpha1.CleanPolicyTypeDelete backup.Spec.Mode = v1alpha1.BackupModeLog }) From e0b2e0b14afa5b507f26635361b02385bb8f8f9f Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Tue, 8 Oct 2024 10:41:05 +0200 Subject: [PATCH 33/34] fix rerunable command --- pkg/controller/backup_status_updater.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pkg/controller/backup_status_updater.go b/pkg/controller/backup_status_updater.go index a0f977b167..514a183368 100644 --- a/pkg/controller/backup_status_updater.go +++ b/pkg/controller/backup_status_updater.go @@ -248,6 +248,12 @@ func updateLogSubcommandStatus(backup *v1alpha1.Backup, condition *v1alpha1.Back subcomandConditionUpdate := updateLogSubCommandConditionOnly(&subStatus, condition) if subcommandStatusUpdate || subcomandConditionUpdate { backup.Status.LogSubCommandStatuses[condition.Command] = subStatus + if condition.Command == v1alpha1.LogPauseCommand { + delete(backup.Status.LogSubCommandStatuses, v1alpha1.LogResumeCommand) + } + if condition.Command == v1alpha1.LogResumeCommand { + delete(backup.Status.LogSubCommandStatuses, v1alpha1.LogPauseCommand) + } return true } return false From ab5daead42db62e109bbffb4ff99bfb29e2df924 Mon Sep 17 00:00:00 2001 From: RidRisR <79858083+RidRisR@users.noreply.github.com> Date: Tue, 8 Oct 2024 11:21:24 +0200 Subject: [PATCH 34/34] fix --- pkg/apis/pingcap/v1alpha1/types.go | 3 +++ pkg/controller/backup_status_updater.go | 14 +++++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/pkg/apis/pingcap/v1alpha1/types.go b/pkg/apis/pingcap/v1alpha1/types.go index 13292b9d25..98c0e54b41 100644 --- a/pkg/apis/pingcap/v1alpha1/types.go +++ b/pkg/apis/pingcap/v1alpha1/types.go @@ -2354,6 +2354,9 @@ const ( BackupComplete BackupConditionType = "Complete" // BackupClean means the clean job has been created to clean backup data BackupClean BackupConditionType = "Clean" + // BackupRepeatable should ONLY be used in log backup + // It means some log backup sub-command completed and the log backup can be re-run + BackupRepeatable BackupConditionType = "Repeatable" // BackupFailed means the backup has failed. BackupFailed BackupConditionType = "Failed" // BackupRetryTheFailed means this failure can be retried diff --git a/pkg/controller/backup_status_updater.go b/pkg/controller/backup_status_updater.go index 514a183368..003ff93071 100644 --- a/pkg/controller/backup_status_updater.go +++ b/pkg/controller/backup_status_updater.go @@ -247,13 +247,21 @@ func updateLogSubcommandStatus(backup *v1alpha1.Backup, condition *v1alpha1.Back subcommandStatusUpdate := updateLogSubCommandStatusOnly(&subStatus, newStatus) subcomandConditionUpdate := updateLogSubCommandConditionOnly(&subStatus, condition) if subcommandStatusUpdate || subcomandConditionUpdate { - backup.Status.LogSubCommandStatuses[condition.Command] = subStatus + // handle special case for pause and resume, if one is on condition, the other should be updated as repeatable if condition.Command == v1alpha1.LogPauseCommand { - delete(backup.Status.LogSubCommandStatuses, v1alpha1.LogResumeCommand) + if subStatus, exist := backup.Status.LogSubCommandStatuses[v1alpha1.LogResumeCommand]; exist { + subStatus.Phase = v1alpha1.BackupRepeatable + backup.Status.LogSubCommandStatuses[v1alpha1.LogResumeCommand] = subStatus + } } if condition.Command == v1alpha1.LogResumeCommand { - delete(backup.Status.LogSubCommandStatuses, v1alpha1.LogPauseCommand) + if subStatus, exist := backup.Status.LogSubCommandStatuses[v1alpha1.LogPauseCommand]; exist { + subStatus.Phase = v1alpha1.BackupRepeatable + backup.Status.LogSubCommandStatuses[v1alpha1.LogPauseCommand] = subStatus + } } + + backup.Status.LogSubCommandStatuses[condition.Command] = subStatus return true } return false