Skip to content

Commit 58f48b5

Browse files
roger-ryaoyangchiu
authored andcommitted
test(robot): add nodePublishSecretRef support for encrypted volume PVs
Add `node_publish_secret_name`/`node_publish_secret_namespace` parameters through the volume_keywords -> Volume -> Base -> PersistentVolume call chain so that PVs created for restored/cloned encrypted volumes set nodePublishSecretRef. Update `test_encrypted_volume.robot` to pass `node_publish_secret_name` for all `Create deployment ... with volume ...` steps that mount restored/cloned encrypted volumes, and remove the v2 data engine skip for backup restore to encrypted volume now that it is supported. longhorn/longhorn#13364 Signed-off-by: Roger Yao <roger.yao@suse.com>
1 parent b7e3927 commit 58f48b5

5 files changed

Lines changed: 23 additions & 15 deletions

File tree

e2e/libs/keywords/volume_keywords.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -417,8 +417,8 @@ def update_volume_spec(self, volume_name, key, value):
417417
def activate_dr_volume(self, volume_name):
418418
self.volume.activate(volume_name)
419419

420-
def create_persistentvolume_for_volume(self, volume_name, retry=True, volumeMode="Filesystem", fsType="ext4", sc_name="longhorn", node_stage_secret_name=None, node_stage_secret_namespace="longhorn-system"):
421-
self.volume.create_persistentvolume(volume_name, retry, volumeMode, fsType, sc_name, node_stage_secret_name, node_stage_secret_namespace)
420+
def create_persistentvolume_for_volume(self, volume_name, retry=True, volumeMode="Filesystem", fsType="ext4", sc_name="longhorn", node_stage_secret_name=None, node_stage_secret_namespace="longhorn-system", node_publish_secret_name=None, node_publish_secret_namespace="longhorn-system"):
421+
self.volume.create_persistentvolume(volume_name, retry, volumeMode, fsType, sc_name, node_stage_secret_name, node_stage_secret_namespace, node_publish_secret_name, node_publish_secret_namespace)
422422

423423
def create_persistentvolumeclaim_for_volume(self, volume_name, volumeMode="Filesystem", retry=True, sc_name="longhorn"):
424424
self.volume.create_persistentvolumeclaim(volume_name, volumeMode, retry, sc_name=sc_name)

e2e/libs/persistentvolume/persistentvolume.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ def __init__(self):
1616
self.api = client.CoreV1Api()
1717
self.retry_count, self.retry_interval = get_retry_count_and_interval()
1818

19-
def create(self, name, storage, volumeMode="Filesystem", fsType="ext4", sc_name="longhorn", node_stage_secret_name=None, node_stage_secret_namespace='longhorn-system'):
19+
def create(self, name, storage, volumeMode="Filesystem", fsType="ext4", sc_name="longhorn", node_stage_secret_name=None, node_stage_secret_namespace='longhorn-system', node_publish_secret_name=None, node_publish_secret_namespace='longhorn-system'):
2020
filepath = "./templates/workload/pv.yaml"
2121
with open(filepath, 'r') as f:
2222
manifest_dict = yaml.safe_load(f)
@@ -35,6 +35,12 @@ def create(self, name, storage, volumeMode="Filesystem", fsType="ext4", sc_name=
3535
'namespace': node_stage_secret_namespace,
3636
}
3737

38+
if node_publish_secret_name:
39+
manifest_dict['spec']['csi']['nodePublishSecretRef'] = {
40+
'name': node_publish_secret_name,
41+
'namespace': node_publish_secret_namespace,
42+
}
43+
3844
logging(f"yaml = {manifest_dict}")
3945

4046
self.api.create_persistent_volume(body=manifest_dict)

e2e/libs/volume/base.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,13 +176,13 @@ def get_checksum(self, volume_name):
176176
def activate(self, volume_name):
177177
return NotImplemented
178178

179-
def create_persistentvolume(self, volume_name, retry, volumeMode, fsType, sc_name="longhorn", node_stage_secret_name=None, node_stage_secret_namespace="longhorn-system"):
179+
def create_persistentvolume(self, volume_name, retry, volumeMode, fsType, sc_name="longhorn", node_stage_secret_name=None, node_stage_secret_namespace="longhorn-system", node_publish_secret_name=None, node_publish_secret_namespace="longhorn-system"):
180180
logging(f'Creating PV {volume_name} for volume {volume_name}')
181181
volume = self.get(volume_name)
182182
volume_size = self._get_volume_size(volume)
183183
assert volume_size is not None, f"Cannot determine size for volume {volume_name}"
184184
storage = str(convert_size_to_bytes(str(volume_size)))
185-
self.pv.create(volume_name, storage, volumeMode, fsType, sc_name=sc_name, node_stage_secret_name=node_stage_secret_name, node_stage_secret_namespace=node_stage_secret_namespace)
185+
self.pv.create(volume_name, storage, volumeMode, fsType, sc_name=sc_name, node_stage_secret_name=node_stage_secret_name, node_stage_secret_namespace=node_stage_secret_namespace, node_publish_secret_name=node_publish_secret_name, node_publish_secret_namespace=node_publish_secret_namespace)
186186

187187
if not retry:
188188
return

e2e/libs/volume/volume.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -189,8 +189,8 @@ def update_volume_spec(self, volume_name, key, value):
189189
def activate(self, volume_name):
190190
return self.volume.activate(volume_name)
191191

