]> git.immae.eu Git - perso/Immae/Projets/Puppet.git/commitdiff
Merge install scripts
authorIsmaël Bouya <ismael.bouya@normalesup.org>
Fri, 16 Mar 2018 18:14:29 +0000 (19:14 +0100)
committerIsmaël Bouya <ismael.bouya@normalesup.org>
Fri, 16 Mar 2018 19:13:46 +0000 (20:13 +0100)
13 files changed:
bin/install_script.sh [moved from bin/install_script_ovh_vps_ssd.sh with 55% similarity]
bin/install_script_ovh_cloud_instance.sh [deleted file]
python/buy_ovh_vps_ssd.py [moved from python/buy_vps_server.py with 100% similarity]
python/get_initial_configuration_ovh_cloud_instance.py [moved from python/get_initial_configuration_cloud_instance.py with 52% similarity]
python/get_initial_configuration_ovh_vps_ssd.py [moved from python/get_initial_configuration.py with 100% similarity]
python/list_servers.py
python/ovh_helper.py
python/reboot_ovh_cloud_instance.py [moved from python/reboot_cloud_instance.py with 52% similarity]
python/reboot_ovh_vps_ssd.py [moved from python/reboot_vps_server.py with 100% similarity]
python/reinstall_ovh_cloud_instance.py [moved from python/reinstall_cloud_instance.py with 71% similarity]
python/reinstall_ovh_vps_ssd.py [moved from python/reinstall_vps_server.py with 100% similarity]
scripts/ovh_cloud_instance/arch_host_script.sh
scripts/send_and_run.tcl

similarity index 55%
rename from bin/install_script_ovh_vps_ssd.sh
rename to bin/install_script.sh
index b5b0efbbc9978b34dca092155e10a55e5ed0b1b4..bd7f38bdd9008a4caf7a4b43063e84457f394b57 100755 (executable)
@@ -2,39 +2,63 @@
 
 usage() {
 cat <<EOF
-  $0 [options]
+$(basename $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)
+
+  One of the following options is necessary:
+  --instance-id id        Id of the cloud instance
+  --vps-id id             Id of the vps
+
+  Optional arguments:
+  --password password     Password of the host (only useful in case of no reboot and vps)
   --reinstall-first       Start with reinstalling the vps
-  --host-user user        Use another user (default: root)
+  --host-user user        Use another user than the default one
   --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)
-  --environment           Environment to use for the installl (default: production)
+  --git-branch branch     Use another puppet branch (default: master)
+  --environment env       Environment to use for the install (default: production)
 EOF
 }
 
 set -e
 
-host_user=root
 git_branch=master
 environment=production
+host_user=""
+password=""
+T=""
 
 while [ -n "$1" ]; do
   case "$1" in
-    --vps)
-      vps_name="$2"
+    --instance-id)
+      host_id="$2"
+      if [ -z "$host_user" ]; then
+        host_user="arch"
+      fi
+      if [ -z "$password" ]; then
+        password="x"
+      fi
+      [ -n "$T" ] && usage && exit 1
+      T="ovh_cloud_instance"
       shift
       ;;
-    --reinstall-first)
-      reinstall_first=1
+    --vps-id)
+      host_id="$2"
+      if [ -z "$host_user" ]; then
+        host_user="root"
+      fi
+      [ -n "$T" ] && usage && exit 1
+      T="ovh_vps_ssd"
+      shift
       ;;
     --password)
       password="$2"
       shift
       ;;
+    --reinstall-first)
+      reinstall_first=1
+      ;;
     --host-user)
       host_user="$2"
       shift
@@ -65,24 +89,27 @@ while [ -n "$1" ]; do
   shift
 done
 
+if [ -z "$T" -o -z "$host_id" ]; then
+  usage
+  exit 1
+fi
+
 DIRECTORY=$(cd `dirname $0` && pwd)
 PYTHON_DIRECTORY="$DIRECTORY/../python"
 SCRIPTS="$DIRECTORY/../scripts"
 
-if [ -z "$vps_name" ]; then
-  read -p "Nom du vps : " vps_name
-fi
-
 if [ -n "$reinstall_first" ]; then
   echo "Réinstallation du système"
-  python $PYTHON_DIRECTORY/reinstall_vps_server.py --use-current "$vps_name"
+  python $PYTHON_DIRECTORY/reinstall_$T.py --use-current "$host_id"
 
   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"
