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