Files
my-rook-config/tests/scripts/multi-node/build-rook.sh
T
travisn eb74bf5547 Configure a cluster in the same namespace as the operator
To simplify the deployment of Rook, both the operator and cluster crd are now created in the
same namespace in the examples. By default the operator will only manage a cluster crd
in the same namespace instead of watching for clusters in all namespaces. To manage a cluster
in another namespace, the roles in latter half of operator-common.yaml need to point to the new
namespace and the operator env var ROOK_CURRENT_NAMESPACE_ONLY should be set to false.

Signed-off-by: travisn <tnielsen@redhat.com>
2019-04-04 12:42:08 -06:00

140 lines
4.0 KiB
Bash
Executable File

#!/usr/bin/env bash
set -e
#############
# VARIABLES #
#############
rook_git_root=$(git rev-parse --show-toplevel)
rook_kube_templates_dir="$rook_git_root/cluster/examples/kubernetes/ceph/"
#############
# 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
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