From 645097719933de78119857073f7a75e147e19e66 Mon Sep 17 00:00:00 2001 From: Gregory Giguashvili Date: Sun, 9 Aug 2026 09:26:46 +0300 Subject: [PATCH 1/3] update last_rebase_lvms.sh --- scripts/auto-rebase/last_rebase_lvms.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/auto-rebase/last_rebase_lvms.sh b/scripts/auto-rebase/last_rebase_lvms.sh index 8c35468714..f8a8cc26ed 100755 --- a/scripts/auto-rebase/last_rebase_lvms.sh +++ b/scripts/auto-rebase/last_rebase_lvms.sh @@ -1,2 +1,2 @@ #!/bin/bash -x -./scripts/auto-rebase/rebase_lvms.sh to "registry.redhat.io/lvms4/lvms-operator-bundle:v4.21.0" +./scripts/auto-rebase/rebase_lvms.sh to "registry.redhat.io/lvms4/lvms-operator-bundle:v4.22.0" From 73ad99cf413017ef1058cd4a23af33a057eedcda Mon Sep 17 00:00:00 2001 From: Gregory Giguashvili Date: Sun, 9 Aug 2026 09:26:52 +0300 Subject: [PATCH 2/3] update LVMS manifests --- .../lvms/lvm.topolvm.io_lvmclusters.yaml | 97 ++++++++++++++++--- ...topolvm.io_lvmvolumegroupnodestatuses.yaml | 14 +-- .../lvms/lvm.topolvm.io_lvmvolumegroups.yaml | 23 ++++- ...c.authorization.k8s.io_v1_clusterrole.yaml | 26 +++-- .../lvms/topolvm-configmap_lvms-version.yaml | 2 +- ...c.authorization.k8s.io_v1_clusterrole.yaml | 8 ++ ...ger_rbac.authorization.k8s.io_v1_role.yaml | 8 ++ assets/release/release-aarch64.json | 2 +- assets/release/release-x86_64.json | 2 +- 9 files changed, 148 insertions(+), 34 deletions(-) diff --git a/assets/components/lvms/lvm.topolvm.io_lvmclusters.yaml b/assets/components/lvms/lvm.topolvm.io_lvmclusters.yaml index e38c367d4a..aa614e0513 100644 --- a/assets/components/lvms/lvm.topolvm.io_lvmclusters.yaml +++ b/assets/components/lvms/lvm.topolvm.io_lvmclusters.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.17.3 + controller-gen.kubebuilder.io/version: v0.20.1 creationTimestamp: null name: lvmclusters.lvm.topolvm.io spec: @@ -58,6 +58,16 @@ spec: class is the default. You can configure only a single default device class. type: boolean + deviceDiscoveryPolicy: + description: |- + DeviceDiscoveryPolicy specifies the policy for discovering devices for this device class. + Static means the volume group is created with devices found at install time; new devices are ignored. + Dynamic means devices are continuously discovered and added to the volume group. + When not set, new volume groups default to Static and existing volume groups default to Dynamic for backward compatibility. + enum: + - Static + - Dynamic + type: string deviceSelector: description: DeviceSelector contains the configuration to specify paths to the devices that you want to add to the @@ -70,13 +80,19 @@ spec: Force wipe the devices only when you know that they do not contain any important data. type: boolean optionalPaths: - description: OptionalPaths specify the optional device - paths. + description: |- + OptionalPaths is a list of device paths. At least one path must resolve on each node. + Prefer stable, consistent paths such as /dev/disk/by-id/… instead of + /dev/sda, which may be renamed or reordered by the kernel on reboot. + This can be used to provide a single list of disk IDs across multiple nodes. items: type: string type: array paths: - description: Paths specify the device paths. + description: |- + Paths is a list of device paths. All paths must resolve on each node. + Prefer stable, consistent paths such as /dev/disk/by-id/… instead of + /dev/sda, which may be renamed or reordered by the kernel on reboot. items: type: string type: array @@ -90,8 +106,10 @@ spec: enum: - xfs - ext4 - - "" type: string + x-kubernetes-validations: + - message: fstype is immutable + rule: oldSelf == self name: description: Name specifies a name for the device class maxLength: 245 @@ -189,6 +207,55 @@ spec: - nodeSelectorTerms type: object x-kubernetes-map-type: atomic + storageClassOptions: + description: StorageClassOptions allows customization of + the StorageClass created for this device class. + properties: + additionalLabels: + additionalProperties: + type: string + description: |- + AdditionalLabels sets additional labels on the StorageClass. + This is the only StorageClassOptions field that can be changed after creation. + maxProperties: 16 + type: object + additionalParameters: + additionalProperties: + type: string + default: {} + description: |- + AdditionalParameters sets additional parameters on the StorageClass. + LVMS-owned keys (topolvm.io/device-class, csi.storage.k8s.io/fstype) cannot be overridden. + This field is immutable after creation. + maxProperties: 16 + type: object + x-kubernetes-validations: + - message: additionalParameters is immutable once set + rule: oldSelf == self + reclaimPolicy: + default: Delete + description: |- + ReclaimPolicy sets the reclaim policy for PVs provisioned by this device class. + When set to Retain, PVs and their underlying logical volumes are preserved when PVCs are deleted. + enum: + - Delete + - Retain + type: string + x-kubernetes-validations: + - message: reclaimPolicy is immutable once set + rule: oldSelf == self + volumeBindingMode: + default: WaitForFirstConsumer + description: VolumeBindingMode sets the binding mode + for PVs provisioned by this device class. + enum: + - WaitForFirstConsumer + - Immediate + type: string + x-kubernetes-validations: + - message: volumeBindingMode is immutable once set + rule: oldSelf == self + type: object thinPoolConfig: description: ThinPoolConfig contains the configuration to create a thin pool in the LVM volume group. If you exclude @@ -260,8 +327,13 @@ spec: - name - overprovisionRatio type: object + required: + - name type: object type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map type: object tolerations: description: Tolerations to apply to nodes to act on @@ -283,9 +355,10 @@ spec: operator: description: |- Operator represents a key's relationship to the value. - Valid operators are Exists and Equal. Defaults to Equal. + Valid operators are Exists, Equal, Lt, and Gt. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category. + Lt and Gt perform numeric comparisons (requires feature gate TaintTolerationComparisonOperators). type: string tolerationSeconds: description: |- @@ -380,16 +453,16 @@ spec: deviceclass on the node properties: deviceDiscoveryPolicy: - default: RuntimeDynamic + default: RuntimeStatic description: |- - DeviceDiscoveryPolicy is a field to indicate whether the devices are discovered - at runtime or preconfigured through a DeviceSelector - Setting this to DeviceDiscoveryPolicyPreconfigured indicates the devices are preconfigured through a DeviceSelector. - Setting this to DeviceDiscoveryPolicyRuntimeDynamic indicates the devices are added to the VG dynamically if they are present at runtime. - By default, the value is set to RuntimeDynamic. + DeviceDiscoveryPolicy is a field to indicate the effective device discovery policy for this volume group. + Preconfigured indicates explicit DeviceSelector paths are configured and the discovery policy is not applicable. + RuntimeDynamic indicates devices are discovered and added dynamically at runtime (no explicit paths, Dynamic policy). + RuntimeStatic indicates devices were discovered at install time and new devices are ignored (no explicit paths, Static policy). enum: - Preconfigured - RuntimeDynamic + - RuntimeStatic type: string devices: description: Devices is the list of devices used by the diff --git a/assets/components/lvms/lvm.topolvm.io_lvmvolumegroupnodestatuses.yaml b/assets/components/lvms/lvm.topolvm.io_lvmvolumegroupnodestatuses.yaml index a5ca0ada53..5bb8d775e7 100644 --- a/assets/components/lvms/lvm.topolvm.io_lvmvolumegroupnodestatuses.yaml +++ b/assets/components/lvms/lvm.topolvm.io_lvmvolumegroupnodestatuses.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.17.3 + controller-gen.kubebuilder.io/version: v0.20.1 creationTimestamp: null name: lvmvolumegroupnodestatuses.lvm.topolvm.io spec: @@ -46,16 +46,16 @@ spec: items: properties: deviceDiscoveryPolicy: - default: RuntimeDynamic + default: RuntimeStatic description: |- - DeviceDiscoveryPolicy is a field to indicate whether the devices are discovered - at runtime or preconfigured through a DeviceSelector - Setting this to DeviceDiscoveryPolicyPreconfigured indicates the devices are preconfigured through a DeviceSelector. - Setting this to DeviceDiscoveryPolicyRuntimeDynamic indicates the devices are added to the VG dynamically if they are present at runtime. - By default, the value is set to RuntimeDynamic. + DeviceDiscoveryPolicy is a field to indicate the effective device discovery policy for this volume group. + Preconfigured indicates explicit DeviceSelector paths are configured and the discovery policy is not applicable. + RuntimeDynamic indicates devices are discovered and added dynamically at runtime (no explicit paths, Dynamic policy). + RuntimeStatic indicates devices were discovered at install time and new devices are ignored (no explicit paths, Static policy). enum: - Preconfigured - RuntimeDynamic + - RuntimeStatic type: string devices: description: Devices is the list of devices used by the volume diff --git a/assets/components/lvms/lvm.topolvm.io_lvmvolumegroups.yaml b/assets/components/lvms/lvm.topolvm.io_lvmvolumegroups.yaml index 67bfe40d4f..4357801580 100644 --- a/assets/components/lvms/lvm.topolvm.io_lvmvolumegroups.yaml +++ b/assets/components/lvms/lvm.topolvm.io_lvmvolumegroups.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.17.3 + controller-gen.kubebuilder.io/version: v0.20.1 creationTimestamp: null name: lvmvolumegroups.lvm.topolvm.io spec: @@ -43,6 +43,16 @@ spec: description: Default is a flag to indicate whether the device-class is the default type: boolean + deviceDiscoveryPolicy: + description: |- + DeviceDiscoveryPolicy specifies the policy for discovering devices for this volume group. + Static means the volume group is created with devices found at install time; new devices are ignored. + Dynamic means devices are continuously discovered and added to the volume group. + When not set, new volume groups default to Static and existing volume groups default to Dynamic for backward compatibility. + enum: + - Static + - Dynamic + type: string deviceSelector: description: DeviceSelector is a set of rules that should match for a device to be included in this TopoLVMCluster @@ -54,12 +64,19 @@ spec: Force wipe the devices only when you know that they do not contain any important data. type: boolean optionalPaths: - description: OptionalPaths specify the optional device paths. + description: |- + OptionalPaths is a list of device paths. At least one path must resolve on each node. + Prefer stable, consistent paths such as /dev/disk/by-id/… instead of + /dev/sda, which may be renamed or reordered by the kernel on reboot. + This can be used to provide a single list of disk IDs across multiple nodes. items: type: string type: array paths: - description: Paths specify the device paths. + description: |- + Paths is a list of device paths. All paths must resolve on each node. + Prefer stable, consistent paths such as /dev/disk/by-id/… instead of + /dev/sda, which may be renamed or reordered by the kernel on reboot. items: type: string type: array diff --git a/assets/components/lvms/lvms-operator_rbac.authorization.k8s.io_v1_clusterrole.yaml b/assets/components/lvms/lvms-operator_rbac.authorization.k8s.io_v1_clusterrole.yaml index cb741923e7..13ae97bd03 100644 --- a/assets/components/lvms/lvms-operator_rbac.authorization.k8s.io_v1_clusterrole.yaml +++ b/assets/components/lvms/lvms-operator_rbac.authorization.k8s.io_v1_clusterrole.yaml @@ -44,6 +44,7 @@ rules: - "" resources: - persistentvolumeclaims + - pods verbs: - delete - get @@ -56,15 +57,6 @@ rules: - persistentvolumeclaims/status verbs: - patch - - apiGroups: - - "" - resources: - - pods - verbs: - - delete - - get - - list - - watch - apiGroups: - apiextensions.k8s.io resources: @@ -92,6 +84,14 @@ rules: - replicasets verbs: - get + - apiGroups: + - config.openshift.io + resources: + - apiservers + verbs: + - get + - list + - watch - apiGroups: - config.openshift.io resources: @@ -110,6 +110,14 @@ rules: - patch - update - watch + - apiGroups: + - events.k8s.io + resources: + - events + verbs: + - create + - patch + - update - apiGroups: - lvm.topolvm.io resources: diff --git a/assets/components/lvms/topolvm-configmap_lvms-version.yaml b/assets/components/lvms/topolvm-configmap_lvms-version.yaml index a7d57a90c2..8a666b80d8 100644 --- a/assets/components/lvms/topolvm-configmap_lvms-version.yaml +++ b/assets/components/lvms/topolvm-configmap_lvms-version.yaml @@ -4,4 +4,4 @@ metadata: name: lvms-version namespace: kube-public data: - version: v4.21.0 + version: v4.22.0 diff --git a/assets/components/lvms/vg-manager_rbac.authorization.k8s.io_v1_clusterrole.yaml b/assets/components/lvms/vg-manager_rbac.authorization.k8s.io_v1_clusterrole.yaml index 5ab6831e8c..99c7e52afa 100644 --- a/assets/components/lvms/vg-manager_rbac.authorization.k8s.io_v1_clusterrole.yaml +++ b/assets/components/lvms/vg-manager_rbac.authorization.k8s.io_v1_clusterrole.yaml @@ -42,6 +42,14 @@ rules: - get - list - watch + - apiGroups: + - config.openshift.io + resources: + - apiservers + verbs: + - get + - list + - watch apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: diff --git a/assets/components/lvms/vg-manager_rbac.authorization.k8s.io_v1_role.yaml b/assets/components/lvms/vg-manager_rbac.authorization.k8s.io_v1_role.yaml index 2b8abe8129..24e1a44d1f 100644 --- a/assets/components/lvms/vg-manager_rbac.authorization.k8s.io_v1_role.yaml +++ b/assets/components/lvms/vg-manager_rbac.authorization.k8s.io_v1_role.yaml @@ -61,6 +61,14 @@ rules: - create - patch - update + - apiGroups: + - events.k8s.io + resources: + - events + verbs: + - create + - patch + - update apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: diff --git a/assets/release/release-aarch64.json b/assets/release/release-aarch64.json index a31c08b999..59ccb46649 100644 --- a/assets/release/release-aarch64.json +++ b/assets/release/release-aarch64.json @@ -10,7 +10,7 @@ "ovn-kubernetes-microshift": "quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:00d6b32bec2fcf6bed1bc93639e459d36875ba753c467a6c60823c04fbc47137", "pod": "quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:02605b9435f6523d7efeac115df1f3746de887b932aa94e1cc4116bfe14df873", "service-ca-operator": "quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:5eedca02a6160855583c1b54a9d90c18a5710dad6a79fc112a60d25071d6a224", - "lvms_operator": "registry.redhat.io/lvms4/lvms-rhel9-operator@sha256:e77365e44676fbd8ab9e4ce53f3a406856bbdfef3467c545a7df1197d84477af", + "lvms_operator": "registry.redhat.io/lvms4/lvms-rhel9-operator@sha256:f9de07f9078f5c03a9be4b1ab565b2720524f290042feed56c3ff4c4a29efcc7", "csi-snapshot-controller": "quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:32301600bf3465a450379d4455c94698de21aeeb533273f91eb5f663bae1843e" } } diff --git a/assets/release/release-x86_64.json b/assets/release/release-x86_64.json index f8b779d346..ac33de0250 100644 --- a/assets/release/release-x86_64.json +++ b/assets/release/release-x86_64.json @@ -10,7 +10,7 @@ "ovn-kubernetes-microshift": "quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:09d9f01b1211ef44847c2d996cf8b69ec1884346cb98dce185ffa917a5359ec5", "pod": "quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:7618427c7b4903b78e9525313904f27b1ed87a3932f0fd6f394bd94043f27e3e", "service-ca-operator": "quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:4af541b1f5223a9179408829305f509fa9303af30d9cab5b2137b61068770172", - "lvms_operator": "registry.redhat.io/lvms4/lvms-rhel9-operator@sha256:10c9ccab4f2857d113b55e12cac29aed0dc97d5a4e29ed2e4ea0f77551ee55f8", + "lvms_operator": "registry.redhat.io/lvms4/lvms-rhel9-operator@sha256:0b1daf82a941c7483b5f7e0ae4f5b0ffb21f6c9634be5493be20bc13184930ca", "csi-snapshot-controller": "quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:9aa1ebcace1712d4e0f325d50150b4baf032c0df3110b9124dfe4fc10b77f106" } } From 0097e0c3441f68e680798a86577c19b2cd99832e Mon Sep 17 00:00:00 2001 From: Gregory Giguashvili Date: Sun, 9 Aug 2026 09:27:29 +0300 Subject: [PATCH 3/3] Update LVMS rebase base version to 4.22 --- scripts/auto-rebase/rebase_job_entrypoint.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/auto-rebase/rebase_job_entrypoint.sh b/scripts/auto-rebase/rebase_job_entrypoint.sh index eba0e50f00..c30adbf2ac 100755 --- a/scripts/auto-rebase/rebase_job_entrypoint.sh +++ b/scripts/auto-rebase/rebase_job_entrypoint.sh @@ -91,7 +91,7 @@ OPM_RELEASE=${opm_release} \ # LVMS is not tracked in the OCP release image. Instead, rely on the # latest z-stream for a given X.Y version. Only the X.Y needs manual # updating between releases. -./scripts/auto-rebase/rebase_lvms.sh latest "registry.redhat.io/lvms4/lvms-operator-bundle" "4.21" +./scripts/auto-rebase/rebase_lvms.sh latest "registry.redhat.io/lvms4/lvms-operator-bundle" "4.22" if [[ "${JOB_TYPE}" == "presubmit" ]]; then # Verify the assets after the rebase to make sure