Skip to content

Instantly share code, notes, and snippets.

@beekhof
Created July 10, 2020 05:07
Show Gist options
  • Save beekhof/35137d9f8e93b4512d64e734110cd4aa to your computer and use it in GitHub Desktop.
Save beekhof/35137d9f8e93b4512d64e734110cd4aa to your computer and use it in GitHub Desktop.
#!/bin/bash
virt_connect="--connect=qemu:///session"
virsh="virsh ${virt_connect}"
svirsh="sudo virsh"
count=3
onlyone=$1
name=beekhof
SCRIPT_vm_vcpu=2
SCRIPT_vm_ram=8192
SCRIPT_vm_disk=120G
SCRIPT_vm_home="/home/Development/virt"
SCRIPT_iso=/tmp/cluster-72726600-bd58-4191-916e-33abfca25f37-discovery.iso
while [[ $# -gt 0 ]]; do
case $1 in
--) ;;
-x) set -x; shift;;
--disk) SCRIPT_vm_disk=$2; shift; shift;;
--cpu) SCRIPT_vm_vcpu=$2; shift; shift;;
--ram) SCRIPT_vm_ram=$2; shift; shift;;
--key) SCRIPT_vm_KEY=$2; shift; shift;;
--name) name=$2; shift; shift;;
--iso) SCRIPT_iso=$2; shift; shift;;
[1-9]) count=$1; shift;;
esac
done
mkdir -p $HOME/.qemu
mkdir -p ${SCRIPT_vm_home}
cd ${SCRIPT_vm_home}
rpm -qa | grep virt-install
if [ $? != 0 ]; then
sudo yum install -y virt-install
fi
opts="--force"
# Turn off install logs
opts="$opts --noautoconsole"
# Leave disabled to build in the foreground.
# To continue once complete, shut down the guest or ctrl-] to detach
# --console pty,target_type=virtio
#Create the regular-guest
sudo firewall-cmd --add-port=3128/tcp --zone=libvirt --permanent
sudo firewall-cmd --reload
ip=10
lastoct=$(echo ${name} | md5sum | tr -d abcdef- | cut -c 1-2)
for offset in $(seq 1 $count); do
target=${name}-${offset}
$virsh destroy $target > /dev/null 2>&1
$virsh undefine $target > /dev/null 2>&1
MAC="54:52:$(echo ${name} | md5sum | tr -d abcdef- | cut -c 1-2):$(echo ${name} | md5sum | tr -d abcdef- | cut -c 3-4):01:0${offset}"
$svirsh net-dhcp-leases default | grep ${MAC}
#if [ $? = 0 ]; then
$svirsh net-update default delete ip-dhcp-host "<host mac='${MAC}'/>" --live --config 2>&1 > /dev/null
#fi
network=$( $svirsh net-dumpxml default | grep range | awk -F \' '{print $2}' | awk -F . '{print $1"."$2"."$3}' )
rc=1
while [ 1 = 1 ]; do
$svirsh net-update default add ip-dhcp-host "<host mac='${MAC}' name='${name}-${offset}' ip='${network}.${ip}'/>" --live --config
rc=$?
if [ $rc = 0 ]; then
break
elif [ $ip -gt 254 ]; then
echo "No more IPs left"
exit 1
else
ip=$(($ip + 1))
fi
done
disk=${SCRIPT_vm_home}/${target}.cow
rm -f ${disk}
qemu-img create -f qcow2 -o preallocation=metadata ${disk} ${SCRIPT_vm_disk}
ls -lash ${disk}
# --extra-args="console=tty0 console=ttyS0,115200 serial rd_NO_PLYMOUTH" \
virt-install ${virt_connect} \
--network=bridge:virbr0,mac=${MAC} \
--cdrom $SCRIPT_iso \
--name=${target} \
--disk path=${disk},format=qcow2,cache=none \
--ram ${SCRIPT_vm_ram} \
--vcpus=${SCRIPT_vm_vcpu} \
--os-variant rhel8.0 \
--check-cpu \
--accelerate \
--os-type linux \
--cpuset auto \
--hvm \
--debug \
--autostart \
--events on_reboot=restart \
--nographics $opts
# --console="tty0 console=ttyS0,115200 serial rd_NO_PLYMOUTH" \
if [ $? != 0 ]; then
echo "Could not build image"
exit 1
fi
ip=$(($ip + 1))
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment