Last active
June 1, 2022 20:35
-
-
Save DjLeChuck/9cf846fcc9a50bd0f75a010612804018 to your computer and use it in GitHub Desktop.
Gestion de VMs via multipass
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# /!\ Nécessite "jq" /!\ | |
# Grandement basé sur le script deploy.sh de xavki <3 : https://gitlab.com/xavki/presentation-ansible-fr/-/blob/master/14-plateforme-dev-docker/deploy.sh | |
help() { | |
echo " | |
Options : | |
- --create : lancer des VMs | |
- --drop : supprimer les VMs créer par le deploy-vm | |
- --infos : caractéristiques des VMs (ip, nom, user...) | |
- --start : démarrage des VMs | |
- --stop : arrêt des VMs | |
- --restart : redémarrage des VMs | |
- --ansible : déploiement arborescence ansible | |
" | |
} | |
listVms() { | |
multipass list --format json | jq --arg MASK "$USER-vm-" '.list[] | { name: .name, ip: .ipv4[0] } | select(.name | contains($MASK))' | |
} | |
createNodes() { | |
# définition du nombre de VM | |
nb_machine=1 | |
[ "$1" != "" ] && nb_machine=$1 | |
# setting min/max | |
min=1 | |
max=0 | |
# récupération de idmax | |
idmax=$(multipass list | cut -d ' ' -f 1 | grep "$USER-vm-" | cut -d '-' -f 3 | sort -r | head -1) | |
# redéfinition de min et max | |
min=$(($idmax + 1)) | |
max=$(($idmax + $nb_machine)) | |
sshkey="$(cat $HOME/.ssh/id_rsa.pub)" | |
config=" | |
package_update: true | |
users: | |
- name: $USER | |
sudo: ALL=(ALL) NOPASSWD:ALL | |
shell: /bin/bash | |
ssh_authorized_keys: | |
- $(cat $HOME/.ssh/id_rsa.pub) | |
" | |
# lancement des VMs | |
for i in $(seq $min $max); do | |
echo "$config" | multipass launch --name $USER-vm-$i --disk 50G --cloud-init - | |
echo "VM $USER-vm-$i créée" | |
done | |
infosNodes | |
} | |
dropNodes() { | |
echo "Suppression des VMs..." | |
for vm in $(listVms | jq -c); do | |
name=$(echo $vm | jq -r '.name') | |
multipass delete --purge $name | |
done | |
echo "Fin de la suppression" | |
} | |
startNodes() { | |
echo "Démarrage des VMs..." | |
for vm in $(listVms | jq -c); do | |
name=$(echo $vm | jq -r '.name') | |
multipass start $name | |
done | |
echo "" | |
infosNodes | |
} | |
stopNodes() { | |
echo "Arrêt des VMs..." | |
for vm in $(listVms | jq -c); do | |
name=$(echo $vm | jq -r '.name') | |
multipass stop $name | |
done | |
echo "" | |
} | |
restartNodes() { | |
echo "Redémarrage des VMs..." | |
for vm in $(listVms | jq -c); do | |
name=$(echo $vm | jq -r '.name') | |
multipass restart $name | |
done | |
echo "" | |
infosNodes | |
} | |
createAnsible() { | |
echo "Création en cours..." | |
echo "" | |
ANSIBLE_DIR="ansible_dir" | |
mkdir -p $ANSIBLE_DIR | |
echo "all:" >$ANSIBLE_DIR/00_inventory.yml | |
echo " vars:" >>$ANSIBLE_DIR/00_inventory.yml | |
echo " ansible_python_interpreter: /usr/bin/python3" >>$ANSIBLE_DIR/00_inventory.yml | |
echo " hosts:" >>$ANSIBLE_DIR/00_inventory.yml | |
for vm in $(listVms | jq -c); do | |
ip=$(echo $vm | jq -r '.ip') | |
echo " $ip:" >>$ANSIBLE_DIR/00_inventory.yml | |
done | |
mkdir -p $ANSIBLE_DIR/host_vars | |
mkdir -p $ANSIBLE_DIR/group_vars | |
echo "Création terminée !" | |
} | |
infosNodes() { | |
echo "" | |
echo "Informations des VMs : " | |
echo "" | |
listVms | jq -r '.name + " - " + .ip' | |
echo "" | |
} | |
#si option --create | |
if [ "$1" == "--create" ]; then | |
createNodes $2 | |
# si option --drop | |
elif [ "$1" == "--drop" ]; then | |
dropNodes | |
# si option --start | |
elif [ "$1" == "--start" ]; then | |
startNodes | |
# si option --stop | |
elif [ "$1" == "--stop" ]; then | |
stopNodes | |
# si option --restart | |
elif [ "$1" == "--restart" ]; then | |
restartNodes | |
# si option --ansible | |
elif [ "$1" == "--ansible" ]; then | |
createAnsible | |
# si option --infos | |
elif [ "$1" == "--infos" ]; then | |
infosNodes | |
# si aucune option affichage de l'aide | |
else | |
help | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment