Browse code

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

John Garbutt authored on 2012/04/28 02:28:28
Showing 5 changed files
... ...
@@ -1700,7 +1700,7 @@ fi
1700 1700
 # For Example: EXTRA_OPTS=(foo=true bar=2)
1701 1701
 for I in "${EXTRA_OPTS[@]}"; do
1702 1702
     # Attempt to convert flags to options
1703
-    add_nova_opt ${I//-}
1703
+    add_nova_opt ${I//--}
1704 1704
 done
1705 1705
 
1706 1706
 
... ...
@@ -1711,8 +1711,9 @@ if [ "$VIRT_DRIVER" = 'xenserver' ]; then
1711 1711
     read_password XENAPI_PASSWORD "ENTER A PASSWORD TO USE FOR XEN."
1712 1712
     add_nova_opt "connection_type=xenapi"
1713 1713
     XENAPI_CONNECTION_URL=${XENAPI_CONNECTION_URL:-"http://169.254.0.1"}
1714
+    XENAPI_USER=${XENAPI_USER:-"root"}
1714 1715
     add_nova_opt "xenapi_connection_url=$XENAPI_CONNECTION_URL"
1715
-    add_nova_opt "xenapi_connection_username=root"
1716
+    add_nova_opt "xenapi_connection_username=$XENAPI_USER"
1716 1717
     add_nova_opt "xenapi_connection_password=$XENAPI_PASSWORD"
1717 1718
     add_nova_opt "flat_injected=False"
1718 1719
     # Need to avoid crash due to new firewall support
... ...
@@ -118,6 +118,13 @@ else
118 118
     sed -e "s,@ETH3_NETMASK@,$PUB_NETMASK,g" -i $INTERFACES
119 119
 fi
120 120
 
121
+if [ "$ENABLE_GI" == "true" ]; then
122
+    cat <<EOF >>$INTERFACES
123
+auto eth0
124
+iface eth0 inet dhcp
125
+EOF
126
+fi
127
+
121 128
 # Gracefully cp only if source file/dir exists
122 129
 function cp_it {
123 130
     if [ -e $1 ] || [ -d $1 ]; then
... ...
@@ -7,64 +7,74 @@ vm="$2"
7 7
 device="${3-0}"
8 8
 part="${4-}"
9 9
 
10
-xe_min()
11
-{
10
+function xe_min() {
12 11
   local cmd="$1"
13 12
   shift
14 13
   xe "$cmd" --minimal "$@"
15 14
 }
16 15
 
16
+function run_udev_settle() {
17
+  which_udev=$(which udevsettle) || true
18
+  if [ -n "$which_udev" ]; then
19
+      udevsettle
20
+  else
21
+      udevadm settle
22
+  fi
23
+}
24
+
17 25
 vm_uuid=$(xe_min vm-list name-label="$vm")
18 26
 vdi_uuid=$(xe_min vbd-list params=vdi-uuid vm-uuid="$vm_uuid" \
19 27
                            userdevice="$device")
20 28
 
21 29
 dom0_uuid=$(xe_min vm-list is-control-domain=true)
22 30
 
23
-get_mount_device()
24
-{
31
+function get_mount_device() {
25 32
   vbd_uuid=$1
26 33
 
27 34
   dev=$(xe_min vbd-list params=device uuid="$vbd_uuid")
28 35
   if [[ "$dev" =~ "sm/" ]]; then
29 36
     DEBIAN_FRONTEND=noninteractive \
30 37
         apt-get --option "Dpkg::Options::=--force-confold" --assume-yes \
31
-        install kpartx || true &> /dev/null
32
-    mapping=$(kpartx -av "/dev/$dev" | sed -ne 's,^add map \([a-f0-9\-]*\).*$,\1,p' | sed -ne "s,^\(.*${part}\)\$,\1,p")
38
+        install kpartx &> /dev/null || true
39
+    mapping=$(kpartx -av "/dev/$dev" | sed -ne 's,^add map \([a-z0-9\-]*\).*$,\1,p' | sed -ne "s,^\(.*${part}\)\$,\1,p")
33 40
     if [ -z "$mapping" ]; then
34 41
        echo "Failed to find mapping"
35 42
        exit -1
36 43
     fi
37
-    echo "mapper/${mapping}"
44
+    echo "/dev/mapper/${mapping}"
38 45
   else
39 46
     echo "/dev/$dev$part"
40 47
   fi
41 48
 }
42 49
 
43
-open_vdi()
44
-{
50
+function clean_dev_mappings() {
51
+  dev=$(xe_min vbd-list params=device uuid="$vbd_uuid")
52
+  if [[ "$dev" =~ "sm/" ]]; then
53
+    kpartx -dv "/dev/$dev"
54
+  fi
55
+}
56
+
57
+function open_vdi() {
45 58
   vbd_uuid=$(xe vbd-create vm-uuid="$dom0_uuid" vdi-uuid="$vdi_uuid" \
46 59
                          device=autodetect)
47 60
   mp=$(mktemp -d)
48 61
   xe vbd-plug uuid="$vbd_uuid"
49 62
 
50
-  which_udev=$(which udevsettle) || true
51
-  if [ -n "$which_udev" ]; then
52
-      udevsettle
53
-  else
54
-      udevadm settle
55
-  fi
63
+  run_udev_settle
56 64
 
57 65
   mount_device=$(get_mount_device "$vbd_uuid")
58 66
   mount "$mount_device" "$mp"
59 67
   echo "Your vdi is mounted at $mp"
60 68
 }
61 69
 
62
-close_vdi()
63
-{
70
+function close_vdi() {
64 71
   vbd_uuid=$(xe_min vbd-list vm-uuid="$dom0_uuid" vdi-uuid="$vdi_uuid")
65 72
   mount_device=$(get_mount_device "$vbd_uuid")
73
+  run_udev_settle
66 74
   umount "$mount_device"
67 75
 
76
+  clean_dev_mappings
77
+
68 78
   xe vbd-unplug uuid=$vbd_uuid
69 79
   xe vbd-destroy uuid=$vbd_uuid
70 80
 }
... ...
@@ -21,6 +21,3 @@ auto eth2
21 21
 iface eth2 inet static
22 22
         address @ETH2_IP@
23 23
         netmask @ETH2_NETMASK@
24
-
25
-auto eth0
26
-iface eth0 inet dhcp
... ...
@@ -38,5 +38,8 @@ MGT_BR=${MGT_BR:-""}
38 38
 MGT_VLAN=${MGT_VLAN:-101}
39 39
 MGT_DEV=${MGT_DEV:-eth0}
40 40
 
41
+# Guest installer network
42
+ENABLE_GI=true
43
+
41 44
 # Source params
42 45
 cd ../.. && source ./stackrc && cd $TOP_DIR