From ec1096d8c0d897ebd1ea445d9c5404a13c33ce2e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Isma=C3=ABl=20Bouya?= Date: Fri, 1 Sep 2017 00:22:47 +0200 Subject: [PATCH] Add install scripts --- .gitignore | 1 + .gitmodules | 3 + bin/install_script.sh | 124 +++++++++++++++++++++++++++++++++ python/ovh | 1 + python/ovh_helper.py | 19 +++++ python/reboot_vps_server.py | 36 ++++++++++ python/reinstall_vps_server.py | 82 ++++++++++++++++++++++ 7 files changed, 266 insertions(+) create mode 100644 .gitignore create mode 100755 bin/install_script.sh create mode 160000 python/ovh create mode 100644 python/ovh_helper.py create mode 100644 python/reboot_vps_server.py create mode 100644 python/reinstall_vps_server.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c7e8afb --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +python/__pycache__/ diff --git a/.gitmodules b/.gitmodules index 24305ea..fa48ebf 100644 --- a/.gitmodules +++ b/.gitmodules @@ -28,3 +28,6 @@ [submodule "modules/pacman"] path = modules/pacman url = git://git.immae.eu/github/aboe76/puppet-pacman +[submodule "python/ovh"] + path = python/ovh + url = git://git.immae.eu/github/ovh/python-ovh diff --git a/bin/install_script.sh b/bin/install_script.sh new file mode 100755 index 0000000..f250285 --- /dev/null +++ b/bin/install_script.sh @@ -0,0 +1,124 @@ +#!/bin/bash + +DIRECTORY=$(cd `dirname $0` && pwd) +PYTHON_DIRECTORY="$DIRECTORY/../python" + +if [ -n "$1" ]; then + vps_name="$1" +else + read -p "Nom du vps : " vps_name +fi + +echo "Patienter le temps du reboot" +python $PYTHON_DIRECTORY/reboot_vps_server.py --rescue "$vps_name" + +stty -echo +read -p "Mot de passe reçu par e-mail : " password; echo +stty echo + +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" + +trap "rm -rf $ARCH_DIR" EXIT + +cat > $ARCH_HOST_SCRIPT < /tmp/root.x86_64/etc/pacman.d/mirrorlist + +DEVICE_STR=\$(cat /proc/mounts | grep "/dev/sd.. /mnt/") +DEVICE=\$(echo "\$DEVICE_STR" | cut -d' ' -f1) +MOUNTPOINT=\$(echo "\$DEVICE_STR" | cut -d' ' -f2) + +umount "\$DEVICE" +UUID=\$(lsblk -rno UUID "\$DEVICE") + +echo "\$UUID" > /tmp/root.x86_64/device_uuid + +cp /tmp/arch_chroot_script.sh /tmp/root.x86_64/ + +/tmp/root.x86_64/bin/arch-chroot /tmp/root.x86_64/ /arch_chroot_script.sh + +mount "\$DEVICE" + +cp /tmp/arch_install_script.sh "\$MOUNTPOINT/root/" + +/tmp/root.x86_64/bin/arch-chroot "\$MOUNTPOINT" /root/arch_install_script.sh +EOF + + +cat > $ARCH_CHROOT_SCRIPT < /mnt/etc/fstab + +umount /mnt +EOF + +cat > $ARCH_INSTALL_SCRIPT <3} %".format(progress), end="") + time.sleep(3) + + print("\rFinished") diff --git a/python/reboot_vps_server.py b/python/reboot_vps_server.py new file mode 100644 index 0000000..7ea301a --- /dev/null +++ b/python/reboot_vps_server.py @@ -0,0 +1,36 @@ +# -*- encoding: utf-8 -*- +import json +from ovh import ovh +import sys +import ovh_helper + +# Credentials are stored in ~/.ovh.conf +# See ovh/README.rst +client = ovh.Client() + +vps_list = client.get('/vps/') +if sys.argv[-1] in vps_list: + vps = sys.argv[-1] +else: + print("VPS not in list:") + for vps in vps_list: + print(vps) + sys.exit(1) + +if "--rescue" in sys.argv: + netboot_mode="rescue" +elif "--local" in sys.argv: + netboot_mode="local" +else: + netboot_mode=None + +current_state=client.get("/vps/{}".format(vps))["netbootMode"] + +if netboot_mode is None or current_state == netboot_mode: + client.post("/vps/{}/reboot".format(vps)) + task_type="rebootVm" +else: + client.put("/vps/{}".format(vps), netbootMode=netboot_mode) + task_type="setNetboot" + +ovh_helper.show_progress(client, vps, task_type) diff --git a/python/reinstall_vps_server.py b/python/reinstall_vps_server.py new file mode 100644 index 0000000..2eea203 --- /dev/null +++ b/python/reinstall_vps_server.py @@ -0,0 +1,82 @@ +# -*- encoding: utf-8 -*- +import json +from ovh import ovh +import sys +import ovh_helper + +# Credentials are stored in ~/.ovh.conf +# See ovh/README.rst +client = ovh.Client() + +vps_list = client.get('/vps/') +if sys.argv[-1] in vps_list: + vps = sys.argv[-1] +else: + print("VPS not in list:") + for vps in vps_list: + print(vps) + sys.exit(1) + +current_distribution = client.get('/vps/{}/distribution'.format(vps)) + +available_templates = client.get('/vps/{}/templates'.format(vps)) + +def print_templates(client, vps, available_templates): + for tid in available_templates: + template = client.get('/vps/{}/templates/{}'.format(vps, tid)) + print("{}: {}".format(template["id"], template["distribution"])) + + +if "--get-state" in sys.argv: + print(client.get('/vps/{}'.format(vps))["state"]) +elif "--use-current" in sys.argv: + if current_distribution['id'] in available_templates: + print("Current template still available, using it") + result = client.post('/vps/{}/reinstall'.format(vps), templateId=current_distribution['id']) + print(result) + ovh_helper.show_progress(client, vps, "reinstallVm") + else: + print("Current template no more available. Chose among:") + print_templates(client, vps, available_templates) +elif sys.argv[-1] in available_templates: + print("Chosen template available, using it") + result = client.post('/vps/{}/reinstall'.format(vps), templateId=int(sys.argv[-1])) + print(result) + ovh_helper.show_progress(client, vps, "reinstallVm") +else: + print("Chosen template not available. Chose among:") + print_templates(client, vps, available_templates) + +# Buy new: +# POST /order/cart +# ovhSubsidiary FR +# POST /order/cart/{cartId}/assign +# GET /vps/datacenter?country=FR +# Get list of vps: +# GET /order/cart/{cartId}/vps +# POST /order/cart/{cartId}/vps +# duration "P1M" +# planCode "vps_ssd_model1" +# pricingMode "default" +# quantity 1 +# POST /order/cart/{cartId}/item/{item}/configuration +# label: "vps_ssd_datacenter" +# value: "gra" +# POST /order/cart/{cartId}/item/{item}/configuration +# label: "vps_ssd_os" +# value: "linux--archlinux--64--en" +# POST /order/cart/{cartId}/item/{item}/configuration +# label: "AUTO_RENEW_VPS" +# value: false +# GET /order/cart/{carId}/summary +# GET /order/cart/{cartId}/checkout +# POST /order/cart/{cartId}/checkout +# waiveRetractationPeriod + +# /me/paymentMean ? /me/order/{orderId}/debt/pay ? + +# Reboot in rescue: +# PUT /vps/{serviceName} +# netbootMode "rescue" / "local" +# changer son nom: +# displayName: "..." -- 2.41.0