engonzal.proxmoxct

Ansible Role: Proxmox

To jest rola do konfiguracji nowego kontenera. Należy pamiętać, że musisz mieć dostęp SSH jako root do węzła Proxmox, który jest skonfigurowany. Musisz również mieć dostęp do API swojego hosta/klastra Proxmox.

Ta rola będzie głównie działać na lokalnym hoście Ansible. Niektóre zadania będą używać opcji "delegate_to", aby uruchomić je na zdalnym węźle Proxmox.

Zmienne roli

Istnieje wiele zmiennych, które można wykorzystać do provisioningu kontenera. Wymagane będą zależały od twojego przypadku użycia. Większość z nich jest opcjonalna.

Prosty kontener:

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

Szczegółowy przykład z użyciem montażu z węzła Proxmox. Dodałem montaż cephfs do mojego klastra, więc jest zamontowany na każdym węźle Proxmox:

pve_node: pve1
pve_vmid: 114
pve_apiuser: engonzal@pve
pve_apipass: myAPIpassword
pve_api_host: pve1.domain.com
pve_hostname: "newhostname"
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: myContainerRootPassword
pve_search: domain.com
pve_dns: '192.168.84.1'
pve_storage: ceph_storage_ct
pve_unprivileged: yes
pve_ssh: "ssh-rsa myPublicKey engonzal@hostname"
pve_custom_mounts:
  mp0: "/mnt/pve/cephfs_data/downloads/,mp=/downloads"
  mp1: "/mnt/pve/cephfs_data/media,mp=/media"

Przykładowy playbook

Plik inwentarza hostów 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.domain.com
    pve_hostname: "newhostname"
    pve_template: local:vztmpl/debian-9.0-standard_9.5-1_amd64.tar.gz
  roles:
    - engonzal.proxmoxct

Komenda uruchamiająca Ansible

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

Przykład playbooka (zaawansowany)

Możesz również dodać opóźnienie po swoim play, jeśli masz inne play do uruchomienia później:

---
- hosts: plex_app
  connection: local
  user: root
  pre_tasks:
  - name: pobierz aktualny interpreter Pythona (dla pip virtualenvs)
    command: which python
    register: which_interpreter
    tags: always
    changed_when: False

  - name: Użyj ścieżki do aktualnego Pythona zamiast systemowego
    set_fact:
      ansible_python_interpreter: "{{ which_interpreter.stdout }}"
    tags: always

  roles:
    - name: engonzal.proxmoxct
      tags: pve
  post_tasks:
    - name: Pozwól kontenerowi na uruchomienie, jeśli został uruchomiony
      pause:
        seconds: 20
      when: pve_info_state.changed

- hosts: plex_app
  user: root
  vars:
    ansible_python_interpreter: /usr/bin/python3 # potrzebne dla bionic ct
    package_list:
      - vim
  roles:
    - engonzal.package

Inne przykłady

Przykład DHCP:

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

Organizacja

Dla moich potrzeb organizuję zmienne w ten sposób (używając ansible vault do szyfrowania haseł):

# group_vars/all
pve_apiuser: engonzal@pve
pve_apipass: myAPIpassword
pve_api_host: pve1.domain.com
pve_guest_pass: myContainerRootPassword
pve_search: domain.com
pve_dns: '192.168.84.1'
pve_unprivileged: yes
pve_ssh: "ssh-rsa myPublicKey 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"

Licencja

BSD

Uwagi

Informacje o API Proxmox dostępne są pod:

O projekcie

Provision Proxmox LXC containers with Ansible

Zainstaluj
ansible-galaxy install engonzal.proxmoxct
Licencja
Unknown
Pobrania
236
Właściciel
I'm a Linux engineer. Verifications - https://defcon.social/@engonzal