192-
def create_persistentvolume(self, volume_name, retry, volumeMode, fsType, sc_name="longhorn", node_stage_secret_name=None, node_stage_secret_namespace="longhorn-system"):
193-
return self.volume.create_persistentvolume(volume_name, retry, volumeMode, fsType, sc_name=sc_name, node_stage_secret_name=node_stage_secret_name, node_stage_secret_namespace=node_stage_secret_namespace)
192+
def create_persistentvolume(self, volume_name, retry, volumeMode, fsType, sc_name="longhorn", node_stage_secret_name=None, node_stage_secret_namespace="longhorn-system", node_publish_secret_name=None, node_publish_secret_namespace="longhorn-system"):
193+
return self.volume.create_persistentvolume(volume_name, retry, volumeMode, fsType, sc_name=sc_name, node_stage_secret_name=node_stage_secret_name, node_stage_secret_namespace=node_stage_secret_namespace, node_publish_secret_name=node_publish_secret_name, node_publish_secret_namespace=node_publish_secret_namespace)
194194

195195
def create_persistentvolumeclaim(self, volume_name, volumeMode, retry, sc_name="longhorn"):
196196
return self.volume.create_persistentvolumeclaim(volume_name, volumeMode, retry, sc_name=sc_name)

e2e/tests/regression/test_encrypted_volume.robot

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,8 @@ Test Encrypted Volume Snapshot Clone
165165
And Wait for volume 1 detached
166166

167167
# Attach cloned volume to new deployment with crypto SC (to trigger luksOpen)
168-
And Create deployment 1 with volume 1 sc_name=longhorn-crypto node_stage_secret_name=longhorn-crypto
168+
And Create deployment 1 with volume 1 sc_name=longhorn-crypto node_stage_secret_name=longhorn-crypto node_publish_secret_name=longhorn-crypto
169+
169170
And Wait for volume of deployment 1 healthy
170171

171172
# Verify cloned volume size and data integrity
@@ -309,9 +310,6 @@ Test Encrypted Volume Backup Restore To Encrypted Volume
309310
... - Restored volumes' replica backend file is exactly 100 Mi + 16 Mi.
310311
... - The 10 Mi payload checksum matches the original.
311312
... - Issue: https://github.com/longhorn/longhorn/issues/9205
312-
IF '${DATA_ENGINE}' == 'v2'
313-
Skip v2 data engine does not support encrypted volume restore with encrypted=True (https://github.com/longhorn/longhorn/issues/13163)
314-
END
315313
Given Create crypto secret
316314
And Create storageclass longhorn-crypto with encrypted=true dataEngine=${DATA_ENGINE}
317315
When Create persistentvolumeclaim 0 volume_type=RWO sc_name=longhorn-crypto storage_size=100Mi
@@ -339,8 +337,10 @@ Test Encrypted Volume Backup Restore To Encrypted Volume
339337
And Wait for volume 3 detached
340338
# Mount the restored volumes via deployments so that CSI opens the LUKS container.
341339
# Must use longhorn-crypto SC (with node-stage-secret-ref) so luksOpen is triggered.
342-
And Create deployment 2 with volume 2 sc_name=longhorn-crypto node_stage_secret_name=longhorn-crypto
343-
And Create deployment 3 with volume 3 sc_name=longhorn-crypto node_stage_secret_name=longhorn-crypto
340+
And Create deployment 2 with volume 2 sc_name=longhorn-crypto node_stage_secret_name=longhorn-crypto node_publish_secret_name=longhorn-crypto
341+
342+
And Create deployment 3 with volume 3 sc_name=longhorn-crypto node_stage_secret_name=longhorn-crypto node_publish_secret_name=longhorn-crypto
343+
344344
And Wait for volume of deployment 2 healthy
345345
And Wait for volume of deployment 3 healthy
346346
Then Assert disk size in instance manager pod for deployment 2 is 100Mi
@@ -791,7 +791,8 @@ Test Encrypted Volume Upgrade
791791
# Deployment 7: Restore from Backup 0 (RWO Filesystem)
792792
When Create volume 7 from backup 0 of deployment 0 volume size=100Mi encrypted=True dataEngine=${DATA_ENGINE}
793793
Then Wait for volume 7 detached
794-
And Create deployment 7 with volume 7 sc_name=longhorn-crypto-stable node_stage_secret_name=longhorn-crypto
794+
And Create deployment 7 with volume 7 sc_name=longhorn-crypto-stable node_stage_secret_name=longhorn-crypto node_publish_secret_name=longhorn-crypto
795+
795796
And Wait for volume of deployment 7 healthy
796797
Then Assert disk size in instance manager pod for deployment 7 is 100Mi
797798
And Assert replica file size of deployment 7 is 116Mi
@@ -800,7 +801,8 @@ Test Encrypted Volume Upgrade
800801
# Deployment 8: Restore from Backup 1 (RWX Filesystem)
801802
When Create volume 8 from backup 1 of deployment 1 volume size=100Mi encrypted=True dataEngine=${DATA_ENGINE}
802803
Then Wait for volume 8 detached
803-
And Create deployment 8 with volume 8 sc_name=longhorn-crypto-stable node_stage_secret_name=longhorn-crypto
804+
And Create deployment 8 with volume 8 sc_name=longhorn-crypto-stable node_stage_secret_name=longhorn-crypto node_publish_secret_name=longhorn-crypto
805+
804806
And Wait for volume of deployment 8 healthy
805807
Then Assert disk size in instance manager pod for deployment 8 is 100Mi
806808
And Assert replica file size of deployment 8 is 116Mi

0 commit comments

Comments
 (0)