From 8ff33ce75f1ea4ede96cdbf7cda983900119e6d2 Mon Sep 17 00:00:00 2001 From: Mate Lakat Date: Thu, 30 May 2013 13:26:58 +0100 Subject: [PATCH] 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 --- tools/xen/functions | 30 ++++++++++++++++++++++++++--- tools/xen/install_os_domU.sh | 21 ++++++++++---------- tools/xen/scripts/install-os-vpx.sh | 28 ++------------------------- 3 files changed, 40 insertions(+), 39 deletions(-) diff --git a/tools/xen/functions b/tools/xen/functions index 3458263206..ebfd4835a2 100644 --- a/tools/xen/functions +++ b/tools/xen/functions @@ -94,6 +94,14 @@ function find_ip_by_name() { 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 _network_uuid() { } 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 @@ function parameter_is_specified() { 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 8b2a687119..a744869288 100755 --- a/tools/xen/install_os_domU.sh +++ b/tools/xen/install_os_domU.sh @@ -200,21 +200,13 @@ if [ -z "$templateuuid" ]; then # 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 @@ fi $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 6105a1ea5e..c82f8702ba 100755 --- a/tools/xen/scripts/install-os-vpx.sh +++ b/tools/xen/scripts/install-os-vpx.sh @@ -25,7 +25,6 @@ NAME="XenServer OpenStack VPX" DATA_VDI_SIZE="500MiB" BRIDGE_M= BRIDGE_P= -KERNEL_PARAMS= VPX_FILE=os-vpx.xva AS_TEMPLATE= FROM_TEMPLATE= @@ -38,7 +37,7 @@ usage() 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 @@ cat << EOF 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 @@ cat << EOF 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 @@ get_params() p) BRIDGE_P=$OPTARG ;; - k) - KERNEL_PARAMS=$OPTARG - ;; r) RAM=$OPTARG ;; @@ -328,20 +320,6 @@ create_data_disk() } -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_auto_start() set_all() { local v="$1" - set_kernel_params "$v" set_memory "$v" set_auto_start "$v" label_system_disk "$v" @@ -430,7 +407,6 @@ then 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"