github.com/kata-containers/tests@v0.0.0-20240307153542-772105b56064/integration/pmem/pmem_test.sh (about) 1 #!/bin/bash 2 # 3 # Copyright (c) 2021 Intel Corporation 4 # 5 # SPDX-License-Identifier: Apache-2.0 6 # 7 8 set -o errexit 9 set -o nounset 10 set -o pipefail 11 set -o errtrace 12 13 dir_path=$(dirname "$0") 14 source "${dir_path}/../../lib/common.bash" 15 source "${dir_path}/../../.ci/lib.sh" 16 source /etc/os-release || source /usr/lib/os-release 17 TEST_INITRD="${TEST_INITRD:-no}" 18 experimental_qemu="${experimental_qemu:-false}" 19 arch=$("${dir_path}"/../../.ci/kata-arch.sh -d) 20 CI_JOB="${CI_JOB:-}" 21 22 if [ "$TEST_INITRD" == "yes" ]; then 23 echo "Skip pmem test: nvdimm is disabled when initrd is used as rootfs" 24 exit 0 25 fi 26 27 if [ "$experimental_qemu" == "true" ]; then 28 echo "Skip pmem test: experimental qemu doesn't have libpmem support" 29 exit 0 30 fi 31 32 if [ "$arch" == "aarch64" ]; then 33 echo "Skip pmem test: $arch can't ensure data persistence for the lack of libpmem support" 34 exit 0 35 fi 36 37 if [ "${ID}" != "ubuntu" ]; then 38 echo "Skip pmem test: ${ID} distro is not supported" 39 exit 0 40 fi 41 42 init() { 43 ${dir_path}/../../integration/kubernetes/init.sh 44 } 45 46 cleanup() { 47 set +e 48 if [[ $CI_JOB == "PMEM_BAREMETAL" ]]; then 49 kubectl describe pod/my-csi-kata-app 50 kubectl get pod --all-namespaces 51 52 pushd pmem-csi 53 kubectl delete -f "deploy/common/pmem-kata-app.yaml" 54 kubectl delete -f "deploy/common/pmem-kata-pvc.yaml" 55 kubectl delete -f "deploy/common/pmem-storageclass-ext4-kata.yaml" 56 kubectl delete PmemCSIDeployment/pmem-csi.intel.com 57 kubectl delete -f "deploy/crd/pmem-csi.intel.com_pmemcsideployments.yaml" 58 kubectl delete -f "deploy/operator/pmem-csi-operator.yaml" 59 popd 60 fi 61 62 rm -rf pmem-csi 63 ${dir_path}/../../integration/kubernetes/cleanup_env.sh 64 } 65 66 run_test() { 67 pushd pmem-csi 68 69 oper_yml="deploy/operator/pmem-csi-operator.yaml" 70 sed -i -e 's|image:.*|image: localhost:5000/pmem-csi-driver:canary|g' \ 71 -e 's|imagePullPolicy:.*|imagePullPolicy: Always|g' \ 72 ${oper_yml} 73 kubectl apply -f "${oper_yml}" 74 75 kubectl apply -f deploy/crd/pmem-csi.intel.com_pmemcsideployments.yaml 76 77 kubectl create -f - <<EOF 78 apiVersion: pmem-csi.intel.com/v1beta1 79 kind: PmemCSIDeployment 80 metadata: 81 name: pmem-csi.intel.com 82 spec: 83 deviceMode: direct 84 nodeSelector: 85 storage: pmem 86 EOF 87 88 stclass_yml="deploy/common/pmem-storageclass-ext4-kata.yaml" 89 kubectl apply -f "${stclass_yml}" 90 91 pvc_yml="deploy/common/pmem-kata-pvc.yaml" 92 kubectl apply -f "${pvc_yml}" 93 94 app_yml="deploy/common/pmem-kata-app.yaml" 95 sed -i -e 's|io.katacontainers.config.hypervisor.memory_offset:.*|io.katacontainers.config.hypervisor.memory_offset: "4294967296"|g' \ 96 -e 's|runtimeClassName:.*|runtimeClassName: kata|g' \ 97 "${app_yml}" 98 kubectl apply -f "${app_yml}" 99 100 kubectl wait --for=condition=Ready --timeout=120s pod/my-csi-kata-app 101 sleep 5 102 103 popd 104 105 kubectl exec pod/my-csi-kata-app -- df /data | grep pmem 106 kubectl exec pod/my-csi-kata-app -- mount | grep pmem | grep data | grep dax 107 } 108 109 setup_pmem_csi() { 110 git clone https://github.com/intel/pmem-csi/ 111 pushd pmem-csi 112 113 make build-images 114 make push-images 115 116 kubectl label node $(hostname) storage=pmem 117 kubectl label node $(hostname) katacontainers.io/kata-runtime=true 118 popd 119 } 120 121 main() { 122 trap cleanup EXIT QUIT KILL 123 init 124 setup_pmem_csi 125 [[ $CI_JOB != "PMEM_BAREMETAL" ]] || run_test 126 } 127 128 main