eole-one-master/postservice/30-one-mng
Philippe Caseiro 1a911bd9fc Utilisation du cluster par défaut ONE 5.0
Plutôt que de créer un cluster "par défaut" eole on utilise la
fonctionnalité incluse dans ONE 5.0

Toutes les resources sont automatiquement attachées au cluster défaut.

ref #16797 @2h
2016-07-21 15:17:42 +02:00

466 lines
10 KiB
Bash
Executable File

#!/usr/bin/env bash
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}
}
# ref https://dev-eole.ac-dijon.fr/issues/16797
#function check_cluster()
#{
# name="${1}"
# cmd="onecluster"
# opt="list"
# auth=$(get_one_auth)
#
# res=0
# clst_list=$(${cmd} ${opt} --user ${auth%:*} --password ${auth#*:} | tail -n +2 | awk -F ' ' '{print $2}')
# for hst in ${clst_list}
# do
# [[ "${NAME}" = "${hst}" ]] && res=$((res+1))
# done
# return ${res}
#}
# ref https://dev-eole.ac-dijon.fr/issues/16797
#function manage_cluster()
#{
# NAME="${1}"
# CMD="onecluster create"
# AUTH=$(get_one_auth)
#
# check_cluster ${clst_name}
# if [[ ${?} -eq 0 ]]
# then
# crt=$(${CMD} --user ${AUTH%:*} --password ${AUTH#*:} ${NAME})
# if [[ ${?} -ne 0 ]]
# then
# error "Cluster create failed"
# else
# echo "Cluster ${NAME} created"
# fi
# else
# echo "Cluster \"${NAME}\" already exist"
# fi
#}
function check_host()
{
name="${1}"
cmd="onehost"
opt="list"
auth=$(get_one_auth)
res=0
clst_list=$(${cmd} ${opt} --user ${auth%:*} --password ${auth#*:} | tail -n +2 | awk -F ' ' '{print $2}')
for hst in ${clst_list}
do
[[ "${NAME}" = "${hst}" ]] && res=$((res+1))
done
return ${res}
}
function manage_host()
{
NAME=${1}
CMD="onehost"
IM_MAD='kvm'
VM_MAD='kvm'
OPT="create ${NAME} -i ${IM_MAD} -v ${VM_MAD}"
AUTH=$(get_one_auth)
check_host ${NAME}
if [[ ${?} -eq 0 ]]
then
res=$(${CMD} ${OPT} --user ${AUTH%:*} --password ${AUTH#*:})
if [[ ${?} -ne 0 ]]
then
error "Host creation failed"
else
echo "Host ${NAME} created"
fi
else
echo "Host ${NAME} already exist"
fi
}
function get_cluster_id_by_name()
{
name=${1}
cmd="onecluster"
opt="show ${name}"
opt="list -l ID,NAME -f NAME=${name} --csv"
res=$(${cmd} ${opt} --user ${AUTH%:*} --password ${AUTH#*:} | awk -F ',' '/^[0-9]/ { print $1 }')
if [[ ${?} -eq 0 ]]
then
echo ${res#*:}
return 0
else
echo ""
return 1
fi
}
#
# Get Host ID by a name
#
function get_host_id_by_name()
{
name=${1}
cmd="onehost"
opt="show ${name}"
res=$(${cmd} ${opt} --user ${AUTH%:*} --password ${AUTH#*:} | grep "ID.*:")
if [[ ${?} -eq 0 ]]
then
echo ${res#*:}
return 0
else
echo ""
return 1
fi
}
#
# Get Datastore ID by a name
#
function get_ds_id_by_name()
{
name=${1}
cmd="onedatastore"
opt="show ${name}"
res=$(${cmd} ${opt} --user ${AUTH%:*} --password ${AUTH#*:} | grep "ID.*:")
if [[ ${?} -eq 0 ]]
then
echo ${res#*:}
return 0
else
echo "ERR"
return 1
fi
}
#
# check_host_in_cluster
# if host is attached to cluster : return 0
# if host not attached to cluster : return 1
#
function check_host_in_cluster()
{
hst=${1}
clst=${2}
auth=$(get_one_auth)
cmd="onehost"
opt="show ${hst} --user ${AUTH%:*} --password ${AUTH#*:}"
RES=$(${cmd} ${opt} | grep CLUSTER)
cluster=${RES#*:}
# clean Outpu
cluster="${cluster#"${cluster%%[![:space:]]*}"}" # remove leading whitespace characters
cluster="${cluster%"${cluster##*[![:space:]]}"}" # remove trailing whitespace characters
if [[ "${cluster}" = "${clst}" ]]
then
return 0
else
return 1
fi
}
#
# Attach a host to a cluster
#
function attach_host()
{
HOST=${1}
CLST=${2}
# ref https://dev-eole.ac-dijon.fr/issues/16797
#CLST_ID=$(get_cluster_id_by_name ${CLST})
CLST_ID=0
HST_ID=$(get_host_id_by_name ${HOST})
AUTH=$(get_one_auth)
CMD="onecluster"
OPT="addhost ${CLST_ID} ${HST_ID}"
check_host_in_cluster ${HOST} ${CLST}
if [[ ${?} -eq 1 ]]
then
if [[ -n ${CLST_ID} ]]
then
if [[ -n ${HST_ID} ]]
then
RES=$(${CMD} ${OPT} --user ${AUTH%:*} --password ${AUTH#*:})
if [[ ${?} -ne 0 ]]
then
error "Attaching ${HOST} to ${CLST} failed"
else
echo "${HOST} attached to ${CLST}"
return 0
fi
else
error "No host id for ${HOST}"
fi
else
error "No Cluster id for ${CLST}"
fi
else
echo "Host ${HOST} already present in cluster ${CLST}"
fi
return 0
}
#
# Attach a datastore to a cluster
#
# ref https://dev-eole.ac-dijon.fr/issues/16797
#function attach_ds_to_cluster()
#{
# DS=${1}
# CLST=${2}
# CLST_ID=$(get_cluster_id_by_name ${CLST})
# DS_ID=$(get_ds_id_by_name ${ds_name})
# AUTH=$(get_one_auth)
# CMD="onecluster"
# OPT="adddatastore ${CLST_ID} ${DS_ID}"
#
# RES=$(${CMD} ${OPT} --user ${AUTH%:*} --password ${AUTH#*:})
# if [[ ${?} -ne 0 ]]
# then
# error "Attaching ${DS} to ${CLST} failed."
# else
# echo "Datastore ${DS} attached to ${CLST}."
# return 0
# fi
# return 0
#}
function create_datastore()
{
ds_type="${1}"
ds_name="${2}"
# ref https://dev-eole.ac-dijon.fr/issues/16797
#ds_cluster="${3}"
if [[ $(CreoleGet activer_multinode 2>&1) == 'oui' ]]
then
SYS_TM_MAD='ssh'
ISO_TM_MAD='ssh'
IMG_TM_MAD='ssh'
else
SYS_TM_MAD='shared'
ISO_TM_MAD='shared'
IMG_TM_MAD='qcow2'
fi
echo "Creating datastore ${ds_name}"
TMPL_FILE=$(mktemp)
case ${ds_type} in
"SYSTEM")
cat <<__EOF__ > ${TMPL_FILE}
NAME = ${ds_name}
TM_MAD = ${SYS_TM_MAD}
TYPE = SYSTEM_DS
__EOF__
;;
"ISO")
cat <<__EOF__ > ${TMPL_FILE}
NAME = ${ds_name}
DS_MAD = fs
TM_MAD = ${ISO_TM_MAD}
TYPE = IMAGE_DS
__EOF__
;;
"IMAGE")
cat <<__EOF__ > ${TMPL_FILE}
NAME = ${ds_name}
DS_MAD = fs
TM_MAD = ${ISO_TM_MAD}
TYPE = IMAGE_DS
__EOF__
;;
*) echo "Nothing to do with ${ds_type}"
;;
esac
auth=$(get_one_auth)
cmd="onedatastore"
opt="create --user ${AUTH%:*} --password ${AUTH#*:} ${TMPL_FILE}"
RUN=$(${cmd} ${opt})
if [[ ${?} -eq 0 ]]
then
# ref https://dev-eole.ac-dijon.fr/issues/16797
#attach_ds_to_cluster ${ds_name} ${ds_cluster}
rm ${TMPL_FILE}
return 0
else
return 1
fi
}
function update_datastore()
{
local auth=${1}
local ds_id=${2}
local cmd="onedatastore"
local opt="show"
local multinode=$(CreoleGet activer_multinode 2>&1)
ds_type=""
ds_mad=""
ds_name=""
TMPL_FILE=$(mktemp)
if [[ ${multinode} == 'oui' ]]
then
SYS_TM_MAD='ssh'
ISO_TM_MAD='ssh'
IMG_TM_MAD='ssh'
else
SYS_TM_MAD='shared'
ISO_TM_MAD='shared'
IMG_TM_MAD='qcow2'
fi
out=$(${cmd} ${opt} ${ds_id} --user ${auth%:*} --password ${auth#*:} | \
awk -F ':' '/^DATASTORE.*INFORMATION/,/DATASTORE CAPACITY/ {gsub(" |\t",""); print $1 ":" $2 " " }')
for line in ${out}
do
[[ ${line} =~ ^TM_MAD ]] && ds_mad=${line#*:}
[[ ${line} =~ ^NAME ]] && ds_name=${line#*:}
[[ ${line} =~ ^TYPE ]] && ds_type=${line#*:}
done
if [[ ${ds_name} == "$(CreoleGet one_ds_system_prefix 2>&1)$(CreoleGet one_cluster_name 2>&1)" ]]
then
cat <<__EOF__ > ${TMPL_FILE}
NAME = ${ds_name}
TM_MAD = ${SYS_TM_MAD}
TYPE = SYSTEM_DS
__EOF__
elif [[ ${ds_name} == "$(CreoleGet one_ds_iso_name 2>&1)" ]]
then
cat <<__EOF__ > ${TMPL_FILE}
NAME = ${ds_name}
DS_MAD = fs
TM_MAD = ${ISO_TM_MAD}
TYPE = IMAGE_DS
__EOF__
elif [[ ${ds_name} == "$(CreoleGet one_ds_image_name 2>&1)" ]]
then
cat <<__EOF__ > ${TMPL_FILE}
NAME = ${ds_name}
DS_MAD = fs
TM_MAD = ${ISO_TM_MAD}
TYPE = IMAGE_DS
__EOF__
else
echo "Nothing to do with ${ds_name}"
fi
if [[ -s ${TMPL_FILE} ]]
then
echo "Updating ${ds_name} datastore"
opt="update ${ds_id} --user ${AUTH%:*} --password ${AUTH#*:} ${TMPL_FILE}"
RUN=$(${cmd} ${opt})
rm ${TMPL_FILE}
return ${?}
else
rm ${TMPL_FILE}
return 1
fi
}
function manage_datastores()
{
# ref https://dev-eole.ac-dijon.fr/issues/16797
#cluster=${1}
AUTH=$(get_one_auth)
# ref https://dev-eole.ac-dijon.fr/issues/16797
#SYSTEM_DS="$(CreoleGet 'one_ds_system_prefix')${cluster}"
SYSTEM_DS="$(CreoleGet 'one_ds_system_prefix')default"
ISO_DS=$(CreoleGet 'one_ds_iso_name')
IMAGE_DS=$(CreoleGet 'one_ds_image_name')
echo "Configuring datastores for Cluster"
sid=$(get_ds_id_by_name ${SYSTEM_DS})
if [[ ${sid} = "ERR" ]]
then
# ref https://dev-eole.ac-dijon.fr/issues/16797
#create_datastore "SYSTEM" "${SYSTEM_DS}" "${cluster}"
create_datastore "SYSTEM" "${SYSTEM_DS}"
else
update_datastore ${AUTH} ${sid}
fi
imgid=$(get_ds_id_by_name ${IMAGE_DS})
if [[ ${imgid} = "ERR" ]]
then
# ref https://dev-eole.ac-dijon.fr/issues/16797
#create_datastore "IMAGE" "${IMAGE_DS}" "${cluster}"
create_datastore "IMAGE" "${IMAGE_DS}"
else
update_datastore ${AUTH} ${imgid}
fi
isoid=$(get_ds_id_by_name ${ISO_DS})
if [[ ${isoid} = "ERR" ]]
then
# ref https://dev-eole.ac-dijon.fr/issues/16797
#create_datastore "ISO" "${ISO_DS}" "${cluster}"
create_datastore "ISO" "${ISO_DS}"
else
update_datastore ${AUTH} ${isoid}
fi
return 0
}
function main()
{
#
# Creating Cluster
# ref https://dev-eole.ac-dijon.fr/issues/16797
#clst_name=$(CreoleGet one_cluster_name)
#manage_cluster ${clst_name}
#
# Creating Host
#
if [[ $(CreoleGet eole_module non) != 'hapy-master' ]]
then
host=$(CreoleGet nom_machine)
manage_host ${host}
fi
#
# Attaching Host to the Cluster
#
attach_host ${host} "default"
#
# Création des Datastores
#
manage_datastores ${clst_name}
}
main