engonzal.proxmoxct

Rôles Ansible : Proxmox

C'est un rôle pour configurer un nouveau conteneur. Notez que vous devez avoir un accès SSH root à un nœud Proxmox configuré. Vous devez également avoir un accès API à votre hôte/classe Proxmox.

Ce rôle sera principalement exécuté sur le localhost Ansible. Certaines tâches utiliseront l'option "delegate_to" pour s'exécuter sur le nœud Proxmox distant.

Variables de rôle

De nombreuses variables sont disponibles pour provisionner un conteneur. Les variables requises dépendent de votre cas d'utilisation. La plupart sont optionnelles.

Conteneur simple :

pve_node: pve1
pve_apiuser: root@pam
pve_apipass: myAPIpassword
pve_hostname: "nouveau_nom_hôte"
pve_template: local:vztmpl/debian-9.0-standard_9.5-1_amd64.tar.gz

Exemple détaillé avec des montages bind depuis le nœud Proxmox. J'ai ajouté un montage cephfs à mon cluster, donc il est monté sur chaque nœud Proxmox :

pve_node: pve1
pve_vmid: 114
pve_apiuser: engonzal@pve
pve_apipass: myAPIpassword
pve_api_host: pve1.domaine.com
pve_hostname: "nouveau_nom_hôte"
pve_template: local:vztmpl/debian-9.0-standard_9.5-1_amd64.tar.gz
pve_netif:
  net0: "name=eth0,gw=192.168.84.1,ip=192.168.84.20/24,bridge=vmbr0"
pve_cores: 2
pve_mem: 2048
pve_swap: "{{ pve_mem }}"
pve_guest_pass: motdepasseRootMonConteneur
pve_search: domaine.com
pve_dns: '192.168.84.1'
pve_storage: ceph_storage_ct
pve_unprivileged: oui
pve_ssh: "ssh-rsa maCléPublique engonzal@nom_hôte"
pve_custom_mounts:
  mp0: "/mnt/pve/cephfs_data/téléchargements/,mp=/téléchargements"
  mp1: "/mnt/pve/cephfs_data/médias,mp=/médias"

Exemple de Playbook

Fichier d'inventaire des hôtes Ansible

# hosts
[proxmox_containers]
test_server

Playbook Ansible

# proxmox.yml
---
- hosts: plex_app
  connection: local
  user: root
  vars:
    pve_node: pve1
    pve_apiuser: root@pam
    pve_apipass: myAPIpassword
    pve_api_host: pve1.domaine.com
    pve_hostname: "nouveau_nom_hôte"
    pve_template: local:vztmpl/debian-9.0-standard_9.5-1_amd64.tar.gz
  roles:
    - engonzal.proxmoxct

Commande d'exécution Ansible

ansible-playbook -i hosts -l test_server proxmox.yml

Exemple de Playbook (avancé)

Vous pouvez également ajouter un délai après votre play si vous avez d'autres plays à exécuter ensuite :

---
- hosts: plex_app
  connection: local
  user: root
  pre_tasks:
  - name: obtenir l'interpréteur python actuel (pour pip virtualenvs)
    command: which python
    register: which_interpreter
    tags: toujours
    changed_when: False

  - name: Utiliser le chemin python actuel au lieu de python système
    set_fact:
      ansible_python_interpreter: "{{ which_interpreter.stdout }}"
    tags: toujours

  roles:
    - name: engonzal.proxmoxct
      tags: pve
  post_tasks:
    - name: Permettre au conteneur de démarrer s'il a été lancé
      pause:
        seconds: 20
      when: pve_info_state.changed

- hosts: plex_app
  user: root
  vars:
    ansible_python_interpreter: /usr/bin/python3 # nécessaire pour ct bionic
    package_list:
      - vim
  roles:
    - engonzal.package

Autres Exemples

Exemple DHCP :

pve_node: pve1
pve_vmid: 114
pve_apiuser: engonzal@pve
pve_apipass: myAPIpassword
pve_api_host: pve1.domaine.com
pve_state: présent
pve_hostname: "nouveau_nom_hôte"
pve_template: local:vztmpl/debian-9.0-standard_9.5-1_amd64.tar.gz
pve_netif:
  net0: "name=eth0,ip=dhcp,ip6=dhcp,bridge=vmbr0"
pve_storage: local-lvm
pve_custom_mounts:
  mp0: "/mnt/pve/cephfs_data/téléchargements/,mp=/téléchargements"
  mp1: "/mnt/pve/cephfs_data/médias,mp=/médias"

Organisation

Pour mes utilisations, j'organise les variables comme ceci (en utilisant Ansible Vault pour chiffrer les mots de passe) :

# group_vars/all
pve_apiuser: engonzal@pve
pve_apipass: myAPIpassword
pve_api_host: pve1.domaine.com
pve_guest_pass: motdepasseRootMonConteneur
pve_search: domaine.com
pve_dns: '192.168.84.1'
pve_unprivileged: oui
pve_ssh: "ssh-rsa maCléPublique engonzal@nom_hôte"

# group_vars/plex
pve_node: pve3
pve_vmid: 114
pve_hostname: "plex"
pve_netif:
  net0: "name=eth0,gw=192.168.84.1,ip=192.168.84.20/24,bridge=vmbr0"
pve_template: local:vztmpl/ubuntu-18.10-standard_18.10-1_amd64.tar.gz
pve_cores: 8
pve_mem: 4096
pve_custom_mounts:
  mp0: "/mnt/pve/cephfs_data/médias,mp=/médias"

Licence

BSD

Remarques

Informations sur l'API Proxmox disponibles à :

À propos du projet

Provision Proxmox LXC containers with Ansible

Installer
ansible-galaxy install engonzal.proxmoxct
Licence
Unknown
Téléchargements
236
Propriétaire
I'm a Linux engineer. Verifications - https://defcon.social/@engonzal