]> git.immae.eu Git - perso/Immae/Projets/Puppet.git/blobdiff - bin/install_script.sh
Add help to install script
[perso/Immae/Projets/Puppet.git] / bin / install_script.sh
index f250285840785abeb0025d4e32778cc5f94f208c..15c770c15f2e7eb3606488e9e8e4df380310e5bf 100755 (executable)
 #!/bin/bash
 
+usage() {
+cat <<EOF
+  $0 [options]
+  --help,-h               This help
+  --vps vps_name          Name of the vps
+  --password password     Password of the vps (only useful in case of no reboot)
+  --reinstall-first       Start with reinstalling the vps
+  --host-user user        Use another user (default: root)
+  --no-reboot             Don't reboot
+  --no-reboot-start       Don't reboot to rescue at the beginning
+  --no-reboot-end         Don't reboot to normal at the end
+  --git-branch            Use another puppet branch (default: master)
+EOF
+}
+
+set -e
+
+host_user=root
+git_branch=master
+
+while [ -n "$1" ]; do
+  case "$1" in
+    --vps)
+      vps_name="$2"
+      shift
+      ;;
+    --reinstall-first)
+      reinstall_first=1
+      ;;
+    --password)
+      password="$2"
+      shift
+      ;;
+    --host-user)
+      host_user="$2"
+      shift
+      ;;
+    --no-reboot)
+      no_reboot=1
+      ;;
+    --no-reboot-start)
+      no_reboot_start=1
+      ;;
+    --no-reboot-end)
+      no_reboot_end=1
+      ;;
+    --git-branch)
+      git_branch="$2"
+      shift
+      ;;
+    --help|-h)
+      usage
+      exit 0
+      ;;
+  esac
+
+  shift
+done
+
 DIRECTORY=$(cd `dirname $0` && pwd)
 PYTHON_DIRECTORY="$DIRECTORY/../python"
 
-if [ -n "$1" ]; then
-  vps_name="$1"
-else
+if [ -z "$vps_name" ]; then
   read -p "Nom du vps : " vps_name
 fi
 
-echo "Patienter le temps du reboot"
-python $PYTHON_DIRECTORY/reboot_vps_server.py --rescue "$vps_name"
+if [ -n "$reinstall_first" ]; then
+  echo "Réinstallation du système"
+  python $PYTHON_DIRECTORY/reinstall_vps_server.py --use-current "$vps_name"
+
+  read -p "Appuyer sur une touche quand le serveur est prêt" ready
+fi
+
+if [ -z "$no_reboot" -a -z "$no_reboot_start" ]; then
+  echo "Patienter le temps du reboot"
+  python $PYTHON_DIRECTORY/reboot_vps_server.py --rescue "$vps_name"
+fi
 
-stty -echo
-read -p "Mot de passe reçu par e-mail : " password; echo
-stty echo
+if [ -z "$password" ]; then
+  stty -echo
+  read -p "Mot de passe reçu par e-mail : " password; echo
+  stty echo
+fi
 
 ARCH_DIR=`mktemp -d`
 ARCH_HOST_SCRIPT="$ARCH_DIR/arch_host_script.sh"
 ARCH_CHROOT_SCRIPT="$ARCH_DIR/arch_chroot_script.sh"
 ARCH_INSTALL_SCRIPT="$ARCH_DIR/arch_install_script.sh"
+ARCH_HOST_PUPPET_CONFIGURATION_SCRIPT="$ARCH_DIR/arch_host_puppet_configuration_script.sh"
+ARCH_PUPPET_CONFIGURATION_SCRIPT="$ARCH_DIR/arch_puppet_configuration_script.sh"
+ARCH_PUPPET_INITIAL_CONFIGURATION="$ARCH_DIR/puppet_variables.json"
 
 trap "rm -rf $ARCH_DIR" EXIT
 
+#### Base installation stage
+python $PYTHON_DIRECTORY/get_initial_configuration.py $vps_name > $ARCH_PUPPET_INITIAL_CONFIGURATION
+
 cat > $ARCH_HOST_SCRIPT <<EOF
 #!/bin/bash
 
