123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- #!/usr/bin/env bash
- set -e
- #############
- # VARIABLES #
- #############
- rook_git_root=$(git rev-parse --show-toplevel)
- rook_kube_templates_dir="$rook_git_root/deploy/examples/"
- #############
- # FUNCTIONS #
- #############
- function fail_if {
- if ! git rev-parse --show-toplevel &> /dev/null; then
- echo "It looks like you are NOT in a Git repository"
- echo "This script should be executed from WITHIN Rook's git repository"
- exit 1
- fi
- }
- function purge_rook_pods {
- cd "$rook_kube_templates_dir"
- # Older rook versions use resource type "pool", newer versions
- # use resource type "cephblockpools".
- kubectl delete -n rook-ceph pool replicapool || true
- kubectl delete -n rook-ceph cephblockpools replicapool || true
- kubectl delete storageclass rook-ceph-block || true
- kubectl delete -f kube-registry.yaml || true
- # Older rook versions use resource type "cluster",
- # versions > 0.8 use resource type "cephcluster".
- kubectl delete -n rook-ceph cluster rook-ceph || true
- kubectl delete -n rook-ceph cephcluster rook-ceph || true
- kubectl delete crd cephclusters.ceph.rook.io cephblockpools.ceph.rook.io cephobjectstores.ceph.rook.io cephobjectstoreusers.ceph.rook.io cephfilesystems.ceph.rook.io volumes.rook.io || true
- kubectl delete -n rook-ceph daemonset rook-ceph-agent || true
- kubectl delete -f operator.yaml || true
- kubectl delete clusterroles rook-ceph-agent || true
- kubectl delete clusterrolebindings rook-ceph-agent || true
- kubectl delete namespace rook-ceph || true
- cd "$rook_git_root"
- }
- function purge_ceph_vms {
- instances=$(vagrant global-status | awk '/k8s-/ { print $1 }')
- for i in $instances; do
- # assuming /var/lib/rook is not ideal but it should work most of the time
- vagrant ssh "$i" -c "cat << 'EOF' > /tmp/purge-ceph.sh
- sudo rm -rf /var/lib/rook
- for disk in \$(sudo blkid | awk '/ROOK/ {print \$1}' | sed 's/[0-9]://' | uniq); do
- sudo dd if=/dev/zero of=\$disk bs=1M count=20 oflag=direct,dsync
- done
- EOF"
- vagrant ssh "$i" -c "bash /tmp/purge-ceph.sh"
- done
- }
- # shellcheck disable=SC2120
- function add_user_to_docker_group {
- sudo groupadd docker || true
- sudo gpasswd -a vagrant docker || true
- if [[ $(id -gn) != docker ]]; then
- exec sg docker "$0 $*"
- fi
- }
- function run_docker_registry {
- if ! docker ps | grep -sq registry; then
- docker run -d -p 5000:5000 --restart=always --name registry registry:2
- fi
- }
- function docker_import {
- img=$(docker images | grep -Eo '^build-[a-z0-9]{8}/ceph-[a-z0-9]+\s')
- # shellcheck disable=SC2086
- docker tag $img 172.17.8.1:5000/rook/ceph:latest
- docker --debug push 172.17.8.1:5000/rook/ceph:latest
- # shellcheck disable=SC2086
- docker rmi $img
- }
- function make_rook {
- # go to the repository root dir
- cd "$rook_git_root"
- # build rook
- make
- }
- function run_rook {
- cd "$rook_kube_templates_dir"
- kubectl create -f operator.yaml
- while ! kubectl get crd cephclusters.ceph.rook.io >/dev/null 2>&1; do
- echo "waiting for Rook operator"
- sleep 10
- done
- kubectl create -f cluster.yaml
- cd -
- }
- function edit_rook_cluster_template {
- cd "$rook_kube_templates_dir"
- sed -i 's|image: .*$|image: 172.17.8.1:5000/rook/ceph:latest|' operator.yaml
- echo "operator.yml has been edited with the new image '172.17.8.1:5000/rook/ceph:latest'"
- cd -
- }
- function config_kubectl {
- local k8s_01_vm
- k8s_01_vm=$(vagrant global-status | awk '/k8s-01/ { print $1 }')
- mkdir -p $HOME/.kube/
- vagrant ssh $k8s_01_vm -c "sudo cat /root/.kube/config" > $HOME/.kube/config.rook
- if [ -f "$HOME/.kube/config" ] && \
- ! diff $HOME/.kube/config $HOME/.kube/config.rook >/dev/null 2>&1 ;
- then
- echo "Backing up existing Kubernetes configuration file."
- mv $HOME/.kube/config $HOME/.kube/config.before.rook."$(date +%s)"
- ln -sf $HOME/.kube/config.rook $HOME/.kube/config
- fi
- kubectl get nodes
- }
- ########
- # MAIN #
- ########
- fail_if
- config_kubectl
- add_user_to_docker_group
- run_docker_registry
- # we purge rook otherwise make fails for 'use-use' image
- purge_rook_pods
- purge_ceph_vms
- make_rook
- docker_import
- edit_rook_cluster_template
- run_rook
|