xenapi: kernel_cmdline moved out from template
The kernel's cmdline was set during the initial devstack machine
installation. Thus, during second runs, the kernel's cmdline was not
updated. This patch extracts append_kernel_cmdline, and configures
domU's kernel cmdline every time. As some networking parameters are
passed through the kernel cmdline, this patch makes it possible to
change the network configuration, even if a cached devstack exists.
Related to blueprint xenapi-devstack-cleanup
Change-Id: I3b7175f4e83326c3e28825ac50625f6bd2a9a029
diff --git a/tools/xen/functions b/tools/xen/functions
index 3458263..ebfd483 100644
--- a/tools/xen/functions
+++ b/tools/xen/functions
@@ -94,6 +94,14 @@
done
}
+function _vm_uuid() {
+ local vm_name_label
+
+ vm_name_label="$1"
+
+ xe vm-list name-label="$vm_name_label" --minimal
+}
+
function _create_new_network() {
local name_label
name_label=$1
@@ -135,17 +143,17 @@
}
function add_interface() {
- local vm_name
+ local vm_name_label
local bridge_or_network_name
- vm_name="$1"
+ vm_name_label="$1"
bridge_or_network_name="$2"
device_number="$3"
local vm
local net
- vm=$(xe vm-list name-label="$vm_name" --minimal)
+ vm=$(_vm_uuid "$vm_name_label")
net=$(_network_uuid "$bridge_or_network_name")
xe vif-create network-uuid=$net vm-uuid=$vm device=$device_number
}
@@ -200,3 +208,19 @@
compgen -v | grep "$parameter_name"
}
+
+function append_kernel_cmdline()
+{
+ local vm_name_label
+ local kernel_args
+
+ vm_name_label="$1"
+ kernel_args="$2"
+
+ local vm
+ local pv_args
+
+ vm=$(_vm_uuid "$vm_name_label")
+ pv_args=$(xe vm-param-get param-name=PV-args uuid=$vm)
+ xe vm-param-set PV-args="$pv_args $kernel_args" uuid=$vm
+}
diff --git a/tools/xen/install_os_domU.sh b/tools/xen/install_os_domU.sh
index 8b2a687..a744869 100755
--- a/tools/xen/install_os_domU.sh
+++ b/tools/xen/install_os_domU.sh
@@ -200,21 +200,13 @@
# 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" \
-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} ${KERNEL_PARAMS_FOR_QUANTUM}"
+ -r "$OSDOMU_MEM_MB"
# wait for install to finish
wait_for_VM_to_halt
@@ -253,11 +245,20 @@
$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.
+# is created by XenServer). This is required for Quantum. Also pass that as a
+# kernel parameter for DomU
if is_service_enabled quantum; then
add_interface "$GUEST_NAME" "$XEN_INT_BRIDGE_OR_NET_NAME" "4"
+
+ XEN_INTEGRATION_BRIDGE=$(bridge_for "$XEN_INT_BRIDGE_OR_NET_NAME")
+ append_kernel_cmdline \
+ "$GUEST_NAME" \
+ "xen_integration_bridge=${XEN_INTEGRATION_BRIDGE}"
fi
+FLAT_NETWORK_BRIDGE=$(bridge_for "$VM_BRIDGE_OR_NET_NAME")
+append_kernel_cmdline "$GUEST_NAME" "flat_network_bridge=${FLAT_NETWORK_BRIDGE}"
+
# 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"
diff --git a/tools/xen/scripts/install-os-vpx.sh b/tools/xen/scripts/install-os-vpx.sh
index 6105a1e..c82f870 100755
--- a/tools/xen/scripts/install-os-vpx.sh
+++ b/tools/xen/scripts/install-os-vpx.sh
@@ -25,7 +25,6 @@
DATA_VDI_SIZE="500MiB"
BRIDGE_M=
BRIDGE_P=
-KERNEL_PARAMS=
VPX_FILE=os-vpx.xva
AS_TEMPLATE=
FROM_TEMPLATE=
@@ -38,7 +37,7 @@
cat << EOF
Usage: $0 [-f FILE_PATH] [-d DISK_SIZE] [-v BRIDGE_NAME] [-m BRIDGE_NAME] [-p BRIDGE_NAME]
- [-k PARAMS] [-r RAM] [-i|-c] [-w] [-b] [-l NAME_LABEL] [-t TEMPLATE_NW_INSTALL]
+ [-r RAM] [-i|-c] [-w] [-b] [-l NAME_LABEL] [-t TEMPLATE_NW_INSTALL]
Installs XenServer OpenStack VPX.
@@ -57,7 +56,6 @@
Defaults to xenbr0.
-v bridge Specifies the bridge for the vm network
-p bridge Specifies the bridge for the externally facing network.
- -k params Specifies kernel parameters.
-r MiB Specifies RAM used by the VPX, in MiB.
By default it will take the value from the XVA.
-l name Specifies the name label for the VM.
@@ -81,15 +79,12 @@
using the default for management traffic:
install-os-vpx.sh -m xapi4
- Create a VPX that automatically becomes the master:
- install-os-vpx.sh -k geppetto_master=true
-
EOF
}
get_params()
{
- while getopts "hicwbf:d:v:m:p:k:r:l:t:" OPTION;
+ while getopts "hicwbf:d:v:m:p:r:l:t:" OPTION;
do
case $OPTION in
h) usage
@@ -119,9 +114,6 @@
p)
BRIDGE_P=$OPTARG
;;
- k)
- KERNEL_PARAMS=$OPTARG
- ;;
r)
RAM=$OPTARG
;;
@@ -328,20 +320,6 @@
}
-set_kernel_params()
-{
- local v="$1"
- local args=$KERNEL_PARAMS
- if [ "$args" != "" ]
- then
- echo "Passing Geppetto args to VPX: $args."
- pvargs=$(xe vm-param-get param-name=PV-args uuid="$v")
- args="$pvargs $args"
- xe vm-param-set PV-args="$args" uuid="$v"
- fi
-}
-
-
set_memory()
{
local v="$1"
@@ -367,7 +345,6 @@
set_all()
{
local v="$1"
- set_kernel_params "$v"
set_memory "$v"
set_auto_start "$v"
label_system_disk "$v"
@@ -430,7 +407,6 @@
create_vm_vif "$vm_uuid"
create_management_vif "$vm_uuid"
create_public_vif "$vm_uuid"
- set_kernel_params "$vm_uuid"
xe vm-param-set other-config:os-vpx=true uuid="$vm_uuid"
xe vm-param-set actions-after-reboot=Destroy uuid="$vm_uuid"
set_memory "$vm_uuid"