github.com/kata-containers/tests@v0.0.0-20240307153542-772105b56064/integration/kubernetes/k8s-block-volume.bats (about) 1 #!/usr/bin/env bats 2 # 3 # Copyright (c) 2019 Intel Corporation 4 # 5 # SPDX-License-Identifier: Apache-2.0 6 # 7 8 load "${BATS_TEST_DIRNAME}/../../.ci/lib.sh" 9 load "${BATS_TEST_DIRNAME}/tests_common.sh" 10 11 setup() { 12 get_pod_config_dir 13 14 pod_name="pod-block-pv" 15 volume_name="block-loop-pv" 16 volume_claim="block-loop-pvc" 17 ctr_dev_path="/dev/xda" 18 vol_capacity="500M" 19 20 # Create Loop Device 21 tmp_disk_image=$(mktemp --tmpdir disk.XXXXXX.img) 22 truncate "$tmp_disk_image" --size "$vol_capacity" 23 loop_dev=$(sudo losetup -f) 24 sudo losetup "$loop_dev" "$tmp_disk_image" 25 } 26 27 @test "Block Storage Support" { 28 # Create Storage Class 29 kubectl create -f volume/local-storage.yaml 30 31 # Create Persistent Volume 32 tmp_pv_yaml=$(mktemp --tmpdir block_persistent_vol.XXXXX.yaml) 33 sed -e "s|LOOP_DEVICE|${loop_dev}|" volume/block-loop-pv.yaml > "$tmp_pv_yaml" 34 sed -i "s|HOSTNAME|$(hostname | awk '{print tolower($0)}')|" "$tmp_pv_yaml" 35 sed -i "s|CAPACITY|${vol_capacity}|" "$tmp_pv_yaml" 36 kubectl create -f "$tmp_pv_yaml" 37 cmd="kubectl get pv/${volume_name} | grep Available" 38 waitForProcess "$wait_time" "$sleep_time" "$cmd" 39 40 # Create Persistent Volume Claim 41 tmp_pvc_yaml=$(mktemp --tmpdir block_persistent_vol.XXXXX.yaml) 42 sed -e "s|CAPACITY|${vol_capacity}|" volume/block-loop-pvc.yaml > "$tmp_pvc_yaml" 43 kubectl create -f "$tmp_pvc_yaml" 44 45 # Create Workload using Volume 46 tmp_pod_yaml=$(mktemp --tmpdir pod-pv.XXXXX.yaml) 47 sed -e "s|DEVICE_PATH|${ctr_dev_path}|" "${pod_config_dir}/${pod_name}.yaml" > "$tmp_pod_yaml" 48 kubectl create -f "$tmp_pod_yaml" 49 kubectl wait --for condition=ready --timeout=$timeout "pod/${pod_name}" 50 51 # Verify persistent volume claim is bound 52 kubectl get "pvc/${volume_claim}" | grep "Bound" 53 54 # make fs, mount device and write on it 55 kubectl exec "$pod_name" -- sh -c "mkfs.ext4 $ctr_dev_path" 56 ctr_mount_path="/mnt" 57 ctr_message="Hello World" 58 ctr_file="${ctr_mount_path}/file.txt" 59 kubectl exec "$pod_name" -- sh -c "mount $ctr_dev_path $ctr_mount_path" 60 kubectl exec "$pod_name" -- sh -c "echo $ctr_message > $ctr_file" 61 kubectl exec "$pod_name" -- sh -c "grep '$ctr_message' $ctr_file" 62 } 63 64 teardown() { 65 # Debugging information 66 kubectl describe "pod/$pod_name" 67 68 # Delete k8s resources 69 kubectl delete pod "$pod_name" 70 kubectl delete pvc "$volume_claim" 71 kubectl delete pv "$volume_name" 72 kubectl delete storageclass local-storage 73 74 # Delete temporary yaml files 75 rm -f "$tmp_pv_yaml" 76 rm -f "$tmp_pvc_yaml" 77 rm -f "$tmp_pod_yaml" 78 79 # Remove image and loop device 80 sudo losetup -d "$loop_dev" 81 rm -f "$tmp_disk_image" 82 }