
- Excluding awk and python scripts. - The Bashate E012 rule ('heredoc did not end before EOF') could be simply ignored until the bashate bug will be fixed. Change-Id: Id72665aba83df753364940c82db08edcb11e1217 Signed-off-by: Gael Chamoulaud <gchamoul@redhat.com>
74 lines
2.3 KiB
Bash
Executable File
74 lines
2.3 KiB
Bash
Executable File
#!/bin/bash
|
|
set -eu
|
|
|
|
CPU=$1
|
|
MEM=$(( 1024 * $2 ))
|
|
# extra G to allow fuzz for partition table : flavor size and registered size
|
|
# need to be different to actual size.
|
|
DISK=$3
|
|
LIBVIRT_DISK_BUS_TYPE=${LIBVIRT_DISK_BUS_TYPE:-"sata"}
|
|
NODE_DISK=$(( $DISK + 1))
|
|
|
|
|
|
case $4 in
|
|
i386) ARCH='i686' ;;
|
|
amd64|x86_64) ARCH='x86_64' ;;
|
|
*) echo "Unsupported arch $4!" ; exit 1 ;;
|
|
esac
|
|
|
|
TOTAL=$(($5 - 1))
|
|
SSH_USER=$6
|
|
HOSTIP=$7
|
|
TE_DATAFILE=$8
|
|
BRIDGE=${9:-""}
|
|
|
|
LIBVIRT_NIC_DRIVER=${LIBVIRT_NIC_DRIVER:-"virtio"}
|
|
LIBVIRT_VOL_POOL=${LIBVIRT_VOL_POOL:-"default"}
|
|
|
|
# define the default storage pool if its not there yet
|
|
(virsh pool-list --all --persistent | grep -q $LIBVIRT_VOL_POOL) || \
|
|
(virsh pool-define-as --name $LIBVIRT_VOL_POOL dir --target /var/lib/libvirt/images; \
|
|
virsh pool-autostart $LIBVIRT_VOL_POOL; virsh pool-start $LIBVIRT_VOL_POOL) >&2
|
|
|
|
PREALLOC=
|
|
if [ "${TRIPLEO_OS_FAMILY:-}" = "debian" ]; then
|
|
PREALLOC="--prealloc-metadata"
|
|
fi
|
|
|
|
# Create empty json file if it doesn't exist
|
|
[ -s $TE_DATAFILE ] || echo "{}" > $TE_DATAFILE
|
|
JSON=$(jq .nodes=[] $TE_DATAFILE)
|
|
|
|
EXTRAOPTS=
|
|
if [[ ${DIB_COMMON_ELEMENTS:-} == *enable-serial-console* ]]; then
|
|
EXTRAOPTS="--enable-serial-console"
|
|
fi
|
|
|
|
for idx in $(seq 0 $TOTAL) ; do
|
|
vm_name="baremetal${BRIDGE}_$idx"
|
|
(virsh list --all --name | grep -q "^$vm_name\$") && continue
|
|
virsh vol-create-as $LIBVIRT_VOL_POOL $vm_name.qcow2 ${NODE_DISK}G --format qcow2 $PREALLOC >&2
|
|
volume_path=$(virsh vol-path --pool $LIBVIRT_VOL_POOL $vm_name.qcow2)
|
|
# Pre-touch the VM to set +C, as it can only be set on empty files.
|
|
sudo touch "$volume_path"
|
|
sudo chattr +C "$volume_path" || true
|
|
BAREMETAL_INTERFACE=
|
|
if [ -n "$BRIDGE" ]; then
|
|
BAREMETAL_INTERFACE="--baremetal-interface $BRIDGE"
|
|
fi
|
|
configure-vm $EXTRAOPTS \
|
|
--bootdev network \
|
|
--name $vm_name \
|
|
--image "$volume_path" \
|
|
--diskbus $LIBVIRT_DISK_BUS_TYPE \
|
|
--arch $ARCH \
|
|
--cpus $CPU \
|
|
--memory $MEM \
|
|
--libvirt-nic-driver $LIBVIRT_NIC_DRIVER $BAREMETAL_INTERFACE >&2
|
|
mac=$(get-vm-mac $vm_name)
|
|
JSON=$(jq ".nodes=(.nodes + [{mac:[\"$mac\"], cpu:\"$CPU\", memory:\"$2\", disk:\"$DISK\", arch:\"$4\", pm_user:\"$SSH_USER\", pm_addr:\"$HOSTIP\", pm_password:.[\"ssh-key\"], pm_type:\"pxe_ssh\"}])" <<< $JSON)
|
|
|
|
done
|
|
jq . <<< $JSON > $TE_DATAFILE
|
|
|