Olá malta,
Para quem estiver interessado em controlar as VMs ou LXC containers do Proxmox apartir do Home Assistant fica aqui o meu exemplo.
Para começar deve seguir os passos da Integração Oficial do Proxmox no Home Assistant.
Resumidamente são estes os passos:
- Criar um novo
role
- Criar um novo utilizador
- Atribuir o
role
ao novo utilizador
Na documentação oficial apenas é indicado o VM.Audit
contudo esta permissão não permite o controlo das VMs/LXC.
Depois devem colocar configuração no vosso YAML:
proxmoxve:
- host: !secret proxmox_ip
username: !secret proxmox_user
password: !secret proxmox_pass
realm: pve
verify_ssl: false # maioria dos casos
nodes:
- node: NODE_NAME
vms:
- VM_ID_1
- VM_ID_2
containers:
- LXC_ID1
Esta integração permite obter o estado das VMs/LXC através de binary_sensor
. Por exemplo:
binary_sensor.NODE_NAME_VM_NAME_running
ou
binary_sensor.hydrogen_zoneminder_running
Depois disto devem fazer download do seguinte shell script e coloca-lo, por exemplo, na pasta /config/shell_scripts
.
Nota: caso usem outro directório mudem o caminho quando criarem o shell_command
usando o código abaixo.
O script tem as seguintes entradas (por esta ordem):
- IP do Proxmox;
- Nome do Node, hydrogen no meu caso (não acreditei que fosse preciso um
secret
aqui); - Utilizador criado;
- Palavra-chave;
- Comando a correr (start/stop)
- Tipo (vm/lxc);
- ID do LXC/VM.
Caso usem o template switch
que apresento apenas precisam de adicionar os secrets
e mudar os argumentos do service call
.
Depois disto podem usar o código abaixo para criarem template switch
para cada uma das VMs/LXC a controlar.
sensor:
- platform: template
sensors:
proxmox_ip:
value_template: !secret proxmox_ip
proxmox_user:
value_template: !secret proxmox_user
proxmox_pass:
value_template: !secret proxmox_pass
shell_command:
proxmox_control_vm: bash /config/shell_scripts/proxmox_control_vm.bash {{ states("sensor.proxmox_ip") }} hydrogen {{ states("sensor.proxmox_user") }} {{ states("sensor.proxmox_pass") }} {{ command }} {{ type }} {{ vm }}
switch:
- platform: template
switches:
proxmox_zoneminder_vm:
value_template: "{{ is_state('binary_sensor.hydrogen_zoneminder_running', 'on') }}"
turn_on:
service: shell_command.proxmox_control_vm
data:
type: lxc
vm: 112
command: start
turn_off:
service: shell_command.proxmox_control_vm
data:
type: lxc
vm: 112
command: stop
- platform: template
switches:
proxmox_francium_vm:
value_template: "{{ is_state('binary_sensor.hydrogen_francium_running', 'on') }}"
turn_on:
service: shell_command.proxmox_control_vm
data:
type: qemu
vm: 300
command: start
turn_off:
service: shell_command.proxmox_control_vm
data:
type: qemu
vm: 300
command: stop
Este código contém um exemplo para um LXC e para uma VM. Devem mudar o type: vm/lxc
e um número da VM/LXC vm: 300
.
Nota: Não acredito que a forma usada seja a mais eficiente para esconder os dados de autenticação. Caso não partilhem o vosso código podem inserir os dados diretamente no shell_command
.