diff --git a/build.env b/build.env index 0f61dc800..c46fe27b3 100644 --- a/build.env +++ b/build.env @@ -14,6 +14,9 @@ CSI_IMAGE_VERSION=canary # cephcsi upgrade version CSI_UPGRADE_VERSION=v3.13.1 +# ceph-csi-operator version used for e2e test +CEPH_CSI_OPERATOR_VERSION=v0.2.0 + # Ceph version to use BASE_IMAGE=quay.io/ceph/ceph:v19 CEPH_VERSION=squid diff --git a/scripts/deploy-ceph-csi-operator.sh b/scripts/deploy-ceph-csi-operator.sh new file mode 100755 index 000000000..9db03d25e --- /dev/null +++ b/scripts/deploy-ceph-csi-operator.sh @@ -0,0 +1,146 @@ +#!/bin/bash -E + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" +# shellcheck disable=SC1091 +[ ! -e "${SCRIPT_DIR}"/utils.sh ] || source "${SCRIPT_DIR}"/utils.sh + +# shellcheck disable=SC1091 +source "${SCRIPT_DIR}/../build.env" + +CEPH_CSI_OPERATOR_VERSION=${CEPH_CSI_OPERATOR_VERSION:-"latest"} +# Override version to "main" if it is "latest" +if [ "$CEPH_CSI_OPERATOR_VERSION" = "latest" ]; then + CEPH_CSI_OPERATOR_VERSION="main" +fi +OPERATOR_URL="https://raw.githubusercontent.com/ceph/ceph-csi-operator/${CEPH_CSI_OPERATOR_VERSION}" + +# operator deployment files +OPERATOR_INSTALL="${OPERATOR_URL}/deploy/all-in-one/install.yaml" + +OPERATOR_NAMESPACE="ceph-csi-operator-system" +IMAGESET_CONFIGMAP_NAME="ceph-csi-imageset" +ENCRYPTION_CONFIGMAP_NAME="ceph-csi-encryption-kms-config" + +# csi drivers +RBD_DRIVER_NAME="rbd.csi.ceph.com" +CEPHFS_DRIVER_NAME="cephfs.csi.ceph.com" +NFS_DRIVER_NAME="nfs.csi.ceph.com" + +# k8s csi sidecar image +K8S_IMAGE_REPO=${K8S_IMAGE_REPO:-"registry.k8s.io/sig-storage"} + +TEMP_DIR="$(mktemp -d)" +trap 'rm -rf "$TEMP_DIR"' EXIT + +function generate_imageset_configmap() { + cat <"${TEMP_DIR}/imageset-configmap.yaml" +apiVersion: v1 +kind: ConfigMap +metadata: + name: ${IMAGESET_CONFIGMAP_NAME} + namespace: ${OPERATOR_NAMESPACE} +data: + "plugin": "quay.io/cephcsi/cephcsi:${CSI_IMAGE_VERSION}" # test image + "attacher": "${K8S_IMAGE_REPO}/csi-attacher:${CSI_ATTACHER_VERSION}" + "snapshotter": "${K8S_IMAGE_REPO}/csi-snapshotter:${CSI_SNAPSHOTTER_VERSION}" + "provisioner": "${K8S_IMAGE_REPO}/csi-provisioner:${CSI_PROVISIONER_VERSION}" + "registrar": "${K8S_IMAGE_REPO}/csi-node-driver-registrar:${CSI_NODE_DRIVER_REGISTRAR_VERSION}" + "resizer": "${K8S_IMAGE_REPO}/csi-resizer:${CSI_RESIZER_VERSION}" +EOF +} + +function generate_encryption_configmap() { + cat <"${TEMP_DIR}/encryption-configmap.yaml" +apiVersion: v1 +kind: ConfigMap +metadata: + namespace: ${OPERATOR_NAMESPACE} + name: ${ENCRYPTION_CONFIGMAP_NAME} +data: + config.json: "" +EOF +} + +function generate_operator_config() { + generate_imageset_configmap + generate_encryption_configmap + + cat <"${TEMP_DIR}/operatorconfig.yaml" +apiVersion: csi.ceph.io/v1alpha1 +kind: OperatorConfig +metadata: + name: ceph-csi-operator-config + namespace: ${OPERATOR_NAMESPACE} +spec: + driverSpecDefaults: + snapshotPolicy: volumeGroupSnapshot + controllerPlugin: + deploymentStrategy: + type: Recreate + generateOMapInfo: true + enableMetadata: true + log: + verbosity: 5 # csi pods log level + imageSet: + name: ${IMAGESET_CONFIGMAP_NAME} + encryption: + configMapName: + name: ${ENCRYPTION_CONFIGMAP_NAME} + log: + verbosity: 3 # operator log level +EOF +} + +function generate_driver() { + local driver_name=$1 + cat <"${TEMP_DIR}/${driver_name}.yaml" +apiVersion: csi.ceph.io/v1alpha1 +kind: Driver +metadata: + name: ${driver_name} + namespace: ${OPERATOR_NAMESPACE} +EOF +} + +function deploy_operator() { + kubectl_retry create -f "${OPERATOR_INSTALL}" + generate_operator_config + generate_driver "${RBD_DRIVER_NAME}" + generate_driver "${CEPHFS_DRIVER_NAME}" + generate_driver "${NFS_DRIVER_NAME}" + + # Display the contents of the generated files for debugging + for file in "${TEMP_DIR}"/*; do + cat "$file" + echo + done + + # Apply all the generated files at once + kubectl_retry create -f "${TEMP_DIR}" +} + +function cleanup() { + generate_driver "${RBD_DRIVER_NAME}" + generate_driver "${CEPHFS_DRIVER_NAME}" + generate_driver "${NFS_DRIVER_NAME}" + generate_operator_config + + # Delete all the generated files at once + kubectl_retry delete -f "${TEMP_DIR}" + kubectl_retry delete -f "${OPERATOR_INSTALL}" +} + +case "${1:-}" in +deploy) + deploy_operator + ;; +cleanup) + cleanup + ;; +*) + echo "Usage:" >&2 + echo " $0 deploy" >&2 + echo " $0 cleanup" >&2 + exit 1 + ;; +esac