#!/bin/bash
+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
+ ;;
+ 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_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
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
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
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 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_script.sh
expect "assword:"
send "$password\r"
expect eof
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 root@$vps_name:/tmp
+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_puppet_configuration_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
### Installation finished
-read -p "Reboot to normal? [Y/n]" reboot
-if [ "x$reboot" != "xn" ]; then
+if [ -z "$no_reboot" -a -z "$no_reboot_end" ]; then
echo "Rebooting"
python $PYTHON_DIRECTORY/reboot_vps_server.py --local "$vps_name"
fi