eole-one-master/postservice/99-init-hapy-master
Philippe Caseiro 5985b56e46 Correction de la méthode d'ajout de l'image iso.
On fait télécharger l'image iso directement par ONE.
Pour l'instant pour garder l'esprit on attend la fin
de l'initialisation pour rendre la main, mais on pourrais très
bien laisser l'ajout se faire en tache de fond

ref #17430 @1h (Contribution Cadoles)
2016-10-14 14:53:29 +02:00

151 lines
3.8 KiB
Bash
Executable File

#!/bin/bash
[ $(CreoleGet hapy_init_master) == non ] && exit 0
function error()
{
MSG=${1}
echo "[ERROR][${MSG}]"
exit 1
}
function get_user_home()
{
HOMEDIR=$(getent passwd ${1} | cut -d ':' -f 6)
echo ${HOMEDIR}
}
function get_one_auth()
{
CMD="cat"
HOME=$(get_user_home oneadmin)
FILE="${HOME}/.one/one_auth"
${CMD} ${FILE}
}
function runOneCmd()
{
local cmd=${1}
local opt=${2}
local auth=$(get_one_auth)
$cmd ${opt} --user ${auth%:*} --password ${auth#*:}
return ${?}
}
DISKSIZE=$(CreoleGet hapy_init_master_disk_size)
DISKNAME="DSK-${DISKSIZE}-Go"
DISKDESC="Disque vide de ${DISKSIZE} Go"
VERSIONISO=$(CreoleGet hapy_init_master_iso_version)
MAJORVERSION=${VERSIONISO:0:3}
ISONAME="ISO-Eole-${VERSIONISO}-amd64"
ISODESC="Image ISO EOLE Stable ${VERSIONISO} 64 bits"
ISOURL="http://eole.ac-dijon.fr/pub/iso/EOLE-${MAJORVERSION}/${VERSIONISO}/eole-${VERSIONISO}-alternate-amd64.iso"
TMPLNAME="InstallEole-${VERSIONISO}-amd64"
TMPLDESC="Modèle de VM permettant d'installer un module EOLE ${VERSIONISO} 64 bits (non persistente)"
#echo "########### suppr ${DISKNAME} ###############"
#oneimage delete ${DISKNAME}
#echo
#echo "########### suppr ${ISONAME} ###################"
#oneimage delete ${ISONAME}
#echo
#echo "########### suppr ${TMPLNAME} ###################"
#onetemplate delete ${TMPLNAME}
#echo
#*****************************************************
# DISQUE VIDE
#*****************************************************
if ! runOneCmd "oneimage" "show ${DISKNAME}" &>/dev/null
then
echo "***** Création de ${DISKNAME} *****"
## Attention oneimage create --datastore ne fonctionne pas dans runOneCmd ...
auth=$(get_one_auth)
oneimage create --datastore $(CreoleGet one_ds_image_name) \
--name ${DISKNAME} --type DATABLOCK --description "${DISKDESC}" \
--size $((${DISKSIZE}*1024)) --prefix vd --driver qcow2 --user ${auth%:*} --password ${auth#*:}
runOneCmd "oneimage" "chtype ${DISKNAME} OS"
else
echo "***** ${DISKNAME} existe déjà *****"
fi
echo
#*****************************************************
# Image ISO EOLE Latest Stable
#*****************************************************
if ! runOneCmd "oneimage" "show ${ISONAME}" &>/dev/null
then
echo -ne "***** Création de l'image ${ISONAME} *****\n\n"
FILE=$(mktemp)
cat > ${FILE} <<EOF
NAME="${ISONAME}"
TYPE="CDROM"
DESCRIPTION="${ISODESC}"
DEV_PREFIX="hd"
PATH="${ISOURL}"
PERSISTENT="No"
EOF
runOneCmd "oneimage" "create -d $(CreoleGet one_ds_iso_name) ${FILE}"
/bin/rm -f ${FILE}
spin='-\|/'
i=0
while :
do
imgState=$(runOneCmd "oneimage" "show ${ISONAME}" | awk '{if ($1 == "STATE") {print $3}}')
if [[ ${imgState} == "lock" ]]
then
i=$(( (i+1) %4 ))
printf "\rInitialisation en cours, merci de patienter [${spin:$i:1}] "
sleep 2
else
printf "\r Création terminée, l'image a le statut : ${imgState}\n"
break
fi
done
rm -f "/tmp/eole-${VERSIONISO}-alternate-amd64.iso"
else
echo "***** ${ISONAME} existe déjà *****"
fi
echo
#*****************************************************
# Template EOLEBASE
#*****************************************************
if ! onetemplate show "${TMPLNAME}" &>/dev/null
then
echo "***** Création de ${TMPLNAME} *****"
FILE=$(mktemp)
cat > ${FILE} <<EOF
NAME="${TMPLNAME}"
DESCRIPTION="${TMPLDESC}"
INPUT=[BUS="usb",TYPE="tablet"]
CPU="0.2"
DISK=[DEV_PREFIX="vd",IMAGE_UNAME="oneadmin",IMAGE="${DISKNAME}",DRIVER="qcow2"]
DISK=[DEV_PREFIX="hd",IMAGE_UNAME="oneadmin",IMAGE="${ISONAME}",DRIVER="raw"]
FEATURES=[ACPI="yes",PAE="no",LOCALTIME="yes"]
VCPU="1"
GRAPHICS=[LISTEN="0.0.0.0",TYPE="vnc",KEYMAP="fr"]
OS = [ ARCH = "x86_64", BOOT = "disk0,disk1" ]
MEMORY="1024"
EOF
#NIC=[MODEL="virtio",NETWORK="CR_eole"]
runOneCmd "onetemplate" "create ${FILE}"
/bin/rm -f ${FILE}
else
echo "***** ${TMPLNAME} existe déjà *****"
fi
echo
exit 0