Merge branch 'master' into 16950-add-costanalyzer
[arvados.git] / tools / salt-install / provision.sh
index 0cae78b35fc5e3db464028ddc7848c7b148bf04c..7e88d7662e5b34fd007f11a11372f4b1e3f60de7 100755 (executable)
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/bash -x
 
 # Copyright (C) The Arvados Authors. All rights reserved.
 #
 #
 # vagrant up
 
-# This could have been done with the Salt vagrant provisioner, but this script
-# can be used in environments other than vagrant.
-
-# If branch is set, the script will switch to it before running salt
-BRANCH="refactor-config-add-service"
-RELEASE="testing"
+##########################################################
+# This section are the basic parameters to configure the installation
 
+# The 5 letters name you want to give your cluster
 CLUSTER="arva2"
 DOMAIN="arv.local"
 
+INITIAL_USER="admin"
+
+# If not specified, the initial user email will be composed as
+# INITIAL_USER@CLUSTER.DOMAIN
+INITIAL_USER_EMAIL="${INITIAL_USER}@${CLUSTER}.${DOMAIN}"
+INITIAL_USER_PASSWORD="password"
+
+# The example config you want to use. Currently, only "single_host" is
+# available
+CONFIG_DIR="single_host"
+
+# Which release of Arvados repo you want to use
+RELEASE="production"
+# Which version of Arvados you want to install. Defaults to 'latest'
+# in the desired repo
+VERSION="latest"
+
+# Host SSL port where you want to point your browser to access Arvados
+# Defaults to 443 for regular runs, and to 8443 when called in Vagrant.
+# You can point it to another port if desired
+# In Vagrant, make sure it matches what you set in the Vagrantfile
+# HOST_SSL_PORT=443
+
+# This is a arvados-formula setting.
+# If branch is set, the script will switch to it before running salt
+# Usually not needed, only used for testing
+# BRANCH="master"
+
+##########################################################
+# Usually there's no need to modify things below this line
+
+set -o pipefail
+
+usage() {
+  echo >&2
+  echo >&2 "Usage: $0 [-h] [-h]"
+  echo >&2
+  echo >&2 "$0 options:"
+  echo >&2 "  -v, --vagrant           Run in vagrant and use the /vagrant shared dir"
+  echo >&2 "  -p <N>, --ssl-port <N>  SSL port to use for the web applications"
+  echo >&2 "  -h, --help              Display this help and exit"
+  echo >&2
+}
+
+arguments() {
+  # NOTE: This requires GNU getopt (part of the util-linux package on Debian-based distros).
+  TEMP=`getopt -o hvp: \
+    --long help,vagrant,ssl-port: \
+    -n "$0" -- "$@"`
+
+  if [ $? != 0 ] ; then echo "GNU getopt missing? Use -h for help"; exit 1 ; fi
+  # Note the quotes around `$TEMP': they are essential!
+  eval set -- "$TEMP"
+
+  while [ $# -ge 1 ]; do
+    case $1 in
+      -v | --vagrant)
+        VAGRANT="yes"
+        shift
+        ;;
+      -p | --ssl-port)
+        HOST_SSL_PORT=${2}
+        shift 2
+        ;;
+      --)
+        shift
+        break
+        ;;
+      *)
+        usage
+        exit 1
+        ;;
+    esac
+  done
+}
+
+HOST_SSL_PORT=443
+
+arguments $@
+
 # Salt's dir
 ## states
 S_DIR="/srv/salt"
@@ -27,19 +104,17 @@ S_DIR="/srv/salt"
 F_DIR="/srv/formulas"
 ##pillars
 P_DIR="/srv/pillars"
-# In vagrant, we can use the shared dir
-# P_DIR="/vagrant/salt_pillars"
 
-sudo apt-get update
-sudo apt-get install -y curl git
+apt-get update
+apt-get install -y curl git
 
 dpkg -l |grep salt-minion
 if [ ${?} -eq 0 ]; then
   echo "Salt already installed"
 else
   curl -L https://bootstrap.saltstack.com -o /tmp/bootstrap_salt.sh
-  sudo sh /tmp/bootstrap_salt.sh -XUdfP -x python3
-  sudo /bin/systemctl disable salt-minion.service
+  sh /tmp/bootstrap_salt.sh -XUdfP -x python3
+  /bin/systemctl disable salt-minion.service
 fi
 
 # Set salt to masterless mode
@@ -60,6 +135,7 @@ mkdir -p ${S_DIR}
 mkdir -p ${F_DIR}
 mkdir -p ${P_DIR}
 
+# States
 cat > ${S_DIR}/top.sls << EOFTSLS
 base:
   '*':
@@ -71,6 +147,7 @@ base:
     - arvados
 EOFTSLS
 
+# Pillars
 cat > ${P_DIR}/top.sls << EOFPSLS
 base:
   '*':
@@ -92,7 +169,7 @@ EOFPSLS
 # Get the formula and dependencies
 cd ${F_DIR} || exit 1
 for f in postgres arvados nginx docker locale; do
