From a580b04659b7baf1ce63fa47548e2db5ed88a726 Mon Sep 17 00:00:00 2001 From: 3wc <3wc.cyberia@doesthisthing.work> Date: Wed, 14 Jul 2021 00:42:28 +0200 Subject: [PATCH] Bag of hacks to get local libvirt working --- capsulflask/hub_api.py | 4 ++-- capsulflask/hub_model.py | 5 ++-- .../shell_scripts/capacity-avaliable.sh | 6 ++--- capsulflask/shell_scripts/create.sh | 23 ++++++++++--------- 4 files changed, 20 insertions(+), 18 deletions(-) diff --git a/capsulflask/hub_api.py b/capsulflask/hub_api.py index 634ec21..ece1fef 100644 --- a/capsulflask/hub_api.py +++ b/capsulflask/hub_api.py @@ -177,5 +177,5 @@ def on_create_claimed(payload, host_id): host=host_id, network_name=payload['network_name'], public_ipv4=payload['public_ipv4'], - ssh_authorized_keys=list(map(lambda x: x["name"], payload['ssh_authorized_keys'])), - ) \ No newline at end of file + ssh_authorized_keys=['3wc'], + ) diff --git a/capsulflask/hub_model.py b/capsulflask/hub_model.py index ac2a865..941c8d6 100644 --- a/capsulflask/hub_model.py +++ b/capsulflask/hub_model.py @@ -214,12 +214,13 @@ class CapsulFlaskHub(VirtualizationInterface): except: # no need to do anything here since if it cant be parsed then generic_operation will handle it. pass + + if error_message != "": + raise ValueError(f"create capsul operation {operation_id} on {assigned_hosts} failed with {error_message}") if number_of_assigned != 1: assigned_hosts_string = ", ".join(assigned_hosts) raise ValueError(f"expected create capsul operation {operation_id} to be assigned to one host, it was assigned to {number_of_assigned} ({assigned_hosts_string})") - if error_message != "": - raise ValueError(f"create capsul operation {operation_id} on {assigned_hosts_string} failed with {error_message}") def destroy(self, email: str, id: str): diff --git a/capsulflask/shell_scripts/capacity-avaliable.sh b/capsulflask/shell_scripts/capacity-avaliable.sh index d9fbdb8..1220e68 100755 --- a/capsulflask/shell_scripts/capacity-avaliable.sh +++ b/capsulflask/shell_scripts/capacity-avaliable.sh @@ -3,7 +3,7 @@ # check available RAM and IPv4s ram_bytes_to_allocate="$1" -ram_bytes_available=$(grep -E "^(size|memory_available_bytes)" /proc/spl/kstat/zfs/arcstats | awk '{sum+=$3} END {printf "%.0f", sum}') +ram_bytes_available="$(($(grep Available /proc/meminfo | grep -o '[0-9]*') * 1024))" ram_bytes_remainder="$((ram_bytes_available - ram_bytes_to_allocate))" if echo "$ram_bytes_to_allocate" | grep -vqE "^[0-9]+$"; then @@ -11,8 +11,8 @@ if echo "$ram_bytes_to_allocate" | grep -vqE "^[0-9]+$"; then exit 1 fi -# 20GB -if [ "$ram_bytes_remainder" -le $((20 * 1024 * 1024 * 1024)) ]; then +# 0.25GB +if [ "$ram_bytes_remainder" -le $((1 * 1024 * 1024 * 1024 / 4)) ]; then echo "VM is requesting more RAM than $(hostname -f) has available." echo "Bytes requested: $ram_bytes_to_allocate" echo "Bytes available: $ram_bytes_available" diff --git a/capsulflask/shell_scripts/create.sh b/capsulflask/shell_scripts/create.sh index 1c74cbc..968d11e 100755 --- a/capsulflask/shell_scripts/create.sh +++ b/capsulflask/shell_scripts/create.sh @@ -6,6 +6,7 @@ vmname="$1" template_file="/tank/img/$2" +qemu_tank_dir="/home/f/Projects/Cyberia/tank" vcpus="$3" memory="$4" pubkeys="$5" @@ -50,40 +51,40 @@ if echo "$public_ipv4" | grep -vqE "^[0-9.]+$"; then exit 1 fi -disk="/tank/vm/$vmname.qcow2" -cdrom="/tank/vm/$vmname.iso" -xml="/tank/vm/$vmname.xml" +disk="$vmname.qcow2" +cdrom="$vmname.iso" +xml="$vmname.xml" if [ -f /tank/vm/$vmname.qcow2 ]; then echo "Randomly generated name matched an existing VM! Odds are like one in a billion. Buy a lotto ticket." exit 1 fi -cp "$template_file" "$disk" +cp "$template_file" "/tank/vm/$disk" cp /tank/config/cyberia-cloudinit.yml /tmp/cloudinit.yml echo "$pubkeys" | while IFS= read -r line; do echo " - $line" >> /tmp/cloudinit.yml done -cloud-localds "$cdrom" /tmp/cloudinit.yml +cloud-localds "/tank/vm/$cdrom" /tmp/cloudinit.yml -qemu-img resize "$disk" "$root_volume_size" +qemu-img resize "/tank/vm/$disk" "$root_volume_size" virt-install \ --memory "$memory" \ --vcpus "$vcpus" \ --name "$vmname" \ - --disk "$disk",bus=virtio \ - --disk "$cdrom",device=cdrom \ + --disk "$qemu_tank_dir/vm/$disk",bus=virtio \ + --disk "$qemu_tank_dir/vm/$cdrom",device=cdrom \ --os-type Linux \ --os-variant generic \ --virt-type kvm \ --graphics vnc,listen=127.0.0.1 \ --network network=$network_name,filterref=clean-traffic,model=virtio \ --import \ - --print-xml > "$xml" + --print-xml > "/tank/vm/$xml" -chmod 0600 "$xml" "$disk" "$cdrom" -virsh define "$xml" +chmod 0600 "/tank/vm/$xml" "/tank/vm/$disk" "/tank/vm/$cdrom" +virsh define "/tank/vm/$xml" virsh start "$vmname" echo "success"