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