Outils pour utilisateurs

Outils du site


services:deployvm

Différences

Ci-dessous, les différences entre deux révisions de la page.


services:deployvm [2018/01/22 23:35] (Version actuelle) – créée - modification externe 127.0.0.1
Ligne 1: Ligne 1:
 +====== 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!.
 +
 +[[services:deployvm_implem|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 ===
 +
 +[[https://phpipam.net/api/api_documentation/|API IPAM]]
 +
 +Morceau de l'API :
 +
 +  * Constantes :
 +
 +  # API
 +  USERAPI=USERdeLapi
 +  PASSWORD=LeMotdePasseDeLapi
 +  SUBNETID_VMIPv4=numIDipv4
 +  SUBNETID_VMIPv6=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
 +  LAST_VM_V4=$(${CURL} POST --header "token: ${APITOKEN}" --header "${HEADERHTTP}" \
 +  ${URLAPI}/addresses/first_free/$SUBNETID_VMIPv4/ \
 +  --data "description=VM de $FIRSTNAME ${LASTNAME}" | jq -r .data )
 +  echo $LAST_VM_V4
 +
 +  # IPv6
 +  LAST_VM_V6=$(${CURL} POST --header "token: ${APITOKEN}" --header "${HEADERHTTP}" \
 +  ${URLAPI}/subnets/$SUBNETID_VMIPv6/first_subnet/48 \
 +  --data "description=VM de $FIRSTNAME $LASTNAME" \
 +  --data 'isFull=1' | jq -r .data )
 +  echo $LAST_VM_V6
 +  FIRST_IPv6="${LAST_VM_V6%/48}1"
 +  echo $FIRST_IPv6
 +
 +----
 +
 +=== API proxmox ===
 +
 +[[https://pve.proxmox.com/pve-docs/api-viewer/index.html|API Proxmox]]
 +
 +[[http://vasilisc.com/proxmox-ve-api-pools| 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 : [[services:deployvm_miam|Dégustation]]
services/deployvm.txt · Dernière modification : 2018/01/22 23:35 de 127.0.0.1