blob: 3232b507762dc167f0404c0972ebae0319510ac3 [file] [log] [blame]
Alexander Gordeev06fb29c2014-01-31 18:02:07 +04001#!/usr/bin/env bash
2
3# **create-nodes**
4
5# Creates baremetal poseur nodes for ironic testing purposes
6
7set -exu
8
9# Keep track of the devstack directory
10TOP_DIR=$(cd $(dirname "$0")/.. && pwd)
11
12CPU=$1
13MEM=$(( 1024 * $2 ))
14# extra G to allow fuzz for partition table : flavor size and registered size
15# need to be different to actual size.
16DISK=$(( $3 + 1))
17
18case $4 in
19 i386) ARCH='i686' ;;
20 amd64) ARCH='x86_64' ;;
21 *) echo "Unsupported arch $4!" ; exit 1 ;;
22esac
23
24TOTAL=$(($5 - 1))
25BRIDGE=$6
26EMULATOR=$7
27
28LIBVIRT_NIC_DRIVER=${LIBVIRT_NIC_DRIVER:-"e1000"}
29LIBVIRT_STORAGE_POOL=${LIBVIRT_STORAGE_POOL:-"default"}
30
31if ! virsh pool-list --all | grep -q $LIBVIRT_STORAGE_POOL; then
32 virsh pool-define-as --name $LIBVIRT_STORAGE_POOL dir --target /var/lib/libvirt/images >&2
33 virsh pool-autostart $LIBVIRT_STORAGE_POOL >&2
34 virsh pool-start $LIBVIRT_STORAGE_POOL >&2
35fi
36
37pool_state=$(virsh pool-info $LIBVIRT_STORAGE_POOL | grep State | awk '{ print $2 }')
38if [ "$pool_state" != "running" ] ; then
39 [ ! -d /var/lib/libvirt/images ] && sudo mkdir /var/lib/libvirt/images
40 virsh pool-start $LIBVIRT_STORAGE_POOL >&2
41fi
42
43PREALLOC=
44if [ -f /etc/debian_version ]; then
45 PREALLOC="--prealloc-metadata"
46fi
47
48DOMS=""
49for idx in $(seq 0 $TOTAL) ; do
50 NAME="baremetal${BRIDGE}_${idx}"
51 DOMS="$DOMS $NAME"
52 VOL_NAME="baremetal${BRIDGE}-${idx}.qcow2"
53 (virsh list --all | grep -q $NAME) && continue
54
55 virsh vol-list --pool $LIBVIRT_STORAGE_POOL | grep -q $VOL_NAME &&
56 virsh vol-delete $VOL_NAME --pool $LIBVIRT_STORAGE_POOL >&2
57 virsh vol-create-as $LIBVIRT_STORAGE_POOL ${VOL_NAME} ${DISK}G --format qcow2 $PREALLOC >&2
58 volume_path=$(virsh vol-path --pool $LIBVIRT_STORAGE_POOL $VOL_NAME)
59 # Pre-touch the VM to set +C, as it can only be set on empty files.
60 sudo touch "$volume_path"
61 sudo chattr +C "$volume_path" || true
62 $TOP_DIR/scripts/configure-vm --bootdev network --name $NAME --image "$volume_path" --arch $ARCH --cpus $CPU --memory $MEM --libvirt-nic-driver $LIBVIRT_NIC_DRIVER --emulator $EMULATOR --network $BRIDGE >&2
63done
64
65for dom in $DOMS ; do
66 # echo mac
67 virsh dumpxml $dom | grep "mac address" | head -1 | cut -d\' -f2
68done