From 96a7eb964143f514a71579d4036f1f83d76a57a9 Mon Sep 17 00:00:00 2001 From: Gleb Koval Date: Sun, 18 Jan 2026 22:48:53 +0000 Subject: [PATCH] feat: create homeassistant VM --- .../homeassistant/0000_proxmox_playbook.yaml | 72 +++++++++++++++++++ inventory/proxmox.yaml | 3 + 2 files changed, 75 insertions(+) create mode 100644 infra/homeassistant/0000_proxmox_playbook.yaml diff --git a/infra/homeassistant/0000_proxmox_playbook.yaml b/infra/homeassistant/0000_proxmox_playbook.yaml new file mode 100644 index 0000000..95718a0 --- /dev/null +++ b/infra/homeassistant/0000_proxmox_playbook.yaml @@ -0,0 +1,72 @@ +- name: Provision homeassistant Proxmox VM + hosts: homeassistant + connection: ansible.builtin.local + gather_facts: false + vars: + api_user: "{{ lookup('ansible.builtin.env', 'PROXMOX_USER') }}" + api_host: "{{ lookup('ansible.builtin.env', 'PROXMOX_HOST' ) }}" + api_token_id: "{{ lookup('ansible.builtin.env', 'PROXMOX_TOKEN_ID') }}" + api_token_secret: "{{ lookup('ansible.builtin.env', 'PROXMOX_TOKEN_SECRET') }}" + ssh_public: "{{ lookup('ansible.builtin.env', 'SSH_PUBLIC') }}" + vmname: "{{ inventory_hostname | regex_replace('^([^\\.]+)\\..+$', '\\1') }}" + node: pve + module_defaults: + community.general.proxmox_kvm: + api_user: "{{ api_user }}" + api_host: "{{ api_host }}" + api_token_id: "{{ api_token_id }}" + api_token_secret: "{{ api_token_secret }}" + name: "{{ vmname }}" + node: "{{ node }}" + community.general.proxmox_nic: + api_user: "{{ api_user }}" + api_host: "{{ api_host }}" + api_token_id: "{{ api_token_id }}" + api_token_secret: "{{ api_token_secret }}" + name: "{{ vmname }}" + community.general.proxmox_disk: + api_user: "{{ api_user }}" + api_host: "{{ api_host }}" + api_token_id: "{{ api_token_id }}" + api_token_secret: "{{ api_token_secret }}" + name: "{{ vmname }}" + tasks: + # Initial setup + - name: Create VM + community.general.proxmox_kvm: + clone: "{{ node }}-base" + storage: nvme + - name: Wait for status + community.general.proxmox_kvm: + state: current + register: vm + retries: 30 + delay: 10 + until: vm.status is defined + + # Networking and initial config + - name: Add PUB NIC + community.general.proxmox_nic: + interface: net0 + firewall: false + bridge: PUB + - name: Add SRV NIC + community.general.proxmox_nic: + interface: net1 + firewall: false + bridge: SRV + - name: Add IOT NIC + community.general.proxmox_nic: + interface: net2 + firewall: false + bridge: IOT + + - name: Update VM + community.general.proxmox_kvm: + update: true + agent: enabled=1 + tags: + - provisioned + onboot: true + cores: 2 + memory: 4096 diff --git a/inventory/proxmox.yaml b/inventory/proxmox.yaml index d317e6f..bdf4666 100644 --- a/inventory/proxmox.yaml +++ b/inventory/proxmox.yaml @@ -32,6 +32,9 @@ proxmox: rmfakecloud: hosts: rmfakecloud.srv.home.local.koval.net: + homeassistant: + hosts: + homeassistant.srv.home.local.koval.net: vars: ansible_user: debian ansible_ssh_private_key_file: ~/.ssh/id_rsa