Installation automatique VM
/!\ Ceci est un draft /!**
Le but est de pouvoir automatiser l'installation d'une VM.
Le script est écrit en Bash avec du Curl et de JQ pour l'interprétation du json. J'en conviens que ce n'est pas des plus académique mais ça fait le JOB!.
Implémentation
Les scripts sont pour le moment sur un GIT privé, ils seront rendu public lorsque qu'ils seront secs.
Licence : https://fr.wikipedia.org/wiki/Beerware
—-
===== Ingrédients =====
* Installation d'une VM de déploiement
* Récupération du paramétrage Proxmox
* Récupération du paramétrage IP
* Création VM Proxmox
* PXE / DHCP
* Post installation
—-
===== Cuisine =====
Maintenant que l'on a défini tout cela, on va scripter le tout pour créer une VM à notre adhérent.
==== Installation d'une VM de déploiement ====
Nous partons sur une Debian. Une installation classique en mode Net-Install.
Avec simplement ssh d'installé.
=== Binaire supplémentaire ===
Pour le DHCP :
* DnsMasq
* Netboot Debian
* ( à compléter )
Pour la les API
* jq : pour interpréter les retours des API de Proxmox et PhpIpam
* curl : qui n'est pas installé dans une Debian minimal.
* mkpasswd : dans le package wois (?)
=== Réseau ===
La VM devra accéder à l'hyperviseur Proxmox et à l'IPAM via leur API.
Deux interfaces réseaux sont nécessaires, une dans le Vlan Admin et une spécifique au PXE/DHCP.
* VMBR dans Vlan Admin
Pour accéder à l'hyperviseur, pour récupérer le prochaine ID disponible et lancer la création d'une VM en CLI.
Et récupérer la prochaine IPv4 et le pool IPv6 disponible.
* VMBR pour PXE/DHCP
On ajoute une interface pour séparer le service DHCP des autres réseaux. Il ne sera utiliser que pour l'installation de nouvelles VM.
—-
=== API Ipam ===
API IPAM
Morceau de l'API :
* Constantes :
# API
USERAPI=USERdeLapi
PASSWORD=LeMotdePasseDeLapi
SUBNETIDVMIPv4=numIDipv4
SUBNETIDVMIPv6=numIDipv6
URLAPI=“https://ipam.grifon.fr/api/${USERAPI}/”
* cURL
# Curl
CURL=“$(which curl) -s -k -X”
HEADERHTTP='Content-type: application/x-www-form-urlencoded'
* Obtenir un Token
# Get Token
APITOKEN=$(${CURL} POST –user ${USERAPI}:${PASSWORD} –header “${HEADERHTTP}” \
${URLAPI}/user/ | jq -r '.data.token')
* Obtenir les IP
# Get last IP
# IPv4
LASTVMV4=$(${CURL} POST –header “token: ${APITOKEN}” –header “${HEADERHTTP}” \
${URLAPI}/addresses/firstfree/$SUBNETIDVMIPv4/ \
–data “description=VM de $FIRSTNAME ${LASTNAME}” | jq -r .data )
echo $LASTVMV4
# IPv6
LASTVMV6=$(${CURL} POST –header “token: ${APITOKEN}” –header “${HEADERHTTP}” \
${URLAPI}/subnets/$SUBNETIDVMIPv6/firstsubnet/48 \
–data “description=VM de $FIRSTNAME $LASTNAME” \
–data 'isFull=1' | jq -r .data )
echo $LASTVMV6
FIRSTIPv6=“${LASTVMV6%/48}1”
echo $FIRSTIPv6
—-
=== API proxmox ===
API Proxmox
API Proxmox (RU)
Dans la suite jq va être important. Il va permettre de mettre en forme le retour en Json des commandes proxmox.
* Créer un compte pour l'API
* Constantes :
USERAPIPXM='lenomduuser'
PASSAPIPXM='tumemetsunmotdepasse'
ADDPORTIPPXM='adressipounomdns:8006'
NODEPXM='lenomdunode'
* Obtenir le cookie et le token proxmox
DATA=“$(curl -s https:${ADDPORTIPPXM}/api2/json/access/ticket -k -d 'username=${USERAPIPXM}@pam&password=${PASSAPIPXM}')”
COOKIE=“$(echo $DATA | jq –raw-output .data.ticket)” && echo $COOKIE
TOKEN=“$(echo $DATA | jq –raw-output .data.CSRFPreventionToken)” && echo $TOKEN
* Voir le statu du node
curl –insecure -b “PVEAuthCookie=$COOKIE” -H “CSRFPreventionToken: $TOKEN” https:${ADDPORTIPPXM}/api2/json/nodes/${NODEPXM}/status
* Voir le le prochaine ID sur le cluster :
VMID=$(curl –insecure -b “PVEAuthCookie=$COOKIE” -H “CSRFPreventionToken: $TOKEN” -XGET \
https:${ADDPORTIPPXM}/api2/json/cluster/nextid | jq –raw-output .data)
* Créer une VM via l'API
NAMEVMADH='vm-test'
POOLADH='nomadh'
NUMSOCKET=1
MEMVMAD=512
HDDSIZE=4
curl –insecure -b “PVEAuthCookie=$COOKIE” -H “CSRFPreventionToken: $TOKEN” -XPOST \
https:${ADDPORTIPPXM}/api2/json/nodes/guerech/qemu \
–data vmid=${VMID} –data name=${NAMEVMADH} \
–data ostype=l26 –data pool=${POOLADH} \
–data sockets=${NUMSOCKET} –data memory=${MEMVMAD} \
–data-urlencode net0=“virtio,bridge=vmbr4” \
–data-urlencode virtio0=“VMData:${HDDSIZE},format=raw” –data bootdisk=virtio0
—-
==== Récupération du paramétrage Proxmox ====
Récupérer l'ID disponible sur le cluster :
pvesh get /cluster/nextid
==== Création VM Proxmox ====
Commande de création VM :
qm create 101 –name vmtest –onboot no –sockets 1 –net0 virtio,bridge=vmbr1 –virtio0 local:16,format=qcow2 –bootdisk virtio0 –ostype l26 –memory 512 -pool dotux
==== Configuration DHCP / PXE ====
=== Fichier de configuration ===
# vim /etc/dnsmasq.conf
=== Configuration ===
==== PXE ====
Les fichiers preseed et de post-installation seront placer de le domaine public tellement les sources ont été diverses.
=== Fichier Preseed Debian ===
Le fichier preseed mérite une page a lui tout seul.
=== Post installation ===
La post installation ou plutôt le fichier de post-install est appeler à la fin du fichier preseed pour personnaliser un certain nombre de paramètre de la VM.
Dans le désordre :
* Ajout d'une clé SSH public
* Paramétrage IP v4 et v6
* du mot de passe de la VM
* Ajout de soft complémentaire.
* (A compléter)
===== Dégustation =====
Pour savourer, on quitte la cuisine pour aller dans le salon : Dégustation