Merge "Add support for deprecated configuration vars in Juno"
diff --git a/clean.sh b/clean.sh
index 3707d84..8bafcad 100755
--- a/clean.sh
+++ b/clean.sh
@@ -102,7 +102,7 @@
fi
# Clean out /etc
-sudo rm -rf /etc/keystone /etc/glance /etc/nova /etc/cinder /etc/swift
+sudo rm -rf /etc/keystone /etc/glance /etc/nova /etc/cinder /etc/swift /etc/heat
# Clean out tgt
sudo rm -f /etc/tgt/conf.d/*
diff --git a/lib/ceilometer b/lib/ceilometer
index 5476773..59f572c 100644
--- a/lib/ceilometer
+++ b/lib/ceilometer
@@ -237,7 +237,7 @@
# start_ceilometer() - Start running processes, including screen
function start_ceilometer {
if [[ "$VIRT_DRIVER" = 'libvirt' ]]; then
- screen_it ceilometer-acompute "cd ; sg $LIBVIRT_GROUP \"ceilometer-agent-compute --config-file $CEILOMETER_CONF\""
+ screen_it ceilometer-acompute "cd ; sg $LIBVIRT_GROUP 'ceilometer-agent-compute --config-file $CEILOMETER_CONF'"
fi
if [[ "$VIRT_DRIVER" = 'vsphere' ]]; then
screen_it ceilometer-acompute "cd ; ceilometer-agent-compute --config-file $CEILOMETER_CONF"
diff --git a/lib/ironic b/lib/ironic
index 757b83e..0528610 100644
--- a/lib/ironic
+++ b/lib/ironic
@@ -53,11 +53,12 @@
IRONIC_VM_SSH_ADDRESS=${IRONIC_VM_SSH_ADDRESS:-$HOST_IP}
IRONIC_VM_COUNT=${IRONIC_VM_COUNT:-1}
IRONIC_VM_SPECS_CPU=${IRONIC_VM_SPECS_CPU:-1}
-# NOTE(agordeev): both ubuntu and fedora deploy images won't work with 256MB of RAM.
-# System halts and throws kernel panic during initramfs unpacking.
-# Ubuntu needs at least 384MB, but fedora requires 448.
-# So placing 512 here to satisfy both.
-IRONIC_VM_SPECS_RAM=${IRONIC_VM_SPECS_RAM:-512}
+# NOTE(adam_g): Kernels 3.12 and newer user tmpfs by default for initramfs.
+# DIB produced ramdisks tend to be ~250MB but tmpfs will only allow
+# use of 50% of available memory before ENOSPC. Set minimum 1GB
+# for nodes to avoid (LP: #1311987) and ensure consistency across
+# older and newer kernels.
+IRONIC_VM_SPECS_RAM=${IRONIC_VM_SPECS_RAM:-1024}
IRONIC_VM_SPECS_DISK=${IRONIC_VM_SPECS_DISK:-10}
IRONIC_VM_EMULATOR=${IRONIC_VM_EMULATOR:-/usr/bin/qemu-system-x86_64}
IRONIC_VM_NETWORK_BRIDGE=${IRONIC_VM_NETWORK_BRIDGE:-brbm}
@@ -65,6 +66,10 @@
IRONIC_VM_MACS_CSV_FILE=${IRONIC_VM_MACS_CSV_FILE:-$IRONIC_DATA_DIR/ironic_macs.csv}
IRONIC_AUTHORIZED_KEYS_FILE=${IRONIC_AUTHORIZED_KEYS_FILE:-$HOME/.ssh/authorized_keys}
+# By default, baremetal VMs will console output to file.
+IRONIC_VM_LOG_CONSOLE=${IRONIC_VM_LOG_CONSOLE:-True}
+IRONIC_VM_LOG_DIR=${IRONIC_VM_LOG_DIR:-$IRONIC_DATA_DIR/logs/}
+
DIB_DIR=${DIB_DIR:-$DEST/diskimage-builder}
# Use DIB to create deploy ramdisk and kernel.
@@ -186,6 +191,9 @@
iniset $IRONIC_CONF_FILE pxe tftp_server $HOST_IP
iniset $IRONIC_CONF_FILE pxe tftp_root $IRONIC_TFTPBOOT_DIR
iniset $IRONIC_CONF_FILE pxe tftp_master_path $IRONIC_TFTPBOOT_DIR/master_images
+ if [[ "$IRONIC_VM_LOG_CONSOLE" == "True" ]] ; then
+ iniset $IRONIC_CONF_FILE pxe pxe_append_params "nofb nomodeset vga=normal console=ttyS0"
+ fi
}
# create_ironic_cache_dir() - Part of the init_ironic() process
@@ -315,9 +323,15 @@
function create_bridge_and_vms {
# Call libvirt setup scripts in a new shell to ensure any new group membership
sudo su $STACK_USER -c "$IRONIC_SCRIPTS_DIR/setup-network"
+ if [[ "$IRONIC_VM_LOG_CONSOLE" == "True" ]] ; then
+ LOG_ARG="$IRONIC_VM_LOG_DIR"
+ else
+ LOG_ARG=""
+ fi
sudo su $STACK_USER -c "$IRONIC_SCRIPTS_DIR/create-nodes \
$IRONIC_VM_SPECS_CPU $IRONIC_VM_SPECS_RAM $IRONIC_VM_SPECS_DISK \
- amd64 $IRONIC_VM_COUNT $IRONIC_VM_NETWORK_BRIDGE $IRONIC_VM_EMULATOR" >> $IRONIC_VM_MACS_CSV_FILE
+ amd64 $IRONIC_VM_COUNT $IRONIC_VM_NETWORK_BRIDGE $IRONIC_VM_EMULATOR \
+ $LOG_ARG" >> $IRONIC_VM_MACS_CSV_FILE
}
function enroll_vms {
diff --git a/lib/tempest b/lib/tempest
index 81eeba3..2125f88 100644
--- a/lib/tempest
+++ b/lib/tempest
@@ -76,7 +76,6 @@
local num_images
local image_uuid
local image_uuid_alt
- local errexit
local password
local line
local flavors
@@ -92,11 +91,6 @@
# TODO(afazekas):
# sudo python setup.py deploy
- # This function exits on an error so that errors don't compound and you see
- # only the first error that occurred.
- errexit=$(set +o | grep errexit)
- set -o errexit
-
# Save IFS
ifs=$IFS
@@ -383,8 +377,6 @@
# Restore IFS
IFS=$ifs
- #Restore errexit
- $errexit
}
# create_tempest_accounts() - Set up common required tempest accounts
diff --git a/stack.sh b/stack.sh
index dff6bd3..7da1fb9 100755
--- a/stack.sh
+++ b/stack.sh
@@ -150,7 +150,7 @@
fi
# Look for obsolete stuff
-if [[ ,${ENABLED_SERVICES} =~ ,"swift" ]]; then
+if [[ ,${ENABLED_SERVICES}, =~ ,"swift", ]]; then
echo "FATAL: 'swift' is not supported as a service name"
echo "FATAL: Use the actual swift service names to enable tham as required:"
echo "FATAL: s-proxy s-object s-container s-account"
diff --git a/stackrc b/stackrc
index 957302d..822403e 100644
--- a/stackrc
+++ b/stackrc
@@ -340,28 +340,23 @@
IMAGE_URLS=${IMAGE_URLS:-"http://download.cirros-cloud.net/0.3.1/cirros-0.3.1-x86_64-uec.tar.gz"};;
esac
-# if heat is enabled, bring in a linux image with cfn enabled
-# TODO(sdague) this next block can be removed after nodepool has the 64bit image in it's cache
-HEAT_FETCHED_TEST_IMAGE=${HEAT_FETCHED_TEST_IMAGE:-""}
-if [[ "$HEAT_FETCHED_TEST_IMAGE" == "Fedora-i386-20-20131211.1-sda" ]]; then
- HEAT_CFN_IMAGE_URL="https://dl.fedoraproject.org/pub/fedora/linux/releases/20/Images/i386/$HEAT_FETCHED_TEST_IMAGE.qcow2"
- IMAGE_URLS+=",https://dl.fedoraproject.org/pub/fedora/linux/releases/20/Images/i386/$HEAT_FETCHED_TEST_IMAGE.qcow2"
-elif [[ "$HEAT_FETCHED_TEST_IMAGE" == "Fedora-x86_64-20-20131211.1-sda" ]]; then
- HEAT_CFN_IMAGE_URL="https://dl.fedoraproject.org/pub/fedora/linux/releases/20/Images/x86_64/Fedora-x86_64-20-20131211.1-sda.qcow2"
- IMAGE_URLS+=",https://dl.fedoraproject.org/pub/fedora/linux/releases/20/Images/x86_64/Fedora-x86_64-20-20131211.1-sda.qcow2"
+# Use 64bit fedora image if heat is enabled
+if [[ "$ENABLED_SERVICES" =~ 'h-api' ]]; then
+ case "$VIRT_DRIVER" in
+ libvirt|baremetal|ironic)
+ HEAT_CFN_IMAGE_URL=${HEAT_CFN_IMAGE_URL:-"https://dl.fedoraproject.org/pub/fedora/linux/releases/20/Images/x86_64/Fedora-x86_64-20-20131211.1-sda.qcow2"}
+ IMAGE_URLS+=",$HEAT_CFN_IMAGE_URL"
+ ;;
+ *)
+ ;;
+ esac
fi
-
-# Uncomment after nodepool changes land
-# if [[ "$ENABLED_SERVICES" =~ 'h-api' ]]; then
-# HEAT_CFN_IMAGE_URL=${HEAT_CFN_IMAGE_URL:-"https://dl.fedoraproject.org/pub/fedora/linux/releases/20/Images/x86_64/Fedora-x86_64-20-20131211.1-sda.qcow2"}
-# IMAGE_URLS+=",$HEAT_CFN_IMAGE_URL"
-# fi
-
# Staging Area for New Images, have them here for at least 24hrs for nodepool
# to cache them otherwise the failure rates in the gate are too high
PRECACHE_IMAGES=$(trueorfalse False $PRECACHE_IMAGES)
if [[ "$PRECACHE_IMAGES" == "True" ]]; then
- IMAGE_URLS+=",https://dl.fedoraproject.org/pub/fedora/linux/releases/20/Images/x86_64/Fedora-x86_64-20-20131211.1-sda.qcow2"
+ # staging in update for nodepool
+ IMAGE_URLS+=",https://dl.fedoraproject.org/pub/fedora/linux/updates/20/Images/x86_64/Fedora-x86_64-20-20140407-sda.qcow2"
fi
# 10Gb default volume backing file size
diff --git a/tools/ironic/scripts/configure-vm b/tools/ironic/scripts/configure-vm
index 9936b76..4c42c49 100755
--- a/tools/ironic/scripts/configure-vm
+++ b/tools/ironic/scripts/configure-vm
@@ -9,6 +9,25 @@
'templates')
+CONSOLE_LOG = """
+ <serial type='file'>
+ <source path='%(console_log)s'/>
+ <target port='0'/>
+ <alias name='serial0'/>
+ </serial>
+ <serial type='pty'>
+ <source path='/dev/pts/49'/>
+ <target port='1'/>
+ <alias name='serial1'/>
+ </serial>
+ <console type='file'>
+ <source path='%(console_log)s'/>
+ <target type='serial' port='0'/>
+ <alias name='serial0'/>
+ </console>
+"""
+
+
def main():
parser = argparse.ArgumentParser(
description="Configure a kvm virtual machine for the seed image.")
@@ -30,6 +49,8 @@
help='The libvirt network name to use')
parser.add_argument('--libvirt-nic-driver', default='e1000',
help='The libvirt network driver to use')
+ parser.add_argument('--console-log',
+ help='File to log console')
parser.add_argument('--emulator', default=None,
help='Path to emulator bin for vm template')
args = parser.parse_args()
@@ -44,6 +65,7 @@
'cpus': args.cpus,
'bootdev': args.bootdev,
'network': args.network,
+ 'nicdriver': args.libvirt_nic_driver,
'emulator': args.emulator,
}
@@ -55,22 +77,13 @@
elif os.path.exists("/usr/bin/qemu-kvm"): # Redhat
params['emulator'] = "/usr/bin/qemu-kvm"
- nicparams = {
- 'nicdriver': args.libvirt_nic_driver,
- 'network': args.network,
- }
-
- params['bm_network'] = """
-<!-- neutron friendly 'bare metal' network -->
-<interface type='network'>
- <source network='%(network)s'/>
- <virtualport type='openvswitch'/>
- <model type='%(nicdriver)s'/>
- <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
-</interface>""" % nicparams
-
+ if args.console_log:
+ params['console_log'] = CONSOLE_LOG % {'console_log': args.console_log}
+ else:
+ params['console_log'] = ''
libvirt_template = source_template % params
conn = libvirt.open("qemu:///system")
+
a = conn.defineXML(libvirt_template)
print ("Created machine %s with UUID %s" % (args.name, a.UUIDString()))
diff --git a/tools/ironic/scripts/create-nodes b/tools/ironic/scripts/create-nodes
index d81113a..140bffe 100755
--- a/tools/ironic/scripts/create-nodes
+++ b/tools/ironic/scripts/create-nodes
@@ -4,7 +4,7 @@
# Creates baremetal poseur nodes for ironic testing purposes
-set -exu
+set -ex
# Keep track of the devstack directory
TOP_DIR=$(cd $(dirname "$0")/.. && pwd)
@@ -24,6 +24,7 @@
TOTAL=$(($5 - 1))
BRIDGE=$6
EMULATOR=$7
+LOGDIR=$8
LIBVIRT_NIC_DRIVER=${LIBVIRT_NIC_DRIVER:-"e1000"}
LIBVIRT_STORAGE_POOL=${LIBVIRT_STORAGE_POOL:-"default"}
@@ -43,6 +44,10 @@
virsh pool-start $LIBVIRT_STORAGE_POOL >&2
fi
+if [ -n "$LOGDIR" ] ; then
+ mkdir -p "$LOGDIR"
+fi
+
PREALLOC=
if [ -f /etc/debian_version ]; then
PREALLOC="--prealloc-metadata"
@@ -51,6 +56,11 @@
DOMS=""
for idx in $(seq 0 $TOTAL) ; do
NAME="baremetal${BRIDGE}_${idx}"
+ if [ -n "$LOGDIR" ] ; then
+ VM_LOGGING="--console-log $LOGDIR/${NAME}_console.log"
+ else
+ VM_LOGGING=""
+ fi
DOMS="$DOMS $NAME"
VOL_NAME="baremetal${BRIDGE}-${idx}.qcow2"
(virsh list --all | grep -q $NAME) && continue
@@ -62,7 +72,10 @@
# 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
- $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
+ $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 $VM_LOGGING >&2
done
for dom in $DOMS ; do
diff --git a/tools/ironic/templates/vm.xml b/tools/ironic/templates/vm.xml
index b18dec0..4f40334 100644
--- a/tools/ironic/templates/vm.xml
+++ b/tools/ironic/templates/vm.xml
@@ -27,14 +27,19 @@
<controller type='ide' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
</controller>
- %(network)s
- %(bm_network)s
+ <interface type='network'>
+ <source network='%(network)s'/>
+ <virtualport type='openvswitch'/>
+ <model type='%(nicdriver)s'/>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
+ </interface>
<input type='mouse' bus='ps2'/>
<graphics type='vnc' port='-1' autoport='yes'/>
<video>
<model type='cirrus' vram='9216' heads='1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
+ %(console_log)s
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
</memballoon>