#!/bin/bash

#
# XenServer specific defaults for the /tools/xen/ scripts
# Similar to stackrc, you can override these in your localrc
#

# Name of this guest
GUEST_NAME=${GUEST_NAME:-DevStackOSDomU}

# Template cleanup
CLEAN_TEMPLATES=${CLEAN_TEMPLATES:-false}

# Size of image
VDI_MB=${VDI_MB:-5000}

# Devstack now contains many components.  3GB ram is not enough to prevent
# swapping and memory fragmentation - the latter of which can cause failures
# such as blkfront failing to plug a VBD and lead to random test fails.
#
# Set to 4GB so an 8GB XenServer VM can have a 1GB Dom0 and leave 3GB for VMs
OSDOMU_MEM_MB=4096
OSDOMU_VDI_GB=8

# Network mapping. Specify bridge names or network names. Network names may
# differ across localised versions of XenServer. If a given bridge/network
# was not found, a new network will be created with the specified name.

# Get the management network from the XS installation
VM_BRIDGE_OR_NET_NAME="OpenStack VM Network"
PUB_BRIDGE_OR_NET_NAME="OpenStack Public Network"
XEN_INT_BRIDGE_OR_NET_NAME="OpenStack VM Integration Network"

# VM Password
GUEST_PASSWORD=${GUEST_PASSWORD:-secrete}

# Extracted variables for OpenStack VM network device numbers.
# Make sure they form a continuous sequence starting from 0
MGT_DEV_NR=0
VM_DEV_NR=1
PUB_DEV_NR=2

# Host Interface, i.e. the interface on the nova vm you want to expose the
# services on. Usually the device connected to the management network or the
# one connected to the public network is used.
HOST_IP_IFACE=${HOST_IP_IFACE:-"eth${MGT_DEV_NR}"}

#
# Our nova host's network info
#

# Management network
MGT_IP=${MGT_IP:-dhcp}
MGT_NETMASK=${MGT_NETMASK:-ignored}

# VM Network
VM_IP=${VM_IP:-10.255.255.255}
VM_NETMASK=${VM_NETMASK:-255.255.255.0}

# Public network
# Aligned with stack.sh - see FLOATING_RANGE
PUB_IP=${PUB_IP:-172.24.4.10}
PUB_NETMASK=${PUB_NETMASK:-255.255.255.0}

# Ubuntu install settings
UBUNTU_INST_RELEASE="trusty"
UBUNTU_INST_TEMPLATE_NAME="Ubuntu 14.04 (64-bit) for DevStack"
# For 12.04 use "precise" and update template name
# However, for 12.04, you should be using
# XenServer 6.1 and later or XCP 1.6 or later
# 11.10 is only really supported with XenServer 6.0.2 and later
UBUNTU_INST_ARCH="amd64"
UBUNTU_INST_HTTP_HOSTNAME="mirror.anl.gov"
UBUNTU_INST_HTTP_DIRECTORY="/pub/ubuntu"
UBUNTU_INST_HTTP_PROXY=""
UBUNTU_INST_LOCALE="en_US"
UBUNTU_INST_KEYBOARD="us"
# network configuration for ubuntu netinstall
UBUNTU_INST_IP="dhcp"
UBUNTU_INST_NAMESERVERS=""
UBUNTU_INST_NETMASK=""
UBUNTU_INST_GATEWAY=""

# Create a separate xvdb. Tis could be used as a backing device for cinder
# volumes. Specify
#   XEN_XVDB_SIZE_GB=10
#   VOLUME_BACKING_DEVICE=/dev/xvdb
# in your localrc to avoid kernel lockups:
#   https://bugs.launchpad.net/cinder/+bug/1023755
#
# Set the size to 0 to avoid creation of additional disk.
XEN_XVDB_SIZE_GB=0

restore_nounset=`set +o | grep nounset`
set +u
source ../../stackrc
$restore_nounset
