ceph-csi/scripts/install-snapshot.sh
Madhu Rajanna 5c17d845b2 ci: fix image version replacement
canary tag is no more used in the
snapshotter yaml and latest version are
used, instead of searching for tag check
for the image name and do sed to replace
the required tag only.

Signed-off-by: Madhu Rajanna <madhupr007@gmail.com>
2024-02-15 20:21:14 +00:00

114 lines
4.5 KiB
Bash
Executable File

#!/bin/bash -e
# This script can be used to install/delete snapshotcontroller and snapshot CRD
SCRIPT_DIR="$(dirname "${0}")"
# shellcheck source=build.env
source "${SCRIPT_DIR}/../build.env"
SNAPSHOT_VERSION=${SNAPSHOT_VERSION:-"v5.0.1"}
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}/client/config/crd/snapshot.storage.k8s.io_volumesnapshotclasses.yaml"
VOLUME_SNAPSHOT_CONTENT="${SNAPSHOTTER_URL}/client/config/crd/snapshot.storage.k8s.io_volumesnapshotcontents.yaml"
VOLUME_SNAPSHOT="${SNAPSHOTTER_URL}/client/config/crd/snapshot.storage.k8s.io_volumesnapshots.yaml"
# volumegroupsnapshot CRD
VOLUME_GROUP_SNAPSHOTCLASS="${SNAPSHOTTER_URL}/client/config/crd/groupsnapshot.storage.k8s.io_volumegroupsnapshotclasses.yaml"
VOLUME_GROUP_SNAPSHOT_CONTENT="${SNAPSHOTTER_URL}/client/config/crd/groupsnapshot.storage.k8s.io_volumegroupsnapshotcontents.yaml"
VOLUME_GROUP_SNAPSHOT="${SNAPSHOTTER_URL}/client/config/crd/groupsnapshot.storage.k8s.io_volumegroupsnapshots.yaml"
function install_snapshot_controller() {
local namespace=$1
if [ -z "${namespace}" ]; then
namespace="kube-system"
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="kube-system"
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
temp_snap_controller=${TEMP_DIR}/snapshot-controller.yaml
mkdir -p "${TEMP_DIR}"
curl -o "${temp_rbac}" "${SNAPSHOT_RBAC}"
curl -o "${temp_snap_controller}" "${SNAPSHOT_CONTROLLER}"
sed -i "s/namespace: kube-system/namespace: ${namespace}/g" "${temp_rbac}"
sed -i "s/namespace: kube-system/namespace: ${namespace}/g" "${temp_snap_controller}"
sed -i -E "s/(image: registry\.k8s\.io\/sig-storage\/snapshot-controller:).*$/\1$SNAPSHOT_VERSION/g" "${temp_snap_controller}"
if [ "${operation}" == "create" ]; then
# Argument to add/update
ARGUMENT="--enable-volume-group-snapshots=true"
# Check if the argument is already present and set to false
if grep -q -E "^\s+-\s+--enable-volume-group-snapshots=false" "${temp_snap_controller}"; then
sed -i -E "s/^\s+-\s+--enable-volume-group-snapshots=false$/ - $ARGUMENT/" "${temp_snap_controller}"
# Check if the argument is already present and set to true
elif grep -q -E "^\s+-\s+--enable-volume-group-snapshots=true" "${temp_snap_controller}"; then
echo "Argument already present and matching."
else
# Add the argument if it's not present
sed -i -E "/^(\s+)args:/a\ \ - $ARGUMENT" "${temp_snap_controller}"
fi
fi
kubectl "${operation}" -f "${VOLUME_GROUP_SNAPSHOTCLASS}"
kubectl "${operation}" -f "${VOLUME_GROUP_SNAPSHOT_CONTENT}"
kubectl "${operation}" -f "${VOLUME_GROUP_SNAPSHOT}"
kubectl "${operation}" -f "${temp_rbac}"
kubectl "${operation}" -f "${temp_snap_controller}" -n "${namespace}"
kubectl "${operation}" -f "${SNAPSHOTCLASS}"
kubectl "${operation}" -f "${VOLUME_SNAPSHOT_CONTENT}"
kubectl "${operation}" -f "${VOLUME_SNAPSHOT}"
}
case "${1:-}" in
install)
install_snapshot_controller "$2"
;;
cleanup)
cleanup_snapshot_controller "$2"
;;
*)
echo "usage:" >&2
echo " $0 install" >&2
echo " $0 cleanup" >&2
;;
esac