tripleo-incubator/scripts/create-nodes
Gael Chamoulaud 64b94692a5 Fix bashate errors
- 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>
2015-03-13 19:11:05 +01:00

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