diff --git a/src/cron-callback.sh b/src/cron-callback.sh index 27b7cadef485e5feafe32b98f9b5851fa5d921b5..441977c0c5aa22dee64b4683a82b681f8443fdb8 100644 --- a/src/cron-callback.sh +++ b/src/cron-callback.sh @@ -36,8 +36,8 @@ ssh_pwauth: True function download_cloud_img_if_not_exist () { local cloudimg="$1" - [[ "$1" != "focal-server-cloudimg-amd64.img" ]] && echo "ERROR: cloudimg not supported" - [[ -f "base/$cloudimg" ]] || aria2c -o "base/$cloudimg" https://cloud-images.ubuntu.com/focal/current/focal-server-cloudimg-amd64.img || ! echo "Failed to download ubuntu cloudimg" || return $? + [[ "$1" != "focal-server-cloudimg-amd64.img" ]] && echo2 "ERROR: cloudimg not supported" + [[ -f "base/$cloudimg" ]] || aria2c -o "base/$cloudimg" https://cloud-images.ubuntu.com/focal/current/focal-server-cloudimg-amd64.img || ! echo2 "Failed to download ubuntu cloudimg" || return $? } function create_vm_if_not_exist () { @@ -65,7 +65,8 @@ function create_vm_if_not_exist () { function start_vm_if_not_running () { local name=$1 - local options="$2" + local options_txt="$2" + read -a options <<< "$options_txt" # For tracking started instance local uuid=`uuidgen --namespace @oid --name "qemu.$name" --sha1` @@ -74,15 +75,18 @@ function start_vm_if_not_running () { ps aux | grep -F "--uuid $uuid" | grep qemu && return 0 # start it + [[ ! -f "vm/$name/disk.img" ]] && echo2 "In start_vm, disk image vm/$name/disk.img doesn't exist. Did init_vm fail?" && return 1 nohup qemu-system-x86_64 --uuid "$uuid" -drive file="vm/$name/disk.img",if=virtio -cdrom "vm/$name/initimg.iso" -cpu host --enable-kvm -bios /usr/share/edk2-ovmf/x64/OVMF.fd -net nic,model=rtl8139 "${options[@]}" & disown } -# [[ $2 = "" ]] && echo "Temp script to create VM. Usage: $0 MY_GOOD_VM11 :11" && exit 1 -# create_vm_from "$1" 2 4G 50G __hardcoded__ r 1 "$2" __hardcoded__ || exit $? -# echo "DEBUG: sshpass -p 1 ssh -p 30472 r@localhost" - function do_init () { while IFS= read -r line; do + # Ignore lines starting with # + if [[ "$line" =~ ^\# ]]; then + continue + fi + # Trim leading and trailing whitespaces + line=$(echo "$line" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//') # Check if the line is non-empty if [ -n "$line" ]; then # Parse the line as "name;cloudimg;disk;username;password", trim space @@ -104,27 +108,23 @@ function do_start () { if [[ "$line" =~ ^\# ]]; then continue fi - # Trim leading and trailing whitespaces line=$(echo "$line" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//') - # Check if the line is non-empty if [ -n "$line" ]; then # Parse the line as "name;options", only trim space in name, options can contain ; name=$(echo "$line" | sed -e 's/[[:space:]]*;.*$//' -e 's/^[[:space:]]*//') - options=$(echo "$line" | sed 's/^[^:]*://') + options=$(echo "$line" | sed 's/^[^;]*;//') # Check if the name is empty if [ -n "$name" ]; then - # Print the parsed values - echo "Name: $name|" - echo "Options: $options|" - echo "---------------------" + start_vm_if_not_running "$name" "$options" || echo2 "Failed to start_vm_if_not_running. $?" else - # Print an error message for empty name - echo "Error: Name is empty. Skipping the line." + echo2 "Error: Bad configuration line: $line" fi fi done < ../runtime.settings } +do_init +do_start diff --git a/src/init.settings b/src/init.settings index 8ad9c9f2eace627550251e057ecda0b7e03fe5e8..05a5ef986e8bebbf54a481ed03af22690ea93e8a 100644 --- a/src/init.settings +++ b/src/init.settings @@ -1,4 +1,4 @@ # name;cloudimg;disk;username;password (space will be trimmed) instance1;focal-server-cloudimg-amd64.img;60G;r;1 -gitlab-ci;focal-server-cloudimg-amd64.img;60G;r;1 -httptest ;focal-server-cloudimg-amd64.img;60G;r;1 +#gitlab-ci;focal-server-cloudimg-amd64.img;60G;r;1 +#httptest ;focal-server-cloudimg-amd64.img;60G;r;1 diff --git a/src/runtime.settings b/src/runtime.settings index 792f8927f18140e463889b66ba5b08684158faf2..bfd56dbb620dce335e1a27e6926d90a41481ec99 100644 --- a/src/runtime.settings +++ b/src/runtime.settings @@ -1,4 +1,4 @@ -# name;options (space in name will be trimmed) +# name;options (name will be trimmed, options will be passed as-is) instance1;-m 2G -smp 2 -vnc :11 -net user,hostfwd=tcp::30472-: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 +#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