#!/bin/sh # # check available RAM and IPv4s ram_bytes_to_allocate="$1" 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 echo "ram_bytes_to_allocate \"$ram_bytes_to_allocate\" must be an integer" exit 1 fi # 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" exit 1 fi ipv4_limit=61 used_ips=$(grep ip-add "/var/lib/libvirt/dnsmasq/virbr3.status" | cut -d '"' -f 4) reserved_ips=$(cat "/var/lib/libvirt/dnsmasq/public3.hostsfile" | cut -d ',' -f 2) total_addresses_used=$(printf "$used_ips\n$reserved_ips" | sort | uniq | wc -l) ipv4_count=$(printf "$total_addresses_used") if [ "$ipv4_count" -ge "$ipv4_limit" ]; then echo "IPv4 address limit reached" exit 1 fi echo "yes"