From 030fb2362f6ca33a2bf19d1083c9556433f2b983 Mon Sep 17 00:00:00 2001 From: John Garbutt Date: Fri, 27 Apr 2012 18:28:28 +0100 Subject: [PATCH] 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 --- stack.sh | 5 ++-- tools/xen/build_xva.sh | 7 +++++ tools/xen/scripts/manage-vdi | 44 +++++++++++++++++++------------ tools/xen/templates/interfaces.in | 3 --- tools/xen/xenrc | 3 +++ 5 files changed, 40 insertions(+), 22 deletions(-) diff --git a/stack.sh b/stack.sh index df26027900..032c0b93b9 100755 --- a/stack.sh +++ b/stack.sh @@ -1700,7 +1700,7 @@ fi # For Example: EXTRA_OPTS=(foo=true bar=2) for I in "${EXTRA_OPTS[@]}"; do # Attempt to convert flags to options - add_nova_opt ${I//-} + add_nova_opt ${I//--} done @@ -1711,8 +1711,9 @@ if [ "$VIRT_DRIVER" = 'xenserver' ]; then read_password XENAPI_PASSWORD "ENTER A PASSWORD TO USE FOR XEN." add_nova_opt "connection_type=xenapi" 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_username=root" + add_nova_opt "xenapi_connection_username=$XENAPI_USER" add_nova_opt "xenapi_connection_password=$XENAPI_PASSWORD" add_nova_opt "flat_injected=False" # Need to avoid crash due to new firewall support diff --git a/tools/xen/build_xva.sh b/tools/xen/build_xva.sh index 18035048e2..fdc6a6068a 100755 --- a/tools/xen/build_xva.sh +++ b/tools/xen/build_xva.sh @@ -118,6 +118,13 @@ else sed -e "s,@ETH3_NETMASK@,$PUB_NETMASK,g" -i $INTERFACES fi +if [ "$ENABLE_GI" == "true" ]; then + cat <>$INTERFACES +auto eth0 +iface eth0 inet dhcp +EOF +fi + # Gracefully cp only if source file/dir exists function cp_it { if [ -e $1 ] || [ -d $1 ]; then diff --git a/tools/xen/scripts/manage-vdi b/tools/xen/scripts/manage-vdi index 7f12ebc182..05c4b0745c 100755 --- a/tools/xen/scripts/manage-vdi +++ b/tools/xen/scripts/manage-vdi @@ -7,64 +7,74 @@ vm="$2" device="${3-0}" part="${4-}" -xe_min() -{ +function xe_min() { local cmd="$1" shift 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") vdi_uuid=$(xe_min vbd-list params=vdi-uuid vm-uuid="$vm_uuid" \ userdevice="$device") dom0_uuid=$(xe_min vm-list is-control-domain=true) -get_mount_device() -{ +function get_mount_device() { vbd_uuid=$1 dev=$(xe_min vbd-list params=device uuid="$vbd_uuid") if [[ "$dev" =~ "sm/" ]]; then DEBIAN_FRONTEND=noninteractive \ apt-get --option "Dpkg::Options::=--force-confold" --assume-yes \ - install kpartx || true &> /dev/null - mapping=$(kpartx -av "/dev/$dev" | sed -ne 's,^add map \([a-f0-9\-]*\).*$,\1,p' | sed -ne "s,^\(.*${part}\)\$,\1,p") + install kpartx &> /dev/null || true + 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 echo "Failed to find mapping" exit -1 fi - echo "mapper/${mapping}" + echo "/dev/mapper/${mapping}" else echo "/dev/$dev$part" 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" \ device=autodetect) mp=$(mktemp -d) xe vbd-plug uuid="$vbd_uuid" - which_udev=$(which udevsettle) || true - if [ -n "$which_udev" ]; then - udevsettle - else - udevadm settle - fi + run_udev_settle mount_device=$(get_mount_device "$vbd_uuid") mount "$mount_device" "$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") mount_device=$(get_mount_device "$vbd_uuid") + run_udev_settle umount "$mount_device" + clean_dev_mappings + xe vbd-unplug uuid=$vbd_uuid xe vbd-destroy uuid=$vbd_uuid } diff --git a/tools/xen/templates/interfaces.in b/tools/xen/templates/interfaces.in index e315a8c3c4..74b41ccfcb 100644 --- a/tools/xen/templates/interfaces.in +++ b/tools/xen/templates/interfaces.in @@ -21,6 +21,3 @@ auto eth2 iface eth2 inet static address @ETH2_IP@ netmask @ETH2_NETMASK@ - -auto eth0 -iface eth0 inet dhcp diff --git a/tools/xen/xenrc b/tools/xen/xenrc index bf3d16af54..102a492e04 100644 --- a/tools/xen/xenrc +++ b/tools/xen/xenrc @@ -38,5 +38,8 @@ MGT_BR=${MGT_BR:-""} MGT_VLAN=${MGT_VLAN:-101} MGT_DEV=${MGT_DEV:-eth0} +# Guest installer network +ENABLE_GI=true + # Source params cd ../.. && source ./stackrc && cd $TOP_DIR