-  git clone https://github.com/netmanagers/${f}-formula.git
+  git clone https://github.com/saltstack-formulas/${f}-formula.git
 done
 
 if [ "x${BRANCH}" != "x" ]; then
@@ -101,31 +178,58 @@ if [ "x${BRANCH}" != "x" ]; then
   cd -
 fi
 
-sed "s/example.net/${DOMAIN}/g; s/fixme/${CLUSTER}/g; s/release: development/release: ${RELEASE}/g" \
-  ${F_DIR}/arvados-formula/test/salt/pillar/arvados_dev.sls > ${P_DIR}/arvados.sls
+# sed "s/__DOMAIN__/${DOMAIN}/g; s/__CLUSTER__/${CLUSTER}/g; s/__RELEASE__/${RELEASE}/g; s/__VERSION__/${VERSION}/g" \
+#   ${CONFIG_DIR}/arvados_dev.sls > ${P_DIR}/arvados.sls
+
+if [ "x${VAGRANT}" = "xyes" ]; then
+  SOURCE_PILLARS_DIR="/vagrant/${CONFIG_DIR}"
+else
+  SOURCE_PILLARS_DIR="./${CONFIG_DIR}"
+fi
 
 # Replace cluster and domain name in the example pillars
-for f in ${F_DIR}/arvados-formula/test/salt/pillar/examples/*; do
-  sed "s/example.net/${DOMAIN}/g; s/fixme/${CLUSTER}/g" \
+for f in ${SOURCE_PILLARS_DIR}/*; do
+  # sed "s/example.net/${DOMAIN}/g; s/fixme/${CLUSTER}/g" \
+  sed "s/__DOMAIN__/${DOMAIN}/g;
+       s/__CLUSTER__/${CLUSTER}/g;
+       s/__RELEASE__/${RELEASE}/g;
+       s/__HOST_SSL_PORT__/${HOST_SSL_PORT}/g;
+       s/__GUEST_SSL_PORT__/${GUEST_SSL_PORT}/g;
+       s/__INITIAL_USER__/${INITIAL_USER}/g;
+       s/__INITIAL_USER_EMAIL__/${INITIAL_USER_EMAIL}/g;
+       s/__INITIAL_USER_PASSWORD__/${INITIAL_USER_PASSWORD}/g;
+       s/__VERSION__/${VERSION}/g" \
   ${f} > ${P_DIR}/$(basename ${f})
 done
 
-# # Copy arvados' pillar.example file to the pillars dir, so it's used
-# sed "s/example.net/${DOMAIN}/g" ${F_DIR}/arvados-formula/pillar.example > ${P_DIR}/arvados.sls
-#
-# # Replace domain name in the example pillars
-# for f in ${F_DIR}/arvados-formula/test/salt/pillar/examples/*; do
-#   sed "s/example.net/${DOMAIN}/g" ${f} > ${P_DIR}/$(basename ${f})
-# done
-#
-# Let's write a /etc/hosts file that points all the hosts to localhost
+# Let's write an /etc/hosts file that points all the hosts to localhost
 
 echo "127.0.0.2 api keep keep0 collections download ws workbench workbench2 ${CLUSTER}.${DOMAIN} api.${CLUSTER}.${DOMAIN} keep.${CLUSTER}.${DOMAIN} keep0.${CLUSTER}.${DOMAIN} collections.${CLUSTER}.${DOMAIN} download.${CLUSTER}.${DOMAIN} ws.${CLUSTER}.${DOMAIN} workbench.${CLUSTER}.${DOMAIN} workbench2.${CLUSTER}.${DOMAIN}" >> /etc/hosts
 
-# FIXME! Test to see if arvados-api-server progresses without issues
-cat > /root/.psqlrc << EOF
-\pset pager off
-EOF
+# FIXME! #16992 Temporary fix for psql call in arvados-api-server
+if [ -e /root/.psqlrc ]; then
+  if ! ( grep 'pset pager off' /root/.psqlrc ); then
+    RESTORE_PSQL="yes"
+    cp /root/.psqlrc /root/.psqlrc.provision.backup
+  fi
+else
+  DELETE_PSQL="yes"
+fi
+
+echo '\pset pager off' >> /root/.psqlrc
+# END FIXME! #16992 Temporary fix for psql call in arvados-api-server
 
 # Now run the install
 salt-call --local state.apply -l debug
+
+# FIXME! #16992 Temporary fix for psql call in arvados-api-server
+if [ "x${DELETE_PSQL}" = "xyes" ]; then
+  echo "Removing .psql file"
+  rm /root/.psqlrc
+fi
+
+if [ "x${RESTORE_PSQL}" = "xyes" ]; then
+  echo "Restroting .psql file"
+  mv -v /root/.psqlrc.provision.backup /root/.psqlrc
+fi
+# END FIXME! #16992 Temporary fix for psql call in arvados-api-server