Merge pull request #17466 from rook/mergify/bp/release-1.19/pr-17453

osd: detect encryption label from dmcrypt path (backport #17453)
This commit is contained in:
subham rai authored and GitHub committed 2026-04-30 17:12:37 +05:30
commit 98ced8e864
3 files changed
+53 -2

No files matched your search

+4 -1
View File
@@ -797,8 +797,11 @@ func (c *Cluster) getOSDInfo(d *appsv1.Deployment) (OSDInfo, error) {
osd.Store = d.Labels[osdStore]
osd.DeviceType = d.Labels[deviceType]
// Detect encryption from the block path as a fallback for deployments that predate the
// "encrypted" label. On upgrade, the label won't exist yet, but the dmcrypt block path
// is always present on encrypted OSDs regardless of the Rook version that created them.
osd.Encrypted = false
if d.Labels[encrypted] == "true" {
if d.Labels[encrypted] == "true" || strings.Contains(osd.BlockPath, "-dmcrypt") {
osd.Encrypted = true
}
+48
View File
@@ -839,6 +839,54 @@ func TestGetOSDInfo(t *testing.T) {
assert.Equal(t, pvcName, updatedOSDInfo.PVCName)
})
t.Run("detect encryption from dmcrypt block path when encrypted label is missing", func(t *testing.T) {
osdInfo := &OSDInfo{
UUID: "osd-uuid",
BlockPath: "/dev/mapper/set1-data-0-abc-block-dmcrypt",
CVMode: "raw",
}
osdProp := osdProperties{
crushHostname: node,
pvc: corev1.PersistentVolumeClaimVolumeSource{ClaimName: "pvc"},
selection: cephv1.Selection{},
resources: corev1.ResourceRequirements{},
storeConfig: config.StoreConfig{},
}
d, err := c.makeDeployment(osdProp, osdInfo, dataPathMap)
assert.NoError(t, err)
// simulate a pre-label upgrade by removing the encrypted label
delete(d.Labels, encrypted)
delete(d.Spec.Template.Labels, encrypted)
updatedOSDInfo, err := c.getOSDInfo(d)
assert.NoError(t, err)
assert.True(t, updatedOSDInfo.Encrypted)
})
t.Run("encrypted label is set from OSDInfo when osdProps does not indicate encryption", func(t *testing.T) {
osdInfo := &OSDInfo{
UUID: "osd-uuid",
BlockPath: "/dev/mapper/set1-data-0-abc-block-dmcrypt",
CVMode: "raw",
Encrypted: true,
}
osdProp := osdProperties{
crushHostname: node,
pvc: corev1.PersistentVolumeClaimVolumeSource{ClaimName: "pvc"},
selection: cephv1.Selection{},
resources: corev1.ResourceRequirements{},
storeConfig: config.StoreConfig{},
encrypted: false,
}
d, err := c.makeDeployment(osdProp, osdInfo, dataPathMap)
assert.NoError(t, err)
assert.Equal(t, "true", d.Labels[encrypted])
assert.Equal(t, "true", d.Spec.Template.Labels[encrypted])
})
t.Run("verify the non-existence of labels if the corresponding fields are not set on OSDInfo and OSDProperties", func(t *testing.T) {
useAllDevices := true
osdInfo := &OSDInfo{
+1 -1
View File
@@ -548,7 +548,7 @@ func (c *Cluster) makeDeployment(osdProps osdProperties, osd *OSDInfo, provision
osdLabels := c.getOSDLabels(*osd, failureDomainValue, osdProps.portable)
// update encryption label on the OSD deployment
if osdProps.storeConfig.EncryptedDevice || osdProps.encrypted {
if osdProps.storeConfig.EncryptedDevice || osdProps.encrypted || osd.Encrypted {
osdLabels[encrypted] = "true"
} else {
osdLabels[encrypted] = "false"