#!/bin/sh # # 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_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 # 20GB if [ "$RAM_BYTES_REMAINDER" -le $((20 * 1024 * 1024 * 1024)) ]; 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=60 IPV4_COUNT=$(grep ip-add /var/lib/libvirt/dnsmasq/virbr2.status | wc -l) if [ "$IPV4_COUNT" -ge "$IPV4_LIMIT" ]; then echo "IPv4 address limit reached" exit 1 fi echo "yes"