- k0s bootstrap with Cilium and OpenEBS - ArgoCD apps for infra, CAPI, Tinkerbell, and Netris - Ansible playbooks for virtual baremetal lab and Netris switches - CAPI provider manifests for k0smotron and Tinkerbell
160 lines
4.5 KiB
YAML
160 lines
4.5 KiB
YAML
---
|
|
- name: Create virtual baremetal VMs with VirtualBMC
|
|
hosts: local
|
|
become: true
|
|
gather_facts: false
|
|
|
|
vars:
|
|
vbmc_user: admin
|
|
vbmc_password: password
|
|
bridge_name: br-mgmt
|
|
vm_vcpus: 6
|
|
vm_ram: 6144
|
|
vm_disk_size: 60
|
|
disk_path: /var/lib/libvirt/images
|
|
|
|
vms:
|
|
- name: vm1
|
|
mac: "52:54:00:12:34:01"
|
|
vbmc_port: 6231
|
|
- name: vm2
|
|
mac: "52:54:00:12:34:02"
|
|
vbmc_port: 6232
|
|
- name: vm3
|
|
mac: "52:54:00:12:34:03"
|
|
vbmc_port: 6233
|
|
|
|
tasks:
|
|
- name: Install required packages
|
|
ansible.builtin.apt:
|
|
name:
|
|
- python3-pip
|
|
- ovmf
|
|
state: present
|
|
update_cache: false
|
|
|
|
- name: Install virtualbmc
|
|
ansible.builtin.pip:
|
|
name: virtualbmc
|
|
state: present
|
|
break_system_packages: true
|
|
|
|
- name: Ensure vbmcd service file exists
|
|
ansible.builtin.copy:
|
|
dest: /etc/systemd/system/vbmcd.service
|
|
owner: root
|
|
group: root
|
|
mode: "0644"
|
|
content: |
|
|
[Unit]
|
|
Description=Virtual BMC daemon
|
|
After=network.target libvirtd.service
|
|
|
|
[Service]
|
|
Type=simple
|
|
ExecStart=/usr/local/bin/vbmcd --foreground
|
|
Restart=always
|
|
RestartSec=5
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
|
|
- name: Enable and start vbmcd service
|
|
ansible.builtin.systemd:
|
|
name: vbmcd
|
|
daemon_reload: true
|
|
enabled: true
|
|
state: started
|
|
|
|
- name: Wait for vbmcd to be ready
|
|
ansible.builtin.pause:
|
|
seconds: 3
|
|
|
|
- name: Check if VMs already exist
|
|
ansible.builtin.command: virsh dominfo {{ item.name }}
|
|
loop: "{{ vms }}"
|
|
register: vm_exists
|
|
changed_when: false
|
|
failed_when: false
|
|
|
|
- name: Create VMs with virt-install
|
|
ansible.builtin.command: >
|
|
virt-install
|
|
--name "{{ item.item.name }}"
|
|
--vcpus "{{ vm_vcpus }}"
|
|
--ram "{{ vm_ram }}"
|
|
--os-variant "debian12"
|
|
--connect "qemu:///system"
|
|
--disk "path={{ disk_path }}/{{ item.item.name }}-disk.img,bus=virtio,size={{ vm_disk_size }},sparse=yes"
|
|
--disk "device=cdrom,bus=sata"
|
|
--network "bridge:{{ bridge_name }},mac={{ item.item.mac }}"
|
|
--console "pty,target.type=virtio"
|
|
--serial "pty"
|
|
--graphics "vnc,listen=0.0.0.0"
|
|
--import
|
|
--noautoconsole
|
|
--noreboot
|
|
--boot "uefi,firmware.feature0.name=enrolled-keys,firmware.feature0.enabled=no,firmware.feature1.name=secure-boot,firmware.feature1.enabled=yes,bootmenu.enable=on,network,hd"
|
|
loop: "{{ vm_exists.results }}"
|
|
when: item.rc != 0
|
|
|
|
- name: Check existing VBMC entries
|
|
ansible.builtin.command: vbmc list
|
|
register: vbmc_list
|
|
changed_when: false
|
|
|
|
- name: Add VMs to VirtualBMC
|
|
ansible.builtin.command: >
|
|
vbmc add {{ item.name }}
|
|
--port {{ item.vbmc_port }}
|
|
--username {{ vbmc_user }}
|
|
--password {{ vbmc_password }}
|
|
--address 0.0.0.0
|
|
loop: "{{ vms }}"
|
|
when: item.name not in vbmc_list.stdout
|
|
|
|
- name: Start VBMC for each VM
|
|
ansible.builtin.command: vbmc start {{ item.name }}
|
|
loop: "{{ vms }}"
|
|
register: vbmc_start
|
|
changed_when: "'started' in vbmc_start.stdout or vbmc_start.rc == 0"
|
|
failed_when: false
|
|
|
|
- name: Get VBMC status
|
|
ansible.builtin.command: vbmc list
|
|
register: vbmc_status
|
|
changed_when: false
|
|
|
|
- name: Display VBMC status
|
|
ansible.builtin.debug:
|
|
var: vbmc_status.stdout_lines
|
|
|
|
- name: Get VM list
|
|
ansible.builtin.command: virsh list --all
|
|
register: vm_list
|
|
changed_when: false
|
|
|
|
- name: Display VM list
|
|
ansible.builtin.debug:
|
|
var: vm_list.stdout_lines
|
|
|
|
- name: Display summary
|
|
ansible.builtin.debug:
|
|
msg: |
|
|
Virtual Baremetal VMs created!
|
|
|
|
| VM | MAC Address | VBMC Port | VBMC Address |
|
|
|-----|-------------------|-----------|------------------|
|
|
| vm1 | 52:54:00:12:34:01 | 6231 | 172.16.81.254 |
|
|
| vm2 | 52:54:00:12:34:02 | 6232 | 172.16.81.254 |
|
|
| vm3 | 52:54:00:12:34:03 | 6233 | 172.16.81.254 |
|
|
|
|
Test IPMI with:
|
|
ipmitool -I lanplus -U admin -P password -H 172.16.81.254 -p 6231 power status
|
|
|
|
Start a VM:
|
|
ipmitool -I lanplus -U admin -P password -H 172.16.81.254 -p 6231 power on
|
|
|
|
Set PXE boot:
|
|
ipmitool -I lanplus -U admin -P password -H 172.16.81.254 -p 6231 chassis bootdev pxe
|