#!/bin/bash ## Récupérer l'emplacement actuel currentPath=$(dirname $0) ## Récupérer le nom du script scriptName=$(basename $0) # Définir l'emplacement de la liste containersList="${currentPath}/containers.csv" # Définir l'aide show_usage() { echo "Usage: ${currentPath}/${scriptName} [options [parameters]]" echo echo "Options:" echo " -b or --balance: move containers" echo " -l or --list: generate list of current balance (used by --balance)" echo " -m or --migrate : move containers on local host to target" } move_ct() { echo "- $ct:" echo " target: $ct:" echo " processing:" # Arrêter echo -n " stop: " lxc stop $ct 2> /dev/null [[ $? -eq 0 ]] && echo "success" || echo "failed" # Déplacer echo -n " move: " lxc move --target $target $ct 2> /dev/null [[ $? -eq 0 ]] && echo "success" || echo "failed" # Démarrer if [[ $(lxc list --columns s --format csv $ct 2> /dev/null) == "RUNNING" ]]; then echo -n " start: " lxc start $ct 2> /dev/null [[ $? -eq 0 ]] && echo "success" || echo "failed" else echo " start: skipped" fi } # Boucler sur les arguments case "${1}" in -l|--list) lxc list --columns Ln --format csv 2> /dev/null | tee $containersList ;; -b|--balance) while read line; do # Découper les informations target=$(echo $line | awk -F',' '{print $1}') ct=$(echo $line | awk -F',' '{print $2}') # Récupérer l'hôte courrant host=$(lxc list --columns Ln --format csv $ct 2> /dev/null | grep $target) # Traiter le conteneur s'il n'est pas sur l'hôte cible if [[ -z "${host}" ]]; then move_ct fi done < $containersList ;; -m|--migrate) # Vérifier la présence d'une cible [[ -z "${2}" ]] && show_usage && exit # Stocker la cible target="${2}" # Parcourir la liste de conteneur locaux for line in $(lxc list --columns Ln --format csv 2> /dev/null | grep $(hostname)); do ct=$(echo $line | awk -F',' '{print $2}') move_ct done ;; *) show_usage; esac