90 lines
4.1 KiB
YAML
90 lines
4.1 KiB
YAML
# Generic: create a Debian 13 genericcloud VM on nh3-pve-2 with cloud-init (user vh with the operator's keys plus
|
|
# the infra-ops bootstrap key, static address on VLAN 50). Same steps as playbooks/nh3-albok-vm.yaml, parameterised.
|
|
# scripts/elway infra-ops@10.100.250.62 --playbook playbooks/nh3-pve-2-cloudinit-vm.yaml \
|
|
# --var vmid=111 --var name=nh3-svos --var ip=10.100.50.43/24 --var cores=4 --var memory=8192 --var disk=100G \
|
|
# --var tags=svos --var "description=..."
|
|
# Then: bootstrap-infra-ops-user.yaml AS vh, then the host's own base playbook (which takes the bootstrap key off vh).
|
|
vars:
|
|
vmid: ""
|
|
name: ""
|
|
ip: ""
|
|
gw: 10.100.50.1
|
|
dns: 10.100.50.40 10.250.50.70
|
|
cores: "4"
|
|
memory: "8192"
|
|
disk: 100G
|
|
tags: ""
|
|
description: ""
|
|
img_url: https://cloud.debian.org/images/cloud/trixie/latest
|
|
img: debian-13-genericcloud-amd64.qcow2
|
|
img_dir: /var/lib/vz/import
|
|
|
|
steps:
|
|
- name: refuse unless this is nh3-pve-2, vmbr0 is VLAN-aware, and the VMID and address are free
|
|
sudo: true
|
|
shell: |
|
|
set -e
|
|
test "$(hostname)" = nh3-pve-2
|
|
test "$(cat /sys/class/net/vmbr0/bridge/vlan_filtering)" = 1
|
|
if ping -c2 -W1 $(echo {{ ip }} | cut -d/ -f1) >/dev/null 2>&1; then echo "{{ ip }} ANSWERS — taken"; exit 1; fi
|
|
changed_when: "false"
|
|
when: "! qm status {{ vmid }} >/dev/null 2>&1"
|
|
|
|
- name: fetch the Debian 13 genericcloud image and check it against SHA512SUMS
|
|
sudo: true
|
|
shell: |
|
|
set -e
|
|
install -d -m 0755 {{ img_dir }}
|
|
cd {{ img_dir }}
|
|
curl -fsSL -o SHA512SUMS.trixie {{ img_url }}/SHA512SUMS
|
|
curl -fsSL -o {{ img }}.part {{ img_url }}/{{ img }}
|
|
want=$(awk '$2=="{{ img }}"{print $1}' SHA512SUMS.trixie)
|
|
test -n "$want"
|
|
echo "$want {{ img }}.part" | sha512sum -c -
|
|
mv {{ img }}.part {{ img }}
|
|
when: "! qm status {{ vmid }} >/dev/null 2>&1"
|
|
|
|
- name: create VM {{ vmid }} ({{ name }})
|
|
sudo: true
|
|
shell: |
|
|
set -e
|
|
qm create {{ vmid }} --name {{ name }} --ostype l26 --cpu x86-64-v3 --cores {{ cores }} --memory {{ memory }} \
|
|
--scsihw virtio-scsi-single --agent enabled=1 --onboot 1 --tags {{ tags }} \
|
|
--net0 virtio,bridge=vmbr0,tag=50,firewall=1 \
|
|
--serial0 socket --vga serial0 \
|
|
--description "{{ description }}"
|
|
qm set {{ vmid }} --scsi0 vmstore:0,import-from={{ img_dir }}/{{ img }},discard=on,ssd=1,iothread=1
|
|
qm disk resize {{ vmid }} scsi0 {{ disk }}
|
|
qm set {{ vmid }} --ide2 vmstore:cloudinit --boot order=scsi0
|
|
creates: /etc/pve/qemu-server/{{ vmid }}.conf
|
|
|
|
- name: cloud-init — user vh, keys, static address, resolvers
|
|
sudo: true
|
|
shell: |
|
|
set -e
|
|
k=$(mktemp)
|
|
cat > "$k" <<'EOF'
|
|
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN+1HBwfXrkfTYWdcnWCjLJ6VLAGC87gxH5h5vKaaA3c infra-ops@pfi-fleet
|
|
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKGm/lJslGEL2xDBY/7LdUc0Q4GyuxwFtGspYTe6WsVE lkrav@VHHomeG13
|
|
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDP/AwgaLghPoQi9RDt+m/9H9jLHDoP93WgzczlhZlSvZoQ5qDpWu5oAQlRwImiWhVL1ClK4FwEz9JULsta7Uq3FaiQvs2ltevrW/EpNbhAfxZa4Z1ELrPAOO8SSlhZ+Zer33SPkfJD9t3Hi9TXheCaANiEtE6hH1nCVLpHWQdbzy+L7EyG8z+/RzNXwwIL8f0BZ8n7FvFujgwc1OQTXlg4fiW3FdB3uzJMVRT59IIsPEq/ODGZZ6XGtHy24Ewcsi8l78I+oKaPdMl8ZXNBQrNb0MPIJnHkQwTrzlDKZ0Oh1UKm7I9i9hDMB/M2+aQ+6MxzY5TLZyDvRYd8R3j9Mnrp3ouCnNcklGAkX7i8hNJ2y8xCbwOeP8sMd+VtQ6hBbNa6KAEaAgGuWHHS0KGGO4HjtvDxJH8e7BnGzveIeCUGLVKMrg08w9nqF6Kzf3Y72ou0yCmnu7kKqocS1Pcr+e5E1MdT4brc2BfYkzqExLp8gxQaJ1Zas2OXPNXpAxL58xc= lkraven@nh3-dev
|
|
EOF
|
|
sed -i 's/^ *//' "$k"
|
|
qm set {{ vmid }} --ciuser vh --sshkeys "$k" --ipconfig0 ip={{ ip }},gw={{ gw }} \
|
|
--nameserver "{{ dns }}" --searchdomain nh3.internal --ciupgrade 1
|
|
rm -f "$k"
|
|
when: "! qm config {{ vmid }} | grep -q '^ciuser: vh'"
|
|
|
|
- name: start VM {{ vmid }}
|
|
sudo: true
|
|
shell: qm start {{ vmid }}
|
|
when: "! qm status {{ vmid }} | grep -q running"
|
|
|
|
verify:
|
|
- name: VM is running with the intended shape
|
|
sudo: true
|
|
shell: |
|
|
qm status {{ vmid }}
|
|
qm config {{ vmid }} | grep -E '^(name|cores|cpu|memory|net0|scsi0|ipconfig0|onboot|ciuser):'
|
|
qm status {{ vmid }} | grep -q running
|
|
changed_when: "false"
|