diff --git a/charts/system/snapshot-controller/templates/crds/groupsnapshot.storage.k8s.io_volumegroupsnapshotcontents.yaml b/charts/system/snapshot-controller/templates/crds/groupsnapshot.storage.k8s.io_volumegroupsnapshotcontents.yaml index c150705a0d4..28584e56bfc 100644 --- a/charts/system/snapshot-controller/templates/crds/groupsnapshot.storage.k8s.io_volumegroupsnapshotcontents.yaml +++ b/charts/system/snapshot-controller/templates/crds/groupsnapshot.storage.k8s.io_volumegroupsnapshotcontents.yaml @@ -3,9 +3,8 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - api-approved.kubernetes.io: "https://github.com/kubernetes-csi/external-snapshotter/pull/971" - controller-gen.kubebuilder.io/version: v0.12.0 - creationTimestamp: null + api-approved.kubernetes.io: "https://github.com/kubernetes-csi/external-snapshotter/pull/1068" + controller-gen.kubebuilder.io/version: v0.15.0 name: volumegroupsnapshotcontents.groupsnapshot.storage.k8s.io spec: group: groupsnapshot.storage.k8s.io @@ -57,71 +56,90 @@ spec: name: v1alpha1 schema: openAPIV3Schema: - description: VolumeGroupSnapshotContent represents the actual "on-disk" group - snapshot object in the underlying storage system + description: |- + VolumeGroupSnapshotContent represents the actual "on-disk" group snapshot object + in the underlying storage system properties: apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources type: string kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string metadata: type: object spec: - description: Spec defines properties of a VolumeGroupSnapshotContent created - by the underlying storage system. Required. + description: |- + Spec defines properties of a VolumeGroupSnapshotContent created by the underlying storage system. + Required. properties: deletionPolicy: - description: DeletionPolicy determines whether this VolumeGroupSnapshotContent - and the physical group snapshot on the underlying storage system - should be deleted when the bound VolumeGroupSnapshot is deleted. - Supported values are "Retain" and "Delete". "Retain" means that - the VolumeGroupSnapshotContent and its physical group snapshot on - underlying storage system are kept. "Delete" means that the VolumeGroupSnapshotContent - and its physical group snapshot on underlying storage system are - deleted. For dynamically provisioned group snapshots, this field - will automatically be filled in by the CSI snapshotter sidecar with - the "DeletionPolicy" field defined in the corresponding VolumeGroupSnapshotClass. - For pre-existing snapshots, users MUST specify this field when creating - the VolumeGroupSnapshotContent object. Required. + description: |- + DeletionPolicy determines whether this VolumeGroupSnapshotContent and the + physical group snapshot on the underlying storage system should be deleted + when the bound VolumeGroupSnapshot is deleted. + Supported values are "Retain" and "Delete". + "Retain" means that the VolumeGroupSnapshotContent and its physical group + snapshot on underlying storage system are kept. + "Delete" means that the VolumeGroupSnapshotContent and its physical group + snapshot on underlying storage system are deleted. + For dynamically provisioned group snapshots, this field will automatically + be filled in by the CSI snapshotter sidecar with the "DeletionPolicy" field + defined in the corresponding VolumeGroupSnapshotClass. + For pre-existing snapshots, users MUST specify this field when creating the + VolumeGroupSnapshotContent object. + Required. enum: - Delete - Retain type: string driver: - description: Driver is the name of the CSI driver used to create the - physical group snapshot on the underlying storage system. This MUST - be the same as the name returned by the CSI GetPluginName() call - for that driver. Required. + description: |- + Driver is the name of the CSI driver used to create the physical group snapshot on + the underlying storage system. + This MUST be the same as the name returned by the CSI GetPluginName() call for + that driver. + Required. type: string source: - description: Source specifies whether the snapshot is (or should be) - dynamically provisioned or already exists, and just requires a Kubernetes - object representation. This field is immutable after creation. Required. + description: |- + Source specifies whether the snapshot is (or should be) dynamically provisioned + or already exists, and just requires a Kubernetes object representation. + This field is immutable after creation. + Required. properties: groupSnapshotHandles: - description: GroupSnapshotHandles specifies the CSI "group_snapshot_id" - of a pre-existing group snapshot and a list of CSI "snapshot_id" - of pre-existing snapshots on the underlying storage system for - which a Kubernetes object representation was (or should be) - created. This field is immutable. + description: |- + GroupSnapshotHandles specifies the CSI "group_snapshot_id" of a pre-existing + group snapshot and a list of CSI "snapshot_id" of pre-existing snapshots + on the underlying storage system for which a Kubernetes object + representation was (or should be) created. + This field is immutable. properties: volumeGroupSnapshotHandle: - description: VolumeGroupSnapshotHandle specifies the CSI "group_snapshot_id" - of a pre-existing group snapshot on the underlying storage - system for which a Kubernetes object representation was - (or should be) created. This field is immutable. Required. + description: |- + VolumeGroupSnapshotHandle specifies the CSI "group_snapshot_id" of a pre-existing + group snapshot on the underlying storage system for which a Kubernetes object + representation was (or should be) created. + This field is immutable. + Required. type: string volumeSnapshotHandles: - description: VolumeSnapshotHandles is a list of CSI "snapshot_id" - of pre-existing snapshots on the underlying storage system - for which Kubernetes objects representation were (or should - be) created. This field is immutable. Required. + description: |- + VolumeSnapshotHandles is a list of CSI "snapshot_id" of pre-existing + snapshots on the underlying storage system for which Kubernetes objects + representation were (or should be) created. + This field is immutable. + Required. items: type: string type: array @@ -129,70 +147,98 @@ spec: - volumeGroupSnapshotHandle - volumeSnapshotHandles type: object + x-kubernetes-validations: + - message: groupSnapshotHandles is immutable + rule: self == oldSelf volumeHandles: - description: VolumeHandles is a list of volume handles on the - backend to be snapshotted together. It is specified for dynamic - provisioning of the VolumeGroupSnapshot. This field is immutable. + description: |- + VolumeHandles is a list of volume handles on the backend to be snapshotted + together. It is specified for dynamic provisioning of the VolumeGroupSnapshot. + This field is immutable. items: type: string type: array + x-kubernetes-validations: + - message: volumeHandles is immutable + rule: self == oldSelf type: object - oneOf: - - required: ["volumeHandles"] - - required: ["groupSnapshotHandles"] + x-kubernetes-validations: + - message: volumeHandles is required once set + rule: '!has(oldSelf.volumeHandles) || has(self.volumeHandles)' + - message: groupSnapshotHandles is required once set + rule: '!has(oldSelf.groupSnapshotHandles) || has(self.groupSnapshotHandles)' + - message: exactly one of volumeHandles and groupSnapshotHandles must + be set + rule: (has(self.volumeHandles) && !has(self.groupSnapshotHandles)) + || (!has(self.volumeHandles) && has(self.groupSnapshotHandles)) volumeGroupSnapshotClassName: - description: VolumeGroupSnapshotClassName is the name of the VolumeGroupSnapshotClass - from which this group snapshot was (or will be) created. Note that - after provisioning, the VolumeGroupSnapshotClass may be deleted - or recreated with different set of values, and as such, should not - be referenced post-snapshot creation. For dynamic provisioning, - this field must be set. This field may be unset for pre-provisioned - snapshots. + description: |- + VolumeGroupSnapshotClassName is the name of the VolumeGroupSnapshotClass from + which this group snapshot was (or will be) created. + Note that after provisioning, the VolumeGroupSnapshotClass may be deleted or + recreated with different set of values, and as such, should not be referenced + post-snapshot creation. + For dynamic provisioning, this field must be set. + This field may be unset for pre-provisioned snapshots. type: string volumeGroupSnapshotRef: - description: VolumeGroupSnapshotRef specifies the VolumeGroupSnapshot - object to which this VolumeGroupSnapshotContent object is bound. - VolumeGroupSnapshot.Spec.VolumeGroupSnapshotContentName field must - reference to this VolumeGroupSnapshotContent's name for the bidirectional - binding to be valid. For a pre-existing VolumeGroupSnapshotContent - object, name and namespace of the VolumeGroupSnapshot object MUST - be provided for binding to happen. This field is immutable after - creation. Required. + description: |- + VolumeGroupSnapshotRef specifies the VolumeGroupSnapshot object to which this + VolumeGroupSnapshotContent object is bound. + VolumeGroupSnapshot.Spec.VolumeGroupSnapshotContentName field must reference to + this VolumeGroupSnapshotContent's name for the bidirectional binding to be valid. + For a pre-existing VolumeGroupSnapshotContent object, name and namespace of the + VolumeGroupSnapshot object MUST be provided for binding to happen. + This field is immutable after creation. + Required. properties: apiVersion: description: API version of the referent. type: string fieldPath: - description: 'If referring to a piece of an object instead of - an entire object, this string should contain a valid JSON/Go - field access statement, such as desiredState.manifest.containers[2]. - For example, if the object reference is to a container within - a pod, this would take on a value like: "spec.containers{name}" - (where "name" refers to the name of the container that triggered - the event) or if no container name is specified "spec.containers[2]" - (container with index 2 in this pod). This syntax is chosen - only to have some well-defined way of referencing a part of - an object. TODO: this design is not final and this field is - subject to change in the future.' + description: |- + If referring to a piece of an object instead of an entire object, this string + should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container within a pod, this would take on a value like: + "spec.containers{name}" (where "name" refers to the name of the container that triggered + the event) or if no container name is specified "spec.containers[2]" (container with + index 2 in this pod). This syntax is chosen only to have some well-defined way of + referencing a part of an object. + TODO: this design is not final and this field is subject to change in the future. type: string kind: - description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: |- + Kind of the referent. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + description: |- + Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string namespace: - description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + description: |- + Namespace of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ type: string resourceVersion: - description: 'Specific resourceVersion to which this reference - is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + description: |- + Specific resourceVersion to which this reference is made, if any. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency type: string uid: - description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + description: |- + UID of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids type: string type: object x-kubernetes-map-type: atomic + x-kubernetes-validations: + - message: both volumeGroupSnapshotRef.name and volumeGroupSnapshotRef.namespace + must be set + rule: has(self.name) && has(self.__namespace__) + - message: volumeGroupSnapshotRef is immutable + rule: self == oldSelf required: - deletionPolicy - driver @@ -203,108 +249,82 @@ spec: description: status represents the current information of a group snapshot. properties: creationTime: - description: CreationTime is the timestamp when the point-in-time - group snapshot is taken by the underlying storage system. If not - specified, it indicates the creation time is unknown. If not specified, - it means the readiness of a group snapshot is unknown. The format - of this field is a Unix nanoseconds time encoded as an int64. On - Unix, the command date +%s%N returns the current time in nanoseconds + description: |- + CreationTime is the timestamp when the point-in-time group snapshot is taken + by the underlying storage system. + If not specified, it indicates the creation time is unknown. + If not specified, it means the readiness of a group snapshot is unknown. + The format of this field is a Unix nanoseconds time encoded as an int64. + On Unix, the command date +%s%N returns the current time in nanoseconds since 1970-01-01 00:00:00 UTC. format: int64 type: integer error: - description: Error is the last observed error during group snapshot - creation, if any. Upon success after retry, this error field will - be cleared. + description: |- + Error is the last observed error during group snapshot creation, if any. + Upon success after retry, this error field will be cleared. properties: message: - description: 'message is a string detailing the encountered error - during snapshot creation if specified. NOTE: message may be - logged, and it should not contain sensitive information.' + description: |- + message is a string detailing the encountered error during snapshot + creation if specified. + NOTE: message may be logged, and it should not contain sensitive + information. type: string time: description: time is the timestamp when the error was encountered. format: date-time type: string type: object + pvVolumeSnapshotContentList: + description: |- + PVVolumeSnapshotContentList is the list of pairs of PV and + VolumeSnapshotContent for this group snapshot + The maximum number of allowed snapshots in the group is 100. + items: + description: |- + PVVolumeSnapshotContentPair represent a pair of PV names and + VolumeSnapshotContent names + properties: + persistentVolumeRef: + description: PersistentVolumeRef is a reference to the persistent + volume resource + properties: + name: + description: |- + Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, uid? + type: string + type: object + x-kubernetes-map-type: atomic + volumeSnapshotContentRef: + description: VolumeSnapshotContentRef is a reference to the + volume snapshot content resource + properties: + name: + description: |- + Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, uid? + type: string + type: object + x-kubernetes-map-type: atomic + type: object + type: array readyToUse: - description: ReadyToUse indicates if all the individual snapshots - in the group are ready to be used to restore a group of volumes. - ReadyToUse becomes true when ReadyToUse of all individual snapshots - become true. + description: |- + ReadyToUse indicates if all the individual snapshots in the group are ready to be + used to restore a group of volumes. + ReadyToUse becomes true when ReadyToUse of all individual snapshots become true. type: boolean volumeGroupSnapshotHandle: - description: VolumeGroupSnapshotHandle is a unique id returned by - the CSI driver to identify the VolumeGroupSnapshot on the storage - system. If a storage system does not provide such an id, the CSI - driver can choose to return the VolumeGroupSnapshot name. + description: |- + VolumeGroupSnapshotHandle is a unique id returned by the CSI driver + to identify the VolumeGroupSnapshot on the storage system. + If a storage system does not provide such an id, the + CSI driver can choose to return the VolumeGroupSnapshot name. type: string - volumeSnapshotContentRefList: - description: VolumeSnapshotContentRefList is the list of volume snapshot - content references for this group snapshot. The maximum number of - allowed snapshots in the group is 100. - items: - description: "ObjectReference contains enough information to let - you inspect or modify the referred object. --- New uses of this - type are discouraged because of difficulty describing its usage - when embedded in APIs. 1. Ignored fields. It includes many fields - which are not generally honored. For instance, ResourceVersion - and FieldPath are both very rarely valid in actual usage. 2. Invalid - usage help. It is impossible to add specific help for individual - usage. In most embedded usages, there are particular restrictions - like, \"must refer only to types A and B\" or \"UID not honored\" - or \"name must be restricted\". Those cannot be well described - when embedded. 3. Inconsistent validation. Because the usages - are different, the validation rules are different by usage, which - makes it hard for users to predict what will happen. 4. The fields - are both imprecise and overly precise. Kind is not a precise - mapping to a URL. This can produce ambiguity during interpretation - and require a REST mapping. In most cases, the dependency is - on the group,resource tuple and the version of the actual struct - is irrelevant. 5. We cannot easily change it. Because this type - is embedded in many locations, updates to this type will affect - numerous schemas. Don't make new APIs embed an underspecified - API type they do not control. \n Instead of using this type, create - a locally provided and used type that is well-focused on your - reference. For example, ServiceReferences for admission registration: - https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533 - ." - properties: - apiVersion: - description: API version of the referent. - type: string - fieldPath: - description: 'If referring to a piece of an object instead of - an entire object, this string should contain a valid JSON/Go - field access statement, such as desiredState.manifest.containers[2]. - For example, if the object reference is to a container within - a pod, this would take on a value like: "spec.containers{name}" - (where "name" refers to the name of the container that triggered - the event) or if no container name is specified "spec.containers[2]" - (container with index 2 in this pod). This syntax is chosen - only to have some well-defined way of referencing a part of - an object. TODO: this design is not final and this field is - subject to change in the future.' - type: string - kind: - description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' - type: string - namespace: - description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' - type: string - resourceVersion: - description: 'Specific resourceVersion to which this reference - is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' - type: string - uid: - description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' - type: string - type: object - x-kubernetes-map-type: atomic - type: array type: object required: - spec