From 0e8f22d6543a007d40d3c0ac6a198f145b7933bc Mon Sep 17 00:00:00 2001 From: Recolic <git@me.recolic.net> Date: Tue, 16 Jan 2024 14:32:41 -0800 Subject: [PATCH] .backing_file --- cron-callback.sh | 22 +++++++++++++++------- init.settings | 6 +++++- runtime.settings | 4 ++-- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/cron-callback.sh b/cron-callback.sh index 7e884b4..0d65413 100755 --- a/cron-callback.sh +++ b/cron-callback.sh @@ -64,13 +64,19 @@ function create_vm_if_not_exist () { download_cloud_img_if_not_exist "$cloudimg" || return $? rm -rf "vm/$name" ; mkdir -p "vm/$name" - # create it + echo2 "+ Creating VM image $name with options $@..." - generate_metadata "$name" > "vm/$name/meta-data" || return $? - generate_userdata "$username" "$password" "$name" > "vm/$name/user-data" || return $? - ( cd "vm/$name" ; genisoimage -output initimg.iso -volid cidata -joliet -rock user-data meta-data ) || return $? - qemu-img create -f qcow2 -F qcow2 -o backing_file="../../base/$cloudimg" "vm/$name/disk.img" || return $? - qemu-img resize "vm/$name/disk.img" "$disk" || return $? + if [ -z "$disk" ]; then + # create from cloudimg + generate_metadata "$name" > "vm/$name/meta-data" || return $? + generate_userdata "$username" "$password" "$name" > "vm/$name/user-data" || return $? + ( cd "vm/$name" ; genisoimage -output initimg.iso -volid cidata -joliet -rock user-data meta-data ) || return $? + qemu-img create -f qcow2 -F qcow2 -b "../../base/$cloudimg" "vm/$name/disk.img" || return $? + qemu-img resize "vm/$name/disk.img" "$disk" || return $? + else + # create from baseimg + qemu-img create -f qcow2 -F qcow2 -b "../../base/$cloudimg" "vm/$name/disk.img" || return $? + fi } function start_vm_if_not_running () { @@ -104,9 +110,11 @@ function do_init () { # Parse the line as "name;cloudimg;disk;username;password", trim space IFS=';' read -r name cloudimg disk username password <<< "$(echo "$line" | tr -s '[:space:]' ';')" - # Check if all fields are non-empty + # 2 options or 5 options allowed, otherwise bad config line. if [ -n "$name" ] && [ -n "$cloudimg" ] && [ -n "$disk" ] && [ -n "$username" ] && [ -n "$password" ]; then create_vm_if_not_exist "$name" "$cloudimg" "$disk" "$username" "$password" || echo2 "Failed to create_vm_if_not_exist. $?" + elif [ -n "$name" ] && [ -n "$cloudimg" ] && [ ! -n "$disk" ] && [ ! -n "$username" ] && [ ! -n "$password" ]; then + create_vm_if_not_exist "$name" "$cloudimg" || echo2 "Failed to create_vm_if_not_exist. $?" else echo2 "Error: Bad configuration line: $line" fi diff --git a/init.settings b/init.settings index ee1d47f..5f09d42 100644 --- a/init.settings +++ b/init.settings @@ -1,4 +1,8 @@ +## init VM from cloudimg # name;cloudimg;disk;username;password (space will be trimmed) instance1;focal-server-cloudimg-amd64.img;60G;r;1 gitlab-ci;Arch-Linux-x86_64-cloudimg.qcow2;40G;r;1 -#httptest ;focal-server-cloudimg-amd64.img;20G;r;1 + +## or init VM from pre-deployed backing image (please put it into data/base/) +# name;existing_img_fname +devbox;win10pro-22h2-virtio-uefi.qcow2 diff --git a/runtime.settings b/runtime.settings index f70f44d..5204307 100644 --- a/runtime.settings +++ b/runtime.settings @@ -1,4 +1,4 @@ # name;options (name will be trimmed, options will be passed as-is) instance1;-m 2G -smp 2 -vnc :11 -net user,hostfwd=tcp::30471-:22 -gitlab-ci;-m 4G -smp 4 -vnc :12 -net user,hostfwd=tcp::30473-:22 -#httptest ;-m 1G -smp 1 -vnc :13 -net user,hostfwd=tcp::30474-:22,hostfwd=tcp::30480-:80 +gitlab-ci;-m 4G -smp 4 -vnc :12 -net user,hostfwd=tcp::30473-:22,hostfwd=tcp::30474-:8080 +devbox ;-m 6G -smp 6 -vnc :13 -net user,hostfwd=tcp::30475-:3389 -cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time -- GitLab