Use kvm for ironic VMs when possible
Nova pick KVM as preferred virtualization type when possible and fallback to qemu [0]. This patch introduce devstack IRONIC_VM_ENGINE option that allows to set libvirt type explicitly. If not set pick it dynamically, kvm is preffered. [0] https://review.openstack.org/#/c/31177/4/lib/nova@240 Change-Id: I05859974c312cb5df1d4b96dc3b98fbc1006359e
This commit is contained in:
parent
f750bcd521
commit
0036d83b33
@ -119,7 +119,8 @@ IRONIC_VM_SPECS_CPU_ARCH=${IRONIC_VM_SPECS_CPU_ARCH:-'x86_64'}
|
||||
IRONIC_VM_SPECS_DISK=${IRONIC_VM_SPECS_DISK:-10}
|
||||
IRONIC_VM_SPECS_DISK_FORMAT=${IRONIC_VM_SPECS_DISK_FORMAT:-qcow2}
|
||||
IRONIC_VM_EPHEMERAL_DISK=${IRONIC_VM_EPHEMERAL_DISK:-0}
|
||||
IRONIC_VM_EMULATOR=${IRONIC_VM_EMULATOR:-/usr/bin/qemu-system-x86_64}
|
||||
IRONIC_VM_EMULATOR=${IRONIC_VM_EMULATOR:-}
|
||||
IRONIC_VM_ENGINE=${IRONIC_VM_ENGINE:-}
|
||||
IRONIC_VM_NETWORK_BRIDGE=${IRONIC_VM_NETWORK_BRIDGE:-brbm}
|
||||
IRONIC_VM_NETWORK_RANGE=${IRONIC_VM_NETWORK_RANGE:-192.0.2.0/24}
|
||||
IRONIC_VM_MACS_CSV_FILE=${IRONIC_VM_MACS_CSV_FILE:-$IRONIC_DATA_DIR/ironic_macs.csv}
|
||||
@ -128,6 +129,22 @@ IRONIC_CLEAN_NET_NAME=${IRONIC_CLEAN_NET_NAME:-${IRONIC_PROVISION_NETWORK_NAME:-
|
||||
IRONIC_EXTRA_PXE_PARAMS=${IRONIC_EXTRA_PXE_PARAMS:-}
|
||||
IRONIC_TTY_DEV=${IRONIC_TTY_DEV:-ttyS0}
|
||||
|
||||
# NOTE(vsaienko) nova already pick right libvirt type at
|
||||
# https://review.openstack.org/#/c/31177/4/lib/nova@240
|
||||
# pick hardware virtualization if possible while it is not set explicitly
|
||||
if [[ -z "$IRONIC_VM_ENGINE" ]]; then
|
||||
sudo modprobe kvm || true
|
||||
if [ ! -e /dev/kvm ]; then
|
||||
echo "WARNING: Switching to QEMU"
|
||||
IRONIC_VM_ENGINE=qemu
|
||||
if [[ -z "$IRONIC_VM_EMULATOR" ]]; then
|
||||
IRONIC_VM_EMULATOR='/usr/bin/qemu-system-x86_64'
|
||||
fi
|
||||
else
|
||||
IRONIC_VM_ENGINE=kvm
|
||||
fi
|
||||
fi
|
||||
|
||||
# By default, baremetal VMs will console output to file.
|
||||
IRONIC_VM_LOG_CONSOLE=$(trueorfalse True IRONIC_VM_LOG_CONSOLE)
|
||||
IRONIC_VM_LOG_DIR=${IRONIC_VM_LOG_DIR:-$IRONIC_DATA_DIR/logs/}
|
||||
@ -971,10 +988,16 @@ function create_bridge_and_vms {
|
||||
|
||||
local vbmc_port=$IRONIC_VBMC_PORT_RANGE_START
|
||||
local vm_name
|
||||
local vm_opts=""
|
||||
if [[ -n "$IRONIC_VM_EMULATOR" ]]; then
|
||||
vm_opts+=" -e $IRONIC_VM_EMULATOR"
|
||||
fi
|
||||
vm_opts+=" -E $IRONIC_VM_ENGINE"
|
||||
|
||||
for vm_name in $(_ironic_bm_vm_names); do
|
||||
sudo -E su $STACK_USER -c "$IRONIC_SCRIPTS_DIR/create-node.sh -n $vm_name \
|
||||
-c $IRONIC_VM_SPECS_CPU -m $IRONIC_VM_SPECS_RAM -d $IRONIC_VM_SPECS_DISK \
|
||||
-a $IRONIC_VM_SPECS_CPU_ARCH -b $IRONIC_VM_NETWORK_BRIDGE -e $IRONIC_VM_EMULATOR \
|
||||
-a $IRONIC_VM_SPECS_CPU_ARCH -b $IRONIC_VM_NETWORK_BRIDGE $vm_opts \
|
||||
-p $vbmc_port -f $IRONIC_VM_SPECS_DISK_FORMAT $log_arg" >> $IRONIC_VM_MACS_CSV_FILE
|
||||
vbmc_port=$((vbmc_port+1))
|
||||
done
|
||||
|
@ -9,7 +9,7 @@ set -ex
|
||||
# Keep track of the DevStack directory
|
||||
TOP_DIR=$(cd $(dirname "$0")/.. && pwd)
|
||||
|
||||
while getopts "n:c:m:d:a:b:e:p:f:l:" arg; do
|
||||
while getopts "n:c:m:d:a:b:e:E:p:f:l:" arg; do
|
||||
case $arg in
|
||||
n) NAME=$OPTARG;;
|
||||
c) CPU=$OPTARG;;
|
||||
@ -20,6 +20,7 @@ while getopts "n:c:m:d:a:b:e:p:f:l:" arg; do
|
||||
a) ARCH=$OPTARG;;
|
||||
b) BRIDGE=$OPTARG;;
|
||||
e) EMULATOR=$OPTARG;;
|
||||
E) ENGINE=$OPTARG;;
|
||||
p) VBMC_PORT=$OPTARG;;
|
||||
f) DISK_FORMAT=$OPTARG;;
|
||||
l) LOGDIR=$OPTARG;;
|
||||
@ -82,10 +83,14 @@ if ! virsh list --all | grep -q $NAME; then
|
||||
# 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
|
||||
vm_opts=""
|
||||
if [[ -n "$EMULATOR" ]]; then
|
||||
vm_opts+="--emulator $EMULATOR "
|
||||
fi
|
||||
$TOP_DIR/scripts/configure-vm.py \
|
||||
--bootdev network --name $NAME --image "$volume_path" \
|
||||
--arch $ARCH --cpus $CPU --memory $MEM --libvirt-nic-driver $LIBVIRT_NIC_DRIVER \
|
||||
--emulator $EMULATOR --bridge br-$NAME --disk-format $DISK_FORMAT $VM_LOGGING >&2
|
||||
--bridge br-$NAME --disk-format $DISK_FORMAT $VM_LOGGING --engine $ENGINE $vm_opts >&2
|
||||
|
||||
# Createa Virtual BMC for the node if IPMI is used
|
||||
if [[ $(type -P vbmc) != "" ]]; then
|
||||
|
@ -8,6 +8,9 @@
|
||||
<bootmenu enable='no'/>
|
||||
<bios useserial='yes'/>
|
||||
</os>
|
||||
{% if engine == 'kvm' %}
|
||||
<cpu mode='host-passthrough'/>
|
||||
{% endif %}
|
||||
<features>
|
||||
<acpi/>
|
||||
<apic/>
|
||||
|
Loading…
x
Reference in New Issue
Block a user