+  python $PYTHON_DIRECTORY/reboot_$T.py --rescue "$host_id"
+
+  read -p "Appuyer sur une touche quand l'instance a redémarré" ready
 fi
 
 if [ -z "$password" ]; then
@@ -92,19 +119,24 @@ if [ -z "$password" ]; then
 fi
 
 ARCH_DIR=`mktemp -d`
-ARCH_HOST_SCRIPT="$SCRIPTS/ovh_vps_ssd/arch_host_script.sh"
-ARCH_CHROOT_SCRIPT="$SCRIPTS/ovh_vps_ssd/arch_chroot_script.sh"
+ARCH_HOST_SCRIPT="$SCRIPTS/$T/arch_host_script.sh"
+if [ -f "$SCRIPTS/$T/arch_chroot_script.sh" ]; then
+  ARCH_CHROOT_SCRIPT="$SCRIPTS/$T/arch_chroot_script.sh"
+else
+  ARCH_CHROOT_SCRIPT=""
+fi
 ARCH_INSTALL_SCRIPT="$SCRIPTS/arch_install_script.sh"
-ARCH_HOST_PUPPET_CONFIGURATION_SCRIPT="$SCRIPTS/ovh_vps_ssd/arch_host_puppet_configuration_script.sh"
+ARCH_HOST_PUPPET_CONFIGURATION_SCRIPT="$SCRIPTS/$T/arch_host_puppet_configuration_script.sh"
 ARCH_PUPPET_CONFIGURATION_SCRIPT="$SCRIPTS/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
+python $PYTHON_DIRECTORY/get_initial_configuration_$T.py $host_id > $ARCH_PUPPET_INITIAL_CONFIGURATION
+host_address=$(python $PYTHON_DIRECTORY/get_initial_configuration_$T.py $host_id | jq -r '.ips.v4.ipAddress')
 
-dest="$host_user@$vps_name"
+dest="$host_user@$host_address"
 files="$ARCH_HOST_SCRIPT $ARCH_CHROOT_SCRIPT $ARCH_PUPPET_INITIAL_CONFIGURATION $ARCH_INSTALL_SCRIPT"
 
 $SCRIPTS/send_and_run.tcl "$dest" "$password" "$git_branch" "$environment" $files
@@ -119,5 +151,5 @@ $SCRIPTS/send_and_run.tcl "$dest" "$password" "$git_branch" "$environment" $file
 ### Installation finished
 if [ -z "$no_reboot" -a -z "$no_reboot_end" ]; then
   echo "Rebooting"
-  python $PYTHON_DIRECTORY/reboot_vps_server.py --local "$vps_name"
+  python $PYTHON_DIRECTORY/reboot_$T.py --local "$host_id"
 fi
