xenapi - quantum: L2 agents for dom0 and domU
This patch makes it easier to support the all-in-one installation of
XenServer with Quantum:
- separate agents for domU and dom0 openvswitches. The domU agent's name
is "q-domua", and the dom0 agent is called "q-agt"
- create a physnet1 physical network to connect those openvswitches
Note: This patch depends on the quantum patch:
https://review.openstack.org/15022
For a diagram, see:
http://goo.gl/BuAdg
Change-Id: Iff851438553528b9051edd380ecbb2c0415cbf78
diff --git a/tools/xen/functions b/tools/xen/functions
index c6e484d..3458263 100644
--- a/tools/xen/functions
+++ b/tools/xen/functions
@@ -123,6 +123,32 @@
! [ -z $(xe network-list bridge="$bridge" --minimal) ]
}
+function _network_uuid() {
+ local bridge_or_net_name
+ bridge_or_net_name=$1
+
+ if _bridge_exists "$bridge_or_net_name"; then
+ xe network-list bridge="$bridge_or_net_name" --minimal
+ else
+ xe network-list name-label="$bridge_or_net_name" --minimal
+ fi
+}
+
+function add_interface() {
+ local vm_name
+ local bridge_or_network_name
+
+ vm_name="$1"
+ bridge_or_network_name="$2"
+ device_number="$3"
+
+ local vm
+ local net
+
+ vm=$(xe vm-list name-label="$vm_name" --minimal)
+ net=$(_network_uuid "$bridge_or_network_name")
+ xe vif-create network-uuid=$net vm-uuid=$vm device=$device_number
+}
function setup_network() {
local bridge_or_net_name
diff --git a/tools/xen/install_os_domU.sh b/tools/xen/install_os_domU.sh
index 161d7e7..8b2a687 100755
--- a/tools/xen/install_os_domU.sh
+++ b/tools/xen/install_os_domU.sh
@@ -71,6 +71,12 @@
setup_network "$MGT_BRIDGE_OR_NET_NAME"
setup_network "$PUB_BRIDGE_OR_NET_NAME"
+# With quantum, one more network is required, which is internal to the
+# hypervisor, and used by the VMs
+if is_service_enabled quantum; then
+ setup_network "$XEN_INT_BRIDGE_OR_NET_NAME"
+fi
+
if parameter_is_specified "FLAT_NETWORK_BRIDGE"; then
cat >&2 << EOF
ERROR: FLAT_NETWORK_BRIDGE is specified in localrc file
@@ -195,6 +201,12 @@
# create a new VM with the given template
# creating the correct VIFs and metadata
FLAT_NETWORK_BRIDGE=$(bridge_for "$VM_BRIDGE_OR_NET_NAME")
+
+ KERNEL_PARAMS_FOR_QUANTUM=""
+ if is_service_enabled quantum; then
+ XEN_INTEGRATION_BRIDGE=$(bridge_for "$XEN_INT_BRIDGE_OR_NET_NAME")
+ KERNEL_PARAMS_FOR_QUANTUM="xen_integration_bridge=${XEN_INTEGRATION_BRIDGE}"
+ fi
$THIS_DIR/scripts/install-os-vpx.sh \
-t "$UBUNTU_INST_TEMPLATE_NAME" \
-v "$VM_BRIDGE_OR_NET_NAME" \
@@ -202,7 +214,7 @@
-p "$PUB_BRIDGE_OR_NET_NAME" \
-l "$GUEST_NAME" \
-r "$OSDOMU_MEM_MB" \
- -k "flat_network_bridge=${FLAT_NETWORK_BRIDGE}"
+ -k "flat_network_bridge=${FLAT_NETWORK_BRIDGE} ${KERNEL_PARAMS_FOR_QUANTUM}"
# wait for install to finish
wait_for_VM_to_halt
@@ -240,11 +252,16 @@
#
$THIS_DIR/build_xva.sh "$GUEST_NAME"
+# Attach a network interface for the integration network (so that the bridge
+# is created by XenServer). This is required for Quantum.
+if is_service_enabled quantum; then
+ add_interface "$GUEST_NAME" "$XEN_INT_BRIDGE_OR_NET_NAME" "4"
+fi
+
# create a snapshot before the first boot
# to allow a quick re-run with the same settings
xe vm-snapshot vm="$GUEST_NAME" new-name-label="$SNAME_FIRST_BOOT"
-
#
# Run DevStack VM
#
diff --git a/tools/xen/xenrc b/tools/xen/xenrc
index 7aaafd2..0ed3a6a 100644
--- a/tools/xen/xenrc
+++ b/tools/xen/xenrc
@@ -25,6 +25,7 @@
MGT_BRIDGE_OR_NET_NAME="xenbr0"
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}