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:
3 files changed
+53
-2
No files matched your search
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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{
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in new issue
Block a user