Merge branch '20667-maxsuper-atquota'
[arvados.git] / tools / salt-install / installer.sh
index e5aff213ee45aa1bf43ca55f3578b75fec904c3c..4ce490421f5abe2516a3446d909af6143a82b7ae 100755 (executable)
@@ -60,6 +60,13 @@ checktools() {
     fi
 }
 
     fi
 }
 
+cleanup() {
+    local NODE=$1
+    local SSH=`ssh_cmd "$NODE"`
+    # Delete the old repository
+    $SSH $DEPLOY_USER@$NODE rm -rf ${GITTARGET}.git ${GITTARGET}
+}
+
 sync() {
     local NODE=$1
     local BRANCH=$2
 sync() {
     local NODE=$1
     local BRANCH=$2
@@ -68,33 +75,26 @@ sync() {
     # each node, pushing our branch, and updating the checkout.
 
     if [[ "$NODE" != localhost ]] ; then
     # each node, pushing our branch, and updating the checkout.
 
     if [[ "$NODE" != localhost ]] ; then
-               SSH=`ssh_cmd "$NODE"`
-               GIT="eval `git_cmd $NODE`"
-               if ! $SSH $DEPLOY_USER@$NODE test -d ${GITTARGET}.git ; then
-
-                       # Initialize the git repository (1st time case).  We're
-                       # actually going to make two repositories here because git
-                       # will complain if you try to push to a repository with a
-                       # checkout. So we're going to create a "bare" repository
-                       # and then clone a regular repository (with a checkout)
-                       # from that.
-
-                       $SSH $DEPLOY_USER@$NODE git init --bare --shared=0600 ${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 $DEPLOY_USER@$NODE "umask 0077 && git clone ${GITTARGET}.git ${GITTARGET}"
-               fi
+       SSH=`ssh_cmd "$NODE"`
+       GIT="eval `git_cmd $NODE`"
 
 
-               # The update case.
-               #
-               # Push to the bare repository on the remote node, then in the
-               # remote node repository with the checkout, pull the branch
-               # from the bare repository.
+       cleanup $NODE
 
 
-               $GIT push $NODE $BRANCH
-               $SSH $DEPLOY_USER@$NODE "git -C ${GITTARGET} checkout ${BRANCH} && git -C ${GITTARGET} pull"
+       # Update the git remote for the remote repository.
+       if ! $GIT remote add $NODE $DEPLOY_USER@$NODE:${GITTARGET}.git ; then
+           $GIT remote set-url $NODE $DEPLOY_USER@$NODE:${GITTARGET}.git
+       fi
+
+       # Initialize the git repository.  We're
+       # actually going to make two repositories here because git
+       # will complain if you try to push to a repository with a
+       # checkout. So we're going to create a "bare" repository
+       # and then clone a regular repository (with a checkout)
+       # from that.
+
+       $SSH $DEPLOY_USER@$NODE git init --bare --shared=0600 ${GITTARGET}.git
+       $GIT push $NODE $BRANCH
+       $SSH $DEPLOY_USER@$NODE "umask 0077 && git clone -s ${GITTARGET}.git ${GITTARGET} && git -C ${GITTARGET} checkout ${BRANCH}"
     fi
 }
 
     fi
 }
 
@@ -112,7 +112,7 @@ deploynode() {
     fi
 
     logfile=deploy-${NODE}-$(date -Iseconds).log
     fi
 
     logfile=deploy-${NODE}-$(date -Iseconds).log
-       SSH=`ssh_cmd "$NODE"`
+    SSH=`ssh_cmd "$NODE"`
 
     if [[ "$NODE" = localhost ]] ; then
            SUDO=''
 
     if [[ "$NODE" = localhost ]] ; then
            SUDO=''
@@ -120,15 +120,17 @@ deploynode() {
                        SUDO=sudo
                fi
                $SUDO ./provision.sh --config ${CONFIG_FILE} ${ROLES} 2>&1 | tee $logfile
                        SUDO=sudo
                fi
                $SUDO ./provision.sh --config ${CONFIG_FILE} ${ROLES} 2>&1 | tee $logfile
-       else
-               $SSH $DEPLOY_USER@$NODE "cd ${GITTARGET} && sudo ./provision.sh --config ${CONFIG_FILE} ${ROLES}" 2>&1 | tee $logfile
+    else
+           $SSH $DEPLOY_USER@$NODE "cd ${GITTARGET} && git log -n1 HEAD && sudo ./provision.sh --config ${CONFIG_FILE} ${ROLES}" 2>&1 | tee $logfile
+           cleanup $NODE
     fi
 }
 
 loadconfig() {
     fi
 }
 
 loadconfig() {
-    if [[ ! -s $CONFIG_FILE ]] ; 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
                echo "Must be run from initialized setup dir, maybe you need to 'initialize' first?"
     fi
+    source ${CONFIG_FILE}.secrets
     source ${CONFIG_FILE}
     GITTARGET=arvados-deploy-config-${CLUSTER}
 }
     source ${CONFIG_FILE}
     GITTARGET=arvados-deploy-config-${CLUSTER}
 }
@@ -197,6 +199,7 @@ case "$subcmd" in
        cp -r *.sh tests $SETUPDIR
 
        cp local.params.example.$PARAMS $SETUPDIR/${CONFIG_FILE}
        cp -r *.sh tests $SETUPDIR
 
        cp local.params.example.$PARAMS $SETUPDIR/${CONFIG_FILE}
+       cp local.params.secrets.example $SETUPDIR/${CONFIG_FILE}.secrets
        cp -r config_examples/$SLS $SETUPDIR/${CONFIG_DIR}
 
        if [[ -n "$TERRAFORM" ]] ; then
        cp -r config_examples/$SLS $SETUPDIR/${CONFIG_DIR}
 
        if [[ -n "$TERRAFORM" ]] ; then
@@ -213,7 +216,7 @@ case "$subcmd" in
                git add terraform
        fi
 
                git add terraform
        fi
 
-       git add *.sh ${CONFIG_FILE} ${CONFIG_DIR} tests .gitignore
+       git add *.sh ${CONFIG_FILE} ${CONFIG_FILE}.secrets ${CONFIG_DIR} tests .gitignore
        git commit -m"initial commit"
 
        echo
        git commit -m"initial commit"
 
        echo
@@ -224,7 +227,7 @@ case "$subcmd" in
            (cd $SETUPDIR/terraform/services && terraform init)
            echo "Now go to $SETUPDIR, customize 'terraform/vpc/terraform.tfvars' as needed, then run 'installer.sh terraform'"
        else
            (cd $SETUPDIR/terraform/services && terraform init)
            echo "Now go to $SETUPDIR, customize 'terraform/vpc/terraform.tfvars' as needed, then run 'installer.sh terraform'"
        else
-           echo "Now go to $SETUPDIR, customize '${CONFIG_FILE}' and '${CONFIG_DIR}' as needed, then run 'installer.sh deploy'"
+               echo "Now go to $SETUPDIR, customize '${CONFIG_FILE}', '${CONFIG_FILE}.secrets' and '${CONFIG_DIR}' as needed, then run 'installer.sh deploy'"
        fi
        ;;
 
        fi
        ;;
 
@@ -258,18 +261,18 @@ case "$subcmd" in
 
        loadconfig
 
 
        loadconfig
 
-       if grep -rni 'fixme' ${CONFIG_FILE} ${CONFIG_DIR} ; then
+       if grep -rni 'fixme' ${CONFIG_FILE} ${CONFIG_FILE}.secrets ${CONFIG_DIR} ; then
            echo
            echo "Some parameters still need to be updated.  Please fix them and then re-run deploy."
            exit 1
        fi
 
            echo
            echo "Some parameters still need to be updated.  Please fix them and then re-run deploy."
            exit 1
        fi
 
-       BRANCH=$(git branch --show-current)
+       BRANCH=$(git rev-parse --abbrev-ref HEAD)
 
        set -x
 
        git add -A
 
        set -x
 
        git add -A
-       if ! git diff --cached --exit-code ; then
+       if ! git diff --cached --exit-code --quiet ; then
            git commit -m"prepare for deploy"
        fi
 
            git commit -m"prepare for deploy"
        fi
 
@@ -338,7 +341,7 @@ case "$subcmd" in
            exit 1
        fi
 
            exit 1
        fi
 
-       export ARVADOS_API_HOST="${CLUSTER}.${DOMAIN}:${CONTROLLER_EXT_SSL_PORT}"
+       export ARVADOS_API_HOST="${DOMAIN}:${CONTROLLER_EXT_SSL_PORT}"
        export ARVADOS_API_TOKEN="$SYSTEM_ROOT_TOKEN"
 
        arvados-client diagnostics $LOCATION
        export ARVADOS_API_TOKEN="$SYSTEM_ROOT_TOKEN"
 
        arvados-client diagnostics $LOCATION