From 6a5b1e8451a0b484c162e78b1ec604098e697bdb Mon Sep 17 00:00:00 2001 From: Neill Cox Date: Wed, 20 Sep 2023 12:02:40 +1000 Subject: [PATCH] Add libvirt helpers --- virt-install/cmd.sh | 46 +++++++++++++++++++++++++++++ virt-install/create_aio_vm.py | 54 +++++++++++++++++++++++++++++++++++ virt-install/meta-data.tpl | 2 ++ virt-install/user-data.tpl | 6 ++++ 4 files changed, 108 insertions(+) create mode 100644 virt-install/cmd.sh create mode 100644 virt-install/create_aio_vm.py create mode 100644 virt-install/meta-data.tpl create mode 100644 virt-install/user-data.tpl diff --git a/virt-install/cmd.sh b/virt-install/cmd.sh new file mode 100644 index 0000000..fc8c499 --- /dev/null +++ b/virt-install/cmd.sh @@ -0,0 +1,46 @@ +# sudo dnf install -y guestfs-tools + +# sudo dnf install virt-viewer ?? + + + +qemu-img create -f qcow2 -o preallocation=metadata test.qcow2 100G + +virt-resize --expand /dev/sda3 /home/ncox/Downloads/rhel-guest-image-8.4-1269.x86_64.qcow2 ./test.qcow2 + +# Run under sudo - won't work as a user mode install +sudo virt-install \ + --os-variant rhel8.4 \ + --name test \ + --memory 2048 \ + --disk ./test.qcow2 \ + --import \ + --graphics spice,listen=0.0.0.0 \ + --video virtio \ + --channel spicevmc \ + --wait 0 \ + --cloud-init meta-data=./meta-data,user-data=./user-data \ + + + + --network \ + --network + + + + + + + --network br0 \ + + + + --extra-args "ip=192.168.1.2::192.168.1.1:255.255.255.0:test.example.com:eth0:none" + + [root@rhel-8 ~]# virt-install + --name centos8-2 --memory 10240 --vcpus=2 + --cdrom=/tmp/rhel-server-7.6-x86_64-dvd.iso + --disk path=/disks/centos8-2.qcow2,size=20,format=qcow2 + --network bridge=nm-bridge --graphics=vnc -v + +Starting install... \ No newline at end of file diff --git a/virt-install/create_aio_vm.py b/virt-install/create_aio_vm.py new file mode 100644 index 0000000..fe143cb --- /dev/null +++ b/virt-install/create_aio_vm.py @@ -0,0 +1,54 @@ +import argparse +import pathlib +import subprocess + +MD_PATH = "./meta-data" +UD_PATH = "./user-data" + +def parse_args(): + parser = argparse.ArgumentParser() + parser.add_argument("--password", required=True) + parser.add_argument("--public-key", required=True, type=open) + parser.add_argument("--local-hostname", default="aio3.gpslab.cbr.redhat.com") + parser.add_argument("--user-data", default="./user-data.tpl", type=open) + parser.add_argument("--meta-data", default="./meta-data.tpl", type=open) + parser.add_argument("--instance-id", default="aio3") + + args = parser.parse_args() + + args.public_key = args.public_key.read() + + args.user_data = args.user_data.read() + args.user_data = args.user_data.format(data=args) + + args.meta_data = args.meta_data.read() + args.meta_data = args.meta_data.format(data=args) + + return args + +def write_user_data(user_data): + with open(UD_PATH, "w", encoding="utf-8") as user_data_file: + user_data_file.write(user_data) + +def write_meta_data(meta_data): + with open(MD_PATH, "w", encoding="utf-8") as meta_data_file: + meta_data_file.write(meta_data) + +def delete_meta_data(): + pathlib.Path.unlink(MD_PATH) + +def delete_user_data(): + pathlib.Path.unlink(UD_PATH) + +def main(): + args = parse_args() + + print(args) + write_meta_data(args.meta_data) + write_user_data(args.user_data) + + delete_meta_data() + delete_user_data() + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/virt-install/meta-data.tpl b/virt-install/meta-data.tpl new file mode 100644 index 0000000..9a577ba --- /dev/null +++ b/virt-install/meta-data.tpl @@ -0,0 +1,2 @@ +instance-id: {data.instance_id} +local-hostname: {data.local_hostname} diff --git a/virt-install/user-data.tpl b/virt-install/user-data.tpl new file mode 100644 index 0000000..ea2c172 --- /dev/null +++ b/virt-install/user-data.tpl @@ -0,0 +1,6 @@ +#cloud-config +password: {data.password} +chpasswd: {{expire: False}} +ssh_pwauth: True +ssh_authorized_keys: + - {data.public_key}