Bag of hacks to get local libvirt working
This commit is contained in:
parent
2e6894ad14
commit
a580b04659
@ -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'])),
|
||||
)
|
||||
ssh_authorized_keys=['3wc'],
|
||||
)
|
||||
|
@ -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):
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
Loading…
Reference in New Issue
Block a user