#!/usr/bin/env bash # # Register all Hâpy Cluster Nodes # . /usr/lib/eole/ihm.sh # # NAME: copy_ssh_id # AIM: Copy the ssh key on the host # PARAM: the hostname of the node # function copy_ssh_id() { local host=${1} CLEF=$(cat ~oneadmin/.ssh/id_rsa.pub) ssh ${host} bash -x <> ~oneadmin/.ssh/authorized_keys chown oneadmin:oneadmin ~oneadmin/.ssh/authorized_keys su - oneadmin -c "ssh-keyscan $host" cat ~oneadmin/.ssh/id_rsa.pub >> ~oneadmin/.ssh/authorized_keys fi EOF [[ ${?} -ne 0 ]] && EchoRouge "Erreur lors de l'échange de clés SSH avec le noeud ${host}" REMOTEKEY=$(su - oneadmin -c "ssh ${host} 'cat ~oneadmin/.ssh/id_rsa.pub'") if ! grep -qs "$REMOTEKEY" ~oneadmin/.ssh/authorized_keys; then su - oneadmin -c "echo ${REMOTEKEY} >> ~oneadmin/.ssh/authorized_keys" fi } function copy_files() { local host=${1} su - oneadmin -c "scp .one/* ${host}:.one/" } # # NAME: register_node # AIM: register the node in OpenNebula master # PARAM: the node hostname # function register_node() { cmd="onehost create -i kvm -v kvm -c 0 ${1}" ret=$(su - ${ONEUSER} -c -- "${cmd}") if [[ ${?} -ne 0 ]] then EchoRouge "Hosts register failed $res" else EchoVert "Hosts register OK" fi } # Fix host creation error from 5.6.1 with sync methode rsync function sync_host() { CMD="onehost" OPT="sync -f --rsync" res=$(su - ${ONEUSER} -c "${CMD} ${OPT}") if [[ ${?} -ne 0 ]] then EchoRouge "Hosts sync failed $res" else EchoVert "Hosts sync OK" fi } # # NAME: wait_node_ok # AIM: Wait until the node is OK or ERROR # PARAM: The node name # function wait_node_ok() { local cmd="onehost show ${1} | awk '/^STATE/ {print \$3}'" local spinstr='|/-\' local delay=0.75 local cnt=0 while [ 1 ] do st=$(su - ${ONEUSER} -c "${cmd}") [[ ${st} == "MONITORED" ]] && break [[ ${st} == '' ]] && break if [[ ${st} == "ERROR" ]] then if [ $cnt -gt 160 ]; then EchoRouge "Erreur lors de l'enregistrement du noeud ${host} !" break fi fi local temp=${spinstr#?} printf " [%c] " "$spinstr" local spinstr=$temp${spinstr%"$temp"} sleep $delay printf "\b\b\b\b\b\b" cnt=$((cnt+1)) done printf " \b\b\b\b" } function init_ha_leader() { # server with index 1 exists if already instanciate onezone show 0 | grep -A 3 ^"HA & FEDERATION SYNC STATUS" | tail -n 1 | grep -q ^" 1 " if [ ! $? = 0 ]; then FOLLOWER=$(CreoleGet one_nodes) for follower in $FOLLOWER; do onezone server-add 0 --name $follower --rpc http://$follower:2633/RPC2 done fi } # # MAIN # HAPY_ACTIF=$(echo $(CreoleGet activer_onesinglenode)) if [[ $HAPY_ACTIF == "non" ]] then EchoRouge "Le serveur de virtualisation n'est pas activé dans l'interface de configuration du module" exit 1 fi HAPY_NODE_SUPPORT=$(echo $(CreoleGet activer_multinode)) if [[ $HAPY_NODE_SUPPORT == "non" ]] then EchoRouge "Le mode multi-noeuds n'est pas activé dans l'interface de configuration du module" exit 1 fi declare -a HAPY_SLV=('') ONEUSER=$(CreoleGet virt_user) HAPY_SLV=$(echo $(CreoleGet one_nodes) | sed -e "s/\n/ /g") echo -e "\n" EchoBleu "Vous allez inscrire un noeud dans une grappe Hâpy" EchoBleu "Pour ce faire vous devez vous munir du mot de passe de l'utilisateur 'oneadmin' de chacun des noeuds" Question_ouinon "Voulez-vous commencer ?" 'True' "oui" if [[ $? -ne 0 ]] then EchoOrange "Abandon de l'enregistrement" exit 1 fi master=1 if [ "$(CreoleGet activer_one_ha)" = "oui" ]; then if [ "$(CreoleGet one_ha_server_index)" != "0" ]; then exit 0 else master=0 fi fi for host in ${HAPY_SLV}; do echo -e "\n" EchoOrange "Traitement du noeud ${host}" echo EchoVert " * Gestion des clés SSH" echo copy_ssh_id ${host} if [ $master = 0 ]; then copy_files ${host} fi EchoVert " * Enregistrement du noeud" register_node ${host} sync_host ${host} wait_node_ok ${host} done if [ $master = 0 ]; then init_ha_leader fi echo -e "\n" EchoVert "Enregistrement des noeuds terminé"