From 4d30798f54051e93003ba2e25a151bac483d670e Mon Sep 17 00:00:00 2001 From: "Dustin C. Hatch" Date: Fri, 7 Feb 2025 18:34:26 -0600 Subject: [PATCH] newvm: Configure VM for dynamic inventory This commit adds a new `--group` argument to the `newvm` script, which adds the host to an Ansible group by listing it in the _libvirt_ domain metadata. Multiple groups can be specified by repeating the argument. Additionally, the VM title is now always set to machine's FQDN, which is what the dynamic inventory plugin uses to determine the inventory hostname. The dynamic inventory plugin parses the _libvirt_ domain metadata and extracts group membership from the `` XML element. Each `` sub-element specifies a group to which the host belongs. Unfortunately, `virt-install` does not support modifying the `` element in the _libvirt_ domain XML document, so we have to resort to using `virsh`. To ensure the metadata are set before the guest OS boots and tries to access them, we fork and run `virsh` in a separate process. --- newvm.sh | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/newvm.sh b/newvm.sh index 17e4894..da41865 100755 --- a/newvm.sh +++ b/newvm.sh @@ -1,6 +1,8 @@ #!/bin/sh # vim: set sw=4 ts=4 sts=4 et : +METADATA_XMLNS='http://du5t1n.me/xmlns/libvirt/metadata/' + memory=2048 vcpus=2 disk_size=16 @@ -73,6 +75,13 @@ while [ $# -gt 0 ]; do --domain=*) dnsdomain=${1#=*} ;; + --group) + shift + groups_xml="${groups_xml}" + ;; + --group=*) + groups_xml="${groups_xml}" + ;; --no-console|--noconsole) console=false ;; @@ -139,6 +148,7 @@ extra_args="${extra_args} inst.notmux quiet systemd.show_status=1 console=ttyS0" set -- \ --name ${name} \ + --metadata title=${hostname} \ --memory ${memory} \ --cpu host \ --location ${location} \ @@ -159,4 +169,11 @@ else set -- "$@" --noautoconsole --wait -1 fi -exec virt-install "$@" +( +virsh event --event lifecycle --loop | awk '/Started/{exit}' +virsh metadata ${name} --live --config ${METADATA_XMLNS} dch \ + "${groups_xml}" +) & + +virt-install "$@" +wait