From 9e5b19768d6eb9b32564240065ecba6c791cac12 Mon Sep 17 00:00:00 2001 From: Alexandru Avadanii Date: Thu, 28 Feb 2019 15:46:19 +0100 Subject: [virtual] Parameterize scenarios based on PDF/IDF NOTE: only os-nosdn-nofeature-noha is parameterized for now. - move config drive & disk creation from prepare_vms to create_vms; - make default disk size(s) configurable based on scenario defaults and vPDF; * compute nodes require 2 disks to be defined in vPDF, since the pillar reclass model assumes /dev/vdb is reserved for cinder; * if multiple disks are defined in vPDF, they are created and attached accordinly (only ctl01 and cmp nodes are parameterized in this change; only for the os-nosdn-nofeature-noha scenario); - vCPU specifications are deduced based on vPDF (sockets, cores); * threads/core is hard set to 2 since vPDF does not have a key for it; * NUMA resources are distributed evenly based on the number of sockets configured in PDF; * no less than the mininum requirement for a scenario is allocated (e.g. if PDF specifies 2 cores, but the scenario requires at least 4 cores, the larger value will be used); - RAM is deduced based on PDF (but no less than the mininum req is allocated, e.g. if PDF specifies 2GB RAM for computes, but the scenario requires at least 8GB, the larger value will be used); Change-Id: I97188aa2a1006865b8429eb6483e10c76795f7d2 Signed-off-by: Alexandru Avadanii --- mcp/scripts/lib_jump_deploy.sh | 48 ++++++++++++++++++++---------------------- mcp/scripts/lib_template.sh | 6 +++--- mcp/scripts/xdf_data.sh.j2 | 3 ++- 3 files changed, 28 insertions(+), 29 deletions(-) (limited to 'mcp/scripts') diff --git a/mcp/scripts/lib_jump_deploy.sh b/mcp/scripts/lib_jump_deploy.sh index ade1a7487..6151091b7 100644 --- a/mcp/scripts/lib_jump_deploy.sh +++ b/mcp/scripts/lib_jump_deploy.sh @@ -215,7 +215,6 @@ function prepare_vms { local base_image=$1; shift local image_dir=$1; shift local repos_pkgs_str=$1; shift # ^-sep list of repos, pkgs to install/rm - local vnodes=("$@") local image=base_image_opnfv_fuel.img local vcp_image=${image%.*}_vcp.img local _o=${base_image/*\/} @@ -249,18 +248,6 @@ function prepare_vms { ln -sf "${image_dir}/${_tmp}" "${image_dir}/${image}" fi - # Create config ISO and resize OS disk image for each foundation node VM - for node in "${vnodes[@]}"; do - ./create-config-drive.sh -k "$(basename "${SSH_KEY}").pub" \ - -u 'user-data.sh' -h "${node}" "${image_dir}/mcp_${node}.iso" - cp "${image_dir}/${image}" "${image_dir}/mcp_${node}.qcow2" - qemu-img resize "${image_dir}/mcp_${node}.qcow2" 100G - # Prepare dedicated drive for cinder on cmp nodes - if [[ "${node}" =~ ^(cmp) ]]; then - qemu-img create "${image_dir}/mcp_${node}_storage.qcow2" 100G - fi - done - # VCP VMs base image specific changes if [[ ! "${repos_pkgs_str}" =~ \^{3}$ ]] && [ -n "${repos_pkgs[*]:4}" ]; then echo "[INFO] Lookup cache / build patched VCP image for md5sum: ${_h}" @@ -339,8 +326,9 @@ function create_networks { function create_vms { local image_dir=$1; shift + local image=base_image_opnfv_fuel.img # vnode data should be serialized with the following format: - # ,,[,,,[,,, + # ,,,[,,,[,,, # ,,,]]|,...' IFS='|' read -r -a vnodes <<< "$1"; shift @@ -355,18 +343,34 @@ function create_vms { for serialized_vnode_data in "${vnodes[@]}"; do if [ -z "${serialized_vnode_data}" ]; then continue; fi IFS=',' read -r -a vnode_data <<< "${serialized_vnode_data}" + IFS=';' read -r -a disks_data <<< "${vnode_data[1]}" + + # Create config ISO and resize OS disk image for each foundation node VM + ./create-config-drive.sh -k "$(basename "${SSH_KEY}").pub" \ + -u 'user-data.sh' -h "${vnode_data[0]}" "${image_dir}/mcp_${vnode_data[0]}.iso" + cp "${image_dir}/${image}" "${image_dir}/mcp_${vnode_data[0]}.qcow2" + qemu-img resize "${image_dir}/mcp_${vnode_data[0]}.qcow2" "${disks_data[0]}" + # Prepare additional drives if present + idx=0 + virt_extra_storage= + for dsize in "${disks_data[@]:1}"; do + ((idx+=1)) + qcow_file="${image_dir}/mcp_${vnode_data[0]}_${idx}.qcow2" + qemu-img create "${qcow_file}" "${dsize}" + virt_extra_storage+=" --disk path=${qcow_file},format=qcow2,bus=virtio,cache=none,io=native" + done # prepare VM CPU model, count, topology (optional), NUMA cells (optional, requires topo) local virt_cpu_args=' --cpu host-passthrough' - local idx=6 # cell0.name index in serialized data + local idx=7 # cell0.name index in serialized data while [ -n "${vnode_data[${idx}]}" ]; do virt_cpu_args+=",${vnode_data[${idx}]}.memory=${vnode_data[$((idx + 1))]}" virt_cpu_args+=",${vnode_data[${idx}]}.cpus=${vnode_data[$((idx + 2))]}" idx=$((idx + 3)) done - virt_cpu_args+=" --vcpus vcpus=${vnode_data[2]}" - if [ -n "${vnode_data[5]}" ]; then - virt_cpu_args+=",sockets=${vnode_data[3]},cores=${vnode_data[4]},threads=${vnode_data[5]}" + virt_cpu_args+=" --vcpus vcpus=${vnode_data[3]}" + if [ -n "${vnode_data[6]}" ]; then + virt_cpu_args+=",sockets=${vnode_data[4]},cores=${vnode_data[5]},threads=${vnode_data[6]}" fi # prepare network args @@ -376,18 +380,12 @@ function create_vms { net_args="${net_args} --network bridge=${net},model=virtio" done - # dedicated storage drive for cinder on cmp nodes - virt_extra_storage= - if [[ "${vnode_data[0]}" =~ ^(cmp) ]]; then - virt_extra_storage="--disk path=${image_dir}/mcp_${vnode_data[0]}_storage.qcow2,format=qcow2,bus=virtio,cache=none,io=native" - fi - [ ! -e "${image_dir}/virt-manager" ] || VIRT_PREFIX="${image_dir}/virt-manager/" # shellcheck disable=SC2086 ${VIRT_PREFIX}${VIRSH/virsh/virt-install} --name "${vnode_data[0]}" \ ${virt_cpu_args} --accelerate \ ${net_args} \ - --ram "${vnode_data[1]}" \ + --ram "${vnode_data[2]}" \ --disk path="${image_dir}/mcp_${vnode_data[0]}.qcow2",format=qcow2,bus=virtio,cache=none,io=native \ ${virt_extra_storage} \ --os-type linux --os-variant none \ diff --git a/mcp/scripts/lib_template.sh b/mcp/scripts/lib_template.sh index 980827c7a..b44702235 100644 --- a/mcp/scripts/lib_template.sh +++ b/mcp/scripts/lib_template.sh @@ -47,9 +47,6 @@ function do_templates_scenario { notify_e "[ERROR] IDF does not match yaml schema!" fi fi - for _yaml in "${extra_yaml[@]}"; do - awk '/^---$/{f=1;next;}f' "${_yaml}" >> "${LOCAL_PDF}" - done if ! "${PHAROS_GEN_CFG}" -y "${LOCAL_PDF}" \ -i "$(dirname "$(readlink -f "${PHAROS_IA}")")" \ -j "${PHAROS_IA}" -v > "${image_dir}/pod_config.yml"; then @@ -63,6 +60,9 @@ function do_templates_scenario { -i "$(dirname "$(readlink -f "${PHAROS_IA}")")"; then notify_e '[ERROR] Could not convert j2 scenario definitions!' fi + for _yaml in "${extra_yaml[@]}"; do + awk '/^---$/{f=1;next;}f' "${_yaml}" >> "${LOCAL_PDF}" + done } # Expand reclass and virsh network templates based on PDF + IDF + others diff --git a/mcp/scripts/xdf_data.sh.j2 b/mcp/scripts/xdf_data.sh.j2 index 187f09296..346a9e53e 100644 --- a/mcp/scripts/xdf_data.sh.j2 +++ b/mcp/scripts/xdf_data.sh.j2 @@ -44,7 +44,8 @@ {%- do V[n].update({'s_numa': c if 's_numa' not in V[n] else pack([c, V[n].s_numa])}) -%} {%- endfor -%} {%- endif -%} - {%- do arr.append(pack([n, V[n].ram or arch.default.ram, + {%- do arr.append(pack([n, V[n].disks or arch.default.disks, + V[n].ram or arch.default.ram, V[n].vcpus or arch.default.vcpus, '' if not cpu_topo else pack([ V[n].cpu_topology.sockets, -- cgit 1.2.3-korg