diff --git a/bin/install_script_ovh_cloud_instance.sh b/bin/install_script_ovh_cloud_instance.sh
deleted file mode 100755 (executable)
index e1c8a54..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-#!/bin/bash
-
-usage() {
-cat <<EOF
-  $0 [options]
-  --help,-h               This help
-  --instance-id id        Id of the instance
-  --reinstall-first       Start with reinstalling the vps
-  --host-user user        Use another user (default: arch)
-  --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)
-  --environment           Environment to use for the installl (default: production)
-EOF
-}
-
-set -e
-
-host_user=arch
-git_branch=master
-environment=production
-
-while [ -n "$1" ]; do
-  case "$1" in
-    --instance-id)
-      instance_id="$2"
-      shift
-      ;;
-    --reinstall-first)
-      reinstall_first=1
-      ;;
-    --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
-      ;;
-    --environment)
-      environment="$2"
-      shift
-      ;;
-    --help|-h)
-      usage
-      exit 0
-      ;;
-  esac
-
-  shift
-done
-
-DIRECTORY=$(cd `dirname $0` && pwd)
-PYTHON_DIRECTORY="$DIRECTORY/../python"
-SCRIPTS="$DIRECTORY/../scripts"
-
-if [ -z "$instance_id" ]; then
-  read -p "Id de l'instance : " instance_id
-fi
-
-if [ -n "$reinstall_first" ]; then
-  echo "Réinstallation du système"
-  python $PYTHON_DIRECTORY/reinstall_cloud_instance.py --use-current "$instance_id"
-
-  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_cloud_instance.py --rescue "$instance_id"
-
-  read -p "Appuyer sur une touche quand l'instance a redémarré" ready
-fi
-
-ARCH_DIR=`mktemp -d`
-ARCH_HOST_SCRIPT="$SCRIPTS/ovh_cloud_instance/arch_host_script.sh"
-ARCH_INSTALL_SCRIPT="$SCRIPTS/arch_install_script.sh"
-ARCH_HOST_PUPPET_CONFIGURATION_SCRIPT="$SCRIPTS/ovh_cloud_instance/arch_host_puppet_configuration_script.sh"
-ARCH_PUPPET_CONFIGURATION_SCRIPT="$SCRIPTS/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_cloud_instance.py $instance_id > $ARCH_PUPPET_INITIAL_CONFIGURATION
-host_address=$(python $PYTHON_DIRECTORY/get_initial_configuration_cloud_instance.py $instance_id | jq -r '.ips.v4.ipAddress')
-
-dest="$host_user@$host_address"
-files="$ARCH_HOST_SCRIPT $ARCH_PUPPET_INITIAL_CONFIGURATION $ARCH_INSTALL_SCRIPT"
-
-$SCRIPTS/send_and_run.tcl "$dest" "" "$git_branch" "$environment" $files
-
-### Role specific stage
-read -p "Press key when LDAP is configured" i
-
-files="$ARCH_HOST_PUPPET_CONFIGURATION_SCRIPT $ARCH_PUPPET_CONFIGURATION_SCRIPT"
-
-$SCRIPTS/send_and_run.tcl "$dest" "" "$git_branch" "$environment" $files
-
-### Installation finished
-if [ -z "$no_reboot" -a -z "$no_reboot_end" ]; then
-  echo "Rebooting"
-  python $PYTHON_DIRECTORY/reboot_cloud_instance.py --local "$instance_id"
-fi
similarity index 52%
rename from python/get_initial_configuration_cloud_instance.py
rename to python/get_initial_configuration_ovh_cloud_instance.py
index 41577163e96fe95f43d9993e59625e0a6f0a210c..844373c3a519ae2ae3f206a1040e92543ea9e854 100644 (file)
@@ -6,6 +6,7 @@ except ImportError:
     # In case it's installed globally
     import ovh
 import sys
+from ovh_helper import find_cloud_instance
 
 infos = {}
 
@@ -13,19 +14,7 @@ infos = {}
 # See ovh/README.rst
 client = ovh.Client()
 
-projects_list = client.get('/cloud/project/')
-if len(projects_list) > 1:
-    print("More than one project is not supported, taking the first one")
-project = projects_list[0]
-instances_list = client.get('/cloud/project/{}/instance'.format(project))
-instances = dict(map(lambda x: (x["id"], x), instances_list))
-if sys.argv[-1] in instances:
-    instance = instances[sys.argv[-1]]
-else:
-    print("Instance not in list:")
-    for instance in instances_list:
-        print("{}: {}".format(instance["name"], instance["id"]))
-    sys.exit(1)
+_, instance = find_cloud_instance(client, sys.argv[-1])
 
 infos["ips"] = {}
 for ip_infos in instance["ipAddresses"]:
index 9b8bc64b5362c9cbb669a47c4e0dbdab244ba105..e7bd2af9a27ed5c5a205dc60678a77bffd30da10 100644 (file)
@@ -6,7 +6,18 @@ except ImportError:
 
 client = ovh.Client()
 
+print("OVH cloud instances:")
+projects_list = client.get('/cloud/project/')
+for project_id in projects_list:
+    project = client.get('/cloud/project/{}'.format(project_id))
+    print("\t{}:".format(project["description"]))
+    instances_list = client.get('/cloud/project/{}/instance'.format(project_id))
+    for instance in instances_list:
+        print("\t\t{}: {}".format(instance["name"], instance["id"]))
+
 vps_list = client.get('/vps/')
 
+print("OVH VPS SSD servers:")
 for vps in vps_list:
-    print(vps)
+    print("\t{}".format(vps))
+
index a49a245ae7233e93a500bdbd844906de2f18599b..19834ae2004508da78c2928f80f03872e2b5476c 100644 (file)
@@ -1,4 +1,5 @@
 import time
