mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-11-17 20:00:23 +00:00
5d49247945
Currently the scripts/install-snapshot.sh script needs to be called depending on the Kubernetes version. It would be much easier to use the script if it is intelligent enough to decide itself whether k8s snapshot controller needs to be installed or not. Fixes: #1139 Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
121 lines
4.0 KiB
Bash
Executable File
121 lines
4.0 KiB
Bash
Executable File
#!/bin/bash -e
|
|
|
|
# This script can be used to install/delete snapshotcontroller and snapshot beta CRD
|
|
|
|
SNAPSHOT_VERSION=${SNAPSHOT_VERSION:-"v2.1.1"}
|
|
|
|
SCRIPT_DIR="$(dirname "${0}")"
|
|
|
|
TEMP_DIR="$(mktemp -d)"
|
|
SNAPSHOTTER_URL="https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/${SNAPSHOT_VERSION}"
|
|
|
|
# controller
|
|
SNAPSHOT_RBAC="${SNAPSHOTTER_URL}/deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml"
|
|
SNAPSHOT_CONTROLLER="${SNAPSHOTTER_URL}/deploy/kubernetes/snapshot-controller/setup-snapshot-controller.yaml"
|
|
|
|
# snapshot CRD
|
|
SNAPSHOTCLASS="${SNAPSHOTTER_URL}/config/crd/snapshot.storage.k8s.io_volumesnapshotclasses.yaml"
|
|
VOLUME_SNAPSHOT_CONTENT="${SNAPSHOTTER_URL}/config/crd/snapshot.storage.k8s.io_volumesnapshotcontents.yaml"
|
|
VOLUME_SNAPSHOT="${SNAPSHOTTER_URL}/config/crd/snapshot.storage.k8s.io_volumesnapshots.yaml"
|
|
|
|
function install_snapshot_controller() {
|
|
local namespace=$1
|
|
if [ -z "${namespace}" ]; then
|
|
namespace="default"
|
|
fi
|
|
|
|
create_or_delete_resource "create" ${namespace}
|
|
|
|
pod_ready=$(kubectl get pods -l app=snapshot-controller -n ${namespace} -o jsonpath='{.items[0].status.containerStatuses[0].ready}')
|
|
INC=0
|
|
until [[ "${pod_ready}" == "true" || $INC -gt 20 ]]; do
|
|
sleep 10
|
|
((++INC))
|
|
pod_ready=$(kubectl get pods -l app=snapshot-controller -n ${namespace} -o jsonpath='{.items[0].status.containerStatuses[0].ready}')
|
|
echo "snapshotter pod status: ${pod_ready}"
|
|
done
|
|
|
|
if [ "${pod_ready}" != "true" ]; then
|
|
echo "snapshotter controller creation failed"
|
|
kubectl get pods -l app=snapshot-controller -n ${namespace}
|
|
kubectl describe po -l app=snapshot-controller -n ${namespace}
|
|
exit 1
|
|
fi
|
|
|
|
echo "snapshot controller creation successful"
|
|
}
|
|
|
|
function cleanup_snapshot_controller() {
|
|
local namespace=$1
|
|
if [ -z "${namespace}" ]; then
|
|
namespace="default"
|
|
fi
|
|
create_or_delete_resource "delete" ${namespace}
|
|
}
|
|
|
|
function create_or_delete_resource() {
|
|
local operation=$1
|
|
local namespace=$2
|
|
temp_rbac=${TEMP_DIR}/snapshot-rbac.yaml
|
|
snapshotter_psp="${SCRIPT_DIR}/snapshot-controller-psp.yaml"
|
|
mkdir -p "${TEMP_DIR}"
|
|
curl -o "${temp_rbac}" "${SNAPSHOT_RBAC}"
|
|
sed -i "s/namespace: default/namespace: ${namespace}/g" "${temp_rbac}"
|
|
sed -i "s/namespace: default/namespace: ${namespace}/g" "${snapshotter_psp}"
|
|
|
|
kubectl "${operation}" -f "${temp_rbac}"
|
|
kubectl "${operation}" -f "${snapshotter_psp}"
|
|
kubectl "${operation}" -f "${SNAPSHOT_CONTROLLER}" -n "${namespace}"
|
|
kubectl "${operation}" -f "${SNAPSHOTCLASS}"
|
|
kubectl "${operation}" -f "${VOLUME_SNAPSHOT_CONTENT}"
|
|
kubectl "${operation}" -f "${VOLUME_SNAPSHOT}"
|
|
}
|
|
|
|
function delete_snapshot_crd() {
|
|
kubectl delete -f "${SNAPSHOTCLASS}" --ignore-not-found
|
|
kubectl delete -f "${VOLUME_SNAPSHOT_CONTENT}" --ignore-not-found
|
|
kubectl delete -f "${VOLUME_SNAPSHOT}" --ignore-not-found
|
|
}
|
|
|
|
# parse the kubernetes version
|
|
# v1.17.2 -> kube_version 1 -> 1 (Major)
|
|
# v1.17.2 -> kube_version 2 -> 17 (Minor)
|
|
function kube_version() {
|
|
echo "${KUBE_VERSION}" | sed 's/^v//' | cut -d'.' -f"${1}"
|
|
}
|
|
|
|
if ! get_kube_version=$(kubectl version --short) ||
|
|
[[ -z "${get_kube_version}" ]]; then
|
|
echo "could not get Kubernetes server version"
|
|
echo "hint: check if you have specified the right host or port"
|
|
exit 1
|
|
fi
|
|
|
|
KUBE_VERSION=$(echo "${get_kube_version}" | grep "^Server Version" | cut -d' ' -f3)
|
|
KUBE_MAJOR=$(kube_version 1)
|
|
KUBE_MINOR=$(kube_version 2)
|
|
|
|
# skip snapshot operation if kube version is less than 1.17.0
|
|
if [[ "${KUBE_MAJOR}" -lt 1 ]] || [[ "${KUBE_MAJOR}" -eq 1 && "${KUBE_MINOR}" -lt 17 ]]; then
|
|
echo "skipping: Kubernetes server version is < 1.17.0"
|
|
exit 1
|
|
fi
|
|
|
|
case "${1:-}" in
|
|
install)
|
|
install_snapshot_controller "$2"
|
|
;;
|
|
cleanup)
|
|
cleanup_snapshot_controller "$2"
|
|
;;
|
|
delete-crd)
|
|
delete_snapshot_crd
|
|
;;
|
|
*)
|
|
echo "usage:" >&2
|
|
echo " $0 install" >&2
|
|
echo " $0 cleanup" >&2
|
|
echo " $0 delete-crd" >&2
|
|
;;
|
|
esac
|