Créer une nouvelle VM
Pour le reste de ce document, on suppose que la VM que l'on veut créer s'appelle bleuet.
Inventaire
Hôte
On commence par créer un dossier bleuet_vm dans host_vars. Le fichier vars.yml contient :
# Derniers chiffres de l'IP désirée
ip = XX
# Mot de passe de l'utilisateur paquerette
vm_admin_password = {{ vault_vm_admin_password }}
L'IP est choisie sur l'hyperviseur en connaissance des autres IP existantes. Il s'agit bien d'une IP sur le réseau privé; la connexion SSH passera par un jump sur l'hyperviseur.
ℹ️ L'hôte réel pour s'y connecter depuis Ansible sera défini au niveau des variables du groupe.
Créer le vault pour y mettre le mot de passe :
ansible-vault edit hosts/host_vars/bleuet_vm/vault.yml
⚠️ Référencer le mot de passe dans le VW, coffre
paquerette_admin_sys, collectionvm.
Groupe
Dans hosts/10-machines, créer un groupe bleuet qui référence l'hôte :
[bleuet]
bleuet_vm
Ce groupe référencera tous les hôtes de type service qui s'exécuteront sur la VM.
Ajouter une variable de groupe dans hosts/group_vars/bleuet/vars.yml :
ansible_host: bleuet
Ainsi les services savent où s'installer.
⚠️ Par défaut, les VM sont sur un réseau privé et sont accédées par un reverse-proxy. Les services peuvent alors supposer qu'elles ne gèrent pas e.g. les terminaisons TLS. Dans le cas contraire, on ajoutera la variable suivante :
behind_reverse_proxy: false
Dans hosts/50-servers, modifier le groupe dX_vms, X étant le numéro donné à l'hyperviseur. Exemple :
d3_vms:
children:
bleuet:
[...]
En d'autres termes, tous les hôtes du groupe bleuet (services + la VM) bénéficient des variables du groupe d3_vms.
Ajouter l'hôte de la VM au groupe proxmox_dX. Exemple :
proxmox_d3:
hosts:
bleuet_vm:
Création de la VM
Prérequis
Sur l'hyperviseur, vérifier que proxmoxer est au moins en version 2 et installé globalement.
sudo pip3 install --break-system-packages 'proxmoxer>=2.0.0' --upgrade
Création
Lancer le playbook de création de VM en limitant à l'hôte de la VM.
ansible-playbook playbook/vm/create.yml --limit bleuet_vm
À la fin, le playbook affiche le vmid de la VM. L'ajouter dans les variables du groupe. Exemple :
vmid: 122
Cela permet notamment à tous les services du groupe de créer leur disque et de l'attacher à la VM. Attendre le démarrage et confirmer que la connexion SSH fonctionne avec la commande :
# IP et jump dans la configuration SSH de la tower
ssh bleuet
Configuration de la VM
Cette étape installe notamment le pare-feu en autorisant seulement SSH, ZRAM (compression de la RAM), reaction (actions par matching des logs), Rustic (backups), l'agent Zabbix (métriques) et des paquets libres.
La liste des paquets à installer peut être étendue avant configuration dans les variables de l'hôte, par exemple :
dependencies = {{ dependencies + additionnal_packages }}
additionnal_packages:
- sl
Lancer le playbook de configuration :
ansible-playbook playbooks/vm/configure.yml --limit bleuet_vm