engonzal.proxmoxct
Roles de Ansible: Proxmox
Este es un rol para configurar un nuevo contenedor. Ten en cuenta que necesitarás acceso SSH como root a un nodo Proxmox configurado. También debes tener acceso a la API de tu host/clúster Proxmox.
Este rol se ejecutará principalmente en el localhost de Ansible. Algunas tareas usarán la opción "delegate_to" para ejecutarse en el nodo remoto de Proxmox.
Variables del rol
Hay muchas variables disponibles para usar en la provisión de un contenedor. Las requeridas dependerán de tu caso de uso. La mayoría son opcionales.
Contenedor simple:
pve_node: pve1
pve_apiuser: root@pam
pve_apipass: miContraseñaAPI
pve_hostname: "nuevonombredehost"
pve_template: local:vztmpl/debian-9.0-standard_9.5-1_amd64.tar.gz
Ejemplo detallado con montajes bind desde el nodo Proxmox. Agregué un montaje cephfs a mi clúster, por lo que está montado en cada nodo Proxmox:
pve_node: pve1
pve_vmid: 114
pve_apiuser: engonzal@pve
pve_apipass: miContraseñaAPI
pve_api_host: pve1.dominio.com
pve_hostname: "nuevonombredehost"
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: miContraseñaRootDelContenedor
pve_search: dominio.com
pve_dns: '192.168.84.1'
pve_storage: ceph_storage_ct
pve_unprivileged: yes
pve_ssh: "ssh-rsa miClavePublica engonzal@hostname"
pve_custom_mounts:
mp0: "/mnt/pve/cephfs_data/downloads/,mp=/downloads"
mp1: "/mnt/pve/cephfs_data/media,mp=/media"
Ejemplo de Playbook
Archivo de inventario de hosts de Ansible
# hosts
[proxmox_containers]
test_server
Playbook de Ansible
# proxmox.yml
---
- hosts: plex_app
connection: local
user: root
vars:
pve_node: pve1
pve_apiuser: root@pam
pve_apipass: miContraseñaAPI
pve_api_host: pve1.dominio.com
pve_hostname: "nuevonombredehost"
pve_template: local:vztmpl/debian-9.0-standard_9.5-1_amd64.tar.gz
roles:
- engonzal.proxmoxct
Comando para ejecutar Ansible
ansible-playbook -i hosts -l test_server proxmox.yml
Ejemplo de Playbook (avanzado)
También puedes agregar un retraso después de tu play si tienes otros plays para ejecutar después:
---
- hosts: plex_app
connection: local
user: root
pre_tasks:
- name: obtener el intérprete de python actual (para entornos virtuales de pip)
command: which python
register: which_interpreter
tags: siempre
changed_when: False
- name: Usar el camino de python actual en lugar del python del sistema
set_fact:
ansible_python_interpreter: "{{ which_interpreter.stdout }}"
tags: siempre
roles:
- name: engonzal.proxmoxct
tags: pve
post_tasks:
- name: Permitir que el contenedor tenga tiempo para iniciar si se ha iniciado
pause:
seconds: 20
when: pve_info_state.changed
- hosts: plex_app
user: root
vars:
ansible_python_interpreter: /usr/bin/python3 # necesario para ct bionic
package_list:
- vim
roles:
- engonzal.package
Otros Ejemplos
Ejemplo de DHCP:
pve_node: pve1
pve_vmid: 114
pve_apiuser: engonzal@pve
pve_apipass: miContraseñaAPI
pve_api_host: pve1.dominio.com
pve_state: present
pve_hostname: "nuevonombredehost"
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/downloads/,mp=/downloads"
mp1: "/mnt/pve/cephfs_data/media,mp=/media"
Organización
Para mis usos organizo las variables así (usando ansible vault para cifrar contraseñas):
# group_vars/all
pve_apiuser: engonzal@pve
pve_apipass: miContraseñaAPI
pve_api_host: pve1.dominio.com
pve_guest_pass: miContraseñaRootDelContenedor
pve_search: dominio.com
pve_dns: '192.168.84.1'
pve_unprivileged: yes
pve_ssh: "ssh-rsa miClavePublica engonzal@hostname"
# 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/media,mp=/media"
Licencia
BSD
Notas
Información de la API de Proxmox disponible en:
ansible-galaxy install engonzal.proxmoxct