diff --git a/.gitignore b/.gitignore index cebe77aa..d41e1f18 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,7 @@ # IDEs **/.idea + +# CRDs for deprecated APIs +config/crds/openebs.io_cstorbackups.yaml +config/crds/openebs.io_cstorcompletedbackups.yaml +config/crds/openebs.io_cstorrestores.yaml \ No newline at end of file diff --git a/Makefile b/Makefile index 3aad8d67..4382d03d 100644 --- a/Makefile +++ b/Makefile @@ -31,6 +31,7 @@ generate: generate-crds generate-crds: controller-gen # Generate manifests e.g. CRD, RBAC etc. $(CONTROLLER_GEN) crd:crdVersions=v1 paths="./pkg/apis/cstor/..." output:crd:artifacts:config=config/crds/bases + $(CONTROLLER_GEN) crd:crdVersions=v1 paths="./pkg/apis/openebs.io/v1alpha1/..." output:crd:artifacts:config=config/crds # merge all crds into a single file rm $(ALL_CRDS) cat config/crds/bases/*.yaml >> $(ALL_CRDS) diff --git a/config/crds/openebs.io_blockdeviceclaims.yaml b/config/crds/openebs.io_blockdeviceclaims.yaml new file mode 100644 index 00000000..a34d270e --- /dev/null +++ b/config/crds/openebs.io_blockdeviceclaims.yaml @@ -0,0 +1,163 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.11.4 + name: blockdeviceclaims.openebs.io +spec: + group: openebs.io + names: + kind: BlockDeviceClaim + listKind: BlockDeviceClaimList + plural: blockdeviceclaims + singular: blockdeviceclaim + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: BlockDeviceClaim is the Schema for the BlockDeviceClaim CR + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: DeviceClaimSpec defines the request details for a BlockDevice + properties: + blockDeviceName: + description: BlockDeviceName is the reference to the block-device + backing this claim + type: string + blockDeviceNodeAttributes: + description: BlockDeviceNodeAttributes is the attributes on the node + from which a BD should be selected for this claim. It can include + nodename, failure domain etc. + properties: + hostName: + description: HostName represents the hostname of the Kubernetes + node resource where the BD should be present + type: string + nodeName: + description: NodeName represents the name of the Kubernetes node + resource where the BD should be present + type: string + type: object + deviceClaimDetails: + description: Details of the device to be claimed + properties: + allowPartition: + description: AllowPartition represents whether to claim a full + block device or a device that is a partition + type: boolean + blockVolumeMode: + description: 'BlockVolumeMode represents whether to claim a device + in Block mode or Filesystem mode. These are use cases of BlockVolumeMode: + 1) Not specified: VolumeMode check will not be effective 2) + VolumeModeBlock: BD should not have any filesystem or mountpoint + 3) VolumeModeFileSystem: BD should have a filesystem and mountpoint. + If DeviceFormat is specified then the format should match with + the FSType in BD' + type: string + formatType: + description: Format of the device required, eg:ext4, xfs + type: string + type: object + deviceType: + description: DeviceType represents the type of drive like SSD, HDD + etc., + type: string + hostName: + description: HostName from where blockdevice has to be claimed. + type: string + resources: + description: Resources will help with placing claims on Capacity, + IOPS + properties: + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes the minimum resources required. + eg: if storage resource of 10G is requested minimum capacity + of 10G should be available' + type: object + required: + - requests + type: object + selector: + description: Selector is used to find block devices to be considered + for claiming + properties: + matchExpressions: + description: matchExpressions is a list of label selector requirements. + The requirements are ANDed. + items: + description: A label selector requirement is a selector that + contains values, a key, and an operator that relates the key + and values. + properties: + key: + description: key is the label key that the selector applies + to. + type: string + operator: + description: operator represents a key's relationship to + a set of values. Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of string values. If the + operator is In or NotIn, the values array must be non-empty. + If the operator is Exists or DoesNotExist, the values + array must be empty. This array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} pairs. A single + {key,value} in the matchLabels map is equivalent to an element + of matchExpressions, whose key field is "key", the operator + is "In", and the values array contains only "value". The requirements + are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + required: + - deviceType + - hostName + - resources + type: object + status: + description: DeviceClaimStatus defines the observed state of BlockDeviceClaim + properties: + phase: + description: DeviceClaimPhase is a typed string for phase field of + BlockDeviceClaim. + type: string + required: + - phase + type: object + type: object + served: true + storage: true diff --git a/config/crds/openebs.io_blockdevices.yaml b/config/crds/openebs.io_blockdevices.yaml new file mode 100644 index 00000000..efa2912d --- /dev/null +++ b/config/crds/openebs.io_blockdevices.yaml @@ -0,0 +1,233 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.11.4 + name: blockdevices.openebs.io +spec: + group: openebs.io + names: + kind: BlockDevice + listKind: BlockDeviceList + plural: blockdevices + singular: blockdevice + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: BlockDevice is the Schema used to represent a BlockDevice CR + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: DeviceSpec defines the properties and runtime status of a + BlockDevice + properties: + aggregateDevice: + description: AggregateDevice was intended to store the hierachical + information in cases of LVM. However this is currently not implemented + and may need to be re-looked into for better design. TODO @kmova + to be implemented/deprecated + type: string + capacity: + description: Capacity + properties: + logicalSectorSize: + description: LogicalSectorSize is blockdevice logical-sector size + in bytes + format: int32 + type: integer + physicalSectorSize: + description: PhysicalSectorSize is blockdevice physical-Sector + size in bytes + format: int32 + type: integer + storage: + description: Storage is the blockdevice capacity in bytes + format: int64 + type: integer + required: + - logicalSectorSize + - physicalSectorSize + - storage + type: object + claimRef: + description: Reference to the BDC which has claimed this BD + 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 + details: + description: Details contain static attributes of BD like model,serial, + and so forth + properties: + compliance: + description: Compliance is standards/specifications version implmented + by device firmware such as SPC-1, SPC-2, etc + type: string + deviceType: + description: DeviceType represents the type of device like sparse, + disk, partition, lvm, raid + type: string + driveType: + description: DriveType is the type of backing drive, HDD/SSD + type: string + firmwareRevision: + description: disk firmware revision + type: string + hardwareSectorSize: + description: HardwareSectorSize is the hardware sector size in + bytes + format: int32 + type: integer + logicalBlockSize: + description: LogicalBlockSize is the logical block size in bytes + reported by /sys/class/block/sda/queue/logical_block_size + format: int32 + type: integer + model: + description: Model is model of disk + type: string + physicalBlockSize: + description: PhysicalBlockSize is the physical block size in bytes + reported by /sys/class/block/sda/queue/physical_block_size + format: int32 + type: integer + serial: + description: Serial is serial number of disk + type: string + vendor: + description: Vendor is vendor of disk + type: string + required: + - compliance + - deviceType + - driveType + - firmwareRevision + - hardwareSectorSize + - logicalBlockSize + - model + - physicalBlockSize + - serial + - vendor + type: object + devlinks: + description: DevLinks contains soft links of a block device like /dev/by-id/... + /dev/by-uuid/... + items: + description: DeviceDevLink holds the maping between type and links + like by-id type or by-path type link + properties: + kind: + description: Kind is the type of link like by-id or by-path. + type: string + links: + description: Links are the soft links of Type type + items: + type: string + type: array + type: object + type: array + filesystem: + description: FileSystem contains mountpoint and filesystem type + properties: + fsType: + description: Type represents the FileSystem type of the block + device + type: string + mountPoint: + description: MountPoint represents the mountpoint of the block + device. + type: string + type: object + nodeAttributes: + description: NodeAttributes has the details of the node on which BD + is attached + properties: + nodeName: + description: NodeName is the name of the Kubernetes node resource + on which the device is attached + type: string + required: + - nodeName + type: object + parentDevice: + description: "ParentDevice was intented to store the UUID of the parent + Block Device as is the case for partitioned block devices. \n For + example: /dev/sda is the parent for /dev/sdap1 TODO @kmova to be + implemented/deprecated" + type: string + partitioned: + description: Partitioned represents if BlockDevice has partions or + not (YES/NO) Currently always default to NO. TODO @kmova to be implemented/deprecated + type: string + path: + description: Path contain devpath (e.g. /dev/sdb) + type: string + required: + - capacity + - details + - devlinks + - nodeAttributes + - partitioned + - path + type: object + status: + description: DeviceStatus defines the observed state of BlockDevice + properties: + claimState: + description: claim state of the block device + type: string + state: + description: State is the current state of the blockdevice (Active/Inactive) + type: string + required: + - claimState + - state + type: object + type: object + served: true + storage: true diff --git a/config/crds/openebs.io_migrationtasks.yaml b/config/crds/openebs.io_migrationtasks.yaml index 48e2af61..fe043f43 100644 --- a/config/crds/openebs.io_migrationtasks.yaml +++ b/config/crds/openebs.io_migrationtasks.yaml @@ -1,10 +1,9 @@ --- -apiVersion: apiextensions.k8s.io/v1beta1 +apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.2.9 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.11.4 name: migrationtasks.openebs.io spec: group: openebs.io @@ -16,111 +15,104 @@ spec: - mtask singular: migrationtask scope: Namespaced - validation: - openAPIV3Schema: - description: MigrationTask represents an migration task - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - description: Spec i.e. specifications of the MigrationTask - properties: - cstorPool: - description: MigrateCStorPool contains the details of the cstor pool - to be migrated - properties: - rename: - description: If a CSPC with the same name as SPC already exists - then we can rename SPC during migration using Rename - type: string - spcName: - description: SPCName contains the name of the storage pool claim - to be migrated - type: string - type: object - cstorVolume: - description: MigrateCStorVolume contains the details of the cstor volume - to be migrated - properties: - pvName: - description: PVName contains the name of the pv associated with - the cstor volume to be migrated - type: string - type: object - type: object - status: - description: Status of MigrationTask - properties: - completedTime: - description: CompletedTime of Migrate - format: date-time - type: string - migrationDetailedStatuses: - description: MigrationDetailedStatuses contains the list of statuses - of each step - items: - description: MigrationDetailedStatuses represents the latest available - observations of a MigrationTask current state. + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: MigrationTask represents an migration task + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: Spec i.e. specifications of the MigrationTask + properties: + cstorPool: + description: MigrateCStorPool contains the details of the cstor pool + to be migrated properties: - lastUpdatedAt: - description: LastUpdatedTime of a MigrateStep - format: date-time - type: string - message: - description: A human-readable message indicating details about - why the migrationStep is in this state - type: string - phase: - description: Phase indicates if the MigrateStep is waiting, errored - or completed. - type: string - reason: - description: Reason is a brief CamelCase string that describes - any failure and is meant for machine parsing and tidy display - in the CLI + rename: + description: If a CSPC with the same name as SPC already exists + then we can rename SPC during migration using Rename type: string - startTime: - description: StartTime of a MigrateStep - format: date-time + spcName: + description: SPCName contains the name of the storage pool claim + to be migrated type: string - step: + type: object + cstorVolume: + description: MigrateCStorVolume contains the details of the cstor + volume to be migrated + properties: + pvName: + description: PVName contains the name of the pv associated with + the cstor volume to be migrated type: string type: object - type: array - phase: - description: Phase indicates if a migrationTask is started, success - or errored - type: string - retries: - description: Retries is the number of times the job attempted to migration - the resource - type: integer - startTime: - description: StartTime of Migrate - format: date-time - type: string - type: object - required: - - spec - type: object - version: v1alpha1 - versions: - - name: v1alpha1 + type: object + status: + description: Status of MigrationTask + properties: + completedTime: + description: CompletedTime of Migrate + format: date-time + type: string + migrationDetailedStatuses: + description: MigrationDetailedStatuses contains the list of statuses + of each step + items: + description: MigrationDetailedStatuses represents the latest available + observations of a MigrationTask current state. + properties: + lastUpdatedAt: + description: LastUpdatedTime of a MigrateStep + format: date-time + type: string + message: + description: A human-readable message indicating details about + why the migrationStep is in this state + type: string + phase: + description: Phase indicates if the MigrateStep is waiting, + errored or completed. + type: string + reason: + description: Reason is a brief CamelCase string that describes + any failure and is meant for machine parsing and tidy display + in the CLI + type: string + startTime: + description: StartTime of a MigrateStep + format: date-time + type: string + step: + type: string + type: object + type: array + phase: + description: Phase indicates if a migrationTask is started, success + or errored + type: string + retries: + description: Retries is the number of times the job attempted to migration + the resource + type: integer + startTime: + description: StartTime of Migrate + format: date-time + type: string + type: object + required: + - spec + type: object served: true storage: true -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/config/crds/openebs.io_upgradetasks.yaml b/config/crds/openebs.io_upgradetasks.yaml index 2d2142a7..4eb92774 100644 --- a/config/crds/openebs.io_upgradetasks.yaml +++ b/config/crds/openebs.io_upgradetasks.yaml @@ -1,11 +1,9 @@ - --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.4.0 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.11.4 name: upgradetasks.openebs.io spec: group: openebs.io @@ -249,9 +247,3 @@ spec: type: object served: true storage: true -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: []