diff --git a/api/v1/zz_generated.deepcopy.go b/api/v1/zz_generated.deepcopy.go index 55ef5bc1be..f8bcf2c39d 100644 --- a/api/v1/zz_generated.deepcopy.go +++ b/api/v1/zz_generated.deepcopy.go @@ -30,6 +30,22 @@ import ( "k8s.io/apimachinery/pkg/runtime" ) +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AdditionalCephFilesystemStorageClass) DeepCopyInto(out *AdditionalCephFilesystemStorageClass) { + *out = *in + in.DataPoolSpec.DeepCopyInto(&out.DataPoolSpec) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AdditionalCephFilesystemStorageClass. +func (in *AdditionalCephFilesystemStorageClass) DeepCopy() *AdditionalCephFilesystemStorageClass { + if in == nil { + return nil + } + out := new(AdditionalCephFilesystemStorageClass) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ArbiterSpec) DeepCopyInto(out *ArbiterSpec) { *out = *in @@ -320,6 +336,14 @@ func (in *ManageCephDashboard) DeepCopy() *ManageCephDashboard { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ManageCephFilesystems) DeepCopyInto(out *ManageCephFilesystems) { *out = *in + in.DataPoolSpec.DeepCopyInto(&out.DataPoolSpec) + if in.AdditionalCephFilesystemStorageClasses != nil { + in, out := &in.AdditionalCephFilesystemStorageClasses, &out.AdditionalCephFilesystemStorageClasses + *out = make([]AdditionalCephFilesystemStorageClass, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ManageCephFilesystems. @@ -422,7 +446,7 @@ func (in *ManagedResourcesSpec) DeepCopyInto(out *ManagedResourcesSpec) { out.CephDashboard = in.CephDashboard out.CephBlockPools = in.CephBlockPools in.CephNonResilientPools.DeepCopyInto(&out.CephNonResilientPools) - out.CephFilesystems = in.CephFilesystems + in.CephFilesystems.DeepCopyInto(&out.CephFilesystems) in.CephObjectStores.DeepCopyInto(&out.CephObjectStores) out.CephObjectStoreUsers = in.CephObjectStoreUsers out.CephToolbox = in.CephToolbox diff --git a/config/crd/bases/ocs.openshift.io_storageclusters.yaml b/config/crd/bases/ocs.openshift.io_storageclusters.yaml index a9f0232926..87591babb6 100644 --- a/config/crd/bases/ocs.openshift.io_storageclusters.yaml +++ b/config/crd/bases/ocs.openshift.io_storageclusters.yaml @@ -728,6 +728,440 @@ spec: properties: activeMetadataServers: type: integer + additionalCephFilesystemStorageClasses: + description: AdditionalCephFilesystemStorageClasses specifies + the additional storage classes created for cephfs + items: + properties: + dataPoolSpec: + description: DataPoolSpec specifies the pool spec for + the data pool for the additional cephfs storage class + properties: + compressionMode: + description: 'DEPRECATED: use Parameters instead, + e.g., Parameters["compression_mode"] = "force" + The inline compression mode in Bluestore OSD to + set to (options are: none, passive, aggressive, + force) Do NOT set a default value for kubebuilder + as this will override the Parameters' + enum: + - none + - passive + - aggressive + - force + - "" + nullable: true + type: string + crushRoot: + description: The root of the crush hierarchy utilized + by the pool + nullable: true + type: string + deviceClass: + description: The device class the OSD should set + to for use in the pool + nullable: true + type: string + enableRBDStats: + description: EnableRBDStats is used to enable gathering + of statistics for all RBD images in the pool + type: boolean + erasureCoded: + description: The erasure code settings + properties: + algorithm: + description: The algorithm for erasure coding + type: string + codingChunks: + description: Number of coding chunks per object + in an erasure coded storage pool (required + for erasure-coded pool type). This is the + number of OSDs that can be lost simultaneously + before data cannot be recovered. + minimum: 0 + type: integer + dataChunks: + description: Number of data chunks per object + in an erasure coded storage pool (required + for erasure-coded pool type). The number of + chunks required to recover an object when + any single OSD is lost is the same as dataChunks + so be aware that the larger the number of + data chunks, the higher the cost of recovery. + minimum: 0 + type: integer + required: + - codingChunks + - dataChunks + type: object + failureDomain: + description: 'The failure domain: osd/host/(region + or zone if available) - technically also any type + in the crush map' + type: string + mirroring: + description: The mirroring settings + properties: + enabled: + description: Enabled whether this pool is mirrored + or not + type: boolean + mode: + description: 'Mode is the mirroring mode: either + pool or image' + type: string + peers: + description: Peers represents the peers spec + nullable: true + properties: + secretNames: + description: SecretNames represents the + Kubernetes Secret names to add rbd-mirror + or cephfs-mirror peers + items: + type: string + type: array + type: object + snapshotSchedules: + description: SnapshotSchedules is the scheduling + of snapshot for mirrored images/pools + items: + description: SnapshotScheduleSpec represents + the snapshot scheduling settings of a mirrored + pool + properties: + interval: + description: Interval represent the periodicity + of the snapshot. + type: string + path: + description: Path is the path to snapshot, + only valid for CephFS + type: string + startTime: + description: StartTime indicates when + to start the snapshot + type: string + type: object + type: array + type: object + parameters: + additionalProperties: + type: string + description: Parameters is a list of properties + to enable on a given pool + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + quotas: + description: The quota settings + nullable: true + properties: + maxBytes: + description: MaxBytes represents the quota in + bytes Deprecated in favor of MaxSize + format: int64 + type: integer + maxObjects: + description: MaxObjects represents the quota + in objects + format: int64 + type: integer + maxSize: + description: MaxSize represents the quota in + bytes as a string + pattern: ^[0-9]+[\.]?[0-9]*([KMGTPE]i|[kMGTPE])?$ + type: string + type: object + replicated: + description: The replication settings + properties: + hybridStorage: + description: HybridStorage represents hybrid + storage tier settings + nullable: true + properties: + primaryDeviceClass: + description: PrimaryDeviceClass represents + high performance tier (for example SSD + or NVME) for Primary OSD + minLength: 1 + type: string + secondaryDeviceClass: + description: SecondaryDeviceClass represents + low performance tier (for example HDDs) + for remaining OSDs + minLength: 1 + type: string + required: + - primaryDeviceClass + - secondaryDeviceClass + type: object + replicasPerFailureDomain: + description: ReplicasPerFailureDomain the number + of replica in the specified failure domain + minimum: 1 + type: integer + requireSafeReplicaSize: + description: RequireSafeReplicaSize if false + allows you to set replica 1 + type: boolean + size: + description: Size - Number of copies per object + in a replicated storage pool, including the + object itself (required for replicated pool + type) + minimum: 0 + type: integer + subFailureDomain: + description: SubFailureDomain the name of the + sub-failure domain + type: string + targetSizeRatio: + description: TargetSizeRatio gives a hint (%) + to Ceph in terms of expected consumption of + the total cluster capacity + type: number + required: + - size + type: object + statusCheck: + description: The mirroring statusCheck + properties: + mirror: + description: HealthCheckSpec represents the + health check of an object store bucket + nullable: true + properties: + disabled: + type: boolean + interval: + description: Interval is the internal in + second or minute for the health check + to run like 60s for 60 seconds + type: string + timeout: + type: string + type: object + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + storageClassName: + description: StorageClassName specifies the name of + the additional storage class created for cephfs + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ + type: string + type: object + type: array + dataPoolSpec: + description: DataPoolSpec specifies the pool spec for the + default cephfs data pool + properties: + compressionMode: + description: 'DEPRECATED: use Parameters instead, e.g., + Parameters["compression_mode"] = "force" The inline + compression mode in Bluestore OSD to set to (options + are: none, passive, aggressive, force) Do NOT set a + default value for kubebuilder as this will override + the Parameters' + enum: + - none + - passive + - aggressive + - force + - "" + nullable: true + type: string + crushRoot: + description: The root of the crush hierarchy utilized + by the pool + nullable: true + type: string + deviceClass: + description: The device class the OSD should set to for + use in the pool + nullable: true + type: string + enableRBDStats: + description: EnableRBDStats is used to enable gathering + of statistics for all RBD images in the pool + type: boolean + erasureCoded: + description: The erasure code settings + properties: + algorithm: + description: The algorithm for erasure coding + type: string + codingChunks: + description: Number of coding chunks per object in + an erasure coded storage pool (required for erasure-coded + pool type). This is the number of OSDs that can + be lost simultaneously before data cannot be recovered. + minimum: 0 + type: integer + dataChunks: + description: Number of data chunks per object in an + erasure coded storage pool (required for erasure-coded + pool type). The number of chunks required to recover + an object when any single OSD is lost is the same + as dataChunks so be aware that the larger the number + of data chunks, the higher the cost of recovery. + minimum: 0 + type: integer + required: + - codingChunks + - dataChunks + type: object + failureDomain: + description: 'The failure domain: osd/host/(region or + zone if available) - technically also any type in the + crush map' + type: string + mirroring: + description: The mirroring settings + properties: + enabled: + description: Enabled whether this pool is mirrored + or not + type: boolean + mode: + description: 'Mode is the mirroring mode: either pool + or image' + type: string + peers: + description: Peers represents the peers spec + nullable: true + properties: + secretNames: + description: SecretNames represents the Kubernetes + Secret names to add rbd-mirror or cephfs-mirror + peers + items: + type: string + type: array + type: object + snapshotSchedules: + description: SnapshotSchedules is the scheduling of + snapshot for mirrored images/pools + items: + description: SnapshotScheduleSpec represents the + snapshot scheduling settings of a mirrored pool + properties: + interval: + description: Interval represent the periodicity + of the snapshot. + type: string + path: + description: Path is the path to snapshot, only + valid for CephFS + type: string + startTime: + description: StartTime indicates when to start + the snapshot + type: string + type: object + type: array + type: object + parameters: + additionalProperties: + type: string + description: Parameters is a list of properties to enable + on a given pool + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + quotas: + description: The quota settings + nullable: true + properties: + maxBytes: + description: MaxBytes represents the quota in bytes + Deprecated in favor of MaxSize + format: int64 + type: integer + maxObjects: + description: MaxObjects represents the quota in objects + format: int64 + type: integer + maxSize: + description: MaxSize represents the quota in bytes + as a string + pattern: ^[0-9]+[\.]?[0-9]*([KMGTPE]i|[kMGTPE])?$ + type: string + type: object + replicated: + description: The replication settings + properties: + hybridStorage: + description: HybridStorage represents hybrid storage + tier settings + nullable: true + properties: + primaryDeviceClass: + description: PrimaryDeviceClass represents high + performance tier (for example SSD or NVME) for + Primary OSD + minLength: 1 + type: string + secondaryDeviceClass: + description: SecondaryDeviceClass represents low + performance tier (for example HDDs) for remaining + OSDs + minLength: 1 + type: string + required: + - primaryDeviceClass + - secondaryDeviceClass + type: object + replicasPerFailureDomain: + description: ReplicasPerFailureDomain the number of + replica in the specified failure domain + minimum: 1 + type: integer + requireSafeReplicaSize: + description: RequireSafeReplicaSize if false allows + you to set replica 1 + type: boolean + size: + description: Size - Number of copies per object in + a replicated storage pool, including the object + itself (required for replicated pool type) + minimum: 0 + type: integer + subFailureDomain: + description: SubFailureDomain the name of the sub-failure + domain + type: string + targetSizeRatio: + description: TargetSizeRatio gives a hint (%) to Ceph + in terms of expected consumption of the total cluster + capacity + type: number + required: + - size + type: object + statusCheck: + description: The mirroring statusCheck + properties: + mirror: + description: HealthCheckSpec represents the health + check of an object store bucket + nullable: true + properties: + disabled: + type: boolean + interval: + description: Interval is the internal in second + or minute for the health check to run like 60s + for 60 seconds + type: string + timeout: + type: string + type: object + type: object + x-kubernetes-preserve-unknown-fields: true + type: object disableSnapshotClass: type: boolean disableStorageClass: diff --git a/config/rbac/role.yaml b/config/rbac/role.yaml index a322815201..df007b699d 100644 --- a/config/rbac/role.yaml +++ b/config/rbac/role.yaml @@ -43,6 +43,7 @@ rules: - cephblockpools - cephclusters - cephfilesystems + - cephfilesystemsubvolumegroups - cephnfses - cephobjectstores - cephobjectstoreusers diff --git a/deploy/csv-templates/crds/ocs/ocs.openshift.io_storageclusters.yaml b/deploy/csv-templates/crds/ocs/ocs.openshift.io_storageclusters.yaml index a9f0232926..87591babb6 100644 --- a/deploy/csv-templates/crds/ocs/ocs.openshift.io_storageclusters.yaml +++ b/deploy/csv-templates/crds/ocs/ocs.openshift.io_storageclusters.yaml @@ -728,6 +728,440 @@ spec: properties: activeMetadataServers: type: integer + additionalCephFilesystemStorageClasses: + description: AdditionalCephFilesystemStorageClasses specifies + the additional storage classes created for cephfs + items: + properties: + dataPoolSpec: + description: DataPoolSpec specifies the pool spec for + the data pool for the additional cephfs storage class + properties: + compressionMode: + description: 'DEPRECATED: use Parameters instead, + e.g., Parameters["compression_mode"] = "force" + The inline compression mode in Bluestore OSD to + set to (options are: none, passive, aggressive, + force) Do NOT set a default value for kubebuilder + as this will override the Parameters' + enum: + - none + - passive + - aggressive + - force + - "" + nullable: true + type: string + crushRoot: + description: The root of the crush hierarchy utilized + by the pool + nullable: true + type: string + deviceClass: + description: The device class the OSD should set + to for use in the pool + nullable: true + type: string + enableRBDStats: + description: EnableRBDStats is used to enable gathering + of statistics for all RBD images in the pool + type: boolean + erasureCoded: + description: The erasure code settings + properties: + algorithm: + description: The algorithm for erasure coding + type: string + codingChunks: + description: Number of coding chunks per object + in an erasure coded storage pool (required + for erasure-coded pool type). This is the + number of OSDs that can be lost simultaneously + before data cannot be recovered. + minimum: 0 + type: integer + dataChunks: + description: Number of data chunks per object + in an erasure coded storage pool (required + for erasure-coded pool type). The number of + chunks required to recover an object when + any single OSD is lost is the same as dataChunks + so be aware that the larger the number of + data chunks, the higher the cost of recovery. + minimum: 0 + type: integer + required: + - codingChunks + - dataChunks + type: object + failureDomain: + description: 'The failure domain: osd/host/(region + or zone if available) - technically also any type + in the crush map' + type: string + mirroring: + description: The mirroring settings + properties: + enabled: + description: Enabled whether this pool is mirrored + or not + type: boolean + mode: + description: 'Mode is the mirroring mode: either + pool or image' + type: string + peers: + description: Peers represents the peers spec + nullable: true + properties: + secretNames: + description: SecretNames represents the + Kubernetes Secret names to add rbd-mirror + or cephfs-mirror peers + items: + type: string + type: array + type: object + snapshotSchedules: + description: SnapshotSchedules is the scheduling + of snapshot for mirrored images/pools + items: + description: SnapshotScheduleSpec represents + the snapshot scheduling settings of a mirrored + pool + properties: + interval: + description: Interval represent the periodicity + of the snapshot. + type: string + path: + description: Path is the path to snapshot, + only valid for CephFS + type: string + startTime: + description: StartTime indicates when + to start the snapshot + type: string + type: object + type: array + type: object + parameters: + additionalProperties: + type: string + description: Parameters is a list of properties + to enable on a given pool + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + quotas: + description: The quota settings + nullable: true + properties: + maxBytes: + description: MaxBytes represents the quota in + bytes Deprecated in favor of MaxSize + format: int64 + type: integer + maxObjects: + description: MaxObjects represents the quota + in objects + format: int64 + type: integer + maxSize: + description: MaxSize represents the quota in + bytes as a string + pattern: ^[0-9]+[\.]?[0-9]*([KMGTPE]i|[kMGTPE])?$ + type: string + type: object + replicated: + description: The replication settings + properties: + hybridStorage: + description: HybridStorage represents hybrid + storage tier settings + nullable: true + properties: + primaryDeviceClass: + description: PrimaryDeviceClass represents + high performance tier (for example SSD + or NVME) for Primary OSD + minLength: 1 + type: string + secondaryDeviceClass: + description: SecondaryDeviceClass represents + low performance tier (for example HDDs) + for remaining OSDs + minLength: 1 + type: string + required: + - primaryDeviceClass + - secondaryDeviceClass + type: object + replicasPerFailureDomain: + description: ReplicasPerFailureDomain the number + of replica in the specified failure domain + minimum: 1 + type: integer + requireSafeReplicaSize: + description: RequireSafeReplicaSize if false + allows you to set replica 1 + type: boolean + size: + description: Size - Number of copies per object + in a replicated storage pool, including the + object itself (required for replicated pool + type) + minimum: 0 + type: integer + subFailureDomain: + description: SubFailureDomain the name of the + sub-failure domain + type: string + targetSizeRatio: + description: TargetSizeRatio gives a hint (%) + to Ceph in terms of expected consumption of + the total cluster capacity + type: number + required: + - size + type: object + statusCheck: + description: The mirroring statusCheck + properties: + mirror: + description: HealthCheckSpec represents the + health check of an object store bucket + nullable: true + properties: + disabled: + type: boolean + interval: + description: Interval is the internal in + second or minute for the health check + to run like 60s for 60 seconds + type: string + timeout: + type: string + type: object + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + storageClassName: + description: StorageClassName specifies the name of + the additional storage class created for cephfs + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ + type: string + type: object + type: array + dataPoolSpec: + description: DataPoolSpec specifies the pool spec for the + default cephfs data pool + properties: + compressionMode: + description: 'DEPRECATED: use Parameters instead, e.g., + Parameters["compression_mode"] = "force" The inline + compression mode in Bluestore OSD to set to (options + are: none, passive, aggressive, force) Do NOT set a + default value for kubebuilder as this will override + the Parameters' + enum: + - none + - passive + - aggressive + - force + - "" + nullable: true + type: string + crushRoot: + description: The root of the crush hierarchy utilized + by the pool + nullable: true + type: string + deviceClass: + description: The device class the OSD should set to for + use in the pool + nullable: true + type: string + enableRBDStats: + description: EnableRBDStats is used to enable gathering + of statistics for all RBD images in the pool + type: boolean + erasureCoded: + description: The erasure code settings + properties: + algorithm: + description: The algorithm for erasure coding + type: string + codingChunks: + description: Number of coding chunks per object in + an erasure coded storage pool (required for erasure-coded + pool type). This is the number of OSDs that can + be lost simultaneously before data cannot be recovered. + minimum: 0 + type: integer + dataChunks: + description: Number of data chunks per object in an + erasure coded storage pool (required for erasure-coded + pool type). The number of chunks required to recover + an object when any single OSD is lost is the same + as dataChunks so be aware that the larger the number + of data chunks, the higher the cost of recovery. + minimum: 0 + type: integer + required: + - codingChunks + - dataChunks + type: object + failureDomain: + description: 'The failure domain: osd/host/(region or + zone if available) - technically also any type in the + crush map' + type: string + mirroring: + description: The mirroring settings + properties: + enabled: + description: Enabled whether this pool is mirrored + or not + type: boolean + mode: + description: 'Mode is the mirroring mode: either pool + or image' + type: string + peers: + description: Peers represents the peers spec + nullable: true + properties: + secretNames: + description: SecretNames represents the Kubernetes + Secret names to add rbd-mirror or cephfs-mirror + peers + items: + type: string + type: array + type: object + snapshotSchedules: + description: SnapshotSchedules is the scheduling of + snapshot for mirrored images/pools + items: + description: SnapshotScheduleSpec represents the + snapshot scheduling settings of a mirrored pool + properties: + interval: + description: Interval represent the periodicity + of the snapshot. + type: string + path: + description: Path is the path to snapshot, only + valid for CephFS + type: string + startTime: + description: StartTime indicates when to start + the snapshot + type: string + type: object + type: array + type: object + parameters: + additionalProperties: + type: string + description: Parameters is a list of properties to enable + on a given pool + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + quotas: + description: The quota settings + nullable: true + properties: + maxBytes: + description: MaxBytes represents the quota in bytes + Deprecated in favor of MaxSize + format: int64 + type: integer + maxObjects: + description: MaxObjects represents the quota in objects + format: int64 + type: integer + maxSize: + description: MaxSize represents the quota in bytes + as a string + pattern: ^[0-9]+[\.]?[0-9]*([KMGTPE]i|[kMGTPE])?$ + type: string + type: object + replicated: + description: The replication settings + properties: + hybridStorage: + description: HybridStorage represents hybrid storage + tier settings + nullable: true + properties: + primaryDeviceClass: + description: PrimaryDeviceClass represents high + performance tier (for example SSD or NVME) for + Primary OSD + minLength: 1 + type: string + secondaryDeviceClass: + description: SecondaryDeviceClass represents low + performance tier (for example HDDs) for remaining + OSDs + minLength: 1 + type: string + required: + - primaryDeviceClass + - secondaryDeviceClass + type: object + replicasPerFailureDomain: + description: ReplicasPerFailureDomain the number of + replica in the specified failure domain + minimum: 1 + type: integer + requireSafeReplicaSize: + description: RequireSafeReplicaSize if false allows + you to set replica 1 + type: boolean + size: + description: Size - Number of copies per object in + a replicated storage pool, including the object + itself (required for replicated pool type) + minimum: 0 + type: integer + subFailureDomain: + description: SubFailureDomain the name of the sub-failure + domain + type: string + targetSizeRatio: + description: TargetSizeRatio gives a hint (%) to Ceph + in terms of expected consumption of the total cluster + capacity + type: number + required: + - size + type: object + statusCheck: + description: The mirroring statusCheck + properties: + mirror: + description: HealthCheckSpec represents the health + check of an object store bucket + nullable: true + properties: + disabled: + type: boolean + interval: + description: Interval is the internal in second + or minute for the health check to run like 60s + for 60 seconds + type: string + timeout: + type: string + type: object + type: object + x-kubernetes-preserve-unknown-fields: true + type: object disableSnapshotClass: type: boolean disableStorageClass: diff --git a/deploy/csv-templates/ocs-operator.csv.yaml.in b/deploy/csv-templates/ocs-operator.csv.yaml.in index f91fe072d3..5c43b4ce56 100644 --- a/deploy/csv-templates/ocs-operator.csv.yaml.in +++ b/deploy/csv-templates/ocs-operator.csv.yaml.in @@ -197,6 +197,7 @@ spec: - cephblockpools - cephclusters - cephfilesystems + - cephfilesystemsubvolumegroups - cephnfses - cephobjectstores - cephobjectstoreusers diff --git a/deploy/ocs-operator/manifests/ocs-operator.clusterserviceversion.yaml b/deploy/ocs-operator/manifests/ocs-operator.clusterserviceversion.yaml index 924c438840..22939d4744 100644 --- a/deploy/ocs-operator/manifests/ocs-operator.clusterserviceversion.yaml +++ b/deploy/ocs-operator/manifests/ocs-operator.clusterserviceversion.yaml @@ -1962,6 +1962,7 @@ spec: - cephblockpools - cephclusters - cephfilesystems + - cephfilesystemsubvolumegroups - cephnfses - cephobjectstores - cephobjectstoreusers diff --git a/deploy/ocs-operator/manifests/storagecluster.crd.yaml b/deploy/ocs-operator/manifests/storagecluster.crd.yaml index db3d44c436..702e3ec0be 100644 --- a/deploy/ocs-operator/manifests/storagecluster.crd.yaml +++ b/deploy/ocs-operator/manifests/storagecluster.crd.yaml @@ -727,6 +727,440 @@ spec: properties: activeMetadataServers: type: integer + additionalCephFilesystemStorageClasses: + description: AdditionalCephFilesystemStorageClasses specifies + the additional storage classes created for cephfs + items: + properties: + dataPoolSpec: + description: DataPoolSpec specifies the pool spec for + the data pool for the additional cephfs storage class + properties: + compressionMode: + description: 'DEPRECATED: use Parameters instead, + e.g., Parameters["compression_mode"] = "force" + The inline compression mode in Bluestore OSD to + set to (options are: none, passive, aggressive, + force) Do NOT set a default value for kubebuilder + as this will override the Parameters' + enum: + - none + - passive + - aggressive + - force + - "" + nullable: true + type: string + crushRoot: + description: The root of the crush hierarchy utilized + by the pool + nullable: true + type: string + deviceClass: + description: The device class the OSD should set + to for use in the pool + nullable: true + type: string + enableRBDStats: + description: EnableRBDStats is used to enable gathering + of statistics for all RBD images in the pool + type: boolean + erasureCoded: + description: The erasure code settings + properties: + algorithm: + description: The algorithm for erasure coding + type: string + codingChunks: + description: Number of coding chunks per object + in an erasure coded storage pool (required + for erasure-coded pool type). This is the + number of OSDs that can be lost simultaneously + before data cannot be recovered. + minimum: 0 + type: integer + dataChunks: + description: Number of data chunks per object + in an erasure coded storage pool (required + for erasure-coded pool type). The number of + chunks required to recover an object when + any single OSD is lost is the same as dataChunks + so be aware that the larger the number of + data chunks, the higher the cost of recovery. + minimum: 0 + type: integer + required: + - codingChunks + - dataChunks + type: object + failureDomain: + description: 'The failure domain: osd/host/(region + or zone if available) - technically also any type + in the crush map' + type: string + mirroring: + description: The mirroring settings + properties: + enabled: + description: Enabled whether this pool is mirrored + or not + type: boolean + mode: + description: 'Mode is the mirroring mode: either + pool or image' + type: string + peers: + description: Peers represents the peers spec + nullable: true + properties: + secretNames: + description: SecretNames represents the + Kubernetes Secret names to add rbd-mirror + or cephfs-mirror peers + items: + type: string + type: array + type: object + snapshotSchedules: + description: SnapshotSchedules is the scheduling + of snapshot for mirrored images/pools + items: + description: SnapshotScheduleSpec represents + the snapshot scheduling settings of a mirrored + pool + properties: + interval: + description: Interval represent the periodicity + of the snapshot. + type: string + path: + description: Path is the path to snapshot, + only valid for CephFS + type: string + startTime: + description: StartTime indicates when + to start the snapshot + type: string + type: object + type: array + type: object + parameters: + additionalProperties: + type: string + description: Parameters is a list of properties + to enable on a given pool + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + quotas: + description: The quota settings + nullable: true + properties: + maxBytes: + description: MaxBytes represents the quota in + bytes Deprecated in favor of MaxSize + format: int64 + type: integer + maxObjects: + description: MaxObjects represents the quota + in objects + format: int64 + type: integer + maxSize: + description: MaxSize represents the quota in + bytes as a string + pattern: ^[0-9]+[\.]?[0-9]*([KMGTPE]i|[kMGTPE])?$ + type: string + type: object + replicated: + description: The replication settings + properties: + hybridStorage: + description: HybridStorage represents hybrid + storage tier settings + nullable: true + properties: + primaryDeviceClass: + description: PrimaryDeviceClass represents + high performance tier (for example SSD + or NVME) for Primary OSD + minLength: 1 + type: string + secondaryDeviceClass: + description: SecondaryDeviceClass represents + low performance tier (for example HDDs) + for remaining OSDs + minLength: 1 + type: string + required: + - primaryDeviceClass + - secondaryDeviceClass + type: object + replicasPerFailureDomain: + description: ReplicasPerFailureDomain the number + of replica in the specified failure domain + minimum: 1 + type: integer + requireSafeReplicaSize: + description: RequireSafeReplicaSize if false + allows you to set replica 1 + type: boolean + size: + description: Size - Number of copies per object + in a replicated storage pool, including the + object itself (required for replicated pool + type) + minimum: 0 + type: integer + subFailureDomain: + description: SubFailureDomain the name of the + sub-failure domain + type: string + targetSizeRatio: + description: TargetSizeRatio gives a hint (%) + to Ceph in terms of expected consumption of + the total cluster capacity + type: number + required: + - size + type: object + statusCheck: + description: The mirroring statusCheck + properties: + mirror: + description: HealthCheckSpec represents the + health check of an object store bucket + nullable: true + properties: + disabled: + type: boolean + interval: + description: Interval is the internal in + second or minute for the health check + to run like 60s for 60 seconds + type: string + timeout: + type: string + type: object + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + storageClassName: + description: StorageClassName specifies the name of + the additional storage class created for cephfs + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ + type: string + type: object + type: array + dataPoolSpec: + description: DataPoolSpec specifies the pool spec for the + default cephfs data pool + properties: + compressionMode: + description: 'DEPRECATED: use Parameters instead, e.g., + Parameters["compression_mode"] = "force" The inline + compression mode in Bluestore OSD to set to (options + are: none, passive, aggressive, force) Do NOT set a + default value for kubebuilder as this will override + the Parameters' + enum: + - none + - passive + - aggressive + - force + - "" + nullable: true + type: string + crushRoot: + description: The root of the crush hierarchy utilized + by the pool + nullable: true + type: string + deviceClass: + description: The device class the OSD should set to for + use in the pool + nullable: true + type: string + enableRBDStats: + description: EnableRBDStats is used to enable gathering + of statistics for all RBD images in the pool + type: boolean + erasureCoded: + description: The erasure code settings + properties: + algorithm: + description: The algorithm for erasure coding + type: string + codingChunks: + description: Number of coding chunks per object in + an erasure coded storage pool (required for erasure-coded + pool type). This is the number of OSDs that can + be lost simultaneously before data cannot be recovered. + minimum: 0 + type: integer + dataChunks: + description: Number of data chunks per object in an + erasure coded storage pool (required for erasure-coded + pool type). The number of chunks required to recover + an object when any single OSD is lost is the same + as dataChunks so be aware that the larger the number + of data chunks, the higher the cost of recovery. + minimum: 0 + type: integer + required: + - codingChunks + - dataChunks + type: object + failureDomain: + description: 'The failure domain: osd/host/(region or + zone if available) - technically also any type in the + crush map' + type: string + mirroring: + description: The mirroring settings + properties: + enabled: + description: Enabled whether this pool is mirrored + or not + type: boolean + mode: + description: 'Mode is the mirroring mode: either pool + or image' + type: string + peers: + description: Peers represents the peers spec + nullable: true + properties: + secretNames: + description: SecretNames represents the Kubernetes + Secret names to add rbd-mirror or cephfs-mirror + peers + items: + type: string + type: array + type: object + snapshotSchedules: + description: SnapshotSchedules is the scheduling of + snapshot for mirrored images/pools + items: + description: SnapshotScheduleSpec represents the + snapshot scheduling settings of a mirrored pool + properties: + interval: + description: Interval represent the periodicity + of the snapshot. + type: string + path: + description: Path is the path to snapshot, only + valid for CephFS + type: string + startTime: + description: StartTime indicates when to start + the snapshot + type: string + type: object + type: array + type: object + parameters: + additionalProperties: + type: string + description: Parameters is a list of properties to enable + on a given pool + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + quotas: + description: The quota settings + nullable: true + properties: + maxBytes: + description: MaxBytes represents the quota in bytes + Deprecated in favor of MaxSize + format: int64 + type: integer + maxObjects: + description: MaxObjects represents the quota in objects + format: int64 + type: integer + maxSize: + description: MaxSize represents the quota in bytes + as a string + pattern: ^[0-9]+[\.]?[0-9]*([KMGTPE]i|[kMGTPE])?$ + type: string + type: object + replicated: + description: The replication settings + properties: + hybridStorage: + description: HybridStorage represents hybrid storage + tier settings + nullable: true + properties: + primaryDeviceClass: + description: PrimaryDeviceClass represents high + performance tier (for example SSD or NVME) for + Primary OSD + minLength: 1 + type: string + secondaryDeviceClass: + description: SecondaryDeviceClass represents low + performance tier (for example HDDs) for remaining + OSDs + minLength: 1 + type: string + required: + - primaryDeviceClass + - secondaryDeviceClass + type: object + replicasPerFailureDomain: + description: ReplicasPerFailureDomain the number of + replica in the specified failure domain + minimum: 1 + type: integer + requireSafeReplicaSize: + description: RequireSafeReplicaSize if false allows + you to set replica 1 + type: boolean + size: + description: Size - Number of copies per object in + a replicated storage pool, including the object + itself (required for replicated pool type) + minimum: 0 + type: integer + subFailureDomain: + description: SubFailureDomain the name of the sub-failure + domain + type: string + targetSizeRatio: + description: TargetSizeRatio gives a hint (%) to Ceph + in terms of expected consumption of the total cluster + capacity + type: number + required: + - size + type: object + statusCheck: + description: The mirroring statusCheck + properties: + mirror: + description: HealthCheckSpec represents the health + check of an object store bucket + nullable: true + properties: + disabled: + type: boolean + interval: + description: Interval is the internal in second + or minute for the health check to run like 60s + for 60 seconds + type: string + timeout: + type: string + type: object + type: object + x-kubernetes-preserve-unknown-fields: true + type: object disableSnapshotClass: type: boolean disableStorageClass: diff --git a/vendor/github.com/red-hat-storage/ocs-operator/api/v4/v1/storagecluster_types.go b/vendor/github.com/red-hat-storage/ocs-operator/api/v4/v1/storagecluster_types.go index 70e0e1afdb..604736e07d 100644 --- a/vendor/github.com/red-hat-storage/ocs-operator/api/v4/v1/storagecluster_types.go +++ b/vendor/github.com/red-hat-storage/ocs-operator/api/v4/v1/storagecluster_types.go @@ -237,6 +237,19 @@ type ManageCephFilesystems struct { // +kubebuilder:validation:MaxLength=253 // +kubebuilder:validation:Pattern=^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ StorageClassName string `json:"storageClassName,omitempty"` + // DataPoolSpec specifies the pool spec for the default cephfs data pool + DataPoolSpec rookCephv1.PoolSpec `json:"dataPoolSpec,omitempty"` + // AdditionalCephFilesystemStorageClasses specifies the additional storage classes created for cephfs + AdditionalCephFilesystemStorageClasses []AdditionalCephFilesystemStorageClass `json:"additionalCephFilesystemStorageClasses,omitempty"` +} + +type AdditionalCephFilesystemStorageClass struct { + // StorageClassName specifies the name of the additional storage class created for cephfs + // +kubebuilder:validation:MaxLength=253 + // +kubebuilder:validation:Pattern=^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ + StorageClassName string `json:"storageClassName,omitempty"` + // DataPoolSpec specifies the pool spec for the data pool for the additional cephfs storage class + DataPoolSpec rookCephv1.PoolSpec `json:"dataPoolSpec,omitempty"` } // ManageCephObjectStores defines how to reconcile CephObjectStores diff --git a/vendor/github.com/red-hat-storage/ocs-operator/api/v4/v1/zz_generated.deepcopy.go b/vendor/github.com/red-hat-storage/ocs-operator/api/v4/v1/zz_generated.deepcopy.go index 55ef5bc1be..f8bcf2c39d 100644 --- a/vendor/github.com/red-hat-storage/ocs-operator/api/v4/v1/zz_generated.deepcopy.go +++ b/vendor/github.com/red-hat-storage/ocs-operator/api/v4/v1/zz_generated.deepcopy.go @@ -30,6 +30,22 @@ import ( "k8s.io/apimachinery/pkg/runtime" ) +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AdditionalCephFilesystemStorageClass) DeepCopyInto(out *AdditionalCephFilesystemStorageClass) { + *out = *in + in.DataPoolSpec.DeepCopyInto(&out.DataPoolSpec) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AdditionalCephFilesystemStorageClass. +func (in *AdditionalCephFilesystemStorageClass) DeepCopy() *AdditionalCephFilesystemStorageClass { + if in == nil { + return nil + } + out := new(AdditionalCephFilesystemStorageClass) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ArbiterSpec) DeepCopyInto(out *ArbiterSpec) { *out = *in @@ -320,6 +336,14 @@ func (in *ManageCephDashboard) DeepCopy() *ManageCephDashboard { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ManageCephFilesystems) DeepCopyInto(out *ManageCephFilesystems) { *out = *in + in.DataPoolSpec.DeepCopyInto(&out.DataPoolSpec) + if in.AdditionalCephFilesystemStorageClasses != nil { + in, out := &in.AdditionalCephFilesystemStorageClasses, &out.AdditionalCephFilesystemStorageClasses + *out = make([]AdditionalCephFilesystemStorageClass, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ManageCephFilesystems. @@ -422,7 +446,7 @@ func (in *ManagedResourcesSpec) DeepCopyInto(out *ManagedResourcesSpec) { out.CephDashboard = in.CephDashboard out.CephBlockPools = in.CephBlockPools in.CephNonResilientPools.DeepCopyInto(&out.CephNonResilientPools) - out.CephFilesystems = in.CephFilesystems + in.CephFilesystems.DeepCopyInto(&out.CephFilesystems) in.CephObjectStores.DeepCopyInto(&out.CephObjectStores) out.CephObjectStoreUsers = in.CephObjectStoreUsers out.CephToolbox = in.CephToolbox