+import sys
 
 def show_progress(client, vps, task_type):
     running_task_id = client.get("/vps/{}/tasks?type={}".format(vps, task_type))[0]
@@ -17,3 +18,19 @@ def show_progress(client, vps, task_type):
         time.sleep(3)
 
     print("\rFinished")
+
+def find_cloud_instance(client, instance_id):
+    projects_list = client.get('/cloud/project/')
+    instances_list = []
+    for project in projects_list:
+        instances_list += list(map(lambda x: [project, x],
+                client.get('/cloud/project/{}/instance'.format(project))))
+    instances = dict(map(lambda x: (x[1]["id"], x), instances_list))
+    if instance_id in instances:
+        project_instance = instances[instance_id]
+    else:
+        print("Instance not in list:")
+        for instance in instances_list:
+            print("{}: {}".format(instance[1]["name"], instance[1]["id"]))
+        sys.exit(1)
+    return project_instance
similarity index 52%
rename from python/reboot_cloud_instance.py
rename to python/reboot_ovh_cloud_instance.py
index b90f488826c0243f9c233a2cf469dc822d069c1f..de20c07c1a905789f5c129ec797c0626de664efd 100644 (file)
@@ -6,24 +6,13 @@ except ImportError:
     # In case it's installed globally
     import ovh
 import sys
+from ovh_helper import find_cloud_instance
 
 # Credentials are stored in ~/.ovh.conf
 # See ovh/README.rst
 client = ovh.Client()
 
-projects_list = client.get('/cloud/project/')
-if len(projects_list) > 1:
-    print("More than one project is not supported, taking the first one")
-project = projects_list[0]
-instances_list = client.get('/cloud/project/{}/instance'.format(project))
-instances = dict(map(lambda x: (x["id"], x), instances_list))
-if sys.argv[-1] in instances:
-    instance = instances[sys.argv[-1]]
-else:
-    print("Instance not in list:")
-    for instance in instances_list:
-        print("{}: {}".format(instance["name"], instance["id"]))
-    sys.exit(1)
+project, instance = find_cloud_instance(client, sys.argv[-1])
 
 if "--rescue" in sys.argv:
     netboot_mode="rescue"
similarity index 71%
rename from python/reinstall_cloud_instance.py
rename to python/reinstall_ovh_cloud_instance.py
index c488fda23f4de2d3e408f14a476a492e46821bc8..c0d26174821bf7e0bb4a13b86371b55a2d85765d 100644 (file)
@@ -6,24 +6,13 @@ except ImportError:
     # In case it's installed globally
     import ovh
 import sys
+from ovh_helper import find_cloud_instance
 
 # Credentials are stored in ~/.ovh.conf
 # See ovh/README.rst
 client = ovh.Client()
 
-projects_list = client.get('/cloud/project/')
-if len(projects_list) > 1:
-    print("More than one project is not supported, taking the first one")
-project = projects_list[0]
-instances_list = client.get('/cloud/project/{}/instance'.format(project))
-instances = dict(map(lambda x: (x["id"], x), instances_list))
-if sys.argv[-1] in instances:
-    instance = instances[sys.argv[-1]]
-else:
-    print("Instance not in list:")
-    for instance in instances_list:
-        print("{}: {}".format(instance["name"], instance["id"]))
-    sys.exit(1)
+project, instance = find_cloud_instance(client, sys.argv[-1])
 
 current_image = instance["imageId"]
 available_images = client.get('/cloud/project/{}/image'.format(project),
index c188514035d6ab8402981eaa16ef56d48d880f8d..34085633f7ffb5d4093829743ac5c4660fe2dbcd 100755 (executable)
@@ -29,7 +29,7 @@ sudo mount "$DEVICE" /mnt
 for i in /mnt/*; do
   if [ "$i" = "/mnt/boot" ]; then
     # keep /boot/grub
-    sudo rm -f $i/*
+    sudo rm -f $i/* || true
   else
     sudo rm -rf $i
   fi
index a087a2dbf964e77b369363ab4242fc3240153be8..42fae625e771a2ff39a33dcc86e62d5ca817034c 100755 (executable)
@@ -6,7 +6,7 @@ set environment [lindex $argv 3]
 set script [lindex $argv 4]
 set files [lrange $argv 4 end]
 
-if {$password == ""} {
+if {$password == "x"} {
   set ask_password 0
 } else {
   set ask_password 1