set -e
+declare -A NODES
+
+sync() {
+ if [[ "$NODE" != localhost ]] ; then
+ if ! ssh $NODE test -d ${GITTARGET}.git ; then
+ ssh $NODE git init --bare ${GITTARGET}.git
+ if ! git remote add $NODE $DEPLOY_USER@$NODE:${GITTARGET}.git ; then
+ git remote set-url $NODE $DEPLOY_USER@$NODE:${GITTARGET}.git
+ fi
+ git push $NODE $BRANCH
+ ssh $NODE git clone ${GITTARGET}.git ${GITTARGET}
+ fi
+
+ git push $NODE $BRANCH
+ ssh $NODE git -C ${GITTARGET} checkout $BRANCH
+ ssh $NODE git -C ${GITTARGET} pull
+ fi
+}
+
+deploynode() {
+ if [[ -z "${NODES[$NODE]}" ]] ; then
+ echo "No roles declared for '$NODE' in local.params"
+ exit 1
+ fi
+
+ if [[ "$NODE" = localhost ]] ; then
+ sudo ./provision.sh --config local.params --roles ${NODES[$NODE]}
+ else
+ ssh $DEPLOY_USER@$NODE "cd ${GITTARGET} && sudo ./provision.sh --config local.params --roles ${NODES[$NODE]}"
+ fi
+}
+
+loadconfig() {
+ CONFIG_FILE=local.params
+ CONFIG_DIR=local_config_dir
+ if [[ ! -s $CONFIG_FILE ]] ; then
+ echo "Must be run from initialized setup dir, maybe you need to 'initialize' first?"
+ fi
+ source ${CONFIG_FILE}
+ GITTARGET=arvados-deploy-config-${CLUSTER}
+}
+
subcmd="$1"
-if test -n "$subcmd" ; then
+if [[ -n "$subcmd" ]] ; then
shift
fi
case "$subcmd" in
initialize)
- if ! test -f provision.sh ; then
+ if [[ ! -f provision.sh ]] ; then
echo "Must be run from arvados/tools/salt-install"
exit
fi
SLS=$3
err=
- if test -z "$PARAMS" -o ! -f local.params.example.$PARAMS ; then
+ if [[ -z "$PARAMS" || ! -f local.params.example.$PARAMS ]] ; then
echo "Not found: local.params.example.$PARAMS"
echo "Expected one of multiple_hosts, single_host_multiple_hostnames, single_host_single_hostname"
err=1
fi
- if test -z "$SLS" -o ! -d config_examples/$SLS ; then
+ if [[ -z "$SLS" || ! -d config_examples/$SLS ]] ; then
echo "Not found: config_examples/$SLS"
echo "Expected one of multi_host/aws, single_host/multiple_hostnames, single_host/single_hostname"
err=1
fi
- if test -z "$SETUPDIR" -o -z "$PARAMS" -o -z "$SLS" ; then
+ if [[ -z "$SETUPDIR" || -z "$PARAMS" || -z "$SLS" ]]; then
echo "installer.sh <setup dir to initialize> <params template> <config template>"
err=1
fi
- if test -n "$err" ; then
+ if [[ -n "$err" ]] ; then
exit 1
fi
git commit -m"initial commit"
echo "setup directory initialized, now go to $SETUPDIR, edit 'local.params' and 'local_config_dir' as needed, then run 'installer.sh deploy'"
- ;;
+ ;;
deploy)
- CONFIG_FILE=local.params
- if ! test -s $CONFIG_FILE ; then
- echo "Must be run from arvados-setup, maybe you need to 'initialize' first?"
+ NODE=$1
+
+ loadconfig
+
+ if grep -rni 'fixme' ${CONFIG_FILE} ${CONFIG_DIR} ; then
+ echo
+ echo "Some parameters still need to be updated. Please fix them and then re-run deploy."
+ exit 1
fi
- source ${CONFIG_FILE}
+ BRANCH=$(git branch --show-current)
set -x
git add -A
- if ! git diff --exit-code ; then
+ if ! git diff --cached --exit-code ; then
git commit -m"prepare for deploy"
fi
- for NODE in "${!NODES[@]}"
- do
- if test $NODE = localhost ; then
- sudo ./provision.sh --config local.params --roles ${NODES[$NODE]}
- else
- if ! ssh $NODE test -d arvados-setup.git ; then
- ssh $NODE git init --bare arvados-setup.git
- git remote add $NODE $DEPLOY_USER@$NODE:arvados-setup.git
- git push $NODE
- ssh $NODE git clone arvados-setup.git arvados-setup
+
+ if [[ -z "$NODE" ]]; then
+ for NODE in "${!NODES[@]}"
+ do
+ # Do 'database' role first,
+ if [[ "${NODES[$NODE]}" =~ database ]] ; then
+ sync
+ deploynode
+ unset NODES[$NODE]
+ fi
+ done
+
+ for NODE in "${!NODES[@]}"
+ do
+ # then 'api' or 'controller' roles
+ if [[ "${NODES[$NODE]}" =~ (api|controller) ]] ; then
+ sync
+ deploynode
+ unset NODES[$NODE]
fi
+ done
+
+ for NODE in "${!NODES[@]}"
+ do
+ # Everything else
+ sync
+ deploynode
+ done
+ else
+ sync
+ deploynode
+ fi
+
+ ;;
+ diagnostics)
+ loadconfig
+
+ if ! which arvados-client ; then
+ apt-get install arvados-client
+ fi
- git push $NODE master
- ssh $NODE git -C arvados-setup pull
+ export ARVADOS_API_HOST="${CLUSTER}.${DOMAIN}"
+ export ARVADOS_API_TOKEN="$SYSTEM_ROOT_TOKEN"
- ssh $DEPLOY_USER@$NODE "cd arvados-setup && sudo ./provision.sh --config local.params --roles ${NODES[$NODE]}"
- fi
- done
+ arvados-client diagnostics -internal-client
;;
*)
echo "Arvados installer"
echo ""
echo "initialize initialize the setup directory for configuration"
echo "deploy deploy the configuration from the setup directory"
+ echo "diagnostics check your install using diagnostics"
;;
esac