Make devstack work with xcp-xapi package on Ubuntu 12.04

- allow you to configure the xenapi_user (often other than root)
- allow you to disable the guest installer network
- install the plugins in the xcp-xapi location
- use alternate webserver location when adding the preseed file
- skip the centos specific ip forwarding configuration
- make use xcp inventory, if no xensource-inventory is found
- correctly deal with kpartx to mount the VM VDI in manage_vdi

Change-Id: I8d51725fc97f0bcaa27a46f7a7ced13c369c809e
This commit is contained in:
John Garbutt 2012-04-27 18:28:28 +01:00
parent daadf744ed
commit 030fb2362f
5 changed files with 40 additions and 22 deletions

View File

@ -1700,7 +1700,7 @@ fi
# For Example: EXTRA_OPTS=(foo=true bar=2) # For Example: EXTRA_OPTS=(foo=true bar=2)
for I in "${EXTRA_OPTS[@]}"; do for I in "${EXTRA_OPTS[@]}"; do
# Attempt to convert flags to options # Attempt to convert flags to options
add_nova_opt ${I//-} add_nova_opt ${I//--}
done done
@ -1711,8 +1711,9 @@ if [ "$VIRT_DRIVER" = 'xenserver' ]; then
read_password XENAPI_PASSWORD "ENTER A PASSWORD TO USE FOR XEN." read_password XENAPI_PASSWORD "ENTER A PASSWORD TO USE FOR XEN."
add_nova_opt "connection_type=xenapi" add_nova_opt "connection_type=xenapi"
XENAPI_CONNECTION_URL=${XENAPI_CONNECTION_URL:-"http://169.254.0.1"} XENAPI_CONNECTION_URL=${XENAPI_CONNECTION_URL:-"http://169.254.0.1"}
XENAPI_USER=${XENAPI_USER:-"root"}
add_nova_opt "xenapi_connection_url=$XENAPI_CONNECTION_URL" add_nova_opt "xenapi_connection_url=$XENAPI_CONNECTION_URL"
add_nova_opt "xenapi_connection_username=root" add_nova_opt "xenapi_connection_username=$XENAPI_USER"
add_nova_opt "xenapi_connection_password=$XENAPI_PASSWORD" add_nova_opt "xenapi_connection_password=$XENAPI_PASSWORD"
add_nova_opt "flat_injected=False" add_nova_opt "flat_injected=False"
# Need to avoid crash due to new firewall support # Need to avoid crash due to new firewall support

View File

@ -118,6 +118,13 @@ else
sed -e "s,@ETH3_NETMASK@,$PUB_NETMASK,g" -i $INTERFACES sed -e "s,@ETH3_NETMASK@,$PUB_NETMASK,g" -i $INTERFACES
fi fi
if [ "$ENABLE_GI" == "true" ]; then
cat <<EOF >>$INTERFACES
auto eth0
iface eth0 inet dhcp
EOF
fi
# Gracefully cp only if source file/dir exists # Gracefully cp only if source file/dir exists
function cp_it { function cp_it {
if [ -e $1 ] || [ -d $1 ]; then if [ -e $1 ] || [ -d $1 ]; then

View File

@ -7,64 +7,74 @@ vm="$2"
device="${3-0}" device="${3-0}"
part="${4-}" part="${4-}"
xe_min() function xe_min() {
{
local cmd="$1" local cmd="$1"
shift shift
xe "$cmd" --minimal "$@" xe "$cmd" --minimal "$@"
} }
function run_udev_settle() {
which_udev=$(which udevsettle) || true
if [ -n "$which_udev" ]; then
udevsettle
else
udevadm settle
fi
}
vm_uuid=$(xe_min vm-list name-label="$vm") vm_uuid=$(xe_min vm-list name-label="$vm")
vdi_uuid=$(xe_min vbd-list params=vdi-uuid vm-uuid="$vm_uuid" \ vdi_uuid=$(xe_min vbd-list params=vdi-uuid vm-uuid="$vm_uuid" \
userdevice="$device") userdevice="$device")
dom0_uuid=$(xe_min vm-list is-control-domain=true) dom0_uuid=$(xe_min vm-list is-control-domain=true)
get_mount_device() function get_mount_device() {
{
vbd_uuid=$1 vbd_uuid=$1
dev=$(xe_min vbd-list params=device uuid="$vbd_uuid") dev=$(xe_min vbd-list params=device uuid="$vbd_uuid")
if [[ "$dev" =~ "sm/" ]]; then if [[ "$dev" =~ "sm/" ]]; then
DEBIAN_FRONTEND=noninteractive \ DEBIAN_FRONTEND=noninteractive \
apt-get --option "Dpkg::Options::=--force-confold" --assume-yes \ apt-get --option "Dpkg::Options::=--force-confold" --assume-yes \
install kpartx || true &> /dev/null install kpartx &> /dev/null || true
mapping=$(kpartx -av "/dev/$dev" | sed -ne 's,^add map \([a-f0-9\-]*\).*$,\1,p' | sed -ne "s,^\(.*${part}\)\$,\1,p") mapping=$(kpartx -av "/dev/$dev" | sed -ne 's,^add map \([a-z0-9\-]*\).*$,\1,p' | sed -ne "s,^\(.*${part}\)\$,\1,p")
if [ -z "$mapping" ]; then if [ -z "$mapping" ]; then
echo "Failed to find mapping" echo "Failed to find mapping"
exit -1 exit -1
fi fi
echo "mapper/${mapping}" echo "/dev/mapper/${mapping}"
else else
echo "/dev/$dev$part" echo "/dev/$dev$part"
fi fi
} }
open_vdi() function clean_dev_mappings() {
{ dev=$(xe_min vbd-list params=device uuid="$vbd_uuid")
if [[ "$dev" =~ "sm/" ]]; then
kpartx -dv "/dev/$dev"
fi
}
function open_vdi() {
vbd_uuid=$(xe vbd-create vm-uuid="$dom0_uuid" vdi-uuid="$vdi_uuid" \ vbd_uuid=$(xe vbd-create vm-uuid="$dom0_uuid" vdi-uuid="$vdi_uuid" \
device=autodetect) device=autodetect)
mp=$(mktemp -d) mp=$(mktemp -d)
xe vbd-plug uuid="$vbd_uuid" xe vbd-plug uuid="$vbd_uuid"
which_udev=$(which udevsettle) || true run_udev_settle
if [ -n "$which_udev" ]; then
udevsettle
else
udevadm settle
fi
mount_device=$(get_mount_device "$vbd_uuid") mount_device=$(get_mount_device "$vbd_uuid")
mount "$mount_device" "$mp" mount "$mount_device" "$mp"
echo "Your vdi is mounted at $mp" echo "Your vdi is mounted at $mp"
} }
close_vdi() function close_vdi() {
{
vbd_uuid=$(xe_min vbd-list vm-uuid="$dom0_uuid" vdi-uuid="$vdi_uuid") vbd_uuid=$(xe_min vbd-list vm-uuid="$dom0_uuid" vdi-uuid="$vdi_uuid")
mount_device=$(get_mount_device "$vbd_uuid") mount_device=$(get_mount_device "$vbd_uuid")
run_udev_settle
umount "$mount_device" umount "$mount_device"
clean_dev_mappings
xe vbd-unplug uuid=$vbd_uuid xe vbd-unplug uuid=$vbd_uuid
xe vbd-destroy uuid=$vbd_uuid xe vbd-destroy uuid=$vbd_uuid
} }

View File

@ -21,6 +21,3 @@ auto eth2
iface eth2 inet static iface eth2 inet static
address @ETH2_IP@ address @ETH2_IP@
netmask @ETH2_NETMASK@ netmask @ETH2_NETMASK@
auto eth0
iface eth0 inet dhcp

View File

@ -38,5 +38,8 @@ MGT_BR=${MGT_BR:-""}
MGT_VLAN=${MGT_VLAN:-101} MGT_VLAN=${MGT_VLAN:-101}
MGT_DEV=${MGT_DEV:-eth0} MGT_DEV=${MGT_DEV:-eth0}
# Guest installer network
ENABLE_GI=true
# Source params # Source params
cd ../.. && source ./stackrc && cd $TOP_DIR cd ../.. && source ./stackrc && cd $TOP_DIR