xenapi - cleanup network configuration
The Xenserver/XCP part of devstack was configuring the hypervisor's
connectivity to the outer world, by adding VLANs, and physical
interfaces to the virtual networks. It added a lot of complexity, and
made it hard to get started with XenServer. This patch removes that
extra complexity, so it is left as an exercise for the user.
Related to blueprint blueprint xenapi-devstack-cleanup
Change-Id: If3367335c3da8621d0afe1f6cae77511fbdbb3e2
diff --git a/tools/xen/install_os_domU.sh b/tools/xen/install_os_domU.sh
index 0d5e31e..161d7e7 100755
--- a/tools/xen/install_os_domU.sh
+++ b/tools/xen/install_os_domU.sh
@@ -67,97 +67,28 @@
#
# Configure Networking
#
+setup_network "$VM_BRIDGE_OR_NET_NAME"
+setup_network "$MGT_BRIDGE_OR_NET_NAME"
+setup_network "$PUB_BRIDGE_OR_NET_NAME"
-# Helper to create networks
-# Uses echo trickery to return network uuid
-function create_network() {
- br=$1
- dev=$2
- vlan=$3
- netname=$4
- if [ -z $br ]
- then
- pif=$(xe_min pif-list device=$dev VLAN=$vlan)
- if [ -z $pif ]
- then
- net=$(xe network-create name-label=$netname)
- else
- net=$(xe_min network-list PIF-uuids=$pif)
- fi
- echo $net
- return 0
- fi
- if [ ! $(xe_min network-list params=bridge | grep -w --only-matching $br) ]
- then
- echo "Specified bridge $br does not exist"
- echo "If you wish to use defaults, please keep the bridge name empty"
- exit 1
- else
- net=$(xe_min network-list bridge=$br)
- echo $net
- fi
-}
-
-function errorcheck() {
- rc=$?
- if [ $rc -ne 0 ]
- then
- exit $rc
- fi
-}
-
-# Create host, vm, mgmt, pub networks on XenServer
-VM_NET=$(create_network "$VM_BR" "$VM_DEV" "$VM_VLAN" "vmbr")
-errorcheck
-MGT_NET=$(create_network "$MGT_BR" "$MGT_DEV" "$MGT_VLAN" "mgtbr")
-errorcheck
-PUB_NET=$(create_network "$PUB_BR" "$PUB_DEV" "$PUB_VLAN" "pubbr")
-errorcheck
-
-# Helper to create vlans
-function create_vlan() {
- dev=$1
- vlan=$2
- net=$3
- # VLAN -1 refers to no VLAN (physical network)
- if [ $vlan -eq -1 ]
- then
- return
- fi
- if [ -z $(xe_min vlan-list tag=$vlan) ]
- then
- pif=$(xe_min pif-list network-uuid=$net)
- # We created a brand new network this time
- if [ -z $pif ]
- then
- pif=$(xe_min pif-list device=$dev VLAN=-1)
- xe vlan-create pif-uuid=$pif vlan=$vlan network-uuid=$net
- else
- echo "VLAN does not exist but PIF attached to this network"
- echo "How did we reach here?"
- exit 1
- fi
- fi
-}
-
-# Create vlans for vm and management
-create_vlan $PUB_DEV $PUB_VLAN $PUB_NET
-create_vlan $VM_DEV $VM_VLAN $VM_NET
-create_vlan $MGT_DEV $MGT_VLAN $MGT_NET
-
-# Get final bridge names
-if [ -z $VM_BR ]; then
- VM_BR=$(xe_min network-list uuid=$VM_NET params=bridge)
-fi
-if [ -z $MGT_BR ]; then
- MGT_BR=$(xe_min network-list uuid=$MGT_NET params=bridge)
-fi
-if [ -z $PUB_BR ]; then
- PUB_BR=$(xe_min network-list uuid=$PUB_NET params=bridge)
+if parameter_is_specified "FLAT_NETWORK_BRIDGE"; then
+ cat >&2 << EOF
+ERROR: FLAT_NETWORK_BRIDGE is specified in localrc file
+This is considered as an error, as its value will be derived from the
+VM_BRIDGE_OR_NET_NAME variable's value.
+EOF
+ exit 1
fi
-# dom0 ip, XenAPI is assumed to be listening
-HOST_IP=${HOST_IP:-`ifconfig xenbr0 | grep "inet addr" | cut -d ":" -f2 | sed "s/ .*//"`}
+if ! xenapi_is_listening_on "$MGT_BRIDGE_OR_NET_NAME"; then
+ cat >&2 << EOF
+ERROR: XenAPI does not have an assigned IP address on the management network.
+please review your XenServer network configuration / localrc file.
+EOF
+ exit 1
+fi
+
+HOST_IP=$(xenapi_ip_on "$MGT_BRIDGE_OR_NET_NAME")
# Set up ip forwarding, but skip on xcp-xapi
if [ -a /etc/sysconfig/network ]; then
@@ -263,7 +194,15 @@
# create a new VM with the given template
# creating the correct VIFs and metadata
- $THIS_DIR/scripts/install-os-vpx.sh -t "$UBUNTU_INST_TEMPLATE_NAME" -v $VM_BR -m $MGT_BR -p $PUB_BR -l $GUEST_NAME -r $OSDOMU_MEM_MB -k "flat_network_bridge=${VM_BR}"
+ FLAT_NETWORK_BRIDGE=$(bridge_for "$VM_BRIDGE_OR_NET_NAME")
+ $THIS_DIR/scripts/install-os-vpx.sh \
+ -t "$UBUNTU_INST_TEMPLATE_NAME" \
+ -v "$VM_BRIDGE_OR_NET_NAME" \
+ -m "$MGT_BRIDGE_OR_NET_NAME" \
+ -p "$PUB_BRIDGE_OR_NET_NAME" \
+ -l "$GUEST_NAME" \
+ -r "$OSDOMU_MEM_MB" \
+ -k "flat_network_bridge=${FLAT_NETWORK_BRIDGE}"
# wait for install to finish
wait_for_VM_to_halt