#!/bin/bash XOCE_URL=https://uc3fc0e7c2aafdcea60a54db869b.dl.dropboxusercontent.com/cd/0/get/AZsCF-1ggRq7uk7IepmCXK4NASdkyvL-YDEbazuBxG9ZUQc2vVrkUPNiB1lDW1cDdmoafsn84D9MSo7yEn0Qz7ABW3SW2fcOL4cxA8fbNzEe_eOjpBhGYFYT3bCoARbWfByzgWiUl5rvfHM76kanjvV0hkV-UsZDjAW-Ylf70LiH7D3lkss8tV4qrhVdkM3K0G0/file?_download_id=44470062456430996702426281550995225554333998644336307225466583324&_notify_domain=www.dropbox.com&dl=1 # Welcome message printf "\n\033[1mWelcome to the XOCE auto-deploy script!\033[0m\n\n" if ! which xe 2> /dev/null >&2 then echo echo 'Sorry, the xe command is required for this auto-deploy.' echo echo 'Please, make sure you are on a XenServer host.' echo exit 1 fi # Basic check: are we on a XS host? if grep -Fxq "XenServer" /etc/issue then printf "\nSorry, it seems you are not on a XenServer (XCP-ng) host.\n\n" printf "\n\033[1mThis script is meant to be deployed on XenServer (or XCP-ng) only.\033[0m\n\n" exit 1 fi # Initial choice on network settings: fixed IP or DHCP? (default) printf "Network settings:\n" read -p "IP address? [dhcp] " ip ip=${ip:-dhcp} if [ "$ip" != 'dhcp' ] then read -p "Netmask? [255.255.255.0] " netmask netmask=${netmask:-255.255.255.0} read -p "Gateway? " gateway read -p "dns? [8.8.8.8] " dns dns=${dns:-8.8.8.8} else printf "\nYour XOCE will be started using DHCP\n\n" fi # Downloading and importing the VM printf "Importing XOCE VM…\n" uuid=$(xe vm-import url="$XOCE_URL" 2> /dev/null) # If it fails (it means XS < 7.0) # We'll use the curl import=$? if [ $import -ne 0 ] then uuid=$(curl "$XOCE_URL" | xe vm-import filename=/dev/stdin 2>&1) fi # If it fails again (for any reason), we stop the script import=$? if [ $import -ne 0 ] then printf "\n\nAuto deploy failed. Please contact us on xen-orchestra.com live chat for assistance.\nError:\n\n %s\n\n" "$uuid" exit 0 fi # If static IP selected, fill the xenstore if [ "$ip" != 'dhcp' ] then xe vm-param-set uuid=$uuid xenstore-data:vm-data/ip=$ip xenstore-data:vm-data/netmask=$netmask xenstore-data:vm-data/gateway=$gateway xenstore-data:vm-data/dns=$dns fi # Starting the VM printf "Booting XOCE VM…\n" xe vm-start uuid=$uuid sleep 2 # Waiting for the VM IP from Xen tools for 60 secs printf "Waiting for your XOCE to be ready…\n" url=$(xe vm-param-get uuid=$uuid param-name=networks param-key=0/ip 2> /dev/null) wait=0 limit=60 while [ -z "$url" -a "$wait" -lt "$limit" ] do let wait=wait+1 sleep 1 url=$(xe vm-param-get uuid=$uuid param-name=networks param-key=0/ip 2> /dev/null) done # End of the process. Display the XOCE URL if possible # If we use a fixed IP but on a DHCP enabled network # We don't want to get the first IP displayed by the tools # But the fixed one if [ "$ip" != 'dhcp' ] then printf "\n\033[1mYour XOCE is ready on https://%s/\033[0m\n" "$ip" # clean the xenstore data xe vm-param-remove param-name=xenstore-data param-key=vm-data/dns param-key=vm-data/ip param-key=vm-data/netmask param-key=vm-data/gateway uuid=$uuid # If we can't fetch the IP from tools elif [ -z "$url" ] then printf "\n\033[1mYour XOCE booted but we couldn't fetch its IP address\033[0m\n" else printf "\n\033[1mYour XOCE is ready on https://%s/\033[0m\n" "$url" fi printf "\nDefault UI credentials: admin@admin.net/admin\nDefault console credentials: xoce/xoce\n" printf "\nVM UUID: %s\n\n" "$uuid"