engonzal.proxmoxct

Ansible-Rollen: Proxmox

Dies ist eine Rolle zur Einrichtung eines neuen Containers. Beachten Sie, dass Sie Root-SSH-Zugriff auf einen Proxmox-Knoten konfiguriert haben müssen. Außerdem benötigen Sie API-Zugriff auf Ihren Proxmox-Host/Cluster.

Diese Rolle wird hauptsächlich auf dem Ansible-Localhost ausgeführt. Einige Aufgaben verwenden die Option "delegate_to", um auf dem Remote-Proxmox-Knoten ausgeführt zu werden.

Rollenvariablen

Es stehen viele Variablen zur Verfügung, um einen Container bereitzustellen. Die benötigten Variablen hängen von Ihrem Anwendungsfall ab. Die meisten sind optional.

Einfacher Container:

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

Detailliertes Beispiel mit Bind-Mounts vom Proxmox-Knoten. Ich habe ein cephfs-Mount zu meinem Cluster hinzugefügt, also ist es auf jedem Proxmox-Knoten gemountet:

pve_node: pve1
pve_vmid: 114
pve_apiuser: engonzal@pve
pve_apipass: meinAPIPasswort
pve_api_host: pve1.domain.com
pve_hostname: "neuerHostname"
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: meinContainerRootPasswort
pve_search: domain.com
pve_dns: '192.168.84.1'
pve_storage: ceph_storage_ct
pve_unprivileged: ja
pve_ssh: "ssh-rsa meinÖffentlicherSchlüssel engonzal@hostname"
pve_custom_mounts:
  mp0: "/mnt/pve/cephfs_data/downloads/,mp=/downloads"
  mp1: "/mnt/pve/cephfs_data/media,mp=/media"

Beispiel-Playbook

Ansible-Hosts-Inventar-Datei

# hosts
[proxmox_containers]
test_server

Ansible-Playbook

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

Ansible-Befehl zur Ausführung

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

Beispiel-Playbook (fortgeschritten)

Sie können auch eine Verzögerung nach Ihrem Play hinzufügen, wenn Sie andere Plays danach ausführen möchten:

---
- hosts: plex_app
  connection: local
  user: root
  pre_tasks:
  - name: aktuellen Python-Interpreter erhalten (für Pip-virtuelle Umgebungen)
    command: which python
    register: which_interpreter
    tags: immer
    changed_when: False

  - name: Aktuellen Python-Pfad anstelle des System-Python verwenden
    set_fact:
      ansible_python_interpreter: "{{ which_interpreter.stdout }}"
    tags: immer

  roles:
    - name: engonzal.proxmoxct
      tags: pve
  post_tasks:
    - name: Container Zeit geben, um zu starten, falls gestartet
      pause:
        seconds: 20
      when: pve_info_state.changed

- hosts: plex_app
  user: root
  vars:
    ansible_python_interpreter: /usr/bin/python3 # benötigt für bionic ct
    package_list:
      - vim
  roles:
    - engonzal.package

Weitere Beispiele

DHCP-Beispiel:

pve_node: pve1
pve_vmid: 114
pve_apiuser: engonzal@pve
pve_apipass: meinAPIPasswort
pve_api_host: pve1.domain.com
pve_state: present
pve_hostname: "neuerHostname"
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"

Organisation

Für meine Zwecke organisiere ich die Variablen so (unter Verwendung von Ansible Vault zur Verschlüsselung von Passwörtern):

# group_vars/all
pve_apiuser: engonzal@pve
pve_apipass: meinAPIPasswort
pve_api_host: pve1.domain.com
pve_guest_pass: meinContainerRootPasswort
pve_search: domain.com
pve_dns: '192.168.84.1'
pve_unprivileged: ja
pve_ssh: "ssh-rsa meinÖffentlicherSchlüssel 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"

Lizenz

BSD

Hinweise

API-Informationen zu Proxmox sind verfügbar unter:

Über das Projekt

Provision Proxmox LXC containers with Ansible

Installieren
ansible-galaxy install engonzal.proxmoxct
Lizenz
Unknown
Downloads
236
Besitzer
I'm a Linux engineer. Verifications - https://defcon.social/@engonzal