Gérer les containers Proxmox avec Ansible

Le module proxmox d'Ansible permet de gérer les containers via l'API Proxmox (LXC ou OpenVZ pour les versions antérieures à PVE4).

Introduction

Pour rappel Ansible est un outil de gestion de configuration et d'exécution de tâches. Il s'exécute depuis un poste vers une ou plusieurs machine cible. Il peut utiliser des playbooks, qui sont des fichiers YAML "décrivant" les tâches à exécuter. Chaque tâche utilise un module Ansible.

Dans cet article nous utilisons le module Ansible proxmox. Il permet d'intérroger l'API Proxmox pour réaliser des actions sur la gestion des containers. En fait se sont des requêtes web qui sont faites sur l'url https://proxmox.lan:8006/api2/json/. Voici la documentation officielle de l'API Proxmox.

Le seul prérequis et d'avoir Ansible d'installer sur le poste de travail :

apt install ansible

Spécificités de notre playbook

Créer un fichier playbook.yml :

- hosts: localhost
  connection: local
  gather_facts: no
  • hosts : ici nous utilisons l'hôte localhost car c'est notre poste de travail qui va intérroger l'API Proxmox
  • connection : ici nous forçons la connection local pour ne pas utiliser ssh
  • gather_facts : nous n'avons pas besoins de récupérer des informations concernant notre poste de travail donc nous désactivons cette tâche

Créer un container

Ici je propose la création d'un container en spécifiant les paramètres réseaux et les paramètres de connexion (cad. le nom d'hôte, la configuration réseau et la clé ssh publique authorisée pour se connecter en tant que root) :

  tasks:
  - name: create container
    proxmox:
      api_host: proxmox.lan
      api_user: user@pve
      api_password: MyP@ssword
      node: node1
      storage: local-lvm
      ostemplate: 'local:vztmpl/debian-9.0-standard_9.7-1_amd64.tar.gz'
      hostname: test
      vmid: 200
      nameserver: '8.8.8.8 8.8.4.4'
      netif: '{"net0":"name=eth0,ip=192.168.0.67/24,gw=192.168.0.1,bridge=vmbr0"}'
      pubkey: 'ssh-rsa ... user@localhost'
      state: present
  • api_host : "l'adresse" de l'hôte Proxmox (adresse IP, nom d'hôte ou nom de domaine)
  • api_user : l'utilisateur avec lequel s'authentifier (ex: user@pve, root@pam)
  • api_password : le mot de passe de cet utilisateur
  • node : le noeud utilisé (ici node1)
  • storage : l'espace de stockage utilisé (par défaut local)
  • ostemplate : le template utilisé pour créer le container (de la forme storage:path/templatename.tar.gz)
  • hostname : le nom d'hôte assigné au container
  • vmid : l'identifiant unique du container (ici 200)
  • nameserver : les serveurs de noms de domaines utilisés par le container (ici 8.8.8.8 et 8.8.4.4)
  • netif : la configuration de la carte réseau (ici l'interface eth0 aura l'adresse CIDR 192.168.0.67/24 avec comme route par défaut 192.168.0.1)
  • pubkey : la clé ssh publique authorisée pour se connecter en tant qu'utilisateur root
  • state : ici l'état present permet de s'assurer que le container est créé

Il ne reste plus qu'à exécuter le playbook :

ansible-playbook playbook.yml

Gérer le container (démarrer, arrêter ou supprimer)

Pour démarrer le container il faut connaître son vmid :

  - name: start container
    proxmox:
      api_host: proxmox.lan
      api_user: user@pve
      api_password: MyP@ssword
      vmid: 200
      state: started
  • api_host : "l'adresse" de l'hôte Proxmox (adresse IP, nom d'hôte ou nom de domaine)
  • api_user : l'utilisateur avec lequel s'authentifier (ex: user@pve, root@pam)
  • api_password : le mot de passe de cet utilisateur
  • vmid : identifiant unique du container (ici 200)
  • state : ici l'état started permet de démarrer le container

Pour l'arrêter il suffit d'assigner la valeur stopped au paramètre state.

Pour le supprimer il suffit d'assigner la valeur absent au paramètre state.

Utilisation

Exécuter le playbook créé :

ansible-playbook playbook.yml

Aller plus loin

Par défaut, le container créé avec le module proxmox d'Ansible utilise la configuration matérielle/système suivante :

  • CPU : 1
  • RAM : 512 Mo
  • HDD : 3 Go
  • swap : 0 Mo

Il est possible de modifier ces paramètres en utilisant les options suivantes lors de la création du container :

  • cpus : nombre de cpus allouées (ex : 1)
  • cores : nombre de coeurs par cpu (ex : 2)
  • memory : taille de la mémoire vive en Mo (ex : 2048)
  • disk : taille du disque dur en Go (ex : 8)
  • swap : taille de la mémoire swap en Mo (ex : 1024)

Pour aller plus loin je vous invite à lire la documentation officielle du module Ansible proxmox.

By @Mikael FLORA in
Tags : #virtualisation, #automatisation,