@@ -58,6 +132,7 @@ cp /tmp/arch_chroot_script.sh /tmp/root.x86_64/
 mount "\$DEVICE"
 
 cp /tmp/arch_install_script.sh "\$MOUNTPOINT/root/"
+cp /tmp/puppet_variables.json "\$MOUNTPOINT/root/"
 
 /tmp/root.x86_64/bin/arch-chroot "\$MOUNTPOINT" /root/arch_install_script.sh
 EOF
@@ -97,7 +172,7 @@ EOF
 cat > $ARCH_INSTALL_SCRIPT <<EOF
 CODE_PATH="/etc/puppetlabs/code"
 rm -rf \$CODE_PATH
-git clone -b master --recursive https://git.immae.eu/perso/Immae/Projets/Puppet.git \$CODE_PATH
+git clone -b $git_branch --recursive https://git.immae.eu/perso/Immae/Projets/Puppet.git \$CODE_PATH
 puppet apply --test \$CODE_PATH/manifests/site.pp
 # The password seed requires puppet to be run twice
 puppet apply --test \$CODE_PATH/manifests/site.pp
@@ -107,18 +182,50 @@ chmod a+x $ARCH_HOST_SCRIPT $ARCH_CHROOT_SCRIPT $ARCH_INSTALL_SCRIPT
 
 expect -f - <<EOF
 set timeout -1
-spawn scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o CheckHostIP=no $ARCH_HOST_SCRIPT $ARCH_CHROOT_SCRIPT $ARCH_INSTALL_SCRIPT root@$vps_name:/tmp
+spawn scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o CheckHostIP=no $ARCH_PUPPET_INITIAL_CONFIGURATION $ARCH_HOST_SCRIPT $ARCH_CHROOT_SCRIPT $ARCH_INSTALL_SCRIPT $host_user@$vps_name:/tmp
+expect "assword:"
+send "$password\n"
+expect eof
+spawn ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o CheckHostIP=no $host_user@$vps_name /tmp/arch_host_script.sh
+expect "assword:"
+send "$password\r"
+expect eof
+EOF
+
+### Role specific stage
+read -p "Press key when LDAP is configured" i
+
+cat > $ARCH_PUPPET_CONFIGURATION_SCRIPT <<EOF
+CODE_PATH="/etc/puppetlabs/code"
+puppet apply --test \$CODE_PATH/manifests/site.pp
+EOF
+
+cat > $ARCH_HOST_PUPPET_CONFIGURATION_SCRIPT <<EOF
+DEVICE_STR=\$(cat /proc/mounts | grep "/dev/sd.. /mnt/")
+DEVICE=\$(echo "\$DEVICE_STR" | cut -d' ' -f1)
+MOUNTPOINT=\$(echo "\$DEVICE_STR" | cut -d' ' -f2)
+
+cp /tmp/arch_puppet_configuration_script.sh "\$MOUNTPOINT/root/"
+
+/tmp/root.x86_64/bin/arch-chroot "\$MOUNTPOINT" /root/arch_puppet_configuration_script.sh
+EOF
+
+chmod a+x $ARCH_PUPPET_CONFIGURATION_SCRIPT $ARCH_HOST_PUPPET_CONFIGURATION_SCRIPT
+
+expect -f - <<EOF
+set timeout -1
+spawn scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o CheckHostIP=no $ARCH_PUPPET_CONFIGURATION_SCRIPT $ARCH_HOST_PUPPET_CONFIGURATION_SCRIPT $host_user@$vps_name:/tmp
 expect "assword:"
 send "$password\n"
 expect eof
-spawn ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o CheckHostIP=no root@$vps_name /tmp/arch_host_script.sh
+spawn ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o CheckHostIP=no $host_user@$vps_name /tmp/arch_host_puppet_configuration_script.sh
 expect "assword:"
 send "$password\r"
 expect eof
 EOF
 
-read -p "Reboot to normal? [Y/n]" reboot
-if [ "x$reboot" != "xn" ]; then
+### Installation finished
+if [ -z "$no_reboot" -a -z "$no_reboot_end" ]; then
   echo "Rebooting"
   python $PYTHON_DIRECTORY/reboot_vps_server.py --local "$vps_name"
 fi