- move ansible project within infra - introduce terraform/opentofu for proxmox VM management
70 lines
2.0 KiB
YAML
70 lines
2.0 KiB
YAML
---
|
|
- name: Download cloud image
|
|
get_url:
|
|
url: "{{ image_url }}"
|
|
dest: "{{ image_dest }}"
|
|
use_netrc: yes
|
|
|
|
- name: create VMs
|
|
delegate_to: localhost
|
|
vars:
|
|
ansible_python_interpreter: /home/taqi/.venv/ansible/bin/python
|
|
community.general.proxmox_kvm:
|
|
api_host: "{{ proxmox_api_url }}"
|
|
api_user: "{{ proxmox_user }}"
|
|
api_token_id: "{{ proxmox_api_token_id }}"
|
|
api_token_secret: "{{ proxmox_api_token }}"
|
|
node: "{{ node }}"
|
|
vmid: "{{ item.id }}"
|
|
name: "{{ item.name }}"
|
|
memory: "{{ item.memory }}"
|
|
cores: "{{ item.cores }}"
|
|
scsihw: "{{ scsi_hw }}"
|
|
boot: "{{ boot_order }}"
|
|
net:
|
|
net0: "{{ net0 }}"
|
|
ipconfig:
|
|
ipconfig0: "ip={{ item.ip }},gw={{ item.gateway }}"
|
|
ide:
|
|
ide2: "{{ ide2 }}"
|
|
nameservers: "{{ item.nameserver1 }},{{ item.nameserver2 }}"
|
|
ciuser: "{{ ciuser }}"
|
|
cipassword: "{{ cipassword }}"
|
|
sshkeys: "{{ lookup('file', '/home/taqi/.ssh/homeserver.pub') }}"
|
|
loop: "{{ vm_list }}"
|
|
|
|
- name: Import disk image
|
|
ansible.builtin.shell: |
|
|
qm importdisk "{{ item.id }}" "{{ image_dest }}" "{{ storage_name }}" --format "{{ image_format }}"
|
|
loop: "{{ vm_list }}"
|
|
|
|
- name: Attach disk to VM
|
|
ansible.builtin.shell: |
|
|
qm set "{{ item.id }}" --scsi0 "{{ storage_name }}:{{ item.id }}/vm-{{ item.id }}-disk-0.{{ image_format }},discard=on"
|
|
loop: "{{ vm_list }}"
|
|
|
|
- name: Resize disk
|
|
ansible.builtin.shell: |
|
|
qm resize {{ item.id }} scsi0 {{ item.disk_size }}
|
|
loop: "{{ vm_list }}"
|
|
|
|
- name: Start VMs
|
|
delegate_to: localhost
|
|
vars:
|
|
ansible_python_interpreter: /home/taqi/.venv/ansible/bin/python
|
|
community.general.proxmox_kvm:
|
|
api_host: "{{ proxmox_api_url }}"
|
|
api_user: "{{ proxmox_user }}"
|
|
api_token_id: "{{ proxmox_api_token_id }}"
|
|
api_token_secret: "{{ proxmox_api_token }}"
|
|
node: "{{ node }}"
|
|
name: "{{ item.name }}"
|
|
state: started
|
|
loop: "{{ vm_list }}"
|
|
tags:
|
|
- start_vms
|
|
|
|
- name: Clean up downloaded image
|
|
file:
|
|
path: "{{ image_dest }}"
|
|
state: absent |