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:

Acerca del proyecto

Provision Proxmox LXC containers with Ansible

Instalar
ansible-galaxy install engonzal.proxmoxct
Licencia
Unknown
Descargas
236
Propietario
I'm a Linux engineer. Verifications - https://defcon.social/@engonzal