Add libvirt helpers

This commit is contained in:
Neill Cox 2023-09-20 12:02:40 +10:00
parent f4e9b627f8
commit 6a5b1e8451
4 changed files with 108 additions and 0 deletions

46
virt-install/cmd.sh Normal file
View file

@ -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...

View file

@ -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()

View file

@ -0,0 +1,2 @@
instance-id: {data.instance_id}
local-hostname: {data.local_hostname}

View file

@ -0,0 +1,6 @@
#cloud-config
password: {data.password}
chpasswd: {{expire: False}}
ssh_pwauth: True
ssh_authorized_keys:
- {data.public_key}