X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/2b541090d500166243c84a9d7d2f9dbedf9f7360..e7fe0e38fbf6b919e61ba1d595ef564d67b0a528:/tools/salt-install/installer.sh diff --git a/tools/salt-install/installer.sh b/tools/salt-install/installer.sh index 55cbd36d94..d2f58fd03d 100755 --- a/tools/salt-install/installer.sh +++ b/tools/salt-install/installer.sh @@ -47,6 +47,11 @@ declare GITTARGET # This will be populated by loadconfig() declare USE_SSH_JUMPHOST +# The temp file that will get used to disable envvar forwarding to avoid locale +# issues in Debian distros. +# This will be populated by loadconfig() +declare SSH_CONFFILE + checktools() { local MISSING='' for a in git ip ; do @@ -101,10 +106,13 @@ sync() { deploynode() { local NODE=$1 local ROLES=$2 + local BRANCH=$3 # Deploy a node. This runs the provision script on the node, with # the appropriate roles. + sync $NODE $BRANCH + if [[ -z "$ROLES" ]] ; then echo "No roles specified for $NODE, will deploy all roles" else @@ -127,20 +135,25 @@ deploynode() { } loadconfig() { - if [ ! -s ${CONFIG_FILE} -o ! -s ${CONFIG_FILE}.secrets ]; then + if ! [[ -s ${CONFIG_FILE} && -s ${CONFIG_FILE}.secrets ]]; then echo "Must be run from initialized setup dir, maybe you need to 'initialize' first?" fi - source ${CONFIG_FILE}.secrets - source ${CONFIG_FILE} + source common.sh GITTARGET=arvados-deploy-config-${CLUSTER} + + # Set up SSH so that it doesn't forward any environment variable. This is to avoid + # getting "setlocale" errors on the first run, depending on the distro being used + # to run the installer (like Debian). + SSH_CONFFILE=$(mktemp) + echo "Include config SendEnv -*" > ${SSH_CONFFILE} } ssh_cmd() { local NODE=$1 if [ -z "${USE_SSH_JUMPHOST}" -o "${NODE}" == "${USE_SSH_JUMPHOST}" -o "${NODE}" == "localhost" ]; then - echo "ssh" + echo "ssh -F ${SSH_CONFFILE}" else - echo "ssh -J ${DEPLOY_USER}@${USE_SSH_JUMPHOST}" + echo "ssh -F ${SSH_CONFFILE} -J ${DEPLOY_USER}@${USE_SSH_JUMPHOST}" fi } @@ -279,16 +292,23 @@ case "$subcmd" in if [[ -z "$NODE" ]]; then for NODE in "${!NODES[@]}" do - # First, push the git repo to each node. This also - # confirms that we have git and can log into each - # node. - sync $NODE $BRANCH + # First, just confirm we can ssh to each node. + `ssh_cmd "$NODE"` $DEPLOY_USER@$NODE true done for NODE in "${!NODES[@]}" do # Do 'database' role first, if [[ "${NODES[$NODE]}" =~ database ]] ; then + deploynode $NODE "${NODES[$NODE]}" $BRANCH + unset NODES[$NODE] + fi + done + + for NODE in "${!NODES[@]}" + do + # then 'balancer' role + if [[ "${NODES[$NODE]}" =~ balancer ]] ; then deploynode $NODE "${NODES[$NODE]}" unset NODES[$NODE] fi @@ -296,8 +316,8 @@ case "$subcmd" in for NODE in "${!NODES[@]}" do - # then 'api' or 'controller' roles - if [[ "${NODES[$NODE]}" =~ (api|controller) ]] ; then + # then 'controller' role + if [[ "${NODES[$NODE]}" =~ controller ]] ; then deploynode $NODE "${NODES[$NODE]}" unset NODES[$NODE] fi @@ -307,12 +327,11 @@ case "$subcmd" in do # Everything else (we removed the nodes that we # already deployed from the list) - deploynode $NODE "${NODES[$NODE]}" + deploynode $NODE "${NODES[$NODE]}" $BRANCH done else # Just deploy the node that was supplied on the command line. - sync $NODE $BRANCH - deploynode $NODE "${NODES[$NODE]}" + deploynode $NODE "${NODES[$NODE]}" $BRANCH fi set +x