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 à :
ansible-galaxy install engonzal.